Merge remote-tracking branch 'goog/ub-deskclock-dazzle_nyc' into master

Change-Id: I319bcdf102b14d919262c676984c200927f4b3d0
diff --git a/Android.mk b/Android.mk
index 89f0c45..b40a57a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -5,11 +5,15 @@
 LOCAL_RESOURCE_DIR += frameworks/opt/datetimepicker/res
 
 ifeq ($(TARGET_BUILD_APPS),)
+LOCAL_RESOURCE_DIR += frameworks/support/design/res
 LOCAL_RESOURCE_DIR += frameworks/support/v7/appcompat/res
 LOCAL_RESOURCE_DIR += frameworks/support/v7/gridlayout/res
+LOCAL_RESOURCE_DIR += frameworks/support/v7/recyclerview/res
 else
+LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/design/res
 LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/appcompat/res
 LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/gridlayout/res
+LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/recyclerview/res
 endif
 
 LOCAL_MODULE_TAGS := optional
@@ -18,18 +22,24 @@
 LOCAL_PACKAGE_NAME := DeskClock
 LOCAL_OVERRIDES_PACKAGES := AlarmClock
 
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src gen)
 
 LOCAL_STATIC_JAVA_LIBRARIES := android-opt-datetimepicker
+LOCAL_STATIC_JAVA_LIBRARIES += messageformat
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-design
 LOCAL_STATIC_JAVA_LIBRARIES += android-support-v13
 LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat
 LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-gridlayout
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-recyclerview
 
 LOCAL_AAPT_FLAGS := --auto-add-overlay
+LOCAL_AAPT_FLAGS += --extra-packages android.support.design
 LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat
 LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.gridlayout
+LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.recyclerview
 LOCAL_AAPT_FLAGS += --extra-packages com.android.datetimepicker
+LOCAL_AAPT_FLAGS += --extra-packages com.android.messageformat
 
-LOCAL_PROGUARD_FLAG_FILES := ../../../frameworks/support/design/proguard-rules.pro 
+LOCAL_PROGUARD_FLAG_FILES := ../../../frameworks/support/design/proguard-rules.pro
 
 include $(BUILD_PACKAGE)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a040eb2..a062846 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -17,12 +17,12 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.deskclock"
-        android:versionCode="410" android:versionName="4.1.0">
+        android:versionCode="450" android:versionName="4.5.0">
 
     <original-package android:name="com.android.alarmclock" />
     <original-package android:name="com.android.deskclock" />
 
-    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="24" />
 
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name="android.permission.WAKE_LOCK"/>
@@ -33,7 +33,6 @@
     <!-- READ_PHONE_STATE is required to determine when a phone call exists prior to M -->
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <!-- READ_EXTERNAL_STORAGE is required to play custom ringtones from the SD card prior to M -->
-    <!-- It is also required to display user-friendly names for custom ringtones in the UI. -->
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 
     <application android:label="@string/app_label"
@@ -53,7 +52,7 @@
 
         <activity android:name="DeskClock"
                 android:label="@string/app_label"
-                android:theme="@style/DeskClock"
+                android:theme="@style/DeskClockTheme"
                 android:icon="@mipmap/ic_launcher_alarmclock"
                 android:launchMode="singleTask">
 
@@ -67,7 +66,7 @@
         <activity-alias android:name="DockClock"
                 android:targetActivity="DeskClock"
                 android:label="@string/app_label"
-                android:theme="@style/DeskClock"
+                android:theme="@style/DeskClockTheme"
                 android:icon="@mipmap/ic_launcher_alarmclock"
                 android:launchMode="singleTask"
                 android:enabled="@bool/config_dockAppEnabled"
@@ -79,7 +78,7 @@
             </intent-filter>
         </activity-alias>
 
-        <activity android:name="SettingsActivity"
+        <activity android:name=".settings.SettingsActivity"
                 android:label="@string/settings"
                 android:theme="@style/SettingsTheme"
                 android:taskAffinity=""
@@ -90,12 +89,11 @@
             </intent-filter>
         </activity>
 
-        <activity android:name=".worldclock.CitiesActivity"
+        <activity android:name=".worldclock.CitySelectionActivity"
                 android:label="@string/cities_activity_title"
                 android:theme="@style/CitiesTheme"
                 android:taskAffinity=""
-                android:excludeFromRecents="true"
-                >
+                android:excludeFromRecents="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
             </intent-filter>
@@ -195,7 +193,7 @@
                 <category android:name="android.intent.category.VOICE" />
             </intent-filter>
             <intent-filter>
-                <action android:name="com.android.deskclock.action.STOP_TIMER" />
+                <action android:name="com.android.deskclock.action.PAUSE_TIMER" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE" />
             </intent-filter>
@@ -220,7 +218,7 @@
                 <category android:name="android.intent.category.VOICE" />
             </intent-filter>
             <intent-filter>
-                <action android:name="com.android.deskclock.action.STOP_STOPWATCH" />
+                <action android:name="com.android.deskclock.action.PAUSE_STOPWATCH" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE" />
             </intent-filter>
@@ -244,41 +242,50 @@
                 <action android:name="android.intent.action.TIME_SET" />
                 <action android:name="android.intent.action.TIMEZONE_CHANGED" />
                 <action android:name="android.intent.action.LOCALE_CHANGED" />
+                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
             </intent-filter>
         </receiver>
 
-        <receiver android:name="com.android.alarmclock.AnalogAppWidgetProvider" android:label="@string/analog_gadget"
-           android:icon="@mipmap/ic_launcher_alarmclock">
+        <receiver
+            android:name="com.android.alarmclock.AnalogAppWidgetProvider"
+            android:icon="@mipmap/ic_launcher_alarmclock"
+            android:label="@string/analog_gadget">
             <intent-filter>
-                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
+                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
             </intent-filter>
-            <meta-data android:name="android.appwidget.oldName" android:value="com.android.deskclock.AnalogAppWidgetProvider" />
-            <meta-data android:name="android.appwidget.provider" android:resource="@xml/analog_appwidget" />
+
+            <meta-data
+                android:name="android.appwidget.oldName"
+                android:value="com.android.deskclock.AnalogAppWidgetProvider"/>
+            <meta-data
+                android:name="android.appwidget.provider"
+                android:resource="@xml/analog_appwidget"/>
         </receiver>
 
-        <receiver android:name="com.android.alarmclock.DigitalAppWidgetProvider" android:label="@string/digital_gadget"
-           android:icon="@mipmap/ic_launcher_alarmclock">
+        <receiver
+            android:name="com.android.alarmclock.DigitalAppWidgetProvider"
+            android:icon="@mipmap/ic_launcher_alarmclock"
+            android:label="@string/digital_gadget">
             <intent-filter>
-                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
-                <action android:name="com.android.deskclock.ON_QUARTER_HOUR" />
-                <action android:name="android.intent.action.DATE_CHANGED" />
-                <action android:name="android.intent.action.TIMEZONE_CHANGED" />
-                <action android:name="android.intent.action.SCREEN_ON" />
-                <action android:name="android.intent.action.TIME_SET" />
-                <action android:name="android.intent.action.LOCALE_CHANGED" />
-                <action android:name="android.app.action.NEXT_ALARM_CLOCK_CHANGED" />
-                <action android:name="com.android.deskclock.worldclock.update" />
-                </intent-filter>
-            <meta-data android:name="android.appwidget.provider" android:resource="@xml/digital_appwidget" />
+                <action android:name="android.intent.action.TIME_SET"/>
+                <action android:name="android.intent.action.SCREEN_ON"/>
+                <action android:name="android.intent.action.DATE_CHANGED"/>
+                <action android:name="android.intent.action.LOCALE_CHANGED"/>
+                <action android:name="android.intent.action.TIMEZONE_CHANGED"/>
+                <action android:name="com.android.deskclock.DIGITAL_WIDGET_CHANGED"/>
+                <action android:name="com.android.deskclock.ON_QUARTER_HOUR"/>
+                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
+                <action android:name="android.app.action.NEXT_ALARM_CLOCK_CHANGED"/>
+            </intent-filter>
+            <meta-data
+                android:name="android.appwidget.provider"
+                android:resource="@xml/digital_appwidget"/>
         </receiver>
 
         <service android:name="com.android.alarmclock.DigitalAppWidgetService"
              android:permission="android.permission.BIND_REMOTEVIEWS"
              android:exported="false" />
 
-        <receiver android:name="com.android.alarmclock.DigitalWidgetViewsFactory"
-             android:exported="false" />
-
         <!-- Dream (screensaver) implementation -->
         <service android:name="Screensaver"
             android:exported="true"
@@ -295,7 +302,7 @@
         </service>
 
         <!-- Settings activity for screensaver -->
-        <activity android:name=".ScreensaverSettingsActivity"
+        <activity android:name=".settings.ScreensaverSettingsActivity"
                 android:label="@string/screensaver_settings"
                 android:theme="@style/SettingsTheme"
                 android:taskAffinity=""
@@ -312,54 +319,33 @@
             android:label="@string/dismiss_alarm"
             android:theme="@android:style/Theme.Holo.Light.Dialog.NoActionBar"/>
 
-        <!-- This activity is basically like the TimerFragment in DeskClock
-         but only during lock screen
-         so that it only has the fired timers -->
-        <activity android:name="com.android.deskclock.timer.TimerAlertFullScreen"
+        <!-- This activity displays only the timers that have expired with only a reset button
+         present. This makes the activity appropriate for display above the lock screen so that
+         users have the limited ability to silence expired timers but nothing else. -->
+        <activity android:name=".timer.ExpiredTimersActivity"
                 android:excludeFromRecents="true"
-                android:theme="@style/TimerAlertFullScreenTheme"
+                android:theme="@style/ExpiredTimersActivityTheme"
                 android:launchMode="singleInstance"
                 android:showOnLockScreen="true"
                 android:taskAffinity=""
                 android:configChanges="screenSize|keyboardHidden|keyboard|navigation"/>
 
-        <service android:name="TimerRingService"
-                android:exported="false"
-                android:description="@string/timer_ring_service_desc">
-            <intent-filter>
-                <action android:name="com.android.deskclock.TIMER_ALERT" />
-            </intent-filter>
-        </service>
-
+        <!-- Legacy broadcast receiver that honors old scheduled timers across app upgrade. -->
         <receiver android:name="com.android.deskclock.timer.TimerReceiver"
-                android:exported="false">
+                  android:exported="false">
             <intent-filter>
-                <action android:name="start_timer" />
-                <action android:name="stop_timer" />
-                <action android:name="delete_timer" />
-                <action android:name="reset_timer" />
                 <action android:name="times_up" />
-                <action android:name="timer_done" />
-                <action android:name="timer_update" />
-                <action android:name="notif_in_use_show" />
-                <action android:name="notif_in_use_cancel" />
-                <action android:name="notif_times_up_stop" />
-                <action android:name="notif_times_up_plus_one" />
-                <action android:name="notif_times_up_show" />
-                <action android:name="notif_times_up_cancel" />
             </intent-filter>
         </receiver>
 
-        <service android:name="com.android.deskclock.stopwatch.StopwatchService"
+        <service android:name=".timer.TimerService"
+                 android:exported="false"
+                 android:description="@string/timer_service_desc">
+        </service>
+
+        <service android:name=".stopwatch.StopwatchService"
                 android:exported="false"
                 android:description="@string/stopwatch_service_desc">
-            <intent-filter>
-                <action android:name="start_stopwatch" />
-                <action android:name="lap_stopwatch" />
-                <action android:name="stop_stopwatch" />
-                <action android:name="reset_stopwatch" />
-                <action android:name="share_stopwatch" />
-            </intent-filter>
         </service>
     </application>
 </manifest>
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 8fdba0f..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-* Copyright (C) 2015 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.
-*/
-
-apply plugin: "com.android.application"
-
-android {
-    sourceSets {
-        main {
-            manifest.srcFile "AndroidManifest.xml"
-            java.srcDir "src"
-            res.srcDir "res"
-            assets.srcDir "assets"
-        }
-    }
-
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
-    }
-
-    dependencies {
-        compile (project(":android-opt-datetimepicker")) {
-            exclude module: "support-v4"
-        }
-        compile project(":support-v7-appcompat")
-        compile project(":support-v7-gridlayout")
-        compile project(":support-v13")
-    }
-}
diff --git a/gen/com/android/deskclock/BuildConfig.java b/gen/com/android/deskclock/BuildConfig.java
new file mode 100644
index 0000000..861848f
--- /dev/null
+++ b/gen/com/android/deskclock/BuildConfig.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2015 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;
+
+public final class BuildConfig {
+  public static final String APPLICATION_ID = "com.android.deskclock";
+}
diff --git a/res/animator-v22/ic_alarm_animation_button.xml b/res/animator-v22/ic_alarm_animation_button.xml
new file mode 100644
index 0000000..ab7b3be
--- /dev/null
+++ b/res/animator-v22/ic_alarm_animation_button.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:ordering="sequentially">
+    <objectAnimator
+        android:duration="33"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="rotation"
+        android:valueFrom="0"
+        android:valueTo="8"/>
+    <objectAnimator
+        android:duration="67"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="rotation"
+        android:valueFrom="8"
+        android:valueTo="-8"/>
+    <objectAnimator
+        android:duration="67"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="rotation"
+        android:valueFrom="-8"
+        android:valueTo="8"/>
+    <objectAnimator
+        android:duration="67"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="rotation"
+        android:valueFrom="8"
+        android:valueTo="-8"/>
+    <objectAnimator
+        android:duration="67"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="rotation"
+        android:valueFrom="-8"
+        android:valueTo="8"/>
+    <objectAnimator
+        android:duration="67"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="rotation"
+        android:valueFrom="8"
+        android:valueTo="-8"/>
+    <objectAnimator
+        android:duration="67"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="rotation"
+        android:valueFrom="-8"
+        android:valueTo="8"/>
+    <objectAnimator
+        android:duration="67"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="rotation"
+        android:valueFrom="8"
+        android:valueTo="-8"/>
+    <objectAnimator
+        android:duration="33"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="rotation"
+        android:valueFrom="-8"
+        android:valueTo="0"/>
+</set>
\ No newline at end of file
diff --git a/res/animator-v22/ic_clock_hour_hand_animation.xml b/res/animator-v22/ic_clock_hour_hand_animation.xml
new file mode 100644
index 0000000..7f09360
--- /dev/null
+++ b/res/animator-v22/ic_clock_hour_hand_animation.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2015 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.
+-->
+
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="translateX"
+            android:valueFrom="117.75"
+            android:valueTo="116.68351"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_clock_animation_interpolator_1" />
+        <objectAnimator
+            android:duration="41"
+            android:propertyName="translateX"
+            android:valueFrom="116.68351"
+            android:valueTo="116.2544"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="translateX"
+            android:valueFrom="116.2544"
+            android:valueTo="115.10072"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateX"
+            android:valueFrom="115.10072"
+            android:valueTo="114.59167"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateX"
+            android:valueFrom="114.59167"
+            android:valueTo="114.07271"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateX"
+            android:valueFrom="114.07271"
+            android:valueTo="113.92814"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateX"
+            android:valueFrom="113.92814"
+            android:valueTo="114.75237"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateX"
+            android:valueFrom="114.75237"
+            android:valueTo="114.32657"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateX"
+            android:valueFrom="114.32657"
+            android:valueTo="114.52556"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="translateX"
+            android:valueFrom="114.52556"
+            android:valueTo="114.26022"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="250"
+            android:propertyName="translateX"
+            android:valueFrom="114.26022"
+            android:valueTo="114.25"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_clock_animation_interpolator_0" />
+    </set>
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="translateY"
+            android:valueFrom="128.25"
+            android:valueTo="128.05357"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_clock_animation_interpolator_1" />
+        <objectAnimator
+            android:duration="41"
+            android:propertyName="translateY"
+            android:valueFrom="128.05357"
+            android:valueTo="127.39493"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="translateY"
+            android:valueFrom="127.39493"
+            android:valueTo="125.76069"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateY"
+            android:valueFrom="125.76069"
+            android:valueTo="125.76442"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateY"
+            android:valueFrom="125.76442"
+            android:valueTo="125.38347"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateY"
+            android:valueFrom="125.38347"
+            android:valueTo="125.00182"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateY"
+            android:valueFrom="125.00182"
+            android:valueTo="125.27592"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateY"
+            android:valueFrom="125.27592"
+            android:valueTo="125.10044"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateY"
+            android:valueFrom="125.10044"
+            android:valueTo="124.92464"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="translateY"
+            android:valueFrom="124.92464"
+            android:valueTo="124.41091"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="250"
+            android:propertyName="translateY"
+            android:valueFrom="124.41091"
+            android:valueTo="124.0"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_clock_animation_interpolator_0" />
+    </set>
+    <objectAnimator
+        android:duration="833"
+        android:propertyName="rotation"
+        android:valueFrom="0.0"
+        android:valueTo="121.0"
+        android:valueType="floatType"
+        android:interpolator="@android:interpolator/fast_out_slow_in" />
+</set>
diff --git a/res/animator-v22/ic_clock_minute_hand_animation.xml b/res/animator-v22/ic_clock_minute_hand_animation.xml
new file mode 100644
index 0000000..bebb394
--- /dev/null
+++ b/res/animator-v22/ic_clock_minute_hand_animation.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2015 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.
+-->
+
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="translateX"
+            android:valueFrom="114.25"
+            android:valueTo="115.55177"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_clock_animation_interpolator_1" />
+        <objectAnimator
+            android:duration="41"
+            android:propertyName="translateX"
+            android:valueFrom="115.55177"
+            android:valueTo="115.93416"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="translateX"
+            android:valueFrom="115.93416"
+            android:valueTo="116.58852"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateX"
+            android:valueFrom="116.58852"
+            android:valueTo="116.84771"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="41"
+            android:propertyName="translateX"
+            android:valueFrom="116.84771"
+            android:valueTo="117.11524"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateX"
+            android:valueFrom="117.11524"
+            android:valueTo="117.37431"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="41"
+            android:propertyName="translateX"
+            android:valueFrom="117.37431"
+            android:valueTo="117.41381"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="translateX"
+            android:valueFrom="117.41381"
+            android:valueTo="117.74111"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="250"
+            android:propertyName="translateX"
+            android:valueFrom="117.74111"
+            android:valueTo="117.75"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_clock_animation_interpolator_0" />
+    </set>
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="translateY"
+            android:valueFrom="124.0"
+            android:valueTo="124.26329"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_clock_animation_interpolator_1" />
+        <objectAnimator
+            android:duration="41"
+            android:propertyName="translateY"
+            android:valueFrom="124.26329"
+            android:valueTo="124.88398"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="translateY"
+            android:valueFrom="124.88398"
+            android:valueTo="125.80391"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateY"
+            android:valueFrom="125.80391"
+            android:valueTo="126.13012"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="41"
+            android:propertyName="translateY"
+            android:valueFrom="126.13012"
+            android:valueTo="125.9482"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="20"
+            android:propertyName="translateY"
+            android:valueFrom="125.9482"
+            android:valueTo="126.92025"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="41"
+            android:propertyName="translateY"
+            android:valueFrom="126.92025"
+            android:valueTo="127.00955"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="translateY"
+            android:valueFrom="127.00955"
+            android:valueTo="127.62279"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="250"
+            android:propertyName="translateY"
+            android:valueFrom="127.62279"
+            android:valueTo="128.25"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_clock_animation_interpolator_0" />
+    </set>
+    <objectAnimator
+        android:duration="833"
+        android:propertyName="rotation"
+        android:valueFrom="121.0"
+        android:valueTo="360.0"
+        android:valueType="floatType"
+        android:interpolator="@android:interpolator/fast_out_slow_in" />
+</set>
diff --git a/res/animator/ic_stopwatch_animation_button.xml b/res/animator-v22/ic_stopwatch_animation_button.xml
similarity index 100%
rename from res/animator/ic_stopwatch_animation_button.xml
rename to res/animator-v22/ic_stopwatch_animation_button.xml
diff --git a/res/animator/ic_stopwatch_animation_hand.xml b/res/animator-v22/ic_stopwatch_animation_hand.xml
similarity index 100%
rename from res/animator/ic_stopwatch_animation_hand.xml
rename to res/animator-v22/ic_stopwatch_animation_hand.xml
diff --git a/res/animator/ic_timer_animation_hourglass_fill.xml b/res/animator-v22/ic_timer_animation_hourglass_fill.xml
similarity index 100%
rename from res/animator/ic_timer_animation_hourglass_fill.xml
rename to res/animator-v22/ic_timer_animation_hourglass_fill.xml
diff --git a/res/animator/ic_timer_animation_hourglass_frame.xml b/res/animator-v22/ic_timer_animation_hourglass_frame.xml
similarity index 100%
rename from res/animator/ic_timer_animation_hourglass_frame.xml
rename to res/animator-v22/ic_timer_animation_hourglass_frame.xml
diff --git a/res/animator-v22/ic_timer_animation_mask_1.xml b/res/animator-v22/ic_timer_animation_mask_1.xml
new file mode 100644
index 0000000..cd8b458
--- /dev/null
+++ b/res/animator-v22/ic_timer_animation_mask_1.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:ordering="sequentially">
+    <objectAnimator
+        android:duration="333"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="pathData"
+        android:valueFrom="M 24,13.3999938965 c 0,0.0 -24,0.0 -24,0.0 c 0,0.0 0,10.6000061035 0,10.6000061035 c 0,0 24,0 24,0 c 0,0 0,-10.6000061035 0,-10.6000061035 Z"
+        android:valueTo="M 24,13.3999938965 c 0,0.0 -24,0.0 -24,0.0 c 0,0.0 0,10.6000061035 0,10.6000061035 c 0,0 24,0 24,0 c 0,0 0,-10.6000061035 0,-10.6000061035 Z"
+        android:valueType="pathType"/>
+    <objectAnimator
+        android:duration="1000"
+        android:interpolator="@android:interpolator/fast_out_slow_in"
+        android:propertyName="pathData"
+        android:valueFrom="M 24,13.3999938965 c 0,0.0 -24,0.0 -24,0.0 c 0,0.0 0,10.6000061035 0,10.6000061035 c 0,0 24,0 24,0 c 0,0 0,-10.6000061035 0,-10.6000061035 Z"
+        android:valueTo="M 24,0.00173950195312 c 0,0.0 -24,0.0 -24,0.0 c 0,0.0 0,10.6982574463 0,10.6982574463 c 0,0.0 24,0.0 24,0.0 c 0,0.0 0,-10.6982574463 0,-10.6982574463 Z"
+        android:valueType="pathType"/>
+</set>
\ No newline at end of file
diff --git a/res/animator/fade_in.xml b/res/animator/fade_in.xml
deleted file mode 100644
index 771a4c9..0000000
--- a/res/animator/fade_in.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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
-  -->
-<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
-    android:valueFrom="0.0"
-    android:valueTo="1.0"
-    android:propertyName="alpha"
-    android:interpolator="@android:interpolator/decelerate_quad"
-    android:duration="@integer/fade_duration" />
diff --git a/res/animator/fade_out.xml b/res/animator/fade_out.xml
deleted file mode 100644
index 668e332..0000000
--- a/res/animator/fade_out.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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
-  -->
-<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
-    android:valueFrom="1.0"
-    android:valueTo="0.0"
-    android:propertyName="alpha"
-    android:interpolator="@android:interpolator/decelerate_quad"
-    android:duration="@integer/fade_duration" />
diff --git a/res/animator/ic_alarm_animation_button.xml b/res/animator/ic_alarm_animation_button.xml
deleted file mode 100644
index 83465d3..0000000
--- a/res/animator/ic_alarm_animation_button.xml
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
-    <set
-        android:ordering="sequentially" >
-        <objectAnimator
-            android:duration="33"
-            android:propertyName="rotation"
-            android:valueFrom="0"
-            android:valueTo="8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="8"
-            android:valueTo="-8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="-8"
-            android:valueTo="8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="8"
-            android:valueTo="-8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="-8"
-            android:valueTo="8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="8"
-            android:valueTo="-8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="-8"
-            android:valueTo="8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="8"
-            android:valueTo="-8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="-8"
-            android:valueTo="8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="8"
-            android:valueTo="-8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="-8"
-            android:valueTo="8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="8"
-            android:valueTo="-8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="-8"
-            android:valueTo="8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="8"
-            android:valueTo="-8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="-8"
-            android:valueTo="8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="8"
-            android:valueTo="-8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="-8"
-            android:valueTo="8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="8"
-            android:valueTo="-8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="-8"
-            android:valueTo="8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="67"
-            android:propertyName="rotation"
-            android:valueFrom="8"
-            android:valueTo="-8"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="33"
-            android:propertyName="rotation"
-            android:valueFrom="-8"
-            android:valueTo="0"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-    </set>
-</set>
diff --git a/res/animator/ic_clock_animation_second_hand.xml b/res/animator/ic_clock_animation_second_hand.xml
deleted file mode 100644
index a98e6df..0000000
--- a/res/animator/ic_clock_animation_second_hand.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="1333"
-        android:propertyName="rotation"
-        android:valueFrom="0"
-        android:valueTo="360"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/animator/ic_timer_animation_mask_1.xml b/res/animator/ic_timer_animation_mask_1.xml
deleted file mode 100644
index 2e331a7..0000000
--- a/res/animator/ic_timer_animation_mask_1.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
-    <set
-        android:ordering="sequentially" >
-        <objectAnimator
-            android:duration="333"
-            android:propertyName="pathData"
-            android:valueFrom="M 24,13.3999938965 c 0,0.0 -24,0.0 -24,0.0 c 0,0.0 0,10.6000061035 0,10.6000061035 c 0,0 24,0 24,0 c 0,0 0,-10.6000061035 0,-10.6000061035 Z"
-            android:valueTo="M 24,13.3999938965 c 0,0.0 -24,0.0 -24,0.0 c 0,0.0 0,10.6000061035 0,10.6000061035 c 0,0 24,0 24,0 c 0,0 0,-10.6000061035 0,-10.6000061035 Z"
-            android:valueType="pathType"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-        <objectAnimator
-            android:duration="1000"
-            android:propertyName="pathData"
-            android:valueFrom="M 24,13.3999938965 c 0,0.0 -24,0.0 -24,0.0 c 0,0.0 0,10.6000061035 0,10.6000061035 c 0,0 24,0 24,0 c 0,0 0,-10.6000061035 0,-10.6000061035 Z"
-            android:valueTo="M 24,0.00173950195312 c 0,0.0 -24,0.0 -24,0.0 c 0,0.0 0,10.6982574463 0,10.6982574463 c 0,0.0 24,0.0 24,0.0 c 0,0.0 0,-10.6982574463 0,-10.6982574463 Z"
-            android:valueType="pathType"
-            android:interpolator="@android:interpolator/fast_out_slow_in" />
-    </set>
-</set>
diff --git a/res/color/bg_day_tint_color.xml b/res/color/bg_day_tint_color.xml
index 8ccf894..0368475 100644
--- a/res/color/bg_day_tint_color.xml
+++ b/res/color/bg_day_tint_color.xml
@@ -16,6 +16,6 @@
   -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_activated="true" android:color="@color/clock_white" />
+    <item android:state_checked="true" android:color="@color/clock_white" />
     <item android:color="@android:color/transparent" />
-</selector>
\ No newline at end of file
+</selector>
diff --git a/res/drawable-hdpi/alarm_background_expanded.9.png b/res/drawable-hdpi/alarm_background_expanded.9.png
new file mode 100644
index 0000000..d8abf86
--- /dev/null
+++ b/res/drawable-hdpi/alarm_background_expanded.9.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_alarm_off_white_24dp.png b/res/drawable-hdpi/ic_alarm_off_white_24dp.png
index ad43700..2d7ff0a 100644
--- a/res/drawable-hdpi/ic_alarm_off_white_24dp.png
+++ b/res/drawable-hdpi/ic_alarm_off_white_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_alarm_small_12dp.png b/res/drawable-hdpi/ic_alarm_small_12dp.png
new file mode 100644
index 0000000..7761be9
--- /dev/null
+++ b/res/drawable-hdpi/ic_alarm_small_12dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_alarm_small.png b/res/drawable-hdpi/ic_alarm_small_18dp.png
similarity index 100%
rename from res/drawable-hdpi/ic_alarm_small.png
rename to res/drawable-hdpi/ic_alarm_small_18dp.png
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/ic_alarm_small.png b/res/drawable-hdpi/ic_alarm_small_24dp.png
similarity index 100%
rename from res/drawable-sw600dp-hdpi/ic_alarm_small.png
rename to res/drawable-hdpi/ic_alarm_small_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_fab_pause.png b/res/drawable-hdpi/ic_fab_pause.png
deleted file mode 100644
index b5f76c3..0000000
--- a/res/drawable-hdpi/ic_fab_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_fab_play.png b/res/drawable-hdpi/ic_fab_play.png
deleted file mode 100644
index d8e6fc3..0000000
--- a/res/drawable-hdpi/ic_fab_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_fab_plus.png b/res/drawable-hdpi/ic_fab_plus.png
deleted file mode 100644
index 7533292..0000000
--- a/res/drawable-hdpi/ic_fab_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_fab_stop.png b/res/drawable-hdpi/ic_fab_stop.png
deleted file mode 100644
index 43b624d..0000000
--- a/res/drawable-hdpi/ic_fab_stop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_globe.png b/res/drawable-hdpi/ic_globe.png
deleted file mode 100644
index 52b4e74..0000000
--- a/res/drawable-hdpi/ic_globe.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_language_white_24dp.png b/res/drawable-hdpi/ic_language_white_24dp.png
new file mode 100644
index 0000000..b7c8248
--- /dev/null
+++ b/res/drawable-hdpi/ic_language_white_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_pause_white_24dp.png b/res/drawable-hdpi/ic_pause_white_24dp.png
new file mode 100644
index 0000000..4d2ea05
--- /dev/null
+++ b/res/drawable-hdpi/ic_pause_white_24dp.png
Binary files differ
diff --git a/res/drawable-hdpi/panel_undo_holo.9.png b/res/drawable-hdpi/panel_undo_holo.9.png
deleted file mode 100644
index 2396b26..0000000
--- a/res/drawable-hdpi/panel_undo_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/alarm_background_expanded.9.png b/res/drawable-mdpi/alarm_background_expanded.9.png
new file mode 100644
index 0000000..4539033
--- /dev/null
+++ b/res/drawable-mdpi/alarm_background_expanded.9.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_alarm_off_white_24dp.png b/res/drawable-mdpi/ic_alarm_off_white_24dp.png
index 2bb9422..fa37e9d 100644
--- a/res/drawable-mdpi/ic_alarm_off_white_24dp.png
+++ b/res/drawable-mdpi/ic_alarm_off_white_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_alarm_small_12dp.png b/res/drawable-mdpi/ic_alarm_small_12dp.png
new file mode 100644
index 0000000..1f8834a
--- /dev/null
+++ b/res/drawable-mdpi/ic_alarm_small_12dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_alarm_small.png b/res/drawable-mdpi/ic_alarm_small_18dp.png
similarity index 100%
rename from res/drawable-mdpi/ic_alarm_small.png
rename to res/drawable-mdpi/ic_alarm_small_18dp.png
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/ic_alarm_small.png b/res/drawable-mdpi/ic_alarm_small_24dp.png
similarity index 100%
rename from res/drawable-sw600dp-mdpi/ic_alarm_small.png
rename to res/drawable-mdpi/ic_alarm_small_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_fab_pause.png b/res/drawable-mdpi/ic_fab_pause.png
deleted file mode 100644
index ff7c74b..0000000
--- a/res/drawable-mdpi/ic_fab_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_fab_play.png b/res/drawable-mdpi/ic_fab_play.png
deleted file mode 100644
index 9ad2bb2..0000000
--- a/res/drawable-mdpi/ic_fab_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_fab_plus.png b/res/drawable-mdpi/ic_fab_plus.png
deleted file mode 100644
index 869d89f..0000000
--- a/res/drawable-mdpi/ic_fab_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_fab_stop.png b/res/drawable-mdpi/ic_fab_stop.png
deleted file mode 100644
index c6bbb06..0000000
--- a/res/drawable-mdpi/ic_fab_stop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_globe.png b/res/drawable-mdpi/ic_globe.png
deleted file mode 100644
index 2c1b4c3..0000000
--- a/res/drawable-mdpi/ic_globe.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_language_white_24dp.png b/res/drawable-mdpi/ic_language_white_24dp.png
new file mode 100644
index 0000000..0bc7dfd
--- /dev/null
+++ b/res/drawable-mdpi/ic_language_white_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_pause_white_24dp.png b/res/drawable-mdpi/ic_pause_white_24dp.png
new file mode 100644
index 0000000..2272d47
--- /dev/null
+++ b/res/drawable-mdpi/ic_pause_white_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/panel_undo_holo.9.png b/res/drawable-mdpi/panel_undo_holo.9.png
deleted file mode 100644
index 291a936..0000000
--- a/res/drawable-mdpi/panel_undo_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/clock_analog_dial.png b/res/drawable-sw600dp-hdpi/clock_analog_dial.png
deleted file mode 100644
index 98abe16..0000000
--- a/res/drawable-sw600dp-hdpi/clock_analog_dial.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/clock_analog_hour.png b/res/drawable-sw600dp-hdpi/clock_analog_hour.png
deleted file mode 100644
index 8cce270..0000000
--- a/res/drawable-sw600dp-hdpi/clock_analog_hour.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/clock_analog_minute.png b/res/drawable-sw600dp-hdpi/clock_analog_minute.png
deleted file mode 100644
index 6c64954..0000000
--- a/res/drawable-sw600dp-hdpi/clock_analog_minute.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/clock_analog_second.png b/res/drawable-sw600dp-hdpi/clock_analog_second.png
deleted file mode 100644
index 869b02e..0000000
--- a/res/drawable-sw600dp-hdpi/clock_analog_second.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/ic_fab_pause.png b/res/drawable-sw600dp-hdpi/ic_fab_pause.png
deleted file mode 100644
index bd3cfcf..0000000
--- a/res/drawable-sw600dp-hdpi/ic_fab_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/ic_fab_play.png b/res/drawable-sw600dp-hdpi/ic_fab_play.png
deleted file mode 100644
index 3f16e23..0000000
--- a/res/drawable-sw600dp-hdpi/ic_fab_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/ic_fab_plus.png b/res/drawable-sw600dp-hdpi/ic_fab_plus.png
deleted file mode 100644
index 95ab0a7..0000000
--- a/res/drawable-sw600dp-hdpi/ic_fab_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/ic_fab_stop.png b/res/drawable-sw600dp-hdpi/ic_fab_stop.png
deleted file mode 100644
index 58e6a8d..0000000
--- a/res/drawable-sw600dp-hdpi/ic_fab_stop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/ic_globe.png b/res/drawable-sw600dp-hdpi/ic_globe.png
deleted file mode 100644
index 83772bc..0000000
--- a/res/drawable-sw600dp-hdpi/ic_globe.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/ic_label_normal.png b/res/drawable-sw600dp-hdpi/ic_label_normal.png
deleted file mode 100644
index 2e5318d..0000000
--- a/res/drawable-sw600dp-hdpi/ic_label_normal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/clock_analog_dial.png b/res/drawable-sw600dp-mdpi/clock_analog_dial.png
deleted file mode 100644
index 0d11937..0000000
--- a/res/drawable-sw600dp-mdpi/clock_analog_dial.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/clock_analog_hour.png b/res/drawable-sw600dp-mdpi/clock_analog_hour.png
deleted file mode 100644
index 82eba3b..0000000
--- a/res/drawable-sw600dp-mdpi/clock_analog_hour.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/clock_analog_minute.png b/res/drawable-sw600dp-mdpi/clock_analog_minute.png
deleted file mode 100644
index 8430e17..0000000
--- a/res/drawable-sw600dp-mdpi/clock_analog_minute.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/clock_analog_second.png b/res/drawable-sw600dp-mdpi/clock_analog_second.png
deleted file mode 100644
index 2e8e486..0000000
--- a/res/drawable-sw600dp-mdpi/clock_analog_second.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/ic_fab_pause.png b/res/drawable-sw600dp-mdpi/ic_fab_pause.png
deleted file mode 100644
index aead9b2..0000000
--- a/res/drawable-sw600dp-mdpi/ic_fab_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/ic_fab_play.png b/res/drawable-sw600dp-mdpi/ic_fab_play.png
deleted file mode 100644
index 8cbbae0..0000000
--- a/res/drawable-sw600dp-mdpi/ic_fab_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/ic_fab_plus.png b/res/drawable-sw600dp-mdpi/ic_fab_plus.png
deleted file mode 100644
index 115f399..0000000
--- a/res/drawable-sw600dp-mdpi/ic_fab_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/ic_fab_stop.png b/res/drawable-sw600dp-mdpi/ic_fab_stop.png
deleted file mode 100644
index f0962f7..0000000
--- a/res/drawable-sw600dp-mdpi/ic_fab_stop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/ic_globe.png b/res/drawable-sw600dp-mdpi/ic_globe.png
deleted file mode 100644
index bd65e18..0000000
--- a/res/drawable-sw600dp-mdpi/ic_globe.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/ic_label_normal.png b/res/drawable-sw600dp-mdpi/ic_label_normal.png
deleted file mode 100644
index d667352..0000000
--- a/res/drawable-sw600dp-mdpi/ic_label_normal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/clock_analog_dial.png b/res/drawable-sw600dp-xhdpi/clock_analog_dial.png
deleted file mode 100644
index 67b6941..0000000
--- a/res/drawable-sw600dp-xhdpi/clock_analog_dial.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/clock_analog_hour.png b/res/drawable-sw600dp-xhdpi/clock_analog_hour.png
deleted file mode 100644
index 70f194b..0000000
--- a/res/drawable-sw600dp-xhdpi/clock_analog_hour.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/clock_analog_minute.png b/res/drawable-sw600dp-xhdpi/clock_analog_minute.png
deleted file mode 100644
index 5d73559..0000000
--- a/res/drawable-sw600dp-xhdpi/clock_analog_minute.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/clock_analog_second.png b/res/drawable-sw600dp-xhdpi/clock_analog_second.png
deleted file mode 100644
index 213ed46..0000000
--- a/res/drawable-sw600dp-xhdpi/clock_analog_second.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/ic_fab_pause.png b/res/drawable-sw600dp-xhdpi/ic_fab_pause.png
deleted file mode 100644
index 6854cf5..0000000
--- a/res/drawable-sw600dp-xhdpi/ic_fab_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/ic_fab_play.png b/res/drawable-sw600dp-xhdpi/ic_fab_play.png
deleted file mode 100644
index 6ac7f13..0000000
--- a/res/drawable-sw600dp-xhdpi/ic_fab_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/ic_fab_plus.png b/res/drawable-sw600dp-xhdpi/ic_fab_plus.png
deleted file mode 100644
index 7688a61..0000000
--- a/res/drawable-sw600dp-xhdpi/ic_fab_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/ic_fab_stop.png b/res/drawable-sw600dp-xhdpi/ic_fab_stop.png
deleted file mode 100644
index b158356..0000000
--- a/res/drawable-sw600dp-xhdpi/ic_fab_stop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/ic_globe.png b/res/drawable-sw600dp-xhdpi/ic_globe.png
deleted file mode 100644
index 8aee9c2..0000000
--- a/res/drawable-sw600dp-xhdpi/ic_globe.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/ic_label_normal.png b/res/drawable-sw600dp-xhdpi/ic_label_normal.png
deleted file mode 100644
index 70e22cf..0000000
--- a/res/drawable-sw600dp-xhdpi/ic_label_normal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/clock_analog_dial.png b/res/drawable-sw600dp-xxhdpi/clock_analog_dial.png
deleted file mode 100644
index 7464145..0000000
--- a/res/drawable-sw600dp-xxhdpi/clock_analog_dial.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/clock_analog_hour.png b/res/drawable-sw600dp-xxhdpi/clock_analog_hour.png
deleted file mode 100644
index e386819..0000000
--- a/res/drawable-sw600dp-xxhdpi/clock_analog_hour.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/clock_analog_minute.png b/res/drawable-sw600dp-xxhdpi/clock_analog_minute.png
deleted file mode 100644
index eeabc21..0000000
--- a/res/drawable-sw600dp-xxhdpi/clock_analog_minute.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/clock_analog_second.png b/res/drawable-sw600dp-xxhdpi/clock_analog_second.png
deleted file mode 100644
index a6c5f2f..0000000
--- a/res/drawable-sw600dp-xxhdpi/clock_analog_second.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/ic_fab_pause.png b/res/drawable-sw600dp-xxhdpi/ic_fab_pause.png
deleted file mode 100644
index 42c0689..0000000
--- a/res/drawable-sw600dp-xxhdpi/ic_fab_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/ic_fab_play.png b/res/drawable-sw600dp-xxhdpi/ic_fab_play.png
deleted file mode 100644
index f71180e..0000000
--- a/res/drawable-sw600dp-xxhdpi/ic_fab_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/ic_fab_plus.png b/res/drawable-sw600dp-xxhdpi/ic_fab_plus.png
deleted file mode 100644
index ef39cfc..0000000
--- a/res/drawable-sw600dp-xxhdpi/ic_fab_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/ic_fab_stop.png b/res/drawable-sw600dp-xxhdpi/ic_fab_stop.png
deleted file mode 100644
index 190857b..0000000
--- a/res/drawable-sw600dp-xxhdpi/ic_fab_stop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/ic_globe.png b/res/drawable-sw600dp-xxhdpi/ic_globe.png
deleted file mode 100644
index 0c26af8..0000000
--- a/res/drawable-sw600dp-xxhdpi/ic_globe.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/ic_label_normal.png b/res/drawable-sw600dp-xxhdpi/ic_label_normal.png
deleted file mode 100644
index 583fab3..0000000
--- a/res/drawable-sw600dp-xxhdpi/ic_label_normal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/clock_analog_dial.png b/res/drawable-sw600dp-xxxhdpi/clock_analog_dial.png
deleted file mode 100644
index 6b6bb0a..0000000
--- a/res/drawable-sw600dp-xxxhdpi/clock_analog_dial.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/clock_analog_hour.png b/res/drawable-sw600dp-xxxhdpi/clock_analog_hour.png
deleted file mode 100644
index af040e2..0000000
--- a/res/drawable-sw600dp-xxxhdpi/clock_analog_hour.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/clock_analog_minute.png b/res/drawable-sw600dp-xxxhdpi/clock_analog_minute.png
deleted file mode 100644
index 4223579..0000000
--- a/res/drawable-sw600dp-xxxhdpi/clock_analog_minute.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/clock_analog_second.png b/res/drawable-sw600dp-xxxhdpi/clock_analog_second.png
deleted file mode 100644
index 891c55e..0000000
--- a/res/drawable-sw600dp-xxxhdpi/clock_analog_second.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/ic_fab_pause.png b/res/drawable-sw600dp-xxxhdpi/ic_fab_pause.png
deleted file mode 100644
index 13550c4..0000000
--- a/res/drawable-sw600dp-xxxhdpi/ic_fab_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/ic_fab_play.png b/res/drawable-sw600dp-xxxhdpi/ic_fab_play.png
deleted file mode 100644
index 76f278f..0000000
--- a/res/drawable-sw600dp-xxxhdpi/ic_fab_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/ic_fab_plus.png b/res/drawable-sw600dp-xxxhdpi/ic_fab_plus.png
deleted file mode 100644
index 8c655c2..0000000
--- a/res/drawable-sw600dp-xxxhdpi/ic_fab_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/ic_fab_stop.png b/res/drawable-sw600dp-xxxhdpi/ic_fab_stop.png
deleted file mode 100644
index 91cfc95..0000000
--- a/res/drawable-sw600dp-xxxhdpi/ic_fab_stop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/ic_label_normal.png b/res/drawable-sw600dp-xxxhdpi/ic_label_normal.png
deleted file mode 100644
index 99d2c83..0000000
--- a/res/drawable-sw600dp-xxxhdpi/ic_label_normal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-v19/fastscroll_preview.xml b/res/drawable-v21/horizontal_divider.xml
similarity index 68%
rename from res/drawable-v19/fastscroll_preview.xml
rename to res/drawable-v21/horizontal_divider.xml
index 33424f6..7db71f3 100644
--- a/res/drawable-v19/fastscroll_preview.xml
+++ b/res/drawable-v21/horizontal_divider.xml
@@ -13,13 +13,10 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
 <inset xmlns:android="http://schemas.android.com/apk/res/android"
-    android:insetRight="@dimen/fastscroll_preview_padding"
-    android:insetLeft="@dimen/fastscroll_preview_padding">
-    <shape xmlns:android="http://schemas.android.com/apk/res/android"
-        android:shape="rectangle">
-        <corners android:radius="44dp"/>
-        <solid android:color="@color/color_accent" />
-    </shape>
-</inset>
+    android:insetLeft="@dimen/notification_icon_size">
+     <shape>
+         <size android:height="1dip" />
+         <solid android:color="@color/notification_divider" />
+     </shape>
+</inset>
\ No newline at end of file
diff --git a/res/drawable-v21/ic_add_24dp.xml b/res/drawable-v21/ic_add_24dp.xml
index 85532d0..61ef285 100644
--- a/res/drawable-v21/ic_add_24dp.xml
+++ b/res/drawable-v21/ic_add_24dp.xml
@@ -16,4 +16,4 @@
 
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
     android:src="@drawable/ic_add_white_24dp"
-    android:tint="@color/black" />
+    android:tint="@color/black_54p" />
diff --git a/res/layout/stopwatch_spacer.xml b/res/drawable-v21/ic_pause_24dp.xml
similarity index 71%
copy from res/layout/stopwatch_spacer.xml
copy to res/drawable-v21/ic_pause_24dp.xml
index 31b648b..92c5e93 100644
--- a/res/layout/stopwatch_spacer.xml
+++ b/res/drawable-v21/ic_pause_24dp.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!-- Copyright (C) 2015 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.
@@ -13,8 +13,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<Space
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/stopwatch_list_bottom_spacing" />
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_pause_white_24dp"
+    android:tint="@color/black_54p" />
diff --git a/res/drawable-v21/ic_reset_24dp.xml b/res/drawable-v21/ic_reset_24dp.xml
index a754bd8..b88c04f 100644
--- a/res/drawable-v21/ic_reset_24dp.xml
+++ b/res/drawable-v21/ic_reset_24dp.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
     android:src="@drawable/ic_reset_white_24dp"
-    android:tint="@color/black" />
+    android:tint="@color/black_54p" />
diff --git a/res/drawable-v21/ic_snooze_24dp.xml b/res/drawable-v21/ic_snooze_24dp.xml
index 29da44d..1968c6d 100644
--- a/res/drawable-v21/ic_snooze_24dp.xml
+++ b/res/drawable-v21/ic_snooze_24dp.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
     android:src="@drawable/ic_snooze_white_24dp"
-    android:tint="@color/black" />
\ No newline at end of file
+    android:tint="@color/black_54p" />
\ No newline at end of file
diff --git a/res/drawable-v21/ic_start_24dp.xml b/res/drawable-v21/ic_start_24dp.xml
index 655e66d..ebf3083 100644
--- a/res/drawable-v21/ic_start_24dp.xml
+++ b/res/drawable-v21/ic_start_24dp.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
     android:src="@drawable/ic_start_white_24dp"
-    android:tint="@color/black" />
+    android:tint="@color/black_54p" />
diff --git a/res/drawable-v21/ic_stop_24dp.xml b/res/drawable-v21/ic_stop_24dp.xml
index 0d4c891..e3e3431 100644
--- a/res/drawable-v21/ic_stop_24dp.xml
+++ b/res/drawable-v21/ic_stop_24dp.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
     android:src="@drawable/ic_stop_white_24dp"
-    android:tint="@color/black" />
+    android:tint="@color/black_54p" />
diff --git a/res/drawable-v21/ic_lap_24dp.xml b/res/drawable-v21/ic_sw_lap_24dp.xml
similarity index 79%
rename from res/drawable-v21/ic_lap_24dp.xml
rename to res/drawable-v21/ic_sw_lap_24dp.xml
index 82f035f..25b0e50 100644
--- a/res/drawable-v21/ic_lap_24dp.xml
+++ b/res/drawable-v21/ic_sw_lap_24dp.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
     android:src="@drawable/ic_lap_white_24dp"
-    android:tint="@color/black" />
+    android:tint="@color/black_54p" />
diff --git a/res/drawable-v21/ic_sw_reset_24dp.xml b/res/drawable-v21/ic_sw_reset_24dp.xml
new file mode 100644
index 0000000..b88c04f
--- /dev/null
+++ b/res/drawable-v21/ic_sw_reset_24dp.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_reset_white_24dp"
+    android:tint="@color/black_54p" />
diff --git a/res/drawable-v21/ic_sw_start_24dp.xml b/res/drawable-v21/ic_sw_start_24dp.xml
new file mode 100644
index 0000000..ebf3083
--- /dev/null
+++ b/res/drawable-v21/ic_sw_start_24dp.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_start_white_24dp"
+    android:tint="@color/black_54p" />
diff --git a/res/drawable-v22/ic_tab_clock.xml b/res/drawable-v22/ic_tab_clock.xml
index f450731..0f1c740 100644
--- a/res/drawable-v22/ic_tab_clock.xml
+++ b/res/drawable-v22/ic_tab_clock.xml
@@ -29,11 +29,13 @@
     <transition android:fromId="@id/off" android:toId="@id/on">
         <animated-vector android:drawable="@drawable/ic_clock">
             <target
-                android:name="second_hand"
-                android:animation="@animator/ic_clock_animation_second_hand" />
+                android:name="hour_hand"
+                android:animation="@animator/ic_clock_hour_hand_animation" />
+            <target
+                android:name="minute_hand"
+                android:animation="@animator/ic_clock_minute_hand_animation" />
         </animated-vector>
     </transition>
 
-
 </animated-selector>
 
diff --git a/res/drawable-xhdpi/alarm_background_expanded.9.png b/res/drawable-xhdpi/alarm_background_expanded.9.png
new file mode 100644
index 0000000..bb0d814
--- /dev/null
+++ b/res/drawable-xhdpi/alarm_background_expanded.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_alarm_off_white_24dp.png b/res/drawable-xhdpi/ic_alarm_off_white_24dp.png
index 0f2f7c0..c229b48 100644
--- a/res/drawable-xhdpi/ic_alarm_off_white_24dp.png
+++ b/res/drawable-xhdpi/ic_alarm_off_white_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_alarm_small_12dp.png b/res/drawable-xhdpi/ic_alarm_small_12dp.png
new file mode 100644
index 0000000..ac27077
--- /dev/null
+++ b/res/drawable-xhdpi/ic_alarm_small_12dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_alarm_small.png b/res/drawable-xhdpi/ic_alarm_small_18dp.png
similarity index 100%
rename from res/drawable-xhdpi/ic_alarm_small.png
rename to res/drawable-xhdpi/ic_alarm_small_18dp.png
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/ic_alarm_small.png b/res/drawable-xhdpi/ic_alarm_small_24dp.png
similarity index 100%
rename from res/drawable-sw600dp-xhdpi/ic_alarm_small.png
rename to res/drawable-xhdpi/ic_alarm_small_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_fab_pause.png b/res/drawable-xhdpi/ic_fab_pause.png
deleted file mode 100644
index f1a5314..0000000
--- a/res/drawable-xhdpi/ic_fab_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_fab_play.png b/res/drawable-xhdpi/ic_fab_play.png
deleted file mode 100644
index 41d9cd5..0000000
--- a/res/drawable-xhdpi/ic_fab_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_fab_plus.png b/res/drawable-xhdpi/ic_fab_plus.png
deleted file mode 100644
index ba7736c..0000000
--- a/res/drawable-xhdpi/ic_fab_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_fab_stop.png b/res/drawable-xhdpi/ic_fab_stop.png
deleted file mode 100644
index a6d1077..0000000
--- a/res/drawable-xhdpi/ic_fab_stop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_globe.png b/res/drawable-xhdpi/ic_globe.png
deleted file mode 100644
index 46c11d9..0000000
--- a/res/drawable-xhdpi/ic_globe.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_language_white_24dp.png b/res/drawable-xhdpi/ic_language_white_24dp.png
new file mode 100644
index 0000000..eeaab46
--- /dev/null
+++ b/res/drawable-xhdpi/ic_language_white_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_pause_white_24dp.png b/res/drawable-xhdpi/ic_pause_white_24dp.png
new file mode 100644
index 0000000..f49aed7
--- /dev/null
+++ b/res/drawable-xhdpi/ic_pause_white_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/panel_undo_holo.9.png b/res/drawable-xhdpi/panel_undo_holo.9.png
deleted file mode 100644
index 1dc4927..0000000
--- a/res/drawable-xhdpi/panel_undo_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/alarm_background_expanded.9.png b/res/drawable-xxhdpi/alarm_background_expanded.9.png
new file mode 100644
index 0000000..83c91f8
--- /dev/null
+++ b/res/drawable-xxhdpi/alarm_background_expanded.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_alarm_off_white_24dp.png b/res/drawable-xxhdpi/ic_alarm_off_white_24dp.png
index 5cb3b7a..2b3f401 100644
--- a/res/drawable-xxhdpi/ic_alarm_off_white_24dp.png
+++ b/res/drawable-xxhdpi/ic_alarm_off_white_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_alarm_small_12dp.png b/res/drawable-xxhdpi/ic_alarm_small_12dp.png
new file mode 100644
index 0000000..b228d20
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_alarm_small_12dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_alarm_small.png b/res/drawable-xxhdpi/ic_alarm_small_18dp.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_alarm_small.png
rename to res/drawable-xxhdpi/ic_alarm_small_18dp.png
Binary files differ
diff --git a/res/drawable-sw600dp-xxhdpi/ic_alarm_small.png b/res/drawable-xxhdpi/ic_alarm_small_24dp.png
similarity index 100%
rename from res/drawable-sw600dp-xxhdpi/ic_alarm_small.png
rename to res/drawable-xxhdpi/ic_alarm_small_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_fab_pause.png b/res/drawable-xxhdpi/ic_fab_pause.png
deleted file mode 100644
index 4a5b683..0000000
--- a/res/drawable-xxhdpi/ic_fab_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_fab_play.png b/res/drawable-xxhdpi/ic_fab_play.png
deleted file mode 100644
index 5c10612..0000000
--- a/res/drawable-xxhdpi/ic_fab_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_fab_plus.png b/res/drawable-xxhdpi/ic_fab_plus.png
deleted file mode 100644
index 1f27d3f..0000000
--- a/res/drawable-xxhdpi/ic_fab_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_fab_stop.png b/res/drawable-xxhdpi/ic_fab_stop.png
deleted file mode 100644
index 6da87c3..0000000
--- a/res/drawable-xxhdpi/ic_fab_stop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_globe.png b/res/drawable-xxhdpi/ic_globe.png
deleted file mode 100644
index fc78843..0000000
--- a/res/drawable-xxhdpi/ic_globe.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_language_white_24dp.png b/res/drawable-xxhdpi/ic_language_white_24dp.png
new file mode 100644
index 0000000..d4b5518
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_language_white_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_pause_white_24dp.png b/res/drawable-xxhdpi/ic_pause_white_24dp.png
new file mode 100644
index 0000000..7192ad4
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_pause_white_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/panel_undo_holo.9.png b/res/drawable-xxhdpi/panel_undo_holo.9.png
deleted file mode 100644
index 1dc4927..0000000
--- a/res/drawable-xxhdpi/panel_undo_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/alarm_background_expanded.9.png b/res/drawable-xxxhdpi/alarm_background_expanded.9.png
new file mode 100644
index 0000000..c1fb7ff
--- /dev/null
+++ b/res/drawable-xxxhdpi/alarm_background_expanded.9.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/bg_edittext_activated.9.png b/res/drawable-xxxhdpi/bg_edittext_activated.9.png
deleted file mode 100644
index 932a170..0000000
--- a/res/drawable-xxxhdpi/bg_edittext_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/bg_edittext_default.9.png b/res/drawable-xxxhdpi/bg_edittext_default.9.png
deleted file mode 100644
index 932a170..0000000
--- a/res/drawable-xxxhdpi/bg_edittext_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_alarm_off_white_24dp.png b/res/drawable-xxxhdpi/ic_alarm_off_white_24dp.png
index d4fc2db..e824dda 100644
--- a/res/drawable-xxxhdpi/ic_alarm_off_white_24dp.png
+++ b/res/drawable-xxxhdpi/ic_alarm_off_white_24dp.png
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/ic_alarm_small.png b/res/drawable-xxxhdpi/ic_alarm_small_12dp.png
similarity index 100%
copy from res/drawable-sw600dp-xhdpi/ic_alarm_small.png
copy to res/drawable-xxxhdpi/ic_alarm_small_12dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_alarm_small.png b/res/drawable-xxxhdpi/ic_alarm_small_18dp.png
similarity index 100%
rename from res/drawable-xxxhdpi/ic_alarm_small.png
rename to res/drawable-xxxhdpi/ic_alarm_small_18dp.png
Binary files differ
diff --git a/res/drawable-sw600dp-xxxhdpi/ic_alarm_small.png b/res/drawable-xxxhdpi/ic_alarm_small_24dp.png
similarity index 100%
rename from res/drawable-sw600dp-xxxhdpi/ic_alarm_small.png
rename to res/drawable-xxxhdpi/ic_alarm_small_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_fab_pause.png b/res/drawable-xxxhdpi/ic_fab_pause.png
deleted file mode 100644
index 47616f1..0000000
--- a/res/drawable-xxxhdpi/ic_fab_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_fab_play.png b/res/drawable-xxxhdpi/ic_fab_play.png
deleted file mode 100644
index 0ae54f0..0000000
--- a/res/drawable-xxxhdpi/ic_fab_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_fab_plus.png b/res/drawable-xxxhdpi/ic_fab_plus.png
deleted file mode 100644
index 14ad343..0000000
--- a/res/drawable-xxxhdpi/ic_fab_plus.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_fab_stop.png b/res/drawable-xxxhdpi/ic_fab_stop.png
deleted file mode 100644
index 4c36402..0000000
--- a/res/drawable-xxxhdpi/ic_fab_stop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_language_white_24dp.png b/res/drawable-xxxhdpi/ic_language_white_24dp.png
new file mode 100644
index 0000000..a576ac7
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_language_white_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_pause_white_24dp.png b/res/drawable-xxxhdpi/ic_pause_white_24dp.png
new file mode 100644
index 0000000..660ac65
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_pause_white_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/panel_undo_holo.9.png b/res/drawable-xxxhdpi/panel_undo_holo.9.png
deleted file mode 100644
index 1dc4927..0000000
--- a/res/drawable-xxxhdpi/panel_undo_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/alarm_background_normal.xml b/res/drawable/alarm_background_normal.xml
deleted file mode 100644
index 7c415f3..0000000
--- a/res/drawable/alarm_background_normal.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 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="true"
-        android:drawable="@color/blackish_selected" />
-
-    <item android:state_focused="false" android:state_pressed="true"
-        android:drawable="@color/blackish_selected" />
-
-    <item android:state_focused="true"
-        android:drawable="@color/blackish_selected" />
-
-</selector>
diff --git a/res/drawable/fastscroll_preview.xml b/res/drawable/fastscroll_preview.xml
index b4165e0..33424f6 100644
--- a/res/drawable/fastscroll_preview.xml
+++ b/res/drawable/fastscroll_preview.xml
@@ -1,22 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2015 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
+     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
+          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.
+     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.
 -->
 
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <corners android:radius="44dp"/>
-    <solid android:color="@color/color_accent" />
-</shape>
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+    android:insetRight="@dimen/fastscroll_preview_padding"
+    android:insetLeft="@dimen/fastscroll_preview_padding">
+    <shape xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shape="rectangle">
+        <corners android:radius="44dp"/>
+        <solid android:color="@color/color_accent" />
+    </shape>
+</inset>
diff --git a/res/drawable/ic_clock.xml b/res/drawable/ic_clock.xml
old mode 100644
new mode 100755
index 9fb2cfc..0099989
--- a/res/drawable/ic_clock.xml
+++ b/res/drawable/ic_clock.xml
@@ -15,54 +15,73 @@
      limitations under the License.
 -->
 
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:name="ic_clock"
     android:width="24dp"
-    android:viewportHeight="24"
-    android:viewportWidth="24" >
+    android:viewportWidth="240"
+    android:height="24dp"
+    android:viewportHeight="240" >
     <group
         android:name="clock_frame"
-        android:translateX="12"
-        android:translateY="12" >
+        android:translateX="120"
+        android:translateY="120"
+        android:scaleX="9.91"
+        android:scaleY="9.91" >
         <group
             android:name="clock_frame_pivot"
             android:translateX="-12"
             android:translateY="-12" >
             <group
-                android:name="hour_hand"
-                android:translateX="12.00763"
-                android:translateY="9.992" >
-                <path
-                    android:name="hour_hand_path"
-                    android:pathData="M 0.742004394531,2.99200439453 c 0.0,0.0 -1.48400878906,0.0 -1.48400878906,0.0 c 0.0,0.0 0.0,-5.98400878906 0.0,-5.98400878906 c 0.0,0.0 1.48400878906,0.0 1.48400878906,0.0 c 0.0,0.0 0.0,5.98400878906 0.0,5.98400878906 Z"
-                    android:fillColor="#FFFFFFFF"
-                    android:fillAlpha="1" />
-            </group>
-            <group
-                android:name="clock_frame_1"
+                android:name="clock_frame_0"
                 android:translateX="12"
                 android:translateY="12" >
                 <path
-                    android:name="clock_ouline_path"
-                    android:pathData="M -0.0050048828125,-10 c -5.52699279785,0 -9.99499511719,4.47700500488 -9.99499511719,10 c 0,5.52299499512 4.46800231934,10 9.99499511719,10 c 5.52600097656,0 10.0050048828,-4.47700500488 10.0050048828,-10 c 0,-5.52299499512 -4.47900390625,-10 -10.0050048828,-10 Z M 0,8 c -4.41999816895,0 -8,-3.58200073242 -8,-8 c 0,-4.41799926758 3.58000183105,-8 8,-8 c 4.41999816895,0 8,3.58200073242 8,8 c 0,4.41799926758 -3.58000183105,8 -8,8 Z"
-                    android:fillColor="#FFFFFFFF"
-                    android:fillAlpha="1" />
+                    android:name="clock_ouline_path_merged"
+                    android:pathData="M -0.0050048828125,-10.0 c -5.52699279785,0.0 -9.99499511719,4.47700500488 -9.99499511719,10.0 c 0.0,5.52299499512 4.46800231934,10.0 9.99499511719,10.0 c 5.52600097656,0.0 10.0050048828,-4.47700500488 10.0050048828,-10.0 c 0.0,-5.52299499512 -4.47900390625,-10.0 -10.0050048828,-10.0 Z M 0.0,8.0 c -4.41999816895,0.0 -8.0,-3.58200073242 -8.0,-8.0 c 0.0,-4.41799926758 3.58000183105,-8.0 8.0,-8.0 c 4.41999816895,0.0 8.0,3.58200073242 8.0,8.0 c 0.0,4.41799926758 -3.58000183105,8.0 -8.0,8.0 Z"
+                    android:fillColor="#FFFFFFFF" />
             </group>
         </group>
     </group>
     <group
-        android:name="second_hand"
-        android:translateX="12"
-        android:translateY="12" >
+        android:name="hour_hand"
+        android:translateX="117.75"
+        android:translateY="128.25"
+        android:scaleX="0.91922"
+        android:scaleY="3.67245" >
         <group
-            android:name="second_hand_pivot"
-            android:translateX="-12"
-            android:translateY="-12" >
-            <path
-                android:name="second_hand_path"
-                android:pathData="M 12.7418060303,12.9839935303 c 0.0,0.0 -1.48399353027,0.0 -1.48399353027,0.0 c 0.0,0.0 0.0,-5.98399353027 0.0,-5.98399353027 c 0.0,0 1.48399353027,0 1.48399353027,0 c 0.0,0 0.0,5.98399353027 0.0,5.98399353027 Z"
-                android:fillColor="#FFFFFFFF"
-                android:fillAlpha="1" />
+            android:name="hour_hand_pivot"
+            android:translateY="-7.69241" >
+            <group
+                android:name="hour_hand_0"
+                android:translateX="-0.25"
+                android:translateY="-0.125" >
+                <path
+                    android:name="hour_hand_path"
+                    android:fillColor="#FFFFFFFF"
+                    android:pathData="M -7.986815,-7.986815 l 15.97363,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,15.97363 c 0.0,0.0 0.0,0.0 0.0,0.0 l -15.97363,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-15.97363 c 0.0,0.0 0.0,0.0 0.0,0.0 Z" />
+            </group>
+        </group>
+    </group>
+    <group
+        android:name="minute_hand"
+        android:translateX="114.25"
+        android:translateY="124"
+        android:scaleX="0.91922"
+        android:scaleY="3.67245"
+        android:rotation="121" >
+        <group
+            android:name="minute_hand_pivot"
+            android:translateY="-7.69241" >
+            <group
+                android:name="minute_hand_0"
+                android:translateX="-0.25"
+                android:translateY="-0.125" >
+                <path
+                    android:name="minute_hand_path"
+                    android:fillColor="#FFFFFFFF"
+                    android:pathData="M -7.986815,-7.986815 l 15.97363,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,15.97363 c 0.0,0.0 0.0,0.0 0.0,0.0 l -15.97363,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-15.97363 c 0.0,0.0 0.0,0.0 0.0,0.0 Z" />
+            </group>
         </group>
     </group>
 </vector>
diff --git a/res/layout/stopwatch_spacer.xml b/res/drawable/ic_pause_24dp.xml
similarity index 71%
copy from res/layout/stopwatch_spacer.xml
copy to res/drawable/ic_pause_24dp.xml
index 31b648b..fa2e610 100644
--- a/res/layout/stopwatch_spacer.xml
+++ b/res/drawable/ic_pause_24dp.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!-- Copyright (C) 2015 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.
@@ -13,8 +13,5 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<Space
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/stopwatch_list_bottom_spacing" />
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_pause_white_24dp" />
diff --git a/res/drawable/ic_lap_24dp.xml b/res/drawable/ic_sw_lap_24dp.xml
similarity index 100%
rename from res/drawable/ic_lap_24dp.xml
rename to res/drawable/ic_sw_lap_24dp.xml
diff --git a/res/drawable/ic_sw_reset_24dp.xml b/res/drawable/ic_sw_reset_24dp.xml
new file mode 100644
index 0000000..3a301cd
--- /dev/null
+++ b/res/drawable/ic_sw_reset_24dp.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_reset_white_24dp" />
diff --git a/res/drawable/ic_sw_start_24dp.xml b/res/drawable/ic_sw_start_24dp.xml
new file mode 100644
index 0000000..cb5afbc
--- /dev/null
+++ b/res/drawable/ic_sw_start_24dp.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_start_white_24dp" />
diff --git a/res/drawable/toggle_circle.xml b/res/drawable/toggle_circle.xml
index d93bed3..574ae8c 100644
--- a/res/drawable/toggle_circle.xml
+++ b/res/drawable/toggle_circle.xml
@@ -16,7 +16,7 @@
   -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_activated="true">
+    <item android:state_checked="true">
         <bitmap
             android:src="@drawable/bg_day_selected"
             android:gravity="center" />
diff --git a/res/layout/stopwatch_spacer.xml b/res/interpolator/ic_clock_animation_interpolator_0.xml
similarity index 79%
copy from res/layout/stopwatch_spacer.xml
copy to res/interpolator/ic_clock_animation_interpolator_0.xml
index 31b648b..7c938ee 100644
--- a/res/layout/stopwatch_spacer.xml
+++ b/res/interpolator/ic_clock_animation_interpolator_0.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!--
+     Copyright (C) 2015 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.
@@ -14,7 +15,6 @@
      limitations under the License.
 -->
 
-<Space
+<pathInterpolator
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/stopwatch_list_bottom_spacing" />
+    android:pathData="M 0.0,0.0 c 0.0,0.0 0.618865688196,1.0 1.0,1.0" />
diff --git a/res/layout/stopwatch_spacer.xml b/res/interpolator/ic_clock_animation_interpolator_1.xml
similarity index 79%
rename from res/layout/stopwatch_spacer.xml
rename to res/interpolator/ic_clock_animation_interpolator_1.xml
index 31b648b..3247d36 100644
--- a/res/layout/stopwatch_spacer.xml
+++ b/res/interpolator/ic_clock_animation_interpolator_1.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!--
+     Copyright (C) 2015 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.
@@ -14,7 +15,6 @@
      limitations under the License.
 -->
 
-<Space
+<pathInterpolator
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/stopwatch_list_bottom_spacing" />
+    android:pathData="M 0.0,0.0 c 0.45921046959,0.0 1.0,1.0 1.0,1.0" />
diff --git a/res/layout-land/clock_fragment.xml b/res/layout-land/clock_fragment.xml
index 42ecb7c..dc834f5 100644
--- a/res/layout-land/clock_fragment.xml
+++ b/res/layout-land/clock_fragment.xml
@@ -16,33 +16,36 @@
 
 <!-- Use this clock_fragment for landscape, which has main clock frame next to cities,
      with a spacing ratio dependent on the number of clocks per row (phone has 1, tablet has 2). -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:paddingStart="@dimen/clock_side_padding"
+    android:baselineAligned="false"
+    android:orientation="horizontal"
     android:paddingEnd="@dimen/clock_side_padding"
-    android:orientation="horizontal">
+    android:paddingStart="@dimen/clock_side_padding">
 
     <LinearLayout
         android:layout_width="0dp"
         android:layout_height="match_parent"
-        android:layout_weight="2"
         android:layout_marginBottom="@dimen/main_clock_bottom_margin"
+        android:layout_weight="2"
         android:gravity="center">
 
-        <include layout="@layout/main_clock_frame"
+        <include
             android:id="@+id/main_clock_left_pane"
+            layout="@layout/main_clock_frame"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content" />
+            android:layout_height="wrap_content"/>
 
     </LinearLayout>
 
     <ListView
-            android:id="@+id/cities"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_weight="@integer/world_clocks_per_row"
-            android:layout_gravity="center"
-            android:clickable="false" />
+        android:id="@+id/cities"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:layout_weight="@integer/world_clocks_per_row"
+        android:clickable="false"/>
 
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout-land/stopwatch_fragment.xml b/res/layout-land/stopwatch_fragment.xml
index 5c86293..779aba4 100644
--- a/res/layout-land/stopwatch_fragment.xml
+++ b/res/layout-land/stopwatch_fragment.xml
@@ -13,62 +13,47 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_height="wrap_content"
+    android:baselineAligned="false"
     android:orientation="horizontal"
-    android:baselineAligned="false">
+    android:paddingBottom="@dimen/fab_height">
 
-    <Space
-            android:id="@+id/start_space"
-            android:visibility="gone"
-            android:layout_weight="0.5"
-            android:layout_width="0dip"
-            android:layout_height="match_parent"/>
-
-    <LinearLayout
-        android:layout_width="wrap_content"
+    <!-- This FrameLayout reserves half the screen for the stopwatch. -->
+    <FrameLayout
+        android:layout_width="0dp"
         android:layout_height="match_parent"
-        android:layout_marginBottom="@dimen/stopwatch_circle_margin_bottom"
-        android:gravity="center"
-        android:orientation="vertical">
+        android:layout_weight="1">
 
-        <com.android.deskclock.CircleButtonsLayout
-            android:id="@+id/stopwatch_circle"
+        <!-- This FrameLayout draws the stopwatch centered within its half of the screen. -->
+        <FrameLayout
             android:layout_width="@dimen/circle_size"
             android:layout_height="@dimen/circle_size"
-            android:layout_marginStart="32dip"
-            android:layout_marginEnd="32dip"
-            android:gravity="center">
+            android:layout_gravity="center"
+            android:gravity="center"
+            android:padding="16dp">
 
             <com.android.deskclock.timer.CountingTimerView
                 android:id="@+id/stopwatch_time_text"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent" />
 
-            <com.android.deskclock.CircleTimerView
+            <com.android.deskclock.stopwatch.StopwatchCircleView
                 android:id="@+id/stopwatch_time"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:background="@null" />
+        </FrameLayout>
 
-        </com.android.deskclock.CircleButtonsLayout>
+    </FrameLayout>
 
-    </LinearLayout>
-
-    <ListView
+    <android.support.v7.widget.RecyclerView
         android:id="@+id/laps_list"
-        android:layout_width="0dip"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:layout_weight="2"
-        android:layout_marginBottom="8dip"
-        android:layout_gravity="center" />
+        android:layout_gravity="center"
+        android:layout_weight="1" />
 
-    <Space
-            android:id="@+id/end_space"
-            android:visibility="gone"
-            android:layout_weight="0.5"
-            android:layout_width="0dip"
-            android:layout_height="match_parent"/>
-
-</LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout-land/time_setup_view.xml b/res/layout-land/time_setup_view.xml
index 26b7aed..b5e68e1 100644
--- a/res/layout-land/time_setup_view.xml
+++ b/res/layout-land/time_setup_view.xml
@@ -20,6 +20,7 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:baselineAligned="false"
         android:orientation="horizontal">
 
         <!-- This nested ltr layout cannot be combined with the parent because
@@ -32,8 +33,7 @@
             android:layout_marginBottom="@dimen/footer_button_size"
             android:layoutDirection="ltr"
             android:gravity="center"
-            android:orientation="vertical"
-            >
+            android:orientation="vertical">
 
             <com.android.deskclock.timer.TimerView
                 android:id="@+id/timer_time_text"
@@ -88,6 +88,6 @@
 
     </LinearLayout>
 
-    <include layout="@layout/timer_cancel_button" />
+    <include layout="@layout/timer_setup_buttons" />
 
 </FrameLayout>
\ No newline at end of file
diff --git a/res/layout-land/timer_fragment.xml b/res/layout-land/timer_fragment.xml
deleted file mode 100644
index 8bcb1e3..0000000
--- a/res/layout-land/timer_fragment.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/timers_list_page"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:baselineAligned="false">
-
-    <include layout="@layout/timer_timer_view"/>
-
-    <include layout="@layout/timer_setup_view"/>
-
-</FrameLayout>
\ No newline at end of file
diff --git a/res/layout-sw600dp-land/alarm_clock.xml b/res/layout-sw600dp-land/alarm_clock.xml
index 1e97c33..6587d83 100644
--- a/res/layout-sw600dp-land/alarm_clock.xml
+++ b/res/layout-sw600dp-land/alarm_clock.xml
@@ -24,60 +24,22 @@
         android:id="@+id/alarm_layout"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:orientation="horizontal"
-        android:baselineAligned="false" >
+        android:baselineAligned="false"
+        android:orientation="horizontal">
 
-        <ListView
-            android:id="@+id/alarms_list"
-            android:layout_width="0dip"
+        <android.support.v7.widget.RecyclerView
+            android:id="@+id/alarms_recycler_view"
+            android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_weight="1"
-            android:paddingBottom="@dimen/button_footer_height"
             android:clipToPadding="false"
             android:descendantFocusability="beforeDescendants"
-            android:divider="@null"
-            android:dividerHeight="0dip" />
+            android:fadingEdgeLength="0dp"
+            android:paddingBottom="@dimen/list_bottom_spacing"
+            android:scrollbarStyle="outsideOverlay"
+            android:scrollbars="vertical" />
 
     </LinearLayout>
 
-    <FrameLayout
-        android:id="@+id/alarms_footer_view"
-        android:layout_width="@dimen/footer_button_size"
-        android:layout_height="@dimen/footer_button_size"
-        android:layout_gravity="bottom|end" >
-        <ImageButton
-            android:id="@+id/menu_button"
-            android:contentDescription="@string/button_menu"
-            style="?attr/actionOverflowButtonStyle"
-            android:layout_gravity="end|center_vertical"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content" />
-    </FrameLayout>
-    <TextView
-            android:id="@+id/alarms_empty_view"
-            style="@style/no_alarms"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            android:contentDescription="@string/no_alarms"
-            android:drawableTop="@drawable/ic_noalarms"
-            android:text="@string/no_alarms"
-            android:textColor="#4cffffff"
-            android:paddingBottom="88dp" />
-    <FrameLayout android:id="@+id/undo_frame"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:visibility="gone" >
-        <com.android.deskclock.widget.ActionableToastBar
-            android:id="@+id/undo_bar"
-            android:layout_width="match_parent"
-            android:layout_height="64dip"
-            android:layout_gravity="bottom"
-            android:layout_marginBottom="96dp"
-            android:layout_marginLeft="@dimen/alarm_undo_bar_horizontal_margin"
-            android:layout_marginStart="@dimen/alarm_undo_bar_horizontal_margin"
-            android:layout_marginRight="@dimen/alarm_undo_bar_horizontal_margin"
-            android:layout_marginEnd="@dimen/alarm_undo_bar_horizontal_margin"
-            style="@style/ToastBarStyle" />
-    </FrameLayout>
+    <include layout="@layout/alarm_empty_view" />
+
 </FrameLayout>
diff --git a/res/layout-v21/stopwatch_notif_expanded.xml b/res/layout-v21/stopwatch_notif_expanded.xml
new file mode 100644
index 0000000..ae694b3
--- /dev/null
+++ b/res/layout-v21/stopwatch_notif_expanded.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2015 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"
+    android:divider="@drawable/horizontal_divider"
+    android:orientation="vertical"
+    android:showDividers="middle">
+
+    <FrameLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/swn_expanded_hitspace"
+        android:layout_width="match_parent"
+        android:layout_height="64dp"
+        android:background="@drawable/notification_background">
+
+        <include layout="@layout/stopwatch_notification_icon" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="fill_vertical"
+            android:layout_marginStart="@dimen/notification_icon_size"
+            android:gravity="center"
+            android:minHeight="@dimen/notification_icon_size"
+            android:orientation="vertical"
+            android:paddingBottom="2dp"
+            android:paddingEnd="8dp"
+            android:paddingTop="2dp">
+
+            <LinearLayout
+                android:id="@+id/line1"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <Chronometer
+                    android:id="@+id/swn_expanded_chronometer"
+                    android:layout_width="0dip"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:singleLine="true"
+                    android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Title" />
+            </LinearLayout>
+
+            <TextView
+                android:id="@+id/swn_expanded_laps"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:ellipsize="marquee"
+                android:fadingEdge="horizontal"
+                android:singleLine="true"
+                android:textAppearance="@style/TextAppearance.StatusBar.EventContent"
+                android:visibility="gone" />
+        </LinearLayout>
+    </FrameLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/notification_icon_size"
+        android:divider="@drawable/divider"
+        android:orientation="horizontal" >
+
+        <TextView
+            android:id="@+id/swn_left_button"
+            android:layout_width="0dp"
+            android:layout_height="48dp"
+            android:layout_weight="1"
+            android:background="@drawable/notification_background"
+            android:drawablePadding="8dp"
+            android:ellipsize="end"
+            android:gravity="start|center_vertical"
+            android:singleLine="true"
+            android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Action" />
+
+        <TextView
+            android:id="@+id/swn_right_button"
+            android:layout_width="0dp"
+            android:layout_height="48dp"
+            android:layout_weight="1"
+            android:background="@drawable/notification_background"
+            android:drawablePadding="8dp"
+            android:ellipsize="end"
+            android:gravity="start|center_vertical"
+            android:singleLine="true"
+            android:textAppearance="@style/TextAppearance.StatusBar.EventContent.Action" />
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/actionable_toast_row.xml b/res/layout/actionable_toast_row.xml
deleted file mode 100644
index dfffb3d..0000000
--- a/res/layout/actionable_toast_row.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?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
-  -->
-<merge xmlns:android="http://schemas.android.com/apk/res/android" >
-
-    <TextView
-        android:id="@+id/description_text"
-        android:layout_width="0dip"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:ellipsize="end"
-        android:gravity="center_vertical"
-        android:paddingLeft="16dip"
-        android:paddingStart="16dip"
-        android:singleLine="true"
-        android:text="@string/alarm_deleted"
-        android:textColor="@android:color/white"
-        android:textSize="16sp" />
-
-    <LinearLayout
-        android:id="@+id/action_button"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:background="?android:attr/selectableItemBackground"
-        android:clickable="true" >
-        <TextView
-            android:id="@+id/action_text"
-            style="@style/undo_toast"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_marginLeft="4dip"
-            android:layout_marginStart="4dip"
-            android:gravity="center_vertical"
-            android:paddingRight="16dip"
-            android:paddingEnd="16dip" />
-    </LinearLayout>
-
-</merge>
diff --git a/res/layout/alarm_clock.xml b/res/layout/alarm_clock.xml
index 3d7610c..af1bfe6 100644
--- a/res/layout/alarm_clock.xml
+++ b/res/layout/alarm_clock.xml
@@ -20,60 +20,17 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <ListView
-        android:id="@+id/alarms_list"
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/alarms_recycler_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:paddingBottom="@dimen/button_footer_height"
         android:clipToPadding="false"
         android:descendantFocusability="beforeDescendants"
-        android:divider="@null"
-        android:dividerHeight="0dip"
-        />
+        android:fadingEdgeLength="0dp"
+        android:paddingBottom="@dimen/list_bottom_spacing"
+        android:scrollbarStyle="outsideOverlay"
+        android:scrollbars="vertical" />
 
-    <TextView
-        android:id="@+id/alarms_empty_view"
-        style="@style/no_alarms"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:contentDescription="@string/no_alarms"
-        android:drawableTop="@drawable/ic_noalarms"
-        android:gravity="center"
-        android:text="@string/no_alarms"
-        android:textColor="#4cffffff"
-        android:paddingBottom="88dp" />
+    <include layout="@layout/alarm_empty_view" />
 
-    <FrameLayout android:id="@+id/undo_frame"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:visibility="gone" >
-        <com.android.deskclock.widget.ActionableToastBar
-            android:id="@+id/undo_bar"
-            android:layout_width="match_parent"
-            android:layout_height="64dip"
-            android:layout_gravity="bottom"
-            android:layout_marginBottom="96dp"
-            android:layout_marginLeft="@dimen/alarm_undo_bar_horizontal_margin"
-            android:layout_marginStart="@dimen/alarm_undo_bar_horizontal_margin"
-            android:layout_marginRight="@dimen/alarm_undo_bar_horizontal_margin"
-            android:layout_marginEnd="@dimen/alarm_undo_bar_horizontal_margin"
-            style="@style/ToastBarStyle" />
-    </FrameLayout>
-
-    <FrameLayout
-        android:id="@+id/alarms_footer_view"
-        android:layout_width="@dimen/footer_button_size"
-        android:layout_height="@dimen/footer_button_size"
-        android:layout_gravity="bottom|end"
-        android:layout_marginBottom="@dimen/footer_button_layout_margin" >
-        <ImageButton
-            android:id="@+id/menu_button"
-            style="?attr/actionOverflowButtonStyle"
-            android:layout_gravity="end|center_vertical"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:accessibilityTraversalAfter="@+id/fab"
-            android:contentDescription="@string/button_menu" />
-    </FrameLayout>
 </FrameLayout>
diff --git a/res/layout/alarm_empty_view.xml b/res/layout/alarm_empty_view.xml
new file mode 100644
index 0000000..fc03e83
--- /dev/null
+++ b/res/layout/alarm_empty_view.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/alarms_empty_view"
+    style="@style/no_alarms"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center"
+    android:contentDescription="@string/no_alarms"
+    android:drawableTop="@drawable/ic_noalarms"
+    android:paddingBottom="@dimen/fab_height"
+    android:text="@string/no_alarms"
+    android:gravity="center_horizontal"
+    android:textColor="#4cffffff"
+    android:visibility="gone" />
diff --git a/res/layout/alarm_row.xml b/res/layout/alarm_row.xml
index 5697e9e..1558ccd 100644
--- a/res/layout/alarm_row.xml
+++ b/res/layout/alarm_row.xml
@@ -1,4 +1,18 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 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"
diff --git a/res/layout/alarm_time.xml b/res/layout/alarm_time.xml
deleted file mode 100644
index fb2fe9a..0000000
--- a/res/layout/alarm_time.xml
+++ /dev/null
@@ -1,239 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
-    android:id="@+id/alarm_item"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:dc="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingStart="@dimen/alarm_side_padding"
-    android:paddingEnd="@dimen/alarm_side_padding"
-    android:background="?android:attr/selectableItemBackground"
-    android:gravity="center_horizontal|top"
-    android:orientation="vertical">
-    <!-- TODO~: flatten this layout using gridLayout which supports layout_weight as of 21 -->
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/alarm_clock_vertical_margin"
-        android:orientation="horizontal">
-
-        <com.android.deskclock.widget.TextTime
-            android:id="@+id/digital_clock"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center"
-            android:textColor="@color/clock_white"
-            android:textSize="@dimen/alarm_time_font_size"
-            android:fontFamily="sans-serif-thin"
-            dc:format12Hour="@string/alarm_time_12_hours_format"
-            dc:format24Hour="@string/clock_24_hours_format" />
-
-        <Space
-            android:layout_width="0dip"
-            android:layout_height="wrap_content"
-            android:layout_weight="1" />
-
-        <android.support.v7.widget.SwitchCompat
-            android:id="@+id/onoff"
-            android:theme="@style/ControlAccentThemeOverlay"
-            android:layout_width="wrap_content"
-            android:layout_height="@dimen/touch_target_min_size"
-            android:layout_gravity="center_vertical|end" />
-
-    </LinearLayout>
-
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-
-        <LinearLayout
-            android:id="@+id/expand_area"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_gravity="bottom"
-            android:layout_marginBottom="@dimen/collapse_expand_height"
-            android:orientation="vertical"
-            android:visibility="gone">
-
-            <CheckBox
-                android:id="@+id/repeat_onoff"
-                android:layout_width="wrap_content"
-                android:layout_height="48dip"
-                android:layout_gravity="center_vertical|start"
-                android:text="@string/alarm_repeat"
-                android:textSize="16sp"
-                android:paddingStart="12dip"
-                android:textColor="@color/clock_white" />
-
-            <LinearLayout
-                android:id="@+id/repeat_days"
-                android:layout_width="match_parent"
-                android:layout_height="48dip"
-                android:layout_gravity="top"
-                android:orientation="horizontal"
-                android:visibility="gone">
-                <!-- Day buttons are put here programatically -->
-            </LinearLayout>
-
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:orientation="horizontal" >
-
-                <TextView
-                    android:id="@+id/choose_ringtone"
-                    android:layout_width="0dip"
-                    android:layout_height="48dip"
-                    android:layout_weight="1"
-                    android:layout_alignParentStart="true"
-                    android:background="?android:attr/selectableItemBackground"
-                    android:clickable="true"
-                    android:paddingStart="4dip"
-                    android:drawablePadding="16dp"
-                    android:drawableStart="@drawable/ic_ringtone"
-                    android:ellipsize="marquee"
-                    android:gravity="center_vertical"
-                    android:marqueeRepeatLimit="marquee_forever"
-                    android:scrollHorizontally="true"
-                    android:singleLine="true"
-                    android:textAlignment="viewStart"
-                    android:textSize="16sp"
-                    android:textColor="@color/clock_white"
-                    />
-
-                <CheckBox
-                    android:id="@+id/vibrate_onoff"
-                    android:layout_width="wrap_content"
-                    android:layout_height="48dip"
-                    android:layout_alignParentEnd="true"
-                    android:layout_centerVertical="true"
-                    android:includeFontPadding="false"
-                    android:text="@string/alarm_vibrate"
-                    android:paddingStart="16dip"
-                    android:textSize="16sp"
-                    android:textColor="@color/white" />
-            </LinearLayout>
-
-            <TextView
-                android:id="@+id/edit_label"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:ellipsize="end"
-                android:hint="@string/label"
-                android:paddingBottom="12dp"
-                android:paddingEnd="12dp"
-                android:paddingLeft="18dp"
-                android:paddingRight="12dp"
-                android:paddingStart="18dp"
-                android:paddingTop="12dp"
-                android:singleLine="true"
-                android:textSize="16sp"
-                android:textColor="@color/white" />
-
-            <View
-                android:layout_width="match_parent"
-                android:layout_height="@dimen/hairline_height"
-                android:layout_marginLeft="12dip"
-                android:layout_marginRight="12dip"
-                android:background="@color/hairline" />
-
-        </LinearLayout>
-
-        <FrameLayout
-            android:id="@+id/collapse_expand"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_gravity="bottom">
-
-            <ImageButton
-                android:id="@+id/delete"
-                android:layout_width="@dimen/touch_target_min_size"
-                android:layout_height="@dimen/touch_target_min_size"
-                android:layout_gravity="center_vertical|start"
-                android:layout_marginTop="@dimen/alarm_clock_vertical_margin"
-                android:layout_marginBottom="@dimen/alarm_clock_vertical_margin"
-                android:layout_marginStart="4dip"
-                android:contentDescription="@string/delete_alarm"
-                android:scaleType="center"
-                android:src="@drawable/ic_delete_small" />
-
-            <View
-                android:id="@+id/hairline"
-                android:layout_width="match_parent"
-                android:layout_height="1dp"
-                android:layout_gravity="bottom"
-                android:layout_marginEnd="8dp"
-                android:layout_marginStart="8dp"
-                android:background="@color/hairline" />
-
-            <com.android.deskclock.widget.EllipsizeLayout
-                android:id="@+id/summary"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:layout_marginBottom="@dimen/alarm_clock_vertical_margin"
-                android:layout_marginEnd="@dimen/touch_target_min_size"
-                android:gravity="center_vertical">
-
-                <TextView
-                    android:id="@+id/label"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:ellipsize="none"
-                    android:singleLine="true"
-                    android:paddingEnd="4dip"
-                    android:textSize="16sp"
-                    android:textColor="@color/clock_gray" />
-
-                <TextView
-                    android:id="@+id/daysOfWeek"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:ellipsize="end"
-                    android:singleLine="true"
-                    android:textSize="16sp"
-                    android:textStyle="bold"
-                    android:textColor="@color/clock_white" />
-
-                <TextView
-                    android:id="@+id/tomorrowLabel"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:ellipsize="end"
-                    android:singleLine="true"
-                    android:textSize="16sp"
-                    android:textStyle="bold"
-                    android:textColor="@color/clock_white" />
-
-            </com.android.deskclock.widget.EllipsizeLayout>
-
-            <ImageButton
-                android:id="@+id/arrow"
-                android:layout_width="@dimen/touch_target_min_size"
-                android:layout_height="@dimen/touch_target_min_size"
-                android:layout_gravity="center_vertical|end"
-                android:layout_marginTop="@dimen/alarm_clock_vertical_margin"
-                android:layout_marginBottom="@dimen/alarm_clock_vertical_margin"
-                android:contentDescription="@string/expand_alarm"
-                android:scaleType="center"
-                android:src="@drawable/ic_expand_down" />
-        </FrameLayout>
-    </FrameLayout>
-
-</LinearLayout>
diff --git a/res/layout/alarm_time_collapsed.xml b/res/layout/alarm_time_collapsed.xml
new file mode 100644
index 0000000..516cff3
--- /dev/null
+++ b/res/layout/alarm_time_collapsed.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 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"
+    android:background="?android:attr/selectableItemBackground"
+    android:gravity="center_horizontal|top"
+    android:orientation="vertical"
+    android:paddingEnd="@dimen/alarm_side_padding"
+    android:paddingStart="@dimen/alarm_side_padding">
+
+    <include layout="@layout/alarm_time_summary" />
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom">
+
+        <View
+            android:id="@+id/hairline"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/hairline_height"
+            android:layout_gravity="bottom"
+            android:layout_marginEnd="@dimen/icon_margin"
+            android:layout_marginStart="@dimen/icon_margin"
+            android:background="@color/hairline" />
+
+        <com.android.deskclock.widget.EllipsizeLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_gravity="center_vertical"
+            android:layout_marginEnd="@dimen/touch_target_min_size"
+            android:gravity="center_vertical">
+
+            <TextView
+                android:id="@+id/label"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:ellipsize="none"
+                android:paddingStart="@dimen/icon_margin"
+                android:paddingEnd="@dimen/icon_margin"
+                android:singleLine="true"
+                android:textColor="@color/clock_gray"
+                android:textSize="@dimen/alarm_text_font_size" />
+
+            <TextView
+                android:id="@+id/days_of_week"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:ellipsize="end"
+                android:focusable="true"
+                android:singleLine="true"
+                android:textColor="@color/clock_white"
+                android:textSize="@dimen/alarm_text_font_size"
+                android:textStyle="bold" />
+
+            <TextView
+                android:id="@+id/upcoming_instance_label"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:ellipsize="end"
+                android:focusable="true"
+                android:singleLine="true"
+                android:textColor="@color/clock_white"
+                android:textSize="@dimen/alarm_text_font_size"
+                android:textStyle="bold" />
+
+        </com.android.deskclock.widget.EllipsizeLayout>
+
+        <ImageButton
+            android:id="@+id/arrow"
+            android:layout_width="@dimen/touch_target_min_size"
+            android:layout_height="@dimen/touch_target_min_size"
+            android:layout_gravity="center_vertical|end"
+            android:contentDescription="@string/expand_alarm"
+            android:scaleType="center"
+            android:src="@drawable/ic_expand_down" />
+
+    </FrameLayout>
+
+    <include
+        android:id="@+id/preemptive_dismiss_container"
+        layout="@layout/preemptive_dismiss" />
+
+</LinearLayout>
diff --git a/res/layout/alarm_time_expanded.xml b/res/layout/alarm_time_expanded.xml
new file mode 100644
index 0000000..38d24de
--- /dev/null
+++ b/res/layout/alarm_time_expanded.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 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"
+    android:gravity="center_horizontal|top"
+    android:orientation="vertical"
+    android:paddingEnd="@dimen/alarm_side_padding"
+    android:paddingStart="@dimen/alarm_side_padding">
+
+    <include layout="@layout/alarm_time_summary" />
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="bottom"
+            android:layout_marginBottom="@dimen/collapse_expand_height"
+            android:orientation="vertical">
+
+            <CheckBox
+                android:id="@+id/repeat_onoff"
+                android:layout_width="wrap_content"
+                android:layout_height="@dimen/touch_target_min_size"
+                android:layout_gravity="center_vertical|start"
+                android:paddingStart="@dimen/alarm_side_padding"
+                android:text="@string/alarm_repeat"
+                android:textColor="@color/clock_white"
+                android:textSize="@dimen/alarm_text_font_size" />
+
+            <!-- Day buttons are put here programmatically -->
+            <LinearLayout
+                android:id="@+id/repeat_days"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/touch_target_min_size"
+                android:layout_gravity="top"
+                android:orientation="horizontal"
+                android:visibility="gone" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:id="@+id/choose_ringtone"
+                    android:layout_width="0dip"
+                    android:layout_height="@dimen/touch_target_min_size"
+                    android:layout_weight="1"
+                    android:background="?android:attr/selectableItemBackground"
+                    android:clickable="true"
+                    android:drawablePadding="@dimen/alarm_horizontal_padding"
+                    android:drawableStart="@drawable/ic_ringtone"
+                    android:ellipsize="marquee"
+                    android:gravity="center_vertical"
+                    android:marqueeRepeatLimit="marquee_forever"
+                    android:paddingStart="@dimen/icon_margin"
+                    android:scrollHorizontally="true"
+                    android:singleLine="true"
+                    android:textAlignment="viewStart"
+                    android:textColor="@color/clock_white"
+                    android:textSize="@dimen/alarm_text_font_size" />
+
+                <CheckBox
+                    android:id="@+id/vibrate_onoff"
+                    android:layout_width="wrap_content"
+                    android:layout_height="@dimen/touch_target_min_size"
+                    android:layout_alignParentEnd="true"
+                    android:layout_centerVertical="true"
+                    android:includeFontPadding="false"
+                    android:paddingStart="@dimen/alarm_horizontal_padding"
+                    android:text="@string/alarm_vibrate"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/alarm_text_font_size" />
+
+            </LinearLayout>
+
+            <TextView
+                android:id="@+id/edit_label"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:ellipsize="end"
+                android:hint="@string/label"
+                android:paddingBottom="12dp"
+                android:paddingEnd="@dimen/alarm_side_padding"
+                android:paddingStart="44dp"
+                android:paddingTop="12dp"
+                android:singleLine="true"
+                android:textColor="@color/white"
+                android:textSize="@dimen/alarm_text_font_size" />
+
+            <View
+                android:layout_width="wrap_content"
+                android:layout_height="@dimen/hairline_height"
+                android:layout_marginEnd="@dimen/hairline_side_padding"
+                android:layout_marginStart="@dimen/hairline_side_padding"
+                android:background="@color/hairline" />
+
+            <include
+                android:id="@+id/preemptive_dismiss_container"
+                layout="@layout/preemptive_dismiss" />
+
+        </LinearLayout>
+
+        <FrameLayout
+            android:id="@+id/collapse_expand"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="bottom|start">
+
+            <Button
+                android:id="@+id/delete"
+                android:layout_width="@dimen/touch_target_min_size"
+                android:layout_height="@dimen/tall_row_height"
+                android:layout_gravity="center_vertical|start"
+                android:layout_marginTop="@dimen/alarm_clock_vertical_margin"
+                android:layout_marginBottom="@dimen/alarm_clock_vertical_margin"
+                android:background="?attr/selectableItemBackground"
+                android:contentDescription="@string/delete_alarm"
+                android:drawableStart="@drawable/ic_delete_small"
+                android:drawablePadding="@dimen/alarm_horizontal_padding"
+                android:gravity="start|center_vertical"
+                android:scaleType="fitStart" />
+
+            <ImageButton
+                android:id="@+id/arrow"
+                android:layout_width="@dimen/touch_target_min_size"
+                android:layout_height="@dimen/touch_target_min_size"
+                android:layout_gravity="center_vertical|end"
+                android:contentDescription="@string/collapse_alarm"
+                android:rotation="@integer/chevron_rotate_180"
+                android:scaleType="center"
+                android:src="@drawable/ic_expand_down" />
+
+        </FrameLayout>
+
+    </FrameLayout>
+
+</LinearLayout>
diff --git a/res/layout/alarm_time_summary.xml b/res/layout/alarm_time_summary.xml
new file mode 100644
index 0000000..ce28d83
--- /dev/null
+++ b/res/layout/alarm_time_summary.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 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"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginTop="@dimen/alarm_clock_vertical_margin"
+    android:orientation="horizontal">
+
+    <com.android.deskclock.widget.TextTime
+        android:id="@+id/digital_clock"
+        app:format12Hour="@string/alarm_time_12_hours_format"
+        app:format24Hour="@string/clock_24_hours_format"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:fontFamily="sans-serif-thin"
+        android:gravity="center"
+        android:textColor="@color/clock_white"
+        android:textSize="@dimen/alarm_time_font_size" />
+
+    <Space
+        android:layout_width="0dip"
+        android:layout_height="wrap_content"
+        android:layout_weight="1" />
+
+    <android.support.v7.widget.SwitchCompat
+        android:id="@+id/onoff"
+        android:layout_width="wrap_content"
+        android:layout_height="@dimen/touch_target_min_size"
+        android:layout_gravity="center_vertical|end"
+        android:theme="@style/ControlAccentThemeOverlay" />
+
+</LinearLayout>
diff --git a/res/layout/cities_activity.xml b/res/layout/cities_activity.xml
index cbda7c0..55a1591 100644
--- a/res/layout/cities_activity.xml
+++ b/res/layout/cities_activity.xml
@@ -17,8 +17,8 @@
 <ListView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/cities_list"
-    android:theme="@style/ControlAccentThemeOverlay"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="match_parent"
     android:divider="@null"
-    android:clipToPadding="false" />
+    android:fitsSystemWindows="true"
+    android:theme="@style/ControlAccentThemeOverlay" />
diff --git a/res/layout/city_list_item.xml b/res/layout/city_list_item.xml
index 2c143b4..a5a6ea8 100644
--- a/res/layout/city_list_item.xml
+++ b/res/layout/city_list_item.xml
@@ -24,11 +24,11 @@
     android:orientation="horizontal">
     <TextView
         android:id="@+id/index"
-        android:layout_width="56dip"
+        android:layout_width="74dip"
         android:layout_height="match_parent"
         android:gravity="center"
         android:textStyle="bold"
-        android:textSize="14sp"
+        android:textSize="@dimen/label_text_size"
         android:textColor="@color/clock_white" />
     <CheckBox
         android:id="@+id/city_onoff"
diff --git a/res/layout/clock_fragment.xml b/res/layout/clock_fragment.xml
index b1936c9..a9e6715 100644
--- a/res/layout/clock_fragment.xml
+++ b/res/layout/clock_fragment.xml
@@ -14,28 +14,11 @@
      limitations under the License.
 -->
 
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<ListView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/cities"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
-    <ListView
-        android:id="@+id/cities"
-        android:clickable="false"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:paddingStart="@dimen/clock_side_padding"
-        android:paddingEnd="@dimen/clock_side_padding_reduced" />
-    <FrameLayout
-        android:layout_width="@dimen/footer_button_size"
-        android:layout_height="@dimen/footer_button_size"
-        android:layout_gravity="bottom|end"
-        android:layout_marginBottom="@dimen/footer_button_layout_margin" >
-        <ImageButton
-            android:id="@+id/menu_button"
-            style="?attr/actionOverflowButtonStyle"
-            android:layout_gravity="end|center_vertical"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:accessibilityTraversalAfter="@+id/fab"
-            android:contentDescription="@string/button_menu" />
-    </FrameLayout>
-</FrameLayout>
+    android:layout_height="match_parent"
+    android:clickable="false"
+    android:paddingEnd="@dimen/clock_side_padding_reduced"
+    android:paddingStart="@dimen/clock_side_padding" />
diff --git a/res/layout/crescendo_length_picker.xml b/res/layout/crescendo_length_picker.xml
new file mode 100644
index 0000000..cadc46e
--- /dev/null
+++ b/res/layout/crescendo_length_picker.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+/**
+ * Copyright (c) 2015, 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:layout_width="wrap_content"
+    android:layout_height="match_parent"
+    android:gravity="center_horizontal">
+
+    <com.android.deskclock.NumberPickerCompat
+        android:id="@+id/seconds_picker"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:focusable="true"
+        android:focusableInTouchMode="true" />
+
+    <TextView
+        android:id="@+id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:layout_marginStart="16dp"
+        android:gravity="center_vertical"
+        android:textAppearance="?android:attr/textAppearanceLarge" />
+
+</LinearLayout>
diff --git a/res/layout/desk_clock.xml b/res/layout/desk_clock.xml
index b66d378..d25a578 100644
--- a/res/layout/desk_clock.xml
+++ b/res/layout/desk_clock.xml
@@ -14,22 +14,52 @@
      limitations under the License.
 -->
 
-<FrameLayout
+<android.support.design.widget.CoordinatorLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:fitsSystemWindows="true"
     android:orientation="vertical">
 
-    <android.support.v4.view.ViewPager
+    <android.support.design.widget.AppBarLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@null"
+        app:elevation="0dp">
+
+        <android.support.v7.widget.Toolbar
+            android:id="@+id/toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="?attr/actionBarSize"
+            app:contentInsetLeft="0dp"
+            app:contentInsetStart="0dp">
+
+            <android.support.design.widget.TabLayout
+                android:id="@+id/sliding_tabs"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                app:tabGravity="fill"
+                app:tabIndicatorColor="@android:color/transparent"
+                app:tabMode="fixed" />
+
+        </android.support.v7.widget.Toolbar>
+
+    </android.support.design.widget.AppBarLayout>
+
+    <com.android.deskclock.widget.RtlViewPager
         android:id="@+id/desk_clock_pager"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
+        android:layout_height="match_parent"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
 
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_gravity="bottom"
-        android:orientation="horizontal">
+        android:baselineAligned="false"
+        android:orientation="horizontal"
+        app:layout_behavior="com.android.deskclock.widget.toast.LinearLayoutWithSnackbarBehavior">
 
         <FrameLayout
             android:layout_width="0dp"
@@ -39,11 +69,11 @@
 
             <ImageButton
                 android:id="@+id/left_button"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:layout_gravity="center_horizontal"
-                android:scaleType="center"
-                android:contentDescription="@null" />
+                android:layout_width="@dimen/design_fab_size_normal"
+                android:layout_height="@dimen/design_fab_size_normal"
+                android:layout_gravity="center"
+                android:contentDescription="@null"
+                android:scaleType="center" />
 
         </FrameLayout>
 
@@ -52,16 +82,14 @@
             android:layout_height="wrap_content"
             android:layout_weight="1">
 
-            <ImageButton
+            <android.support.design.widget.FloatingActionButton
                 android:id="@+id/fab"
-                style="@style/FabStyle"
-                android:layout_width="@dimen/footer_button_size"
-                android:layout_height="@dimen/footer_button_size"
-                android:layout_margin="@dimen/footer_button_layout_margin"
-                android:layout_gravity="center_horizontal"
-                android:background="@drawable/floating_action_button"
-                android:scaleType="center"
-                android:contentDescription="@null" />
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:layout_margin="@dimen/fab_margin"
+                app:borderWidth="0dp"
+                app:elevation="@dimen/fab_elevation" />
 
         </FrameLayout>
 
@@ -73,14 +101,12 @@
 
             <ImageButton
                 android:id="@+id/right_button"
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:layout_gravity="center_horizontal"
-                android:scaleType="center"
-                android:contentDescription="@null" />
+                android:layout_width="@dimen/design_fab_size_normal"
+                android:layout_height="@dimen/design_fab_size_normal"
+                android:layout_gravity="center"
+                android:contentDescription="@null"
+                android:scaleType="center" />
 
         </FrameLayout>
-
     </LinearLayout>
-
-</FrameLayout>
+</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/res/layout/desk_clock_saver.xml b/res/layout/desk_clock_saver.xml
index 8d173d7..7d3f2f7 100644
--- a/res/layout/desk_clock_saver.xml
+++ b/res/layout/desk_clock_saver.xml
@@ -15,81 +15,81 @@
 -->
 
 <!-- Special "screen saver mode" with just the time/date on black. -->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:dc="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical"
-    android:background="#FF000000">
+    android:background="@color/black"
+    android:orientation="vertical">
 
     <!--  Extra layout to let the clock float in the window -->
     <LinearLayout
         android:id="@+id/main_clock"
-        android:orientation="vertical"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="@dimen/screensaver_margin"
-        android:layout_marginStart="@dimen/screensaver_margin"
-        android:layout_marginRight="@dimen/screensaver_margin"
+        android:layout_marginBottom="@dimen/screensaver_margin"
         android:layout_marginEnd="@dimen/screensaver_margin"
+        android:layout_marginStart="@dimen/screensaver_margin"
         android:layout_marginTop="@dimen/time_margin_top"
-        android:layout_marginBottom="@dimen/screensaver_margin">
+        android:orientation="vertical">
 
         <TextClock
             android:id="@+id/digital_clock"
-            android:format12Hour="@string/main_clock_12_hours_format"
-            android:format24Hour="@string/clock_24_hours_format"
+            style="@style/big_thin"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:gravity="center"
-            android:ellipsize="none"
             android:layout_gravity="center"
             android:layout_marginBottom="@dimen/bottom_text_spacing_digital"
-            style="@style/big_thin"
-            android:textColor="@color/clock_white" />
+            android:ellipsize="none"
+            android:format12Hour="@string/main_clock_12_hours_format"
+            android:format24Hour="@string/clock_24_hours_format"
+            android:gravity="center"
+            android:singleLine="true"
+            android:textColor="@color/clock_white"
+            android:textSize="@dimen/main_clock_font_size" />
 
         <com.android.deskclock.AnalogClock
             android:id="@+id/analog_clock"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
-            dc:jewelRadius="5dp"
-            dc:jewelOffset="23dp"
-            dc:jewelColor="@color/clock_white"
+            android:layout_marginBottom="@dimen/bottom_text_spacing_analog"
             android:dial="@drawable/clock_analog_dial_mipmap"
             android:hand_hour="@drawable/clock_analog_hour_mipmap"
             android:hand_minute="@drawable/clock_analog_minute_mipmap"
-            android:layout_marginBottom="@dimen/bottom_text_spacing_analog" />
+            dc:jewelColor="@color/clock_white"
+            dc:jewelOffset="23dp"
+            dc:jewelRadius="5dp" />
+
         <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center"
-            android:gravity="center" >
-            <TextView android:id="@+id/date"
+            android:gravity="center">
+
+            <TextView
+                android:id="@+id/date"
+                style="@style/label"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:textColor="@color/clock_white"
-                style="@style/label"
-                android:textSize="@dimen/bottom_text_size"
                 android:gravity="center"
-                android:visibility="gone"
-                />
-            <TextView android:id="@+id/nextAlarm"
+                android:textColor="@color/clock_white"
+                android:textSize="@dimen/bottom_text_size"
+                android:visibility="gone" />
+
+            <TextView
+                android:id="@+id/nextAlarm"
+                style="@style/label"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:drawablePadding="2dip"
-                android:drawableLeft="@drawable/ic_alarm_small"
-                android:drawableStart="@drawable/ic_alarm_small"
-                android:textColor="@color/clock_gray"
-                style="@style/label"
-                android:textSize="@dimen/bottom_text_size"
                 android:layout_marginLeft="8dip"
                 android:layout_marginStart="8dip"
+                android:drawablePadding="2dip"
+                android:drawableStart="@drawable/ic_alarm_small"
                 android:gravity="center"
-                android:visibility="gone"
-                />
+                android:textColor="@color/clock_gray"
+                android:textSize="@dimen/bottom_text_size"
+                android:visibility="gone" />
         </LinearLayout>
     </LinearLayout>
 </LinearLayout>
diff --git a/res/layout/digital_widget_time.xml b/res/layout/digital_widget_time.xml
index 61bc92a..e0250bf 100644
--- a/res/layout/digital_widget_time.xml
+++ b/res/layout/digital_widget_time.xml
@@ -40,27 +40,30 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:id="@+id/date_and_alarm"
         android:gravity="center">
         <TextClock android:id="@+id/date"
+            style="@style/widget_label"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textColor="@color/clock_white"
+            android:layout_height="match_parent"
+            android:layout_gravity="center"
             android:format12Hour=""
             android:format24Hour=""
-            style="@style/widget_label"
             android:gravity="center"
+            android:textColor="@color/clock_white"
             />
-        <TextView android:id="@+id/nextAlarm"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:drawablePadding="2dip"
-            android:drawableLeft="@drawable/ic_alarm_small"
-            android:drawableStart="@drawable/ic_alarm_small"
-            android:textColor="@color/clock_gray"
+        <TextView
+            android:id="@+id/nextAlarm"
             style="@style/widget_label"
-            android:layout_marginLeft="8dip"
-            android:layout_marginStart="8dip"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_gravity="center"
+            android:layout_marginStart="6dp"
+            android:drawablePadding="6dp"
+            android:ellipsize="end"
             android:gravity="center"
+            android:singleLine="true"
+            android:textColor="@color/clock_gray"
             android:visibility="gone"
             />
     </LinearLayout>
diff --git a/res/layout/expired_timers_activity.xml b/res/layout/expired_timers_activity.xml
new file mode 100644
index 0000000..0bd487e
--- /dev/null
+++ b/res/layout/expired_timers_activity.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 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"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/expired_timers_activity"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:fitsSystemWindows="true">
+
+    <ScrollView
+        android:id="@+id/expired_timers_scroll"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:scrollbars="none">
+
+        <LinearLayout
+            android:id="@+id/expired_timers_list"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:clipToPadding="false"
+            android:orientation="vertical"
+            android:paddingTop="?attr/actionBarSize" />
+    </ScrollView>
+
+    <android.support.design.widget.FloatingActionButton
+        android:id="@+id/fab"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal|bottom"
+        android:layout_margin="@dimen/fab_margin"
+        android:contentDescription="@string/timer_stop"
+        android:src="@drawable/ic_stop_white_24dp"
+        app:borderWidth="0dp"
+        app:elevation="@dimen/fab_elevation" />
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/lap_view.xml b/res/layout/lap_view.xml
index 5130c11..a79a8f4 100644
--- a/res/layout/lap_view.xml
+++ b/res/layout/lap_view.xml
@@ -16,6 +16,7 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/lap_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layoutDirection="ltr"
diff --git a/res/layout/main_clock_frame.xml b/res/layout/main_clock_frame.xml
index d4dfe51..240f21a 100644
--- a/res/layout/main_clock_frame.xml
+++ b/res/layout/main_clock_frame.xml
@@ -16,55 +16,63 @@
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/main_clock_frame"
-    android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:gravity="center_horizontal"
-    android:paddingEnd="@dimen/clock_fragment_end_padding" >
+    android:orientation="vertical"
+    android:paddingEnd="@dimen/clock_fragment_end_padding">
+
     <FrameLayout
         android:layout_width="wrap_content"
         android:layout_height="0dp"
         android:layout_weight="1">
+
         <com.android.deskclock.AnalogClock
             android:id="@+id/analog_clock"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/circle_margin_top"
-            android:layout_marginLeft="@dimen/analog_clock_margin"
-            android:layout_marginStart="@dimen/analog_clock_margin"
-            android:layout_marginRight="@dimen/analog_clock_margin"
+            android:layout_marginBottom="@dimen/bottom_text_spacing_analog"
             android:layout_marginEnd="@dimen/analog_clock_margin"
+            android:layout_marginLeft="@dimen/analog_clock_margin"
+            android:layout_marginRight="@dimen/analog_clock_margin"
+            android:layout_marginStart="@dimen/analog_clock_margin"
+            android:layout_marginTop="@dimen/circle_margin_top"
             android:dial="@drawable/clock_analog_dial_mipmap"
             android:hand_hour="@drawable/clock_analog_hour_mipmap"
-            android:hand_minute="@drawable/clock_analog_minute_mipmap"
-            android:layout_marginBottom="@dimen/bottom_text_spacing_analog" />
+            android:hand_minute="@drawable/clock_analog_minute_mipmap" />
+
         <TextClock
             android:id="@+id/digital_clock"
-            android:format12Hour="@string/main_clock_12_hours_format"
-            android:format24Hour="@string/clock_24_hours_format"
+            style="@style/big_thin"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:singleLine="true"
             android:ellipsize="none"
-            style="@style/big_thin"
-            android:textColor="@color/clock_white" />
+            android:format12Hour="@string/main_clock_12_hours_format"
+            android:format24Hour="@string/clock_24_hours_format"
+            android:singleLine="true"
+            android:textColor="@color/clock_white"
+            android:textSize="@dimen/main_clock_font_size" />
 
     </FrameLayout>
+
     <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:gravity="center_horizontal">
-        <TextView android:id="@+id/date"
+
+        <TextView
+            android:id="@+id/date"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textAppearance="@style/PrimaryLabelTextAppearance" />
-        <TextView android:id="@+id/nextAlarm"
+
+        <TextView
+            android:id="@+id/nextAlarm"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginLeft="8dip"
             android:layout_marginStart="8dip"
             android:drawablePadding="2dip"
-            android:drawableLeft="@drawable/ic_alarm_small"
             android:drawableStart="@drawable/ic_alarm_small"
             android:textAppearance="@style/SecondaryLabelTextAppearance" />
     </LinearLayout>
diff --git a/res/layout/preemptive_dismiss.xml b/res/layout/preemptive_dismiss.xml
new file mode 100644
index 0000000..2a32d7a
--- /dev/null
+++ b/res/layout/preemptive_dismiss.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 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
+    android:id="@+id/preemptive_dismiss"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:visibility="gone" >
+
+    <Button
+        android:id="@+id/preemptive_dismiss_button"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/tall_row_height"
+        android:background="?attr/selectableItemBackground"
+        android:drawableStart="@drawable/ic_alarm_off_white_24dp"
+        android:drawablePadding="@dimen/alarm_horizontal_padding"
+        android:gravity="start|center_vertical"
+        android:paddingStart="@dimen/icon_margin"
+        android:textAllCaps="false"
+        android:textColor="@color/clock_white"
+        android:textSize="@dimen/alarm_text_font_size" />
+
+    <View
+        android:id="@+id/preemptive_dismiss_hairline"
+        android:layout_width="wrap_content"
+        android:layout_height="@dimen/hairline_height"
+        android:layout_marginEnd="@dimen/hairline_side_padding"
+        android:layout_marginStart="@dimen/hairline_side_padding"
+        android:background="@color/hairline" />
+
+</LinearLayout>
diff --git a/res/layout/screensaver_settings.xml b/res/layout/screensaver_settings.xml
index 0e8f2bb..f4b2813 100644
--- a/res/layout/screensaver_settings.xml
+++ b/res/layout/screensaver_settings.xml
@@ -14,9 +14,15 @@
      limitations under the License.
 -->
 
-<fragment
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/main"
-    android:name="com.android.deskclock.ScreensaverSettingsActivity$PrefsFragment"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent" />
\ No newline at end of file
+    android:layout_height="match_parent"
+    android:fitsSystemWindows="true">
+
+    <fragment
+        android:id="@+id/main"
+        android:name="com.android.deskclock.settings.ScreensaverSettingsActivity$PrefsFragment"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</FrameLayout>
diff --git a/res/layout/settings.xml b/res/layout/settings.xml
index 207dff5..f587342 100644
--- a/res/layout/settings.xml
+++ b/res/layout/settings.xml
@@ -14,9 +14,15 @@
      limitations under the License.
 -->
 
-<fragment
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/main"
-    android:name="com.android.deskclock.SettingsActivity$PrefsFragment"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent" />
+    android:layout_height="match_parent"
+    android:fitsSystemWindows="true">
+
+    <fragment
+        android:id="@+id/main"
+        android:name="com.android.deskclock.settings.SettingsActivity$PrefsFragment"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</FrameLayout>
diff --git a/res/layout/snooze_length_picker.xml b/res/layout/snooze_length_picker.xml
index e94e27c..a843681 100644
--- a/res/layout/snooze_length_picker.xml
+++ b/res/layout/snooze_length_picker.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
 /**
  * Copyright (c) 2012, Google Inc.
  *
@@ -18,9 +17,9 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:gravity="center_horizontal"
     android:layout_width="wrap_content"
-    android:layout_height="match_parent" >
+    android:layout_height="match_parent"
+    android:gravity="center_horizontal">
 
     <com.android.deskclock.NumberPickerCompat
         android:id="@+id/minutes_picker"
@@ -29,12 +28,12 @@
         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_marginStart="16dip"
+    <TextView
+        android:id="@+id/title"
         android:layout_width="wrap_content"
-        android:layout_height="match_parent" />
+        android:layout_height="match_parent"
+        android:layout_marginStart="16dp"
+        android:gravity="center_vertical"
+        android:textAppearance="?android:attr/textAppearanceLarge" />
 
 </LinearLayout>
diff --git a/res/layout/stopwatch_fragment.xml b/res/layout/stopwatch_fragment.xml
index 1dca235..5ce57af 100644
--- a/res/layout/stopwatch_fragment.xml
+++ b/res/layout/stopwatch_fragment.xml
@@ -13,58 +13,38 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:baselineAligned="false"
+    android:gravity="center"
+    android:orientation="vertical"
+    android:paddingBottom="@dimen/fab_height">
 
-    <Space
-        android:id="@+id/start_space"
-        android:visibility="gone"
-        android:layout_weight="1"
-        android:layout_width="match_parent"
-        android:layout_height="0dip"/>
-
-    <com.android.deskclock.CircleButtonsLayout
-        android:id="@+id/stopwatch_circle"
+    <FrameLayout
         android:layout_width="@dimen/circle_size"
         android:layout_height="@dimen/circle_size"
         android:layout_gravity="center"
-        android:layout_marginLeft="@dimen/circle_margin"
-        android:layout_marginStart="@dimen/circle_margin"
-        android:layout_marginRight="@dimen/circle_margin"
-        android:layout_marginEnd="@dimen/circle_margin">
+        android:padding="16dp">
 
         <com.android.deskclock.timer.CountingTimerView
             android:id="@+id/stopwatch_time_text"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
-        <com.android.deskclock.CircleTimerView
+
+        <com.android.deskclock.stopwatch.StopwatchCircleView
             android:id="@+id/stopwatch_time"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:background="@null" />
+    </FrameLayout>
 
-    </com.android.deskclock.CircleButtonsLayout>
-
-    <Space
-            android:id="@+id/end_space"
-            android:visibility="gone"
-            android:layout_weight="1"
-            android:layout_width="match_parent"
-            android:layout_height="0dip"/>
-
-    <ListView
+    <android.support.v7.widget.RecyclerView
         android:id="@+id/laps_list"
-        android:layout_weight="2"
         android:layout_width="match_parent"
-        android:layout_height="0dip" />
+        android:layout_height="0dp"
+        android:layout_gravity="center"
+        android:layout_weight="1" />
 
-    <Space
-        android:id="@+id/bottom_space"
-        android:visibility="gone"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/footer_button_size"
-        android:layout_margin="@dimen/footer_button_layout_margin" />
-
-</LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/stopwatch_notif_collapsed.xml b/res/layout/stopwatch_notif_collapsed.xml
index 2f5c6cd..a8ec193 100644
--- a/res/layout/stopwatch_notif_collapsed.xml
+++ b/res/layout/stopwatch_notif_collapsed.xml
@@ -39,7 +39,7 @@
             android:id="@+id/line1"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_marginStart="8dp"
+            android:layout_marginStart="@dimen/notification_content_margin_start"
             android:orientation="horizontal">
 
             <Chronometer
@@ -55,7 +55,7 @@
             android:id="@+id/swn_collapsed_laps"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_marginStart="8dp"
+            android:layout_marginStart="@dimen/notification_content_margin_start"
             android:ellipsize="marquee"
             android:fadingEdge="horizontal"
             android:visibility="gone"
@@ -63,4 +63,4 @@
             android:textAppearance="@style/TextAppearance.StatusBar.EventContent" />
     </LinearLayout>
 
-</FrameLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/stopwatch_notif_expanded.xml b/res/layout/stopwatch_notif_expanded.xml
index 6e56077..5bb59a5 100644
--- a/res/layout/stopwatch_notif_expanded.xml
+++ b/res/layout/stopwatch_notif_expanded.xml
@@ -108,4 +108,4 @@
             android:textAppearance="@style/TextAppearance.StatusBar.EventContent" />
     </LinearLayout>
 
-</LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/time_setup_view.xml b/res/layout/time_setup_view.xml
index a98d9aa..7d7bb2c 100644
--- a/res/layout/time_setup_view.xml
+++ b/res/layout/time_setup_view.xml
@@ -48,7 +48,7 @@
         android:layout_width="match_parent"
         android:layout_height="1dip"
         android:layout_marginBottom="8dip"
-        android:background="@color/dialog_gray" />```
+        android:background="@color/dialog_gray" />
 
     <include
         android:id="@+id/first"
@@ -66,6 +66,6 @@
         android:id="@+id/fourth"
         layout="@layout/three_keys_view" />
 
-    <include layout="@layout/timer_cancel_button" />
+    <include layout="@layout/timer_setup_buttons" />
 
 </LinearLayout>
diff --git a/res/layout/timer_alert_full_screen.xml b/res/layout/timer_alert_full_screen.xml
deleted file mode 100644
index 93edac2..0000000
--- a/res/layout/timer_alert_full_screen.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?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:id="@+id/fragment_container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true" />
diff --git a/res/layout/timer_cancel_button.xml b/res/layout/timer_cancel_button.xml
deleted file mode 100644
index bccd4a9..0000000
--- a/res/layout/timer_cancel_button.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/footer_button_size"
-    android:layout_gravity="bottom"
-    android:orientation="horizontal">
-
-    <ImageButton
-        android:id="@+id/timer_cancel"
-        android:layout_width="0dip"
-        android:layout_weight="1"
-        android:layout_height="match_parent"
-        android:paddingEnd="20dip"
-        android:contentDescription="@string/timer_cancel"
-        android:scaleType="center"
-        android:src="@drawable/ic_cancel"
-        android:textSize="@dimen/button_font_size" />
-
-    <Space
-        android:layout_width="0dip"
-        android:layout_weight="2"
-        android:layout_height="match_parent">
-    </Space>
-
-</LinearLayout>
diff --git a/res/layout/timer_fragment.xml b/res/layout/timer_fragment.xml
index 107b6cf..b8c353c 100644
--- a/res/layout/timer_fragment.xml
+++ b/res/layout/timer_fragment.xml
@@ -20,8 +20,63 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <include layout="@layout/timer_timer_view"/>
+    <FrameLayout
+        android:id="@+id/timer_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
 
-    <include layout="@layout/timer_setup_view"/>
+        <LinearLayout
+            android:id="@+id/page_indicators"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_gravity="end|center_vertical"
+            android:layout_marginEnd="24dp"
+            android:gravity="center"
+            android:orientation="vertical">
 
-</FrameLayout>
+            <ImageView
+                android:id="@+id/page_indicator0"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:contentDescription="@null"/>
+
+            <ImageView
+                android:id="@+id/page_indicator1"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:contentDescription="@null"/>
+
+            <ImageView
+                android:id="@+id/page_indicator2"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:contentDescription="@null"/>
+
+            <ImageView
+                android:id="@+id/page_indicator3"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:contentDescription="@null"/>
+
+            <Space
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/footer_button_size"
+                android:layout_marginBottom="16dp"
+                android:layout_marginTop="16dp"/>
+
+        </LinearLayout>
+
+        <com.android.deskclock.VerticalViewPager
+            android:id="@+id/vertical_view_pager"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+
+    </FrameLayout>
+
+    <com.android.deskclock.timer.TimerSetupView
+        android:id="@+id/timer_setup"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_margin="16dp"/>
+
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/timer_full_screen_fragment.xml b/res/layout/timer_full_screen_fragment.xml
deleted file mode 100644
index 1ab5f13..0000000
--- a/res/layout/timer_full_screen_fragment.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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:orientation="vertical">
-
-    <FrameLayout
-        android:id="@+id/timers_list_page"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical">
-
-        <com.android.deskclock.widget.sgv.StaggeredGridView
-            android:id="@+id/timers_list"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_gravity="center"
-            android:divider="@null"
-            android:dividerHeight="@dimen/timer_divider_height" />
-
-        <ImageButton
-            android:id="@+id/fab"
-            android:layout_width="@dimen/footer_button_size"
-            android:layout_height="@dimen/footer_button_size"
-            android:layout_gravity="center_horizontal|bottom"
-            android:layout_margin="@dimen/footer_button_layout_margin"
-            android:background="@drawable/floating_action_button"
-            android:src="@drawable/ic_fab_stop"
-            android:contentDescription="@string/timer_stop" />
-    </FrameLayout>
-
-    <com.android.deskclock.TimerSetupView
-        android:id="@+id/timer_setup"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_marginEnd="16dip"
-        android:layout_marginStart="16dip"/>
-
-</FrameLayout>
diff --git a/res/layout/timer_h_mm_ss_view.xml b/res/layout/timer_h_mm_ss_view.xml
index 09b63ff..8261c56 100644
--- a/res/layout/timer_h_mm_ss_view.xml
+++ b/res/layout/timer_h_mm_ss_view.xml
@@ -19,76 +19,85 @@
        android:layout_height="match_parent">
 
     <TextView
-            android:id="@+id/hours_ones"
-            android:singleLine="true"
-            android:ellipsize="none"
-            style="@style/timer_setup_digit"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:textColor="@color/clock_white"/>
+        android:id="@+id/hours_tens"
+        style="@style/timer_setup_digit"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:ellipsize="none"
+        android:singleLine="true"
+        android:textColor="@color/clock_white"/>
 
     <TextView
-            android:id="@+id/hours_label"
-            android:singleLine="true"
-            android:ellipsize="none"
-            style="@style/label"
-            android:layout_gravity="bottom"
-            android:contentDescription="@string/hours_label_description"
-            android:text="@string/hours_label"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:textColor="@color/clock_white"/>
+        android:id="@+id/hours_ones"
+        style="@style/timer_setup_digit"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:ellipsize="none"
+        android:singleLine="true"
+        android:textColor="@color/clock_white"/>
 
     <TextView
-            android:id="@+id/minutes_tens"
-            android:singleLine="true"
-            android:ellipsize="none"
-            style="@style/timer_setup_digit"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:textColor="@color/clock_white"/>
+        android:id="@+id/hours_label"
+        style="@style/label"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom"
+        android:contentDescription="@string/hours_label_description"
+        android:ellipsize="none"
+        android:singleLine="true"
+        android:text="@string/hours_label"
+        android:textColor="@color/clock_white"/>
 
     <TextView
-            android:id="@+id/minutes_ones"
-            android:singleLine="true"
-            android:ellipsize="none"
-            style="@style/timer_setup_digit"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:textColor="@color/clock_white"/>
+        android:id="@+id/minutes_tens"
+        style="@style/timer_setup_digit"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:ellipsize="none"
+        android:singleLine="true"
+        android:textColor="@color/clock_white"/>
 
     <TextView
-            android:id="@+id/minutes_label"
-            android:singleLine="true"
-            android:ellipsize="none"
-            style="@style/label"
-            android:layout_gravity="bottom"
-            android:contentDescription="@string/minutes_label_description"
-            android:text="@string/minutes_label"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:textColor="@color/clock_white"/>
+        android:id="@+id/minutes_ones"
+        style="@style/timer_setup_digit"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:ellipsize="none"
+        android:singleLine="true"
+        android:textColor="@color/clock_white"/>
 
     <TextView
-            android:id="@+id/seconds"
-            android:singleLine="true"
-            android:ellipsize="none"
-            style="@style/timer_setup_digit"
-            android:layout_gravity="bottom"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:textColor="@color/clock_white"/>
+        android:id="@+id/minutes_label"
+        style="@style/label"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom"
+        android:contentDescription="@string/minutes_label_description"
+        android:ellipsize="none"
+        android:singleLine="true"
+        android:text="@string/minutes_label"
+        android:textColor="@color/clock_white"/>
 
     <TextView
-            android:id="@+id/seconds_label"
-            android:singleLine="true"
-            android:ellipsize="none"
-            style="@style/label"
-            android:layout_gravity="bottom"
-            android:contentDescription="@string/seconds_label_description"
-            android:text="@string/seconds_label"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:textColor="@color/clock_white"/>
+        android:id="@+id/seconds"
+        style="@style/timer_setup_digit"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom"
+        android:ellipsize="none"
+        android:singleLine="true"
+        android:textColor="@color/clock_white"/>
+
+    <TextView
+        android:id="@+id/seconds_label"
+        style="@style/label"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom"
+        android:contentDescription="@string/seconds_label_description"
+        android:ellipsize="none"
+        android:singleLine="true"
+        android:text="@string/seconds_label"
+        android:textColor="@color/clock_white"/>
 
 </merge>
diff --git a/res/layout/timer_list_item.xml b/res/layout/timer_item.xml
similarity index 77%
rename from res/layout/timer_list_item.xml
rename to res/layout/timer_item.xml
index 4f1d115..1d97ecb 100644
--- a/res/layout/timer_list_item.xml
+++ b/res/layout/timer_item.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
+<!-- Copyright (C) 2015 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.
@@ -14,8 +14,7 @@
      limitations under the License.
 -->
 
-<!-- timer item in the list of active timers -->
-<com.android.deskclock.timer.TimerListItem
+<com.android.deskclock.timer.TimerItem
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -29,24 +28,23 @@
         android:layout_width="@dimen/circle_size"
         android:layout_height="@dimen/circle_size"
         android:layout_gravity="center"
-        android:layout_marginEnd="@dimen/timer_circle_margin"
-        android:layout_marginStart="@dimen/timer_circle_margin">
+        android:padding="@dimen/timer_padding">
 
-        <com.android.deskclock.CircleTimerView
+        <com.android.deskclock.timer.TimerCircleView
             android:id="@+id/timer_time"
             android:layout_width="match_parent"
-            android:layout_height="match_parent" />
+            android:layout_height="match_parent"/>
 
         <com.android.deskclock.timer.CountingTimerView
             android:id="@+id/timer_time_text"
             android:layout_width="match_parent"
-            android:layout_height="match_parent" />
+            android:layout_height="match_parent"/>
 
         <Button
             android:id="@+id/timer_label"
             style="?android:attr/borderlessButtonStyle"
             android:layout_width="wrap_content"
-            android:layout_height="56dip"
+            android:layout_height="56dp"
             android:layout_gravity="top|center_horizontal"
             android:clickable="false"
             android:ellipsize="end"
@@ -54,18 +52,18 @@
             android:hint="@string/label"
             android:singleLine="true"
             android:src="@drawable/ic_label"
-            android:textAppearance="@style/SecondaryLabelTextAppearance" />
+            android:textAppearance="@style/SecondaryLabelTextAppearance"/>
 
         <ImageButton
             android:id="@+id/reset_add"
-            android:layout_width="50dip"
-            android:layout_height="50dip"
+            android:layout_width="50dp"
+            android:layout_height="50dp"
             android:layout_gravity="bottom|center_horizontal"
             android:contentDescription="@string/timer_plus_one"
             android:gravity="center"
             android:scaleType="center"
-            android:src="@drawable/ic_plusone" />
+            android:src="@drawable/ic_plusone"/>
 
     </com.android.deskclock.CircleButtonsLayout>
 
-</com.android.deskclock.timer.TimerListItem>
+</com.android.deskclock.timer.TimerItem>
\ No newline at end of file
diff --git a/res/layout/timer_setup_buttons.xml b/res/layout/timer_setup_buttons.xml
new file mode 100644
index 0000000..f0132f2
--- /dev/null
+++ b/res/layout/timer_setup_buttons.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="bottom"
+    android:orientation="horizontal">
+
+    <FrameLayout
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_gravity="start|center_vertical"
+        android:layout_weight="1">
+
+        <ImageButton
+            android:id="@+id/timer_cancel"
+            android:layout_width="@dimen/design_fab_size_normal"
+            android:layout_height="@dimen/design_fab_size_normal"
+            android:layout_gravity="center"
+            android:contentDescription="@string/timer_cancel"
+            android:scaleType="center"
+            android:src="@drawable/ic_cancel" />
+
+    </FrameLayout>
+
+    <FrameLayout
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_gravity="start|center_vertical"
+        android:layout_weight="1">
+
+        <android.support.design.widget.FloatingActionButton
+            android:id="@+id/timer_create"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:layout_margin="@dimen/fab_margin"
+            android:contentDescription="@string/timer_start"
+            android:src="@drawable/ic_start_white_24dp"
+            android:visibility="invisible"
+            app:borderWidth="0dp"
+            app:elevation="@dimen/fab_elevation" />
+
+    </FrameLayout>
+
+    <Space
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1" />
+
+</LinearLayout>
diff --git a/res/layout/timer_setup_view.xml b/res/layout/timer_setup_view.xml
deleted file mode 100644
index 6c437b4..0000000
--- a/res/layout/timer_setup_view.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<com.android.deskclock.TimerSetupView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/timer_setup"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout_margin="16dip" />
diff --git a/res/layout/timer_timer_view.xml b/res/layout/timer_timer_view.xml
deleted file mode 100644
index 440e36a..0000000
--- a/res/layout/timer_timer_view.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<FrameLayout
-    android:id="@+id/timer_view"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="horizontal">
-
-    <LinearLayout
-        android:id="@+id/page_indicators"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:layout_gravity="end|center_vertical"
-        android:layout_marginEnd="24dip"
-        android:gravity="center"
-        android:orientation="vertical">
-
-        <ImageView
-            android:id="@+id/page_indicator0"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:scaleType="center"
-            android:contentDescription="@null" />
-
-        <ImageView
-            android:id="@+id/page_indicator1"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:contentDescription="@null" />
-
-        <ImageView
-            android:id="@+id/page_indicator2"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:contentDescription="@null" />
-
-        <ImageView
-            android:id="@+id/page_indicator3"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:contentDescription="@null" />
-
-        <Space
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/footer_button_size"
-            android:layout_marginTop="@dimen/footer_button_layout_margin"
-            android:layout_marginBottom="@dimen/footer_button_layout_margin" />
-
-    </LinearLayout>
-
-    <com.android.deskclock.VerticalViewPager
-        android:id="@+id/vertical_view_pager"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
-</FrameLayout>
-
-
diff --git a/res/layout/world_clock_item.xml b/res/layout/world_clock_item.xml
index f8d2118..00036dd 100644
--- a/res/layout/world_clock_item.xml
+++ b/res/layout/world_clock_item.xml
@@ -1,4 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2012 The Android Open Source Project
+<?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.
diff --git a/res/menu/cities_menu.xml b/res/menu/cities_menu.xml
deleted file mode 100644
index a9b18f4..0000000
--- a/res/menu/cities_menu.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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.
--->
-
-<menu
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:ex="http://schemas.android.com/apk/res-auto">
-
-    <item android:id="@+id/menu_item_search"
-        android:title="@android:string/search_go"
-        android:icon="@android:drawable/ic_menu_search"
-        android:imeOptions="actionSearch"
-        android:orderInCategory="1"
-        ex:showAsAction="ifRoom"
-        ex:actionViewClass="android.support.v7.widget.SearchView" />
-
-    <item android:id="@+id/menu_item_sort"
-        android:title="@string/menu_item_sort_by_gmt_offset"
-        ex:showAsAction="never" />
-
-    <item android:id="@+id/menu_item_settings"
-        android:title="@string/menu_item_settings"
-        android:icon="@android:drawable/ic_menu_preferences"
-        ex:showAsAction="never"/>
-
-    <item android:id="@+id/menu_item_help"
-        android:title="@string/menu_item_help"
-        android:icon="@android:drawable/ic_menu_preferences"
-        ex:showAsAction="never"/>
-
-</menu>
-
-
diff --git a/res/menu/desk_clock_menu.xml b/res/menu/desk_clock_menu.xml
index b242050..4858714 100644
--- a/res/menu/desk_clock_menu.xml
+++ b/res/menu/desk_clock_menu.xml
@@ -14,18 +14,33 @@
      limitations under the License.
 -->
 
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+      xmlns:app="http://schemas.android.com/apk/res-auto">
     <group android:id="@+id/menu_items">
-        <item android:id="@+id/menu_item_night_mode"
-            android:title="@string/menu_item_night_mode"
-            android:icon="@android:drawable/ic_menu_preferences"/>
-        <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"/>
+        <item
+            android:id="@+id/menu_item_search"
+            android:icon="@android:drawable/ic_menu_search"
+            android:imeOptions="actionSearch"
+            android:orderInCategory="1"
+            android:title="@android:string/search_go"
+            android:visible="false"
+            app:actionViewClass="android.support.v7.widget.SearchView"
+            app:showAsAction="ifRoom"/>
+        <item
+            android:id="@+id/menu_item_sort"
+            android:title="@string/menu_item_sort_by_gmt_offset"
+            app:showAsAction="never"/>
+        <item
+            android:id="@+id/menu_item_night_mode"
+            android:icon="@android:drawable/ic_menu_preferences"
+            android:title="@string/menu_item_night_mode"/>
+        <item
+            android:id="@+id/menu_item_settings"
+            android:icon="@android:drawable/ic_menu_preferences"
+            android:title="@string/menu_item_settings"/>
+        <item
+            android:id="@+id/menu_item_help"
+            android:icon="@android:drawable/ic_menu_preferences"
+            android:title="@string/menu_item_help"/>
     </group>
-</menu>
-
-
+</menu>
\ No newline at end of file
diff --git a/res/menu/settings_menu.xml b/res/menu/settings_menu.xml
deleted file mode 100644
index 399e393..0000000
--- a/res/menu/settings_menu.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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/raw/fallbackring.ogg b/res/raw/alarm_expire.ogg
similarity index 97%
rename from res/raw/fallbackring.ogg
rename to res/raw/alarm_expire.ogg
index 9d80037..316e77e 100644
--- a/res/raw/fallbackring.ogg
+++ b/res/raw/alarm_expire.ogg
Binary files differ
diff --git a/res/raw/in_call_alarm.ogg b/res/raw/in_call_alarm.ogg
deleted file mode 100644
index 9d80037..0000000
--- a/res/raw/in_call_alarm.ogg
+++ /dev/null
Binary files differ
diff --git a/assets/sounds/Timer_Expire.ogg b/res/raw/timer_expire.ogg
similarity index 100%
rename from assets/sounds/Timer_Expire.ogg
rename to res/raw/timer_expire.ogg
Binary files differ
diff --git a/res/values-af/array.xml b/res/values-af/array.xml
index a4844fb..4ec3319 100644
--- a/res/values-af/array.xml
+++ b/res/values-af/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemalastad"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guiana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>Suidpool"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>Suidpool<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almati"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gasa"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"D<xliff:g id="SEPARATOR">=</xliff:g>Djakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Maskat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"K<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoen"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riad"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoel"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapoer"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanariese eilande"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Moembai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Haiderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 21eb5cb..df8f2f8 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Vertoon klok"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Versteek horlosie"</string>
     <string name="label" msgid="162189613902857319">"Etiket"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Aan"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Af"</string>
     <string name="default_label" msgid="5590025289805630372">"Wekker"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Stel wekker"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibreer"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Herhaal"</string>
     <string name="alert" msgid="6506982899651975645">"Alarm se luitoon"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Gepasmaakte luitoon"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Afteller het verstryk"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Stil"</string>
     <string name="ringtone" msgid="9110746249688559579">"Luitoon"</string>
     <string name="time" msgid="8067216534232296518">"Tyd"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Môre"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Sluimer tot <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Komende wekker"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Die wekker wat jy misgeloop het, is uitgevee"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Minder as \'n minuut oor"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> oor"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> oor"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> oor"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Minder as \'n minuut oor"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> oor"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"oor"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"oor"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarm gestel vir minder as 1 minuut van nou af."</item>
     <item msgid="6002066367368421848">"Alarm gestel vir <xliff:g id="DAYS">%1$s</xliff:g> van nou af."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minute</item>
       <item quantity="one">minuut</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Verhoog volume geleidelik"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Af"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> sekondes"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sekondes"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Stilte ná"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minute</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Laai terug"</string>
     <string name="delete" msgid="5732434972457000541">"Vee uit"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Wekkervolume"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Stil"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Stil"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Onbekend"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Sluimer of sit alarm uit."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (sluimerend)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm is vir <xliff:g id="TIME">%s</xliff:g> gestel. Raak om te kanselleer."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Laai tans luitoon…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Klankterugspeel-diens vir aftellers word in Horlosie gestel."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Stel wekker"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Wekker"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Tydhouer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Horlosie"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Rangskik volgens naam"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Geselekteerde stede"</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_start_button" msgid="8373422516681242270">"Begin"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Laat wag"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Rondte"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Deel"</string>
     <string name="hours_label" msgid="3393478155635368097">"u"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"My tyd is <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Rondtetye:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Rondte <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> uur</item>
       <item quantity="one">1 uur</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Voeg 1 minuut by"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Voeg 1 min. by"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stop"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Klaar"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Stop alle aftellers"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Stel terug"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Kanselleer"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Afteller is gekanselleer"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Tyd is op"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> aftellers het verstryk"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Tydhouer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Maksimum van 4 aftellers"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Laat wag"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Stel alle aftellers terug"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Jy\'s \'n regte spoedduiwel."</item>
     <item msgid="6332879039890727169">"Geniet die vrugte van jou arbeid."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Stede"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Horlosie"</string>
     <string name="clock_style" msgid="2265011060429742344">"Styl"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Verander datum en tyd"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analoog"</item>
     <item msgid="8483930821046925592">"Digitaal"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> is gemerk"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> is ontmerk"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshalleilande"</item>
     <item msgid="4196408495909011020">"Midwayeiland"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Wekkers"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Stophorlosie-diens om die kennisgewing te laat loop"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Gestop"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Verwerk handelinge van tydhouerkennisgewings af."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Verwerk handelinge van stophorlosiekennisgewings af."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Laat wag"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Swiep na regs om toe te maak"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Swiep na links om te laat sluimer"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Swiep links om te sluimer of regs om toe te maak"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Aftellers"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Aftellerluitoon"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Afteller gestop"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> aftellers gestop"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Afteller is laat wag"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> aftellers is laat wag"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Raak om jou aftellers te sien"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> aftellers"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Volgende afteller: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Geen wekkers nie"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Geen wekkers gestel nie"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"GEEN KOMENDE WEKKERS NIE"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE., k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Ongeldige tyd <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Geen wekker om <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> nie"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Geen wekkers is gestel nie"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Geen etiket is gespesifiseer nie"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Geen wekker bevat die etiket nie"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stophorlosie loop reeds"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stophorlosie loop nie"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stophorlosie kan nie teruggestel word nie, want dit loop tans"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stophorlosie is gestop"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stophorlosie is laat wag"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stophorlosie is teruggestel"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stophorlosie het rondte gemerk"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stophorlosie is begin"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Geen wekker is vir hierdie tyd gestel nie"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Wekker vir <xliff:g id="ALARM_TIME">%s</xliff:g> is toegemaak"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Wekker is gestel vir <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Geen afteller is gestel nie"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Afteller is uitgevee"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Afteller loop reeds"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Kan nie jou versoek voltooi nie; veelvuldige aftellers is beskikbaar"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Afteller is begin"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Daar bestaan geen aftellers nie"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Daar bestaan meer as een afteller"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Die afteller is verwyder."</string>
     <string name="timer_created" msgid="4381027137335885547">"Afteller is geskep"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Ongeldige aftellerlengte"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Afteller is teruggestel"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Afteller kan nie teruggestel word nie, want dit loop nog. Stop afteller om dit terug te stel."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Afteller is reeds gestop"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Afteller is uitgevee"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Afteller is begin"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Ongeldige aftellerlengte"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Geen stad is gekies nie"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Die stad wat jy gespesifiseer het, is nie beskikbaar nie"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Daardie stad is reeds bygevoeg"</string>
diff --git a/res/values-am/array.xml b/res/values-am/array.xml
index 3bb5500..f8e8141 100644
--- a/res/values-am/array.xml
+++ b/res/values-am/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ፈ<xliff:g id="SEPARATOR">=</xliff:g>ፎርታሌዛ"</item>
     <item msgid="5801558418916235541">"ገ<xliff:g id="SEPARATOR">=</xliff:g>ግራንድ ትራክ"</item>
     <item msgid="2103759276235503048">"ገ<xliff:g id="SEPARATOR">=</xliff:g>ግሬናዳ"</item>
-    <item msgid="1490069759176391533">"ገ<xliff:g id="SEPARATOR">=</xliff:g>ጉዋቲማላ"</item>
+    <item msgid="6216160110733510854">"ጓ<xliff:g id="SEPARATOR">=</xliff:g>ጓታሜላ ከተማ"</item>
     <item msgid="525959305652046261">"ገ<xliff:g id="SEPARATOR">=</xliff:g>ጉያና"</item>
     <item msgid="7565596629973190931">"ሀ<xliff:g id="SEPARATOR">=</xliff:g>ሃሊፋክስ"</item>
     <item msgid="3811169155065582644">"ሀ<xliff:g id="SEPARATOR">=</xliff:g>ሀቫና"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ተ<xliff:g id="SEPARATOR">=</xliff:g>ቶሮንቶ"</item>
     <item msgid="1506838283840737263">"ቨ<xliff:g id="SEPARATOR">=</xliff:g>ቫንኮቨር"</item>
     <item msgid="8935386104773857399">"ወ<xliff:g id="SEPARATOR">=</xliff:g>ዊኒፔግ"</item>
-    <item msgid="1132634022412399582">"ደ<xliff:g id="SEPARATOR">=</xliff:g>ደቡብ ዋልታ"</item>
+    <item msgid="498429228419399474">"ደ<xliff:g id="SEPARATOR">=</xliff:g>ደቡብ ዋልታ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ለ<xliff:g id="SEPARATOR">=</xliff:g>ሎንግየርቢየን"</item>
     <item msgid="3784788073896028355">"አ<xliff:g id="SEPARATOR">=</xliff:g>አልማቲ"</item>
     <item msgid="7895695236056852523">"አ<xliff:g id="SEPARATOR">=</xliff:g>አማን"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ገ<xliff:g id="SEPARATOR">=</xliff:g>ጋዛ"</item>
     <item msgid="2359068282340162319">"ሐ<xliff:g id="SEPARATOR">=</xliff:g>ሔብሮን"</item>
     <item msgid="6223396610551759129">"ሀ<xliff:g id="SEPARATOR">=</xliff:g>ሆ ቺ ሚንህ"</item>
-    <item msgid="4731022818651322736">"ሀ<xliff:g id="SEPARATOR">=</xliff:g>ሆንግ ኮንግ"</item>
+    <item msgid="3439764751788710130">"ሀ<xliff:g id="SEPARATOR">=</xliff:g>ሆንግ ኮንግ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"አ<xliff:g id="SEPARATOR">=</xliff:g>ኢስታንቡል"</item>
     <item msgid="758800913783999425">"ጀ<xliff:g id="SEPARATOR">=</xliff:g>ጃካርታ"</item>
     <item msgid="8956406398692698126">"አ<xliff:g id="SEPARATOR">=</xliff:g>እየሩሳሌም"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"መ<xliff:g id="SEPARATOR">=</xliff:g>ማኒላ"</item>
     <item msgid="6033964325069060422">"መ<xliff:g id="SEPARATOR">=</xliff:g>ሙስካት"</item>
     <item msgid="6077458941399984780">"ፈ<xliff:g id="SEPARATOR">=</xliff:g>ፍኖም ፔን"</item>
-    <item msgid="935474308903572975">"ፐ‹<xliff:g id="SEPARATOR">=</xliff:g>ፒዮንግያንግ"</item>
+    <item msgid="1245515372520913197">"‹<xliff:g id="SEPARATOR">=</xliff:g>ፒዮንግያንግ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"ከ<xliff:g id="SEPARATOR">=</xliff:g>ኳታር"</item>
     <item msgid="1667243110545095146">"ረ<xliff:g id="SEPARATOR">=</xliff:g>ራንጉን"</item>
     <item msgid="4460370766685855731">"ረ<xliff:g id="SEPARATOR">=</xliff:g>ሪያድ"</item>
     <item msgid="4229224905931739201">"ሰ<xliff:g id="SEPARATOR">=</xliff:g>ሳይጎን"</item>
     <item msgid="8705359848250215620">"ሰ<xliff:g id="SEPARATOR">=</xliff:g>ሴዖል"</item>
-    <item msgid="583367295371395814">"ሸ<xliff:g id="SEPARATOR">=</xliff:g>ሻንጋይ"</item>
+    <item msgid="3814881931186962624">"ሸ<xliff:g id="SEPARATOR">=</xliff:g>ሻንጋይ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"ሰ<xliff:g id="SEPARATOR">=</xliff:g>ሲንጋፖር"</item>
-    <item msgid="1972491729911039207">"ተ<xliff:g id="SEPARATOR">=</xliff:g>ታይፔይ"</item>
+    <item msgid="8982451946156859368">"ተ<xliff:g id="SEPARATOR">=</xliff:g>ታይፔይ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"ተ<xliff:g id="SEPARATOR">=</xliff:g>ቴህራን"</item>
     <item msgid="8629402941285674273">"ተ<xliff:g id="SEPARATOR">=</xliff:g>ቴልቪቭ"</item>
-    <item msgid="8499164674454654525">"ተ<xliff:g id="SEPARATOR">=</xliff:g>ቶኪዮ"</item>
+    <item msgid="76330681636547168">"ተ<xliff:g id="SEPARATOR">=</xliff:g>ቶኪዮ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"አ<xliff:g id="SEPARATOR">=</xliff:g>ኡላንባታር"</item>
     <item msgid="2028626988021468640">"በ<xliff:g id="SEPARATOR">=</xliff:g>ቤርሙዳ"</item>
     <item msgid="4527109966513690429">"ከ<xliff:g id="SEPARATOR">=</xliff:g>ካናሪ"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"ረ<xliff:g id="SEPARATOR">=</xliff:g>ሬኖ"</item>
     <item msgid="9155068631060038769">"በ<xliff:g id="SEPARATOR">=</xliff:g>ብላክ ሮክ ሲቲ"</item>
     <item msgid="8498761319928979900">"ደ<xliff:g id="SEPARATOR">=</xliff:g>ዶሃ"</item>
-    <item msgid="8307897251088048641">"በ<xliff:g id="SEPARATOR">=</xliff:g>ቤጂንግ"</item>
+    <item msgid="5327010922199714808">"በ<xliff:g id="SEPARATOR">=</xliff:g>ቤጂንግ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"መ<xliff:g id="SEPARATOR">=</xliff:g>ሙምባይ"</item>
     <item msgid="6668274273067049125">"ደ<xliff:g id="SEPARATOR">=</xliff:g>ዴልሂ"</item>
-    <item msgid="2933410189478233292">"አ<xliff:g id="SEPARATOR">=</xliff:g>ኦሳካ"</item>
+    <item msgid="7199039603593847813">"አ<xliff:g id="SEPARATOR">=</xliff:g>ኦሳካ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ለ<xliff:g id="SEPARATOR">=</xliff:g>ላሆር"</item>
     <item msgid="1448378291805481500">"ሰ<xliff:g id="SEPARATOR">=</xliff:g>ሰነዓ"</item>
     <item msgid="5233119846682408301">"በ<xliff:g id="SEPARATOR">=</xliff:g>ባርሴሎና"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"ከ<xliff:g id="SEPARATOR">=</xliff:g>ካምብሪጅ"</item>
     <item msgid="759409010285366934">"ከ<xliff:g id="SEPARATOR">=</xliff:g>ኪርክላንድ"</item>
     <item msgid="6308007059287569663">"መ<xliff:g id="SEPARATOR">=</xliff:g>ማዲሰን"</item>
-    <item msgid="6971636434858330021">"ገ<xliff:g id="SEPARATOR">=</xliff:g>ጓንግንዡ"</item>
+    <item msgid="2077617905582224600">"ገ<xliff:g id="SEPARATOR">=</xliff:g>ጓንግንዡ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"ሀ<xliff:g id="SEPARATOR">=</xliff:g>ሃይደራባድ"</item>
     <item msgid="3032295682584784261">"ረ<xliff:g id="SEPARATOR">=</xliff:g>ሬስተን"</item>
     <item msgid="7722837296297332268">"በ<xliff:g id="SEPARATOR">=</xliff:g>ቤሎ ሆሪዞንቴ"</item>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 5610f12..5bf749f 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"ሰዓትአሳይ"</string>
     <string name="hide_clock" msgid="3217727306480505694">"ሰዓት ደብቅ"</string>
     <string name="label" msgid="162189613902857319">"መለያ ስም"</string>
+    <string name="on_switch" msgid="2297966258029227449">"በርቷል"</string>
+    <string name="off_switch" msgid="3381070073851148013">"ጠፍቷል"</string>
     <string name="default_label" msgid="5590025289805630372">"ማንቂያ"</string>
     <string name="set_alarm" msgid="9148359866152726808">"የማንቂያ ደወልአዘጋጅ"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"ንዘር"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"ድገም"</string>
     <string name="alert" msgid="6506982899651975645">"የማንቂያ ደውል ቅላጼ"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"ብጁ የጥሪ ቅላጼ"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"ሰዓት ቆጣሪው ጊዜው አልፏል"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"ፀጥ ያለ"</string>
     <string name="ringtone" msgid="9110746249688559579">"የደወል ቅላጼ"</string>
     <string name="time" msgid="8067216534232296518">"ጊዜ"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"ነገ"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"እስከ <xliff:g id="TIME">%s</xliff:g> ድረስ በማሸለብ ላይ"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"በቅርብ ጊዜ የሚሆን ማንቂያ"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"የእርስዎ ያልታየ ማንቂያ ተሰርዟል"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"ከአንድ ደቂቃ በታች ይቀራል"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> ይቀራል"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> ይቀራል"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ይቀራል"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"ከአንድ ደቂቃ በታች ይቀራል"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ይቀራል"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"ቀሪ"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"ቀሪ"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"ማንቂያ ከአሁን ወዲያ ከ1 ደቂቃ በታች  የተዘጋጀ ነው፡፡"</item>
     <item msgid="6002066367368421848">" ማንቂያ ከአሁን ጀምሮ ለ<xliff:g id="DAYS">%1$s</xliff:g> የተዘጋጀ ነው።"</item>
@@ -101,6 +104,10 @@
       <item quantity="one">ደቂቃዎች</item>
       <item quantity="other">ደቂቃዎች</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"ቀስ በቀስ ድምጽ ጨምር"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"ጠፍቷል"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> ሰከንዶች"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"ስከንዶች"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"ጸጥታ ከዚህ በኋላ፦"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> ደቂቃዎች</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"አድህር"</string>
     <string name="delete" msgid="5732434972457000541">"ሰርዝ"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"የማንቂያ ድምፅ መጠን"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"ፀጥታ"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"ፀጥ ያለ"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"ያልታወቀ"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"ማንቂያ አሸልብ ወይም አሰናብት።"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g>(ቆይቷል)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"ማንቂያ ለ<xliff:g id="TIME">%s</xliff:g> ተዘጋጅቷል።ይቅር ለማለት ይምረጡ።"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"የስልክ ጥሪ ድምፅ በመስቀል ላይ...."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"ድምጽ መልሶ የማጫወት አገልግሎት በሰዓት ውስጥ ለተዘጋጁ የሰዓት ቆጣሪዎች።"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"የማንቂያ ደወልአዘጋጅ"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"ማንቂያ"</string>
     <string name="menu_timer" msgid="6459070074762877114">"ሰዓት ቆጣሪ"</string>
     <string name="menu_clock" msgid="5612760670606829805">"ሰዓት"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"በስም ደርድር"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"የተመረጡ ከተማዎች"</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_start_button" msgid="8373422516681242270">"ጀምር"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"ለአፍታ አቁም"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"ዙር"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"አጋራ"</string>
     <string name="hours_label" msgid="3393478155635368097">"ሰ"</string>
     <string name="minutes_label" msgid="3568098128251438588">"ደ"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"የእኔ ሰዓት <xliff:g id="TIME">%s</xliff:g> ነው"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"የዙር ሰዓት፦"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"ዙር <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> ሰዓቶች</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ሰዓቶች</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 ደቂቃ አክል"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 ደቂቃ ያክሉ"</string>
     <string name="timer_stop" msgid="3361154678667736722">"አቁም"</string>
-    <string name="timer_done" msgid="2375990511982914051">"ተጠናቅቋል"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"ሁሉንም ሰዓት ቆጣሪዎች አቁም"</string>
     <string name="timer_reset" msgid="7848424809190171640">"ዳግም አስጀምር"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"ይቅር"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"የሰዓት ቆጣሪ ተሰርዟል"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"ጊዜው አብቅቷል"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ሰዓት ቆጣሪዎች ጊዜያቸው አልፎባቸዋል"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"የሰዓት ቆጣሪ"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"4 ጊዜ መቁጠሪያዎች ቢበዛ"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"ለአፍታ አቁም"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"ሁሉንም ሰዓት ቆጣሪዎች ዳግም አስጀምር"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"ፈጣን ነዎት።"</item>
     <item msgid="6332879039890727169">"በልፋትዎ ውጤት ይደሰቱ።"</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"ከተማዎች"</string>
     <string name="clock_settings" msgid="8317286807280600391">"ሰዓት"</string>
     <string name="clock_style" msgid="2265011060429742344">"ቅጥ"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"ቀን እና ሰዓት ለውጥ"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"አናሎግ"</item>
     <item msgid="8483930821046925592">"ዲጂታል"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ምልክት ተደርጎበታል"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> ምልክቱ ተነስቷል"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"የማርሻል ደሴቶች"</item>
     <item msgid="4196408495909011020">"የሚድዌይ ደሴት"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"ጃካርታ"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"ማንቂያዎች"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"የሩጫ ሰዓት አገልግሎት ማሳወቂያውን ሊያሂድ ነው።"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"ቆሟል"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"ከጊዜ ቆጣሪ ማሳወቂያዎች እርምጃዎችን ያስኬዳል።"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"ከቆጥሮ የሚቆም ሰዓት ማሳወቂያዎች እርምጃዎችን ያስኬዳል።"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"ለአፍታ ቆሟል"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"ለማሰናበት ወደ ቀኝ ያንሸራትቱ"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"ለማሸለብ ወደ ግራ ያንሸራትቱ"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"ለማሸለብ ወደ ቀኝ ወይም ለማሰናበት ወደ ግራ ጠረግ ያድርጉ"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"የሰዓት ቆጣሪዎች"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"የሰዓት ቆጣሪ የጥሪ ቅላጼ"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"የሰዓት ቆጣሪ ቆሟል"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> የሰዓት ቆጣሪዎች ቆመዋል"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"ጊዜ ቆጣሪ ለአፍታ ቆሟል"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> ሰዓት ቆጣሪዎች ለአፍታ ቆመዋል"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"የሰዓት ቆጣሪዎችዎን ለማየት ይንኩ"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ሰዓት ቆጣሪዎች"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"ቀጣዩ የሰዓት ቆጣሪ፦ <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"ማንቂያ የለም"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"ምንም ማንቂያ አልተዘጋጀም"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ምንም በቅርብ ጊዜ የሚሆኑ ማንቂያዎች የሉም"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"ሰ:ደደ a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"ሰ:ደደ"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE፣ ሰ:ደደ a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE፣ k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"ልክ ያልሆነ ሰዓት <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> ላይ ማንቂያ ደወል የለም"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"ምንም መርሐግብር የተያዘላቸው ማንቂያ ደወሎች የሉም"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"ምንም መለያ አልተገለጸም"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"መለያው ያላቸው ምንም ማንቂያዎች የሉም"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"የሩጫ ሰዓት አስቀድሞ እየሰራ ነው"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"የሩጫ ሰዓት እየሰራ አይደለም"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"የሩጫ ሰዓት እየሮጠ ስለሆነ ዳግም ማስጀመር አይቻልም"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"የሩጫ ሰዓት ቆሟል"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"የሩጫ ሰዓት ለአፍታ ቆሟል"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"የሩጫ ሰዓት ዳግም ማስጀመር"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"የሩጫ ሰዓት የመዞሪያ ሰዓቱን ይዟል"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"የሩጫ ሰዓት ተጀምሯል"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"ለዚህ ጊዜ ምንም ማንቂያ ደወል መርሐግብር አልተያዘለትም"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> ማንቂያ ደወል ተሰናብቷል"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"ማንቂያ ደወል ለ<xliff:g id="ALARM_TIME">%s</xliff:g> ተዘጋጅቷል"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"ምንም ሰዓት ቆጣሪ አልተዘጋጀም"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"ሰዓት ቆጣሪ ተሰርዟል"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"ሰዓት ቆጣሪ አስቀድሞ እየሰራ ነው"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"ጥያቄዎን ማጠናቀቅ አልተቻለም፣ በርካታ ሰዓት ቆጣሪዎች ይገኛሉ"</string>
-    <string name="timer_started" msgid="6715582052946641641">"ሰዓት ቆጣሪ ተጀምሯል"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"ምንም ሰዓት ቆጣሪዎች የሉም"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"ከአንድ በላይ የሰዓት ቆጣሪ አለ"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"ሰዓት ቆጣሪው ተወግዷል።"</string>
     <string name="timer_created" msgid="4381027137335885547">"የሰዓት ቆጣሪ ተፈጥሯል"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"ልክ ያልሆነ የሰዓት ቆጣሪ ርዝመት"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"ሰዓት ቆጣሪ ዳግም ተዘጋጅቷል"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"ሰዓት ቆጣሪ አሁንም እየሰራ ስለሆነ ዳግም ሊዘጋጅ አይችልም። ዳግም ለማዘጋጀት ሰዓት ቆጣሪን ያስቁሙት።"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"ሰዓት ቆጣሪ አስቀድሞ ቆሟል"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"ሰዓት ቆጣሪ ተሰርዟል"</string>
+    <string name="timer_started" msgid="6715582052946641641">"ሰዓት ቆጣሪ ተጀምሯል"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"ልክ ያልሆነ የሰዓት ቆጣሪ ርዝመት"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"ምንም ከተማ አልተመረጠም"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"የጠቀሱት ከተማ አይገኝም"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"ይሄ ከተማ አስቀድሞ ታክሏል"</string>
diff --git a/res/values-ar/array.xml b/res/values-ar/array.xml
index 2ec8bda..f04897e 100644
--- a/res/values-ar/array.xml
+++ b/res/values-ar/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>فورتاليزا"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>غراند ترك"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>غرينادا"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>غواتيمالا"</item>
+    <item msgid="6216160110733510854">"غ<xliff:g id="SEPARATOR">=</xliff:g>مدينة غواتيمالا"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>غيانا"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>هاليفاكس"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>هافانا"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>تورونتو"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>فانكوفر"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>وينيبيغ"</item>
-    <item msgid="1132634022412399582">"ا<xliff:g id="SEPARATOR">=</xliff:g>القطب الجنوبي"</item>
+    <item msgid="498429228419399474">"ا<xliff:g id="SEPARATOR">=</xliff:g>القطب الجنوبي<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>لونغياربين"</item>
     <item msgid="3784788073896028355">"ا<xliff:g id="SEPARATOR">=</xliff:g>ألماتي"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>عمّان"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>غزة"</item>
     <item msgid="2359068282340162319">"ا<xliff:g id="SEPARATOR">=</xliff:g>الخليل"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>هو تشي منه"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>هونغ كونغ"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>هونغ كونغ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"ا<xliff:g id="SEPARATOR">=</xliff:g>إسطنبول"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>جاكرتا"</item>
     <item msgid="8956406398692698126">"ا<xliff:g id="SEPARATOR">=</xliff:g>القدس"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>مانيلا"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>مسقط"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>بنوم بنه"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>بيونغ يانغ"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>بيونغ يانغ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>قطر"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>رانغون"</item>
     <item msgid="4460370766685855731">"ا<xliff:g id="SEPARATOR">=</xliff:g>الرياض"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>سايغون"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>سيول"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>شنغهاي"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>شنغهاي<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>سنغافورة"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>تايبيه"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>تايبيه<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>طهران"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>تل أبيب"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>طوكيو"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>طوكيو<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"ا<xliff:g id="SEPARATOR">=</xliff:g>أولان باتور"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>برمودا"</item>
     <item msgid="4527109966513690429">"ا<xliff:g id="SEPARATOR">=</xliff:g>الكناري"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>رينو"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>بلاك روك سيتي"</item>
     <item msgid="8498761319928979900">"ا<xliff:g id="SEPARATOR">=</xliff:g>الدوحة"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>بكين"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>بكين<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>مومباي"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>دلهي"</item>
-    <item msgid="2933410189478233292">"ا<xliff:g id="SEPARATOR">=</xliff:g>أوساكا"</item>
+    <item msgid="7199039603593847813">"ا<xliff:g id="SEPARATOR">=</xliff:g>أوساكا<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>لاهور"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>صنعاء"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>برشلونة"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>كامبريدج"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>كيركلاند"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>ماديسون"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>كوانغتشو"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>كوانغتشو<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>حيدر آباد"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>ريستون"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>بيلو هوريزونتي"</item>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 891751a..c70e8bd 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"إظهار الساعة"</string>
     <string name="hide_clock" msgid="3217727306480505694">"إخفاء الساعة"</string>
     <string name="label" msgid="162189613902857319">"تصنيف"</string>
+    <string name="on_switch" msgid="2297966258029227449">"تشغيل"</string>
+    <string name="off_switch" msgid="3381070073851148013">"إيقاف"</string>
     <string name="default_label" msgid="5590025289805630372">"المنبه"</string>
     <string name="set_alarm" msgid="9148359866152726808">"ضبط المنبه"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"اهتزاز"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"تكرار"</string>
     <string name="alert" msgid="6506982899651975645">"نغمة رنين المنبه"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"نغمة رنين مخصصة"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"انتهت صلاحية الموقِّت"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"صامت"</string>
     <string name="ringtone" msgid="9110746249688559579">"نغمة الرنين"</string>
     <string name="time" msgid="8067216534232296518">"الوقت"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"غدًا"</string>
@@ -66,12 +69,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"غفوة إلى <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"التنبيه القادم"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"تم حذف التنبيه المفقود"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"يتبقى أقل من دقيقة"</item>
-    <item msgid="83197792732433351">"تتبقى <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"تتبقى <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"تتبقى <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"يتبقى أقل من دقيقة"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"تتبقى <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"تتبقى"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"تتبقى"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"تم ضبط المنبه على أقل من دقيقة واحدة من الآن."</item>
     <item msgid="6002066367368421848">"تم ضبط المنبه على <xliff:g id="DAYS">%1$s</xliff:g> من الآن."</item>
@@ -129,6 +132,10 @@
       <item quantity="other">من الدقائق</item>
       <item quantity="one">دقيقة واحدة</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"رفع مستوى الصوت تدريجيًا"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"إيقاف"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> ثانية"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"ثوانٍ"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"صامت بعد"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="zero"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> من الدقائق</item>
@@ -158,7 +165,8 @@
     <string name="revert" msgid="9100911171235162926">"تراجع"</string>
     <string name="delete" msgid="5732434972457000541">"حذف"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"مستوى صوت المنبّه"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"صامت"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"صامت"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"غير معروف"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"غفوة أو تجاهل المنبه."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (غفوة)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"تم ضبط المنبه على <xliff:g id="TIME">%s</xliff:g>. المس للإلغاء."</string>
@@ -183,8 +191,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"جارٍ تحميل نغمة الرنين…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"خدمة تشغيل الصوت للمؤقتات التي تم تعيينها في الساعة."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"ضبط المنبه"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"المنبه"</string>
     <string name="menu_timer" msgid="6459070074762877114">"موقت"</string>
     <string name="menu_clock" msgid="5612760670606829805">"الساعة"</string>
@@ -199,10 +205,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"تصنيف بحسب الاسم"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"المدن المحددة"</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_start_button" msgid="8373422516681242270">"بدء"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"إيقاف مؤقت"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"المختبر"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"مشاركة"</string>
     <string name="hours_label" msgid="3393478155635368097">"س"</string>
     <string name="minutes_label" msgid="3568098128251438588">"د"</string>
@@ -214,10 +220,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"وقتي هو <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"مرات الدوران:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"معمل <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"العدد <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"العدد <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="zero"><xliff:g id="NUMBER">%d</xliff:g> hours</item>
       <item quantity="two">ساعتان (<xliff:g id="NUMBER">%d</xliff:g>)</item>
@@ -249,12 +251,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"إضافة دقيقة واحدة"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"إضافة دقيقة واحدة"</string>
     <string name="timer_stop" msgid="3361154678667736722">"إيقاف"</string>
-    <string name="timer_done" msgid="2375990511982914051">"تم"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"إيقاف كل الموقِّتات"</string>
     <string name="timer_reset" msgid="7848424809190171640">"إعادة تعيين"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"إلغاء"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"تم إلغاء الموقِّت"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"انتهى الوقت"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"انتهت صلاحية <xliff:g id="NUM_TIMERS">%d</xliff:g> من الموقِّتات"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"مؤقت"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"يبلغ الحد الأقصى 4 موقّتات"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"إيقاف مؤقت"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"إعادة ضبط الموقتات"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"يمكنك إجراء كل شيء بسرعة البرق."</item>
     <item msgid="6332879039890727169">"استمتع بحصاد ثمار تعبك."</item>
@@ -271,6 +277,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"مدن"</string>
     <string name="clock_settings" msgid="8317286807280600391">"الساعة"</string>
     <string name="clock_style" msgid="2265011060429742344">"النمط"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"تغيير التاريخ والوقت"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"تناظري"</item>
     <item msgid="8483930821046925592">"رقمي"</item>
@@ -285,6 +292,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"تم تحديد <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"تم إلغاء تحديد <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"جزر مارشال"</item>
     <item msgid="4196408495909011020">"جزيرة ميدواي"</item>
@@ -373,13 +382,17 @@
     <item msgid="5176858645450908751">"جاكارتا"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"التنبيهات"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"خدمة ساعة التوقيف لتشغيل التنبيه"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"تم الإيقاف"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"لمعالجة الإجراءات من إشعارات الموقِّت."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"لمعالجة الإجراءات من إشعارات ساعة الإيقاف."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"تم الإيقاف مؤقتًا"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"مرر بسرعة إلى اليسار للإلغاء"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"مرر بسرعة إلى اليمين لإجراء غفوة"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"مرر يسارًا للغفوة أو يمينًا للتجاهل"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"الموقتات"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"نغمة رنين الموقِّت"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"تم إيقاف الموقت"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"تم إيقاف <xliff:g id="NUMBER">%d</xliff:g> من الموقتات"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"تم إيقاف الموقِّت مؤقتًا"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"تم إيقاف <xliff:g id="NUMBER">%d</xliff:g> موقِّتات مؤقتُا"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"المس للاطلاع على الموقتات"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> من الموقتات"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"الموقت التالي: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -409,35 +422,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"ليست هناك اشعارات"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"لم يتم تعيين تنبيهات"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ليست هناك اشعارات مقبلة"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"س:دد ص"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"ك:دد"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"‏EEE، س:دد ص"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"‏EEE، ‏س:دد"</string>
     <string name="invalid_time" msgid="2782334750243998633">"الوقت غير صالح <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"لم يتم تعيين منبه للوقت <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"لم يتم تعيين أي منبه"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"لم يتم تحديد تصنيف"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"لا توجد منبهات تتضمن التصنيف"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"ساعة الإيقاف قيد التشغيل حاليًا"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"ساعة الإيقاف ليست قيد التشغيل"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"تتعذر إعادة ضبط ساعة التوقيف لأنها قيد العمل"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"تم إيقاف ساعة التوقيف"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"تم إيقاف ساعة التوقيف مؤقتًا"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"تمت إعادة ضبط ساعة التوقيف"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"تمت إضافة دورة إلى ساعة التوقيف"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"تم بدء ساعة التوقيف"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"لم يتم تعيين منبه لهذا الوقت"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"تم تجاهل المنبه <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"تم ضبط المنبه على <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"لم يتم تعيين أي موَقِّت"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"تم حذف الموقِّت"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"الموقِّت قيد التشغيل حاليًا"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"تعذر إكمال طلبك، هناك عدة مؤقتات متاحة"</string>
-    <string name="timer_started" msgid="6715582052946641641">"تم بدء الموقّت"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"ليس هناك أي موقِّت"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"هناك أكثر من موقِّت واحد"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"تمت إزالة الموقِّت."</string>
     <string name="timer_created" msgid="4381027137335885547">"تم إنشاء الموقت"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"مدة الموقت غير صالحة"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"تمت إعادة تعيين الموقِّت"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"لا يمكن إعادة تعيين الموقِّت لأنه لا يزال قيد التشغيل. عليك إيقاف الموقِّت لإعادة تعيينه."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"تم إيقاف الموقِّت من قبل"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"تم حذف الموقِّت"</string>
+    <string name="timer_started" msgid="6715582052946641641">"تم بدء الموقّت"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"مدة الموقت غير صالحة"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"لم يتم تحديد أية مدينة"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"المدينة التي حددتها غير متاحة"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"تمت إضافة هذه المدينة من قبل"</string>
diff --git a/res/values-az-rAZ/array.xml b/res/values-az-rAZ/array.xml
index 5596d17..e11df18 100644
--- a/res/values-az-rAZ/array.xml
+++ b/res/values-az-rAZ/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qrand Türk"</item>
     <item msgid="2103759276235503048">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qrenada"</item>
-    <item msgid="1490069759176391533">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qvatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Qvatemala Şəhəri"</item>
     <item msgid="525959305652046261">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qayana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifaks"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vankuver"</item>
     <item msgid="8935386104773857399">"V<xliff:g id="SEPARATOR">=</xliff:g>Vinnipeq"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Cənub Qütbü"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Cənub Qütbü<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Lonqyerbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Alma-ata"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qəzza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Hoşimin"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Honq Konq"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Honq Konq<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"İ<xliff:g id="SEPARATOR">=</xliff:g>İstanbul"</item>
     <item msgid="758800913783999425">"C<xliff:g id="SEPARATOR">=</xliff:g>Cakarta"</item>
     <item msgid="8956406398692698126">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qüds"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Maskat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Pnompen"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pxenyan"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pxenyan<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qətər"</item>
     <item msgid="1667243110545095146">"Y<xliff:g id="SEPARATOR">=</xliff:g>Yanqon"</item>
     <item msgid="4460370766685855731">"Ə<xliff:g id="SEPARATOR">=</xliff:g>Ər-Riyad"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Sayqon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"Ş<xliff:g id="SEPARATOR">=</xliff:g>Şanxay"</item>
+    <item msgid="3814881931186962624">"Ş<xliff:g id="SEPARATOR">=</xliff:g>Şanxay<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Sinqapur"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taybey"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taybey<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Tehran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Əviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulan-bator"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanar"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahor"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barselona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"K<xliff:g id="SEPARATOR">=</xliff:g>Kembric"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"Q<xliff:g id="SEPARATOR">=</xliff:g>Quançjou"</item>
+    <item msgid="2077617905582224600">"Q<xliff:g id="SEPARATOR">=</xliff:g>Quançjou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Heydərabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 7321752..5352482 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Saatı göstər"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Saatı gizlə"</string>
     <string name="label" msgid="162189613902857319">"Etiket"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Aktiv"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Deaktiv"</string>
     <string name="default_label" msgid="5590025289805630372">"Siqnal"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Siqnal qur"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrasiya etdir"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Təkrarla"</string>
     <string name="alert" msgid="6506982899651975645">"Siqnalın Zəng səsi"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Fərdi Zəng"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Taymerin Vaxtı Bitdi"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Səssiz"</string>
     <string name="ringtone" msgid="9110746249688559579">"Zəng səsi"</string>
     <string name="time" msgid="8067216534232296518">"Vaxt"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Sabah"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> qədər təxirə salma"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Gələcək zənglər"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Buraxdığınız zəng silindi"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Bir dəqiqədən az qaldı."</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> qaldı"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> qaldı"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> qaldı"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Bir dəqiqədən az qaldı."</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> qaldı"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"qaldı"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"qaldı"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Siqnalı ən az 1 dəqiqə sonraya qur."</item>
     <item msgid="6002066367368421848">"Siqnalı <xliff:g id="DAYS">%1$s</xliff:g> sonraya qur."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">dəqiqə</item>
       <item quantity="one">dəqiqə</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Tədricən həcmi artırın"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Deaktiv"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> saniyə"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"saniyə"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Sonra susdur"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> dəqiqə</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Qaytar"</string>
     <string name="delete" msgid="5732434972457000541">"Sil"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Siqnal səsi"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Səssiz"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Səssiz"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Naməlum"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Siqnalı ertələ və ya kənarlaşdır."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (ertələndi)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Siqnal <xliff:g id="TIME">%s</xliff:g> üçün qurulub. Ləğv etmək üçün toxunun."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Zəng səsi yüklənir..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Saatda qurulmuş vaxtölçənlər üçün playback səs xidməti."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Siqnal qur"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Zəng"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Vaxtölçən"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Saat"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Ad üzrə sırala"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Seçilmiş şəhərlər"</string>
     <string name="sw_resume_button" msgid="2569360966002022248">"Davam et"</string>
-    <string name="sw_start_button" msgid="8373422516681242270">"Başlat"</string>
-    <string name="sw_stop_button" msgid="8322958613123274451">"Dayandır"</string>
-    <string name="sw_lap_button" msgid="6992264696039004233">"Dövrə"</string>
     <string name="sw_reset_button" msgid="6616804728322906117">"Sıfırla"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Başlat"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Dövrə"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Paylaş"</string>
     <string name="hours_label" msgid="3393478155635368097">"st"</string>
     <string name="minutes_label" msgid="3568098128251438588">"dq"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Mənim vaxtım <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Dövrə sayısı:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Dövrə <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> saat</item>
       <item quantity="one">1 saat</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 Dəqiqə Əlavə et"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 dəqiqə əlavə et"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Dayandır"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Hazırdır"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Bütün taymerləri durdurun"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Sıfırla"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Ləğv et"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Taymer ləğv edildi"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Vaxt bitdi"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> taymerlərin vaxtı keçib"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Vaxtölçən"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Maksimum 4 taymer"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Durdurun"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Bütün taymerləri sıfırlayın"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Dəhşət sürətlisiniz."</item>
     <item msgid="6332879039890727169">"Əməyinizin bəhrəsinin dadını çıxardın."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Şəhərlər"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Saat"</string>
     <string name="clock_style" msgid="2265011060429742344">"Üslub"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Tarix və vaxtı dəyişin"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analoq"</item>
     <item msgid="8483930821046925592">"Rəqəmsal"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">": 00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">": 30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> yoxlandı"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> yoxlanmadı"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marşall Adaları"</item>
     <item msgid="4196408495909011020">"Miduey adası"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Cakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Siqnallar"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Bildirişi çalışdırmaq üçün saniyəölçən xidməti."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Dayandırıldı"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Taymer bildirişlərindən fəaliyyətlər icra olunur."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Saniyəölçən bildirişlərindən fəaliyyətlər icra olunur."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Durduruldu"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Kənarlaşdırmaq üçün sağa sürüşdürün"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Mürgü üçün sola sürüşdürün"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Mürgü rejimi üçün sola, və ya ləğv etmək üçün sağa sürüşdürün"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Vaxtölçən"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Taymer zəngi"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Vaxtölçən dayandırıldı"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> vaxtölçən dayandırıldı"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Taymer durdurulub"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> taymer durdurulub"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Vaxtölçənlərinizi görmək üçün toxunun"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> vaxtölçən"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Sonrakı vaxtölçən: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Zəng yoxdur"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Heç bir alarm ayarlanmayıb"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"GƏLƏCƏK ZƏNGLƏR YOXDUR"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Yanlış vaxt <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> vaxtına siqnal yoxdur"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Planlaşdırılmış siqnal yoxdur"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Heç bir etiket təyin edilməyib."</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Etiketə aid heç bir alarm yoxdur"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Saniyəölçən artıq işə salınıb"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Saniyəölçən işə salınmayıb"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Saniyəölçən sıfırlana bilməz çünki, hazırda çalışır."</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Saniyəölçən dayandırıldı"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Saniyəölçən durduruldu"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Saniyəölçən sıfırlandı"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Saniyəölçən hissələrə ayrıldı"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Saniyəölçən başladıldı"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Bu vaxt üçün heç bir siqnal təyin olunmayıb"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> siqnal deaktiv edildi"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm <xliff:g id="ALARM_TIME">%s</xliff:g> üçün qurulub"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Heç bir vaxtölçən ayarlanmayıb"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Vaxtölçən silindi"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Vaxtölçən artıq işə salınıb"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Sorğunuzu tamamlamaq olmur, bir neçə vaxtölçən aktivdir"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Vaxtölçən başladı"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Heç bir taymer mövcud deyil"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Birdən çox taymer mövcuddur"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Taymer silindi."</string>
     <string name="timer_created" msgid="4381027137335885547">"Vaxtölçən yaradıldı"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Yanlış vaxtölçən müddəti"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Vaxtölçən sıfırlandı"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Vaxtölçən sıfırlana bilməz cünki, hələ də çalışmaqdadır. Sıfırlamak üçün vaxtölçəni dayandırın."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Vaxtölçən artıq dayandırılıb"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Vaxtölçən silindi"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Vaxtölçən başladı"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Yanlış vaxtölçən müddəti"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Heç bir şəhər seçilməyib"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Təyin etdiyiniz şəhər əlçatan deyil"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Bu şəhər artıq əlavə edilib"</string>
diff --git a/res/values-b+sr+Latn/array.xml b/res/values-b+sr+Latn/array.xml
deleted file mode 100644
index d0e6651..0000000
--- a/res/values-b+sr+Latn/array.xml
+++ /dev/null
@@ -1,322 +0,0 @@
-<?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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="cities_names">
-    <item msgid="4653806289288974388">"<xliff:g id="SEPARATOR">=</xliff:g>Abidžan"</item>
-    <item msgid="4864167603178202155">"<xliff:g id="SEPARATOR">=</xliff:g>Akra"</item>
-    <item msgid="6478898553803167749">"<xliff:g id="SEPARATOR">=</xliff:g>Adis Abeba"</item>
-    <item msgid="5618029992528436448">"<xliff:g id="SEPARATOR">=</xliff:g>Alžir"</item>
-    <item msgid="2906834750114790793">"<xliff:g id="SEPARATOR">=</xliff:g>Blantajer"</item>
-    <item msgid="8153571933836629863">"<xliff:g id="SEPARATOR">=</xliff:g>Brazavil"</item>
-    <item msgid="3703129580594640833">"<xliff:g id="SEPARATOR">=</xliff:g>Kairo"</item>
-    <item msgid="2300915410194647320">"<xliff:g id="SEPARATOR">=</xliff:g>Kazablanka"</item>
-    <item msgid="1217039002304887948">"<xliff:g id="SEPARATOR">=</xliff:g>Konakri"</item>
-    <item msgid="8775104707806220928">"<xliff:g id="SEPARATOR">=</xliff:g>Dakar"</item>
-    <item msgid="5948764589113643811">"<xliff:g id="SEPARATOR">=</xliff:g>Dar es Salam"</item>
-    <item msgid="6306254507715416077">"<xliff:g id="SEPARATOR">=</xliff:g>Džibuti"</item>
-    <item msgid="4286108029159501866">"<xliff:g id="SEPARATOR">=</xliff:g>Fritaun"</item>
-    <item msgid="4514786733035528116">"<xliff:g id="SEPARATOR">=</xliff:g>Gaborone"</item>
-    <item msgid="7367496854968219671">"<xliff:g id="SEPARATOR">=</xliff:g>Harare"</item>
-    <item msgid="6837746379726020288">"<xliff:g id="SEPARATOR">=</xliff:g>Johanesburg"</item>
-    <item msgid="6284185156591171506">"<xliff:g id="SEPARATOR">=</xliff:g>Kampala"</item>
-    <item msgid="3299518884693668985">"<xliff:g id="SEPARATOR">=</xliff:g>Kartum"</item>
-    <item msgid="4614879508966043969">"<xliff:g id="SEPARATOR">=</xliff:g>Kigali"</item>
-    <item msgid="8878437043772547732">"<xliff:g id="SEPARATOR">=</xliff:g>Kinšasa"</item>
-    <item msgid="6325601635544067909">"<xliff:g id="SEPARATOR">=</xliff:g>Lagos"</item>
-    <item msgid="6094357506290323524">"<xliff:g id="SEPARATOR">=</xliff:g>Maseru"</item>
-    <item msgid="7270525814400329098">"<xliff:g id="SEPARATOR">=</xliff:g>Mogadišu"</item>
-    <item msgid="353110101402547540">"<xliff:g id="SEPARATOR">=</xliff:g>Najrobi"</item>
-    <item msgid="1688121892646984549">"<xliff:g id="SEPARATOR">=</xliff:g>Sao Tome"</item>
-    <item msgid="3642219084651687800">"<xliff:g id="SEPARATOR">=</xliff:g>Timbuktu"</item>
-    <item msgid="7287513493631179463">"<xliff:g id="SEPARATOR">=</xliff:g>Tripoli"</item>
-    <item msgid="5052614613671591560">"<xliff:g id="SEPARATOR">=</xliff:g>Tunis"</item>
-    <item msgid="7976303179193839859">"<xliff:g id="SEPARATOR">=</xliff:g>Enkoridž"</item>
-    <item msgid="193703779380497120">"<xliff:g id="SEPARATOR">=</xliff:g>Mendoza"</item>
-    <item msgid="5448884981082519628">"<xliff:g id="SEPARATOR">=</xliff:g>Aruba"</item>
-    <item msgid="1577938273323914773">"<xliff:g id="SEPARATOR">=</xliff:g>Asunsion"</item>
-    <item msgid="5617155978105010520">"<xliff:g id="SEPARATOR">=</xliff:g>Barbados"</item>
-    <item msgid="3600025702357376322">"<xliff:g id="SEPARATOR">=</xliff:g>Belize"</item>
-    <item msgid="2847679817118467051">"<xliff:g id="SEPARATOR">=</xliff:g>Bogota"</item>
-    <item msgid="9029003541681282929">"<xliff:g id="SEPARATOR">=</xliff:g>Buenos Ajres"</item>
-    <item msgid="2338367960332622522">"<xliff:g id="SEPARATOR">=</xliff:g>Kankun"</item>
-    <item msgid="4339797536047170278">"<xliff:g id="SEPARATOR">=</xliff:g>Karakas"</item>
-    <item msgid="9199080438977757863">"<xliff:g id="SEPARATOR">=</xliff:g>Kajmanska ostrva"</item>
-    <item msgid="1993203473281589891">"<xliff:g id="SEPARATOR">=</xliff:g>Čikago"</item>
-    <item msgid="7990342776303470263">"<xliff:g id="SEPARATOR">=</xliff:g>Kostarika"</item>
-    <item msgid="5676109900908808628">"<xliff:g id="SEPARATOR">=</xliff:g>Kurasao"</item>
-    <item msgid="5519120432577564812">"<xliff:g id="SEPARATOR">=</xliff:g>Doson Krik"</item>
-    <item msgid="2126228972377380680">"<xliff:g id="SEPARATOR">=</xliff:g>Denver"</item>
-    <item msgid="3298410632922319193">"<xliff:g id="SEPARATOR">=</xliff:g>Detroit"</item>
-    <item msgid="2819032085688382805">"<xliff:g id="SEPARATOR">=</xliff:g>Dominika"</item>
-    <item msgid="6170433208654553821">"<xliff:g id="SEPARATOR">=</xliff:g>Edmonton"</item>
-    <item msgid="795461860173291499">"<xliff:g id="SEPARATOR">=</xliff:g>Salvador"</item>
-    <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
-    <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
-    <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Gvatemala"</item>
-    <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Gvajana"</item>
-    <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifaks"</item>
-    <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
-    <item msgid="3733555435078090201">"<xliff:g id="SEPARATOR">=</xliff:g>Indijanapolis"</item>
-    <item msgid="226982663848410981">"<xliff:g id="SEPARATOR">=</xliff:g>Noks"</item>
-    <item msgid="3815293080342229459">"<xliff:g id="SEPARATOR">=</xliff:g>Marengo"</item>
-    <item msgid="6594853515451547389">"<xliff:g id="SEPARATOR">=</xliff:g>Pitersburg"</item>
-    <item msgid="6091571889213283534">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Siti"</item>
-    <item msgid="3089369312058696669">"<xliff:g id="SEPARATOR">=</xliff:g>Vevej"</item>
-    <item msgid="1334860422444068943">"<xliff:g id="SEPARATOR">=</xliff:g>Vensen"</item>
-    <item msgid="7775105082093691756">"<xliff:g id="SEPARATOR">=</xliff:g>Vinamak"</item>
-    <item msgid="4043335541899184547">"<xliff:g id="SEPARATOR">=</xliff:g>Kingston"</item>
-    <item msgid="1063757593477259280">"<xliff:g id="SEPARATOR">=</xliff:g>La Paz"</item>
-    <item msgid="349901732062388869">"<xliff:g id="SEPARATOR">=</xliff:g>Lima"</item>
-    <item msgid="4977592519316837842">"<xliff:g id="SEPARATOR">=</xliff:g>Los Anđeles"</item>
-    <item msgid="7713051790509638572">"<xliff:g id="SEPARATOR">=</xliff:g>Luivil"</item>
-    <item msgid="8460620935898405225">"<xliff:g id="SEPARATOR">=</xliff:g>Managva"</item>
-    <item msgid="8328345293081464192">"<xliff:g id="SEPARATOR">=</xliff:g>Martinik"</item>
-    <item msgid="8010357327448619637">"<xliff:g id="SEPARATOR">=</xliff:g>Mendoza"</item>
-    <item msgid="2046777213916219253">"<xliff:g id="SEPARATOR">=</xliff:g>Metlakatla"</item>
-    <item msgid="2227885609632709258">"<xliff:g id="SEPARATOR">=</xliff:g>Meksiko Siti"</item>
-    <item msgid="9089629663998569289">"<xliff:g id="SEPARATOR">=</xliff:g>Monterej"</item>
-    <item msgid="2782276175306930748">"<xliff:g id="SEPARATOR">=</xliff:g>Montevideo"</item>
-    <item msgid="4942386959622269480">"<xliff:g id="SEPARATOR">=</xliff:g>Montreal"</item>
-    <item msgid="3068203952968918165">"<xliff:g id="SEPARATOR">=</xliff:g>Nasau"</item>
-    <item msgid="4234515454127289962">"<xliff:g id="SEPARATOR">=</xliff:g>Njujork"</item>
-    <item msgid="1660551302087304308">"<xliff:g id="SEPARATOR">=</xliff:g>Bjula"</item>
-    <item msgid="415823390775449071">"<xliff:g id="SEPARATOR">=</xliff:g>Senter"</item>
-    <item msgid="6644186958433380884">"<xliff:g id="SEPARATOR">=</xliff:g>Nju Sejlem"</item>
-    <item msgid="6408587617047971798">"<xliff:g id="SEPARATOR">=</xliff:g>Panama"</item>
-    <item msgid="5576899364199447991">"<xliff:g id="SEPARATOR">=</xliff:g>Feniks"</item>
-    <item msgid="5541266909095409447">"<xliff:g id="SEPARATOR">=</xliff:g>Port ov Spejn"</item>
-    <item msgid="6417519313622785932">"<xliff:g id="SEPARATOR">=</xliff:g>Port o Prens"</item>
-    <item msgid="2078589249210571366">"<xliff:g id="SEPARATOR">=</xliff:g>Portoriko"</item>
-    <item msgid="8522030474373927681">"<xliff:g id="SEPARATOR">=</xliff:g>Santo Domingo"</item>
-    <item msgid="4763853453317431594">"<xliff:g id="SEPARATOR">=</xliff:g>Sao Paulo"</item>
-    <item msgid="2713153284784311646">"<xliff:g id="SEPARATOR">=</xliff:g>Sent Džons"</item>
-    <item msgid="8252666620333105271">"<xliff:g id="SEPARATOR">=</xliff:g>Sent Kits"</item>
-    <item msgid="4851597775036027515">"<xliff:g id="SEPARATOR">=</xliff:g>Sveta Lucija"</item>
-    <item msgid="2395485473100271503">"<xliff:g id="SEPARATOR">=</xliff:g>Sent Tomas"</item>
-    <item msgid="4148037555658225145">"<xliff:g id="SEPARATOR">=</xliff:g>Tihuana"</item>
-    <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
-    <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vankuver"</item>
-    <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Vinipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Južni pol"</item>
-    <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longjerbjen"</item>
-    <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almati"</item>
-    <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Aman"</item>
-    <item msgid="1795426532295280371">"<xliff:g id="SEPARATOR">=</xliff:g>Anadir"</item>
-    <item msgid="7194236926158343552">"<xliff:g id="SEPARATOR">=</xliff:g>Aktau"</item>
-    <item msgid="4796350130854360870">"<xliff:g id="SEPARATOR">=</xliff:g>Bagdad"</item>
-    <item msgid="4020105434451091851">"<xliff:g id="SEPARATOR">=</xliff:g>Bahrein"</item>
-    <item msgid="3895868797052686484">"<xliff:g id="SEPARATOR">=</xliff:g>Baku"</item>
-    <item msgid="228001522630057957">"<xliff:g id="SEPARATOR">=</xliff:g>Bangkok"</item>
-    <item msgid="5555647809114820537">"B<xliff:g id="SEPARATOR">=</xliff:g>Bejrut"</item>
-    <item msgid="2960873998178478784">"K<xliff:g id="SEPARATOR">=</xliff:g>Kalkuta"</item>
-    <item msgid="8765555959722950691">"<xliff:g id="SEPARATOR">=</xliff:g>Damask"</item>
-    <item msgid="4979709428925196546">"<xliff:g id="SEPARATOR">=</xliff:g>Daka"</item>
-    <item msgid="310419600200885308">"<xliff:g id="SEPARATOR">=</xliff:g>Dubai"</item>
-    <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
-    <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
-    <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Ši Min"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
-    <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
-    <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Džakarta"</item>
-    <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jerusalim"</item>
-    <item msgid="1664426577433326419">"<xliff:g id="SEPARATOR">=</xliff:g>Kabul"</item>
-    <item msgid="7700349511508357396">"<xliff:g id="SEPARATOR">=</xliff:g>Karači"</item>
-    <item msgid="5273241794521591984">"<xliff:g id="SEPARATOR">=</xliff:g>Katmandu"</item>
-    <item msgid="4754850915168634158">"<xliff:g id="SEPARATOR">=</xliff:g>Kuala Lumpur"</item>
-    <item msgid="5187849635785055693">"<xliff:g id="SEPARATOR">=</xliff:g>Kuvajt"</item>
-    <item msgid="2923385979252179376">"<xliff:g id="SEPARATOR">=</xliff:g>Makao"</item>
-    <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
-    <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Muskat"</item>
-    <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Pnom Pen"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang"</item>
-    <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
-    <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangun"</item>
-    <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Rijad"</item>
-    <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Sajgon"</item>
-    <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Šangaj"</item>
-    <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Tajpej"</item>
-    <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
-    <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
-    <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulan Bator"</item>
-    <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermudi"</item>
-    <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Kanari"</item>
-    <item msgid="4886308317040330383">"<xliff:g id="SEPARATOR">=</xliff:g>Zelenortska Ostrva"</item>
-    <item msgid="1003307362164178007">"<xliff:g id="SEPARATOR">=</xliff:g>Rejkjavik"</item>
-    <item msgid="6742010412815268657">"<xliff:g id="SEPARATOR">=</xliff:g>Stenli"</item>
-    <item msgid="5659389449738592757">"<xliff:g id="SEPARATOR">=</xliff:g>Adelejd"</item>
-    <item msgid="4567804576346784523">"<xliff:g id="SEPARATOR">=</xliff:g>Brizbejn"</item>
-    <item msgid="8730590400362815585">"<xliff:g id="SEPARATOR">=</xliff:g>Kanbera"</item>
-    <item msgid="6416990927714140153">"<xliff:g id="SEPARATOR">=</xliff:g>Darvin"</item>
-    <item msgid="3073969292696516135">"<xliff:g id="SEPARATOR">=</xliff:g>Melburn"</item>
-    <item msgid="1719286228375722176">"<xliff:g id="SEPARATOR">=</xliff:g>Novi Južni Vels"</item>
-    <item msgid="3663940748056976266">"<xliff:g id="SEPARATOR">=</xliff:g>Pert"</item>
-    <item msgid="3383881736858438153">"<xliff:g id="SEPARATOR">=</xliff:g>Kvinslend"</item>
-    <item msgid="971889339240879138">"<xliff:g id="SEPARATOR">=</xliff:g>Sidnej"</item>
-    <item msgid="5542803438162180311">"<xliff:g id="SEPARATOR">=</xliff:g>Viktorija"</item>
-    <item msgid="11828841481838883">"<xliff:g id="SEPARATOR">=</xliff:g>Njufaundlend"</item>
-    <item msgid="1734331918410561807">"<xliff:g id="SEPARATOR">=</xliff:g>Saskačevan"</item>
-    <item msgid="9184412695613864979">"<xliff:g id="SEPARATOR">=</xliff:g>Uskršnje ostrvo"</item>
-    <item msgid="1014282454239014527">"<xliff:g id="SEPARATOR">=</xliff:g>Amsterdam"</item>
-    <item msgid="4928363054269791193">"<xliff:g id="SEPARATOR">=</xliff:g>Andora"</item>
-    <item msgid="912290900213826368">"<xliff:g id="SEPARATOR">=</xliff:g>Atina"</item>
-    <item msgid="6097000352459209495">"<xliff:g id="SEPARATOR">=</xliff:g>Belfast"</item>
-    <item msgid="3285885824311481790">"<xliff:g id="SEPARATOR">=</xliff:g>Beograd"</item>
-    <item msgid="911055049821251982">"<xliff:g id="SEPARATOR">=</xliff:g>Berlin"</item>
-    <item msgid="9099244516556291111">"<xliff:g id="SEPARATOR">=</xliff:g>Bratislava"</item>
-    <item msgid="158977749726480076">"<xliff:g id="SEPARATOR">=</xliff:g>Brisel"</item>
-    <item msgid="8875102297676173346">"<xliff:g id="SEPARATOR">=</xliff:g>Bukurešt"</item>
-    <item msgid="804451569472542912">"<xliff:g id="SEPARATOR">=</xliff:g>Budimpešta"</item>
-    <item msgid="6827506774445509939">"<xliff:g id="SEPARATOR">=</xliff:g>Kišinjev"</item>
-    <item msgid="487345893088732797">"<xliff:g id="SEPARATOR">=</xliff:g>Kopenhagen"</item>
-    <item msgid="7760953471297773537">"<xliff:g id="SEPARATOR">=</xliff:g>Dablin"</item>
-    <item msgid="323414429034825249">"<xliff:g id="SEPARATOR">=</xliff:g>Gibraltar"</item>
-    <item msgid="1785566206078328830">"<xliff:g id="SEPARATOR">=</xliff:g>Helsinki"</item>
-    <item msgid="5938185647271923359">"<xliff:g id="SEPARATOR">=</xliff:g>Ostrvo Man"</item>
-    <item msgid="5974864320735263245">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
-    <item msgid="3567775364750772947">"<xliff:g id="SEPARATOR">=</xliff:g>Kijev"</item>
-    <item msgid="540344101798867007">"<xliff:g id="SEPARATOR">=</xliff:g>Lisabon"</item>
-    <item msgid="5091062403792923657">"<xliff:g id="SEPARATOR">=</xliff:g>London"</item>
-    <item msgid="7075006205000490364">"<xliff:g id="SEPARATOR">=</xliff:g>Luksemburg"</item>
-    <item msgid="4901781246584739451">"<xliff:g id="SEPARATOR">=</xliff:g>Madrid"</item>
-    <item msgid="9047080834315777144">"<xliff:g id="SEPARATOR">=</xliff:g>Malta"</item>
-    <item msgid="8200456520732452034">"<xliff:g id="SEPARATOR">=</xliff:g>Minsk"</item>
-    <item msgid="5452744619736513383">"<xliff:g id="SEPARATOR">=</xliff:g>Monako"</item>
-    <item msgid="3513517408062322298">"<xliff:g id="SEPARATOR">=</xliff:g>Moskva"</item>
-    <item msgid="7917103295878081674">"<xliff:g id="SEPARATOR">=</xliff:g>Oslo"</item>
-    <item msgid="4245547231693746977">"<xliff:g id="SEPARATOR">=</xliff:g>Pariz"</item>
-    <item msgid="3778652900196715557">"<xliff:g id="SEPARATOR">=</xliff:g>Prag"</item>
-    <item msgid="1827175423974383675">"<xliff:g id="SEPARATOR">=</xliff:g>Riga"</item>
-    <item msgid="2095130417232677930">"<xliff:g id="SEPARATOR">=</xliff:g>Rim"</item>
-    <item msgid="7631654618289353520">"<xliff:g id="SEPARATOR">=</xliff:g>San Marino"</item>
-    <item msgid="7219835179107610398">"<xliff:g id="SEPARATOR">=</xliff:g>Sarajevo"</item>
-    <item msgid="7199868165463282240">"<xliff:g id="SEPARATOR">=</xliff:g>Simferopolj"</item>
-    <item msgid="2786395006682246794">"<xliff:g id="SEPARATOR">=</xliff:g>Skoplje"</item>
-    <item msgid="4706927178872100023">"<xliff:g id="SEPARATOR">=</xliff:g>Sofija"</item>
-    <item msgid="1982417589953195308">"<xliff:g id="SEPARATOR">=</xliff:g>Stokholm"</item>
-    <item msgid="1596083919400921960">"<xliff:g id="SEPARATOR">=</xliff:g>Talin"</item>
-    <item msgid="3079313598974879114">"<xliff:g id="SEPARATOR">=</xliff:g>Vatikan"</item>
-    <item msgid="6516636001856910888">"<xliff:g id="SEPARATOR">=</xliff:g>Beč"</item>
-    <item msgid="6377314532157945456">"<xliff:g id="SEPARATOR">=</xliff:g>Vilnijus"</item>
-    <item msgid="3427175235616698721">"<xliff:g id="SEPARATOR">=</xliff:g>Varšava"</item>
-    <item msgid="8404354243761332922">"<xliff:g id="SEPARATOR">=</xliff:g>Zagreb"</item>
-    <item msgid="1457280242717152391">"<xliff:g id="SEPARATOR">=</xliff:g>Cirih"</item>
-    <item msgid="1065940089741359291">"<xliff:g id="SEPARATOR">=</xliff:g>Antananarivo"</item>
-    <item msgid="5176181880014090003">"<xliff:g id="SEPARATOR">=</xliff:g>Maldivi"</item>
-    <item msgid="8281854645557426433">"<xliff:g id="SEPARATOR">=</xliff:g>Mauricijus"</item>
-    <item msgid="2686249517389816420">"<xliff:g id="SEPARATOR">=</xliff:g>Okland"</item>
-    <item msgid="279925671775807392">"<xliff:g id="SEPARATOR">=</xliff:g>Fidži"</item>
-    <item msgid="7971492669765264840">"<xliff:g id="SEPARATOR">=</xliff:g>Guam"</item>
-    <item msgid="889371273355762733">"<xliff:g id="SEPARATOR">=</xliff:g>Honolulu"</item>
-    <item msgid="5516500578074269817">"<xliff:g id="SEPARATOR">=</xliff:g>Kiritimati"</item>
-    <item msgid="2740704911915073056">"<xliff:g id="SEPARATOR">=</xliff:g>Numea"</item>
-    <item msgid="8732832728949672807">"<xliff:g id="SEPARATOR">=</xliff:g>Samoa"</item>
-    <item msgid="6489500698846864993">"<xliff:g id="SEPARATOR">=</xliff:g>Tahiti"</item>
-    <item msgid="3983121625709442324">"<xliff:g id="SEPARATOR">=</xliff:g>Antigva"</item>
-    <item msgid="2650510570709806322">"<xliff:g id="SEPARATOR">=</xliff:g>Ostin"</item>
-    <item msgid="5257283506227357911">"<xliff:g id="SEPARATOR">=</xliff:g>Boston"</item>
-    <item msgid="6326368958641850267">"<xliff:g id="SEPARATOR">=</xliff:g>Kalgari"</item>
-    <item msgid="8830116365016232583">"<xliff:g id="SEPARATOR">=</xliff:g>Kolambus"</item>
-    <item msgid="6986556538341883811">"<xliff:g id="SEPARATOR">=</xliff:g>Dalas"</item>
-    <item msgid="836479352500251902">"<xliff:g id="SEPARATOR">=</xliff:g>Noksvil"</item>
-    <item msgid="8495291458467378851">"<xliff:g id="SEPARATOR">=</xliff:g>Memfis"</item>
-    <item msgid="2788807207554683122">"<xliff:g id="SEPARATOR">=</xliff:g>Majami"</item>
-    <item msgid="3984640407077208471">"<xliff:g id="SEPARATOR">=</xliff:g>Mineapolis"</item>
-    <item msgid="6997305266329324161">"<xliff:g id="SEPARATOR">=</xliff:g>Otava"</item>
-    <item msgid="5191741145278683016">"<xliff:g id="SEPARATOR">=</xliff:g>Filadelfija"</item>
-    <item msgid="5898032730733441936">"<xliff:g id="SEPARATOR">=</xliff:g>Portland"</item>
-    <item msgid="9070160716002203069">"<xliff:g id="SEPARATOR">=</xliff:g>San Dijego"</item>
-    <item msgid="1829944133410079040">"<xliff:g id="SEPARATOR">=</xliff:g>San Francisko"</item>
-    <item msgid="8407905318529692654">"<xliff:g id="SEPARATOR">=</xliff:g>Solt Lejk Siti"</item>
-    <item msgid="3091392589347990898">"<xliff:g id="SEPARATOR">=</xliff:g>San Hoze"</item>
-    <item msgid="7080627414383807284">"<xliff:g id="SEPARATOR">=</xliff:g>San Salvador"</item>
-    <item msgid="3430371213266252049">"<xliff:g id="SEPARATOR">=</xliff:g>Sijetl"</item>
-    <item msgid="9177491393818757071">"<xliff:g id="SEPARATOR">=</xliff:g>Sent Luis"</item>
-    <item msgid="6234359686676312837">"<xliff:g id="SEPARATOR">=</xliff:g>Vašington"</item>
-    <item msgid="4325057056005132331">"<xliff:g id="SEPARATOR">=</xliff:g>Hjuston"</item>
-    <item msgid="38148255938075867">"<xliff:g id="SEPARATOR">=</xliff:g>San Antonio"</item>
-    <item msgid="3601481860893666763">"<xliff:g id="SEPARATOR">=</xliff:g>Džeksonvil"</item>
-    <item msgid="3987471437354665534">"<xliff:g id="SEPARATOR">=</xliff:g>Baltimor"</item>
-    <item msgid="3389674262267006887">"<xliff:g id="SEPARATOR">=</xliff:g>Nešvil"</item>
-    <item msgid="7521690366448637309">"<xliff:g id="SEPARATOR">=</xliff:g>Milvoki"</item>
-    <item msgid="2231069593975740859">"<xliff:g id="SEPARATOR">=</xliff:g>Oklahoma Siti"</item>
-    <item msgid="1970008262236914770">"<xliff:g id="SEPARATOR">=</xliff:g>Las Vegas"</item>
-    <item msgid="7113811028304266017">"<xliff:g id="SEPARATOR">=</xliff:g>Albukerki"</item>
-    <item msgid="6481469458896644678">"<xliff:g id="SEPARATOR">=</xliff:g>Tuson"</item>
-    <item msgid="5970857542995467466">"<xliff:g id="SEPARATOR">=</xliff:g>Sakramento"</item>
-    <item msgid="1999267306329214429">"<xliff:g id="SEPARATOR">=</xliff:g>Atlanta"</item>
-    <item msgid="8761847787537443648">"<xliff:g id="SEPARATOR">=</xliff:g>Klivlend"</item>
-    <item msgid="2987455647692324208">"<xliff:g id="SEPARATOR">=</xliff:g>Nju Orleans"</item>
-    <item msgid="8104109426412705845">"<xliff:g id="SEPARATOR">=</xliff:g>Tampa"</item>
-    <item msgid="1410067233842240795">"<xliff:g id="SEPARATOR">=</xliff:g>Pitsburg"</item>
-    <item msgid="3339955740367374442">"<xliff:g id="SEPARATOR">=</xliff:g>Sinsinati"</item>
-    <item msgid="6091407424772799978">"<xliff:g id="SEPARATOR">=</xliff:g>Mauntin Vju"</item>
-    <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Rino"</item>
-    <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Blek Rok Siti"</item>
-    <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
-    <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbaj"</item>
-    <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
-    <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahor"</item>
-    <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sana"</item>
-    <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barselona"</item>
-    <item msgid="9146746514265554721">"<xliff:g id="SEPARATOR">=</xliff:g>Minhen"</item>
-    <item msgid="157866084892734979">"<xliff:g id="SEPARATOR">=</xliff:g>Milano"</item>
-    <item msgid="2787346322341414963">"<xliff:g id="SEPARATOR">=</xliff:g>Frankfurt"</item>
-    <item msgid="8407511504088696581">"<xliff:g id="SEPARATOR">=</xliff:g>Hanoj"</item>
-    <item msgid="5184417944073499453">"<xliff:g id="SEPARATOR">=</xliff:g>Ankara"</item>
-    <item msgid="4028784954452197920">"<xliff:g id="SEPARATOR">=</xliff:g>Bangalor"</item>
-    <item msgid="190152483600862776">"<xliff:g id="SEPARATOR">=</xliff:g>Brazilija"</item>
-    <item msgid="8009516135735104388">"<xliff:g id="SEPARATOR">=</xliff:g>Kejptaun"</item>
-    <item msgid="6057191797622953016">"<xliff:g id="SEPARATOR">=</xliff:g>Islamabad"</item>
-    <item msgid="2702029416591153210">"<xliff:g id="SEPARATOR">=</xliff:g>Rio de Žaneiro"</item>
-    <item msgid="1753927312634708098">"<xliff:g id="SEPARATOR">=</xliff:g>En Arbor"</item>
-    <item msgid="4225721108475278979">"<xliff:g id="SEPARATOR">=</xliff:g>Bolder"</item>
-    <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Kembridž"</item>
-    <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
-    <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Medison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangdžou"</item>
-    <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hajderabad"</item>
-    <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
-    <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
-    <item msgid="3593516299122577780">"<xliff:g id="SEPARATOR">=</xliff:g>Santjago"</item>
-    <item msgid="2293331653589266583">"<xliff:g id="SEPARATOR">=</xliff:g>Monrovija"</item>
-    <item msgid="7899128359620301710">"<xliff:g id="SEPARATOR">=</xliff:g>Kolombo"</item>
-    <item msgid="5294489752262543829">"<xliff:g id="SEPARATOR">=</xliff:g>Čivava"</item>
-    <item msgid="8066356061184206341">"<xliff:g id="SEPARATOR">=</xliff:g>Salvador"</item>
-    <item msgid="4806867741334453982">"<xliff:g id="SEPARATOR">=</xliff:g>Gurgaon"</item>
-    <item msgid="2585780177649876827">"<xliff:g id="SEPARATOR">=</xliff:g>Mančester"</item>
-    <item msgid="234104953526248139">"<xliff:g id="SEPARATOR">=</xliff:g>Kijev"</item>
-    <item msgid="5245429461217350012">"<xliff:g id="SEPARATOR">=</xliff:g>Sankt Peterburg"</item>
-    <item msgid="6738531308006017215">"<xliff:g id="SEPARATOR">=</xliff:g>Krakov"</item>
-    <item msgid="8972702613339139467">"<xliff:g id="SEPARATOR">=</xliff:g>Vroclav"</item>
-    <item msgid="187278924459096566">"<xliff:g id="SEPARATOR">=</xliff:g>Hamburg"</item>
-    <item msgid="6173267862207394917">"<xliff:g id="SEPARATOR">=</xliff:g>Oulu"</item>
-    <item msgid="5639324478037405990">"<xliff:g id="SEPARATOR">=</xliff:g>Haifa"</item>
-    <item msgid="3157180661352354058">"<xliff:g id="SEPARATOR">=</xliff:g>San Huan"</item>
-    <item msgid="6995939579417282715">"<xliff:g id="SEPARATOR">=</xliff:g>Tegusigalpa"</item>
-    <item msgid="1641840677391275004">"<xliff:g id="SEPARATOR">=</xliff:g>Paramaribo"</item>
-    <item msgid="7317049454800260290">"<xliff:g id="SEPARATOR">=</xliff:g>Kito"</item>
-    <item msgid="4524380876433343244">"<xliff:g id="SEPARATOR">=</xliff:g>Ljubljana"</item>
-  </string-array>
-</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
deleted file mode 100644
index 121d8af..0000000
--- a/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,415 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="6674495003718166674">"Sat"</string>
-    <string name="alarm_list_title" msgid="7589940465292950600">"Alarmi"</string>
-    <string name="add_alarm" msgid="5976616107390962899">"Dodaj alarm"</string>
-    <string name="menu_desk_clock" msgid="3241995064554071588">"Stoni alarm"</string>
-    <string name="menu_edit_alarm" msgid="7204602994918829751">"Izmeni alarm"</string>
-    <string name="delete_alarm" msgid="3457780990646206817">"Izbriši alarm"</string>
-    <string name="enable_alarm" msgid="1834599140632142536">"Uključi alarm"</string>
-    <string name="disable_alarm" msgid="5889378670229554109">"Isključi alarm"</string>
-    <string name="delete_alarm_confirm" msgid="6578572637340860840">"Želite li da izbrišete ovaj alarm?"</string>
-    <string name="show_clock" msgid="8358759982675616915">"Prikaži sat"</string>
-    <string name="hide_clock" msgid="3217727306480505694">"Sakrij sat"</string>
-    <string name="label" msgid="162189613902857319">"Oznaka"</string>
-    <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
-    <string name="set_alarm" msgid="9148359866152726808">"Podesi alarm"</string>
-    <string name="alarm_vibrate" msgid="3476686921490362230">"Vibracija"</string>
-    <string name="alarm_repeat" msgid="7242985466344233206">"Ponovi"</string>
-    <string name="alert" msgid="6506982899651975645">"Melodija alarma"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Prilagođena melodija zvona"</string>
-    <string name="ringtone" msgid="9110746249688559579">"Melodija zvona"</string>
-    <string name="time" msgid="8067216534232296518">"Vreme"</string>
-    <string name="alarm_tomorrow" msgid="131356848787643420">"Sutra"</string>
-    <string name="alarm_today" msgid="7873594221106531654">"Danas"</string>
-    <string name="alarm_alert_wake_up" msgid="6790780716498252583">"Buđenje!"</string>
-    <string name="alarm_alert_off_action_text" msgid="2459925305288819812">"Isklj."</string>
-    <string name="alarm_alert_dismiss_text" msgid="4942914605480888820">"Odbaci"</string>
-    <string name="alarm_alert_dismiss_now_text" msgid="3272183025444682500">"Odbaci odmah"</string>
-    <string name="alarm_missed_title" msgid="3828345099754063392">"Propušteni alarm"</string>
-    <string name="alarm_missed_text" msgid="6585658367289194023">"<xliff:g id="ALARM_TIME">%s</xliff:g> – <xliff:g id="ALARM_LABEL">%s</xliff:g>"</string>
-    <string name="alarm_alert_snoozed_text" msgid="7064642998528766113">"Odloženo"</string>
-    <plurals name="alarm_alert_snooze_duration" formatted="false" msgid="7844300009062867865">
-      <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> min</item>
-      <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> min</item>
-    </plurals>
-    <string name="alarm_alert_off_text" msgid="4472073417593915002">"Alarm je isklj."</string>
-    <string name="alarm_alert_snooze_text" msgid="1774416052207651584">"Odloži"</string>
-    <plurals name="alarm_alert_snooze_set" formatted="false" msgid="3212729193036041768">
-      <item quantity="one">Odloženo je za <xliff:g id="MINUTES">%d</xliff:g> minut.</item>
-      <item quantity="few">Odloženo je za <xliff:g id="MINUTES">%d</xliff:g> minuta.</item>
-      <item quantity="other">Odloženo je za <xliff:g id="MINUTES">%d</xliff:g> minuta.</item>
-    </plurals>
-    <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Odlaganje do <xliff:g id="TIME">%s</xliff:g>"</string>
-    <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Predstojeći alarm"</string>
-    <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Propušteni alarm je izbrisan"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Preostalo je manje od minuta"</item>
-    <item msgid="83197792732433351">"Preostalo je <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Preostalo je <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Preostalo je <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
-  <string-array name="alarm_set">
-    <item msgid="6450913786084215050">"Alarm će se uključiti za manje od 1 minuta."</item>
-    <item msgid="6002066367368421848">"Alarm će se uključiti za <xliff:g id="DAYS">%1$s</xliff:g>."</item>
-    <item msgid="8824719306247973774">"Alarm će se uključiti za <xliff:g id="HOURS">%2$s</xliff:g>."</item>
-    <item msgid="8182406852935468862">"Alarm će se uključiti za <xliff:g id="DAYS">%1$s</xliff:g> i <xliff:g id="HOURS">%2$s</xliff:g>."</item>
-    <item msgid="2532279224777213194">"Alarm će se uključiti za <xliff:g id="MINUTES">%3$s</xliff:g>."</item>
-    <item msgid="5936557894247187717">"Alarm će se uključiti za <xliff:g id="DAYS">%1$s</xliff:g> i <xliff:g id="MINUTES">%3$s</xliff:g>."</item>
-    <item msgid="9115697840826129603">"Alarm će se uključiti za <xliff:g id="HOURS">%2$s</xliff:g> i <xliff:g id="MINUTES">%3$s</xliff:g>."</item>
-    <item msgid="2332583385137381060">"Alarm će se uključiti za <xliff:g id="DAYS">%1$s</xliff:g>, <xliff:g id="HOURS">%2$s</xliff:g> i <xliff:g id="MINUTES">%3$s</xliff:g>."</item>
-  </string-array>
-    <plurals name="days" formatted="false" msgid="3706846447285206235">
-      <item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> dan</item>
-      <item quantity="few"><xliff:g id="NUMBER">%s</xliff:g> dana</item>
-      <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> dana</item>
-    </plurals>
-    <plurals name="hours" formatted="false" msgid="3871283109767171655">
-      <item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> sat</item>
-      <item quantity="few"><xliff:g id="NUMBER">%s</xliff:g> sata</item>
-      <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> sati</item>
-    </plurals>
-    <plurals name="minutes" formatted="false" msgid="5484431721696058697">
-      <item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> minut</item>
-      <item quantity="few"><xliff:g id="NUMBER">%s</xliff:g> minuta</item>
-      <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> minuta</item>
-    </plurals>
-    <string name="every_day" msgid="4100909974923444602">"Svakog dana"</string>
-    <string name="day_concat" msgid="971998564991636532">", "</string>
-    <string name="clock_instructions" msgid="2656876819515011590">"Izaberite sat"</string>
-    <string name="analog_gadget" msgid="1670505720837152766">"Analogni sat"</string>
-    <string name="help" msgid="7786263119482654015">"pomoć"</string>
-    <string name="settings" msgid="5849739030579520686">"Podešavanja"</string>
-    <string name="snooze_duration_title" msgid="1097309861110780483">"Dužina odlaganja"</string>
-    <plurals name="snooze_duration" formatted="false" msgid="3112918131095248271">
-      <item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> minut</item>
-      <item quantity="few"><xliff:g id="NUMBER">%s</xliff:g> minuta</item>
-      <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> minuta</item>
-    </plurals>
-    <plurals name="snooze_picker_label" formatted="false" msgid="322739253661747732">
-      <item quantity="one">minut</item>
-      <item quantity="few">minuta</item>
-      <item quantity="other">minuta</item>
-    </plurals>
-    <string name="auto_silence_title" msgid="2012754009554434544">"Utišaj nakon"</string>
-    <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
-      <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minut</item>
-      <item quantity="few"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuta</item>
-      <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuta</item>
-    </plurals>
-    <string name="auto_silence_never" msgid="4821982647348750809">"Nikada"</string>
-  <string-array name="auto_silence_entries">
-    <item msgid="3024545954917711306">"1 minut"</item>
-    <item msgid="5431906692406316549">"5 minuta"</item>
-    <item msgid="7742728812068919959">"10 minuta"</item>
-    <item msgid="2855948657259647629">"15 minuta"</item>
-    <item msgid="6330196381284475079">"20 minuta"</item>
-    <item msgid="7809240121716151904">"25 minuta"</item>
-    <item msgid="4278641338024561333">"Nemoj utišavati"</item>
-  </string-array>
-    <string name="week_start_title" msgid="4268917518596832096">"Započni sedmicu u"</string>
-  <string-array name="week_start_entries">
-    <item msgid="9010198173394482639">"subotu"</item>
-    <item msgid="3993530639455360921">"nedelju"</item>
-    <item msgid="8594709368683324282">"ponedeljak"</item>
-  </string-array>
-    <string name="done" msgid="6509722361933858451">"Gotovo"</string>
-    <string name="revert" msgid="9100911171235162926">"Vrati"</string>
-    <string name="delete" msgid="5732434972457000541">"Izbriši"</string>
-    <string name="alarm_volume_title" msgid="8506245173912428522">"Jačina zvuka alarma"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Nečujno"</string>
-    <string name="alarm_notify_text" msgid="4891014685945904766">"Odložite ili odbacite alarm."</string>
-    <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (odloženo)"</string>
-    <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm će se uključiti za <xliff:g id="TIME">%s</xliff:g>. Dodirnite za otkazivanje."</string>
-    <string name="volume_button_setting_title" msgid="6937131248843413357">"Dugmad za jačinu"</string>
-    <string name="volume_button_dialog_title" msgid="8768042543750036853">"Efekat dugmeta"</string>
-  <string-array name="volume_button_setting_entries">
-    <item msgid="7972756698723318690">"Odloži"</item>
-    <item msgid="3450979320164769576">"Odbaci"</item>
-    <item msgid="6302517608411378024">"Ne radi ništa"</item>
-  </string-array>
-    <string name="default_ringtone_setting_title" msgid="4549726190682964245">"Podešavanje podrazumevanih zvukova zvona"</string>
-    <string name="alarm_button_description" msgid="740283647046258651">"Alarmi"</string>
-    <string name="gallery_button_description" msgid="1151743663255257668">"Galerija"</string>
-    <string name="music_button_description" msgid="1626593420810117999">"Muzika"</string>
-    <string name="nightmode_button_description" msgid="990894208217576381">"Zatamnjeno"</string>
-    <string name="home_button_description" msgid="3383859096809056157">"Pokretač"</string>
-    <string name="desk_clock_button_description" msgid="4207371097361657274">"Prikaz sata"</string>
-    <string name="label_description" msgid="8736179296142915727">"Oznaka"</string>
-    <string name="ringtone_description" msgid="7580922112921069925">"Melodija zvona"</string>
-    <string name="weather_fetch_failure" msgid="3425804832021006835">"Informacije o vremenu trenutno nisu dostupne."</string>
-    <string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Usluga reprodukcije zvuka za alarme podešene u Satu."</string>
-    <string name="loading_ringtone" msgid="6523322777415268044">"Učitava se zvuk zvona..."</string>
-    <string name="timer_ring_service_desc" msgid="2620214305660322415">"Usluga puštanja zvuka za tajmere podešene u Satu."</string>
-    <string name="control_set_alarm" msgid="2194676418924016327">"Podesi alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
-    <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
-    <string name="menu_timer" msgid="6459070074762877114">"Tajmer"</string>
-    <string name="menu_clock" msgid="5612760670606829805">"Sat"</string>
-    <string name="menu_stopwatch" msgid="3396117705293574701">"Štoperica"</string>
-    <string name="button_alarms" msgid="3907838219512538763">"Dodaj alarm"</string>
-    <string name="button_cities" msgid="4555761857494501363">"Gradovi"</string>
-    <string name="button_menu" msgid="6050484561842120282">"Još opcija"</string>
-    <string name="menu_item_settings" msgid="1413723516369078665">"Podešavanja"</string>
-    <string name="menu_item_help" msgid="4570953476186849841">"Pomoć"</string>
-    <string name="menu_item_night_mode" msgid="3486930302245398975">"Noćni režim"</string>
-    <string name="menu_item_sort_by_gmt_offset" msgid="3120860422682721706">"Sortiraj prema vremenu"</string>
-    <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sortiraj prema imenu"</string>
-    <string name="selected_cities_label" msgid="3607479399424246605">"Izabrani gradovi"</string>
-    <string name="sw_resume_button" msgid="2569360966002022248">"Nastavi"</string>
-    <string name="sw_start_button" msgid="8373422516681242270">"Pokreni"</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">"Resetuj"</string>
-    <string name="sw_share_button" msgid="4478648110382859382">"Deli"</string>
-    <string name="hours_label" msgid="3393478155635368097">"č"</string>
-    <string name="minutes_label" msgid="3568098128251438588">"m"</string>
-    <string name="seconds_label" msgid="124655952824003246">"s"</string>
-    <string name="hours_label_description" msgid="8652842524970971830">"sati"</string>
-    <string name="minutes_label_description" msgid="965686733490357796">"minuti"</string>
-    <string name="seconds_label_description" msgid="3821620053141299692">"sekunde"</string>
-    <string name="zero" msgid="7102083421938355017">"0"</string>
-    <string name="sw_share_main" msgid="7703563468204234405">"Moje vreme je <xliff:g id="TIME">%s</xliff:g>"</string>
-    <string name="sw_share_laps" msgid="614390674795945007">"Prolazna vremena:"</string>
-    <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. krug"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Br. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Br. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
-    <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
-      <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> sat</item>
-      <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> sata</item>
-      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> sati</item>
-    </plurals>
-    <plurals name="Nminutes_description" formatted="false" msgid="6373760365221990859">
-      <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> minut</item>
-      <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> minuta</item>
-      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> minuta</item>
-    </plurals>
-    <plurals name="Nseconds_description" formatted="false" msgid="6456500168536594889">
-      <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> sekunda</item>
-      <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> sekunde</item>
-      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> sekundi</item>
-    </plurals>
-    <string name="timer_add_timer" msgid="862733633862574752">"Dodaj tajmer"</string>
-    <string name="timer_start" msgid="6158486445614356442">"Započni"</string>
-    <string name="timer_delete" msgid="8699122001991909302">"Izbriši"</string>
-    <string name="timer_descriptive_delete" msgid="8794915342760383536">"Izbrišite <xliff:g id="NUMBER_STRING">%s</xliff:g>"</string>
-    <string name="timer_plus_one" msgid="6631211310420106116">"Dodaj 1 minut"</string>
-    <string name="timer_plus_1_min" msgid="8645224089494875062">"Dodaj 1 min"</string>
-    <string name="timer_stop" msgid="3361154678667736722">"Zaustavi"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Gotovo"</string>
-    <string name="timer_reset" msgid="7848424809190171640">"Ponovo podesi"</string>
-    <string name="timer_cancel" msgid="3572868404230815644">"Otkaži"</string>
-    <string name="timer_times_up" msgid="9190440395938519009">"Vreme je isteklo"</string>
-    <string name="timer_notification_label" msgid="4933184831583137249">"Tajmer"</string>
-    <string name="timers_max_count_reached" msgid="9140022846793903813">"Dozvoljeno je najviše 4 tajmera"</string>
-  <string-array name="sw_share_strings">
-    <item msgid="842841032273927988">"Brzi ste kao munja."</item>
-    <item msgid="6332879039890727169">"Uživajte u plodovima svog rada."</item>
-    <item msgid="815382761274660130">"Zna se da su Androidi brzi, ali ne kao vi!"</item>
-    <item msgid="7916250650982813737">"Uh."</item>
-    <item msgid="6836603904515182333">"Elitn@ vremena."</item>
-    <item msgid="7508085100680861631">"Kakva vrtoglava brzina."</item>
-    <item msgid="5961245252909589573">"Hajde da vidimo ponovo ubrzani prikaz kroz vreme."</item>
-    <item msgid="5211891900854545940">"Samo skok ulevo."</item>
-    <item msgid="9071353477103826053">"Brzina vam je u krvi."</item>
-    <item msgid="3785193933691117181">"Brzina fotona."</item>
-  </string-array>
-    <string name="home_label" msgid="4436139365695453870">"Kuća"</string>
-    <string name="cities_activity_title" msgid="8552462751129256730">"Gradovi"</string>
-    <string name="clock_settings" msgid="8317286807280600391">"Sat"</string>
-    <string name="clock_style" msgid="2265011060429742344">"Stil"</string>
-  <string-array name="clock_style_entries">
-    <item msgid="917900462224167608">"Analogni"</item>
-    <item msgid="8483930821046925592">"Digitalni"</item>
-  </string-array>
-    <string name="automatic_home_clock" msgid="6274174710735449252">"Automatski sat sa vremenom kod kuće"</string>
-    <string name="automatic_home_clock_summary" msgid="6020476321040807273">"Kad putujem u drugoj vremenskoj zoni, dodaj sat sa vremenom kod kuće"</string>
-    <string name="home_time_zone" msgid="9199730676287974501">"Matična vremenska zona"</string>
-    <string name="home_time_zone_title" msgid="807894493443834624">"Matična vremenska zona"</string>
-    <string name="time_picker_cancel" msgid="7437106489606013077">"Otkaži"</string>
-    <string name="time_picker_set" msgid="331153175471468051">"Potvrdi"</string>
-    <string name="time_picker_time_seperator" msgid="7484926510054777041">":"</string>
-    <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
-    <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
-    <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
-  <string-array name="timezone_labels">
-    <item msgid="5495601234086197399">"Maršalska ostrva"</item>
-    <item msgid="4196408495909011020">"Ostrvo Midvej"</item>
-    <item msgid="1414384194857730006">"Havaji"</item>
-    <item msgid="2687091371581931926">"Aljaska"</item>
-    <item msgid="1922100269679049660">"Pacifičko vreme"</item>
-    <item msgid="7156402158716866161">"Tihuana"</item>
-    <item msgid="1144117502254612241">"Arizona"</item>
-    <item msgid="101284182011722637">"Čivava"</item>
-    <item msgid="689121094232986897">"Planinsko vreme"</item>
-    <item msgid="5445331923942302756">"Srednja Amerika"</item>
-    <item msgid="2749806434052452351">"Centralno vreme"</item>
-    <item msgid="3997138870229703753">"Meksiko Siti"</item>
-    <item msgid="5425567073027744888">"Saskačevan"</item>
-    <item msgid="2877342865396629368">"Bogota"</item>
-    <item msgid="568682398893899670">"Istočno vreme"</item>
-    <item msgid="668135984541863866">"Venecuela"</item>
-    <item msgid="3737474220861486223">"Atlant. vreme (Barbados)"</item>
-    <item msgid="6279116051273436870">"Atlantsko vreme (Kanada)"</item>
-    <item msgid="8513382867172014244">"Manaus"</item>
-    <item msgid="7776299003105932407">"Santjago"</item>
-    <item msgid="8636989494746218677">"Njufaundlend"</item>
-    <item msgid="4402541016410147505">"Brazilija"</item>
-    <item msgid="2251184440733164084">"Buenos Ajres"</item>
-    <item msgid="6202926618569004969">"Grenland"</item>
-    <item msgid="2355275037115290628">"Montevideo"</item>
-    <item msgid="1377549694711708945">"Srednje-Atlantsko"</item>
-    <item msgid="3457671272126347981">"Azori"</item>
-    <item msgid="3659315141063710840">"Zelenortska Ostrva"</item>
-    <item msgid="1260941741802367635">"Kazablanka"</item>
-    <item msgid="8275203689687954762">"London, Dablin"</item>
-    <item msgid="5970179539479320905">"Amsterdam, Berlin"</item>
-    <item msgid="5396319478750517962">"Beograd"</item>
-    <item msgid="8688787475056663004">"Brisel"</item>
-    <item msgid="3415827874921681622">"Sarajevo"</item>
-    <item msgid="402008965928320066">"Vindhuk"</item>
-    <item msgid="6436942724959275569">"Zapadnoafričko vreme"</item>
-    <item msgid="954536568417204026">"Aman, Jordan"</item>
-    <item msgid="8932745482008902551">"Atina, Istanbul"</item>
-    <item msgid="320025725949024510">"Bejrut, Liban"</item>
-    <item msgid="7242083112551905970">"Kairo"</item>
-    <item msgid="7241520146011450419">"Helsinki"</item>
-    <item msgid="2717065017510546526">"Jerusalim"</item>
-    <item msgid="8698556287741466553">"Minsk"</item>
-    <item msgid="1797598357342084506">"Harare"</item>
-    <item msgid="5169119919905066998">"Bagdad"</item>
-    <item msgid="2615788116201065182">"Moskva"</item>
-    <item msgid="9084354867885584646">"Kuvajt"</item>
-    <item msgid="1351570519986178268">"Najrobi"</item>
-    <item msgid="7094569580635877460">"Teheran"</item>
-    <item msgid="3953138772617909704">"Baku"</item>
-    <item msgid="2868893113598800752">"Tbilisi"</item>
-    <item msgid="7088581865802476373">"Jerevan"</item>
-    <item msgid="1941122257623887992">"Dubai"</item>
-    <item msgid="9194797225058249720">"Kabul"</item>
-    <item msgid="6486569254364577332">"Islamabad, Karači"</item>
-    <item msgid="5487724896895412089">"Uralsk"</item>
-    <item msgid="364906869710826982">"Jekaterinburg"</item>
-    <item msgid="2106505051751383358">"Kolkata"</item>
-    <item msgid="6851586621581501447">"Šri Lanka"</item>
-    <item msgid="800438544128213134">"Katmandu"</item>
-    <item msgid="6173621471007643021">"Astana"</item>
-    <item msgid="8645125891971581128">"Jangon"</item>
-    <item msgid="2886407505119737794">"Krasnojarsk"</item>
-    <item msgid="3408222398188107090">"Bangkok"</item>
-    <item msgid="4441612937172851228">"Peking"</item>
-    <item msgid="4936715789028996930">"Hongkong"</item>
-    <item msgid="4261031143777385525">"Irkutsk"</item>
-    <item msgid="3538060959338191835">"Kuala Lumpur"</item>
-    <item msgid="1438847562643099201">"Pert"</item>
-    <item msgid="3063913827688244383">"Tajpej"</item>
-    <item msgid="3502757135046564209">"Seul"</item>
-    <item msgid="6107588684519111669">"Tokio, Osaka"</item>
-    <item msgid="4350769099755608471">"Jakutsk"</item>
-    <item msgid="2422707004533526462">"Adelejd"</item>
-    <item msgid="1292192084554134339">"Darvin"</item>
-    <item msgid="1320883699470001716">"Brizbejn"</item>
-    <item msgid="5137198806146386527">"Hobart"</item>
-    <item msgid="5920063686933941174">"Sidnej, Kanbera"</item>
-    <item msgid="615906039696009425">"Vladivostok"</item>
-    <item msgid="7738680449356275374">"Guam"</item>
-    <item msgid="2882915026380778227">"Magadan"</item>
-    <item msgid="8255615641810148152">"Okland"</item>
-    <item msgid="3027153773466391728">"Fidži"</item>
-    <item msgid="5911600083231840181">"Tonga"</item>
-    <item msgid="5176858645450908751">"Džakarta"</item>
-  </string-array>
-    <string name="alarm_settings" msgid="2947147071388290814">"Alarmi"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Usluga štoperice za upravljanje obaveštenjima."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Zaustavljeno"</string>
-    <string name="description_direction_right" msgid="5709209043267548985">"Prevucite nadesno za odbacivanje"</string>
-    <string name="description_direction_left" msgid="7448141043674998679">"Prevucite nalevo za odlaganje"</string>
-    <string name="description_direction_both" msgid="1841309486023845685">"Prevucite nalevo da biste odložili ili nadesno da biste odbacili"</string>
-    <string name="timer_stopped" msgid="2730331837832462008">"Tajmer je zaustavljen"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Tajmeri (<xliff:g id="NUMBER">%d</xliff:g>) su zaustavljeni"</string>
-    <string name="all_timers_stopped_notif" msgid="278532320068394600">"Dodirnite da biste videli tajmere"</string>
-    <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> tajmera"</string>
-    <string name="next_timer_notif" msgid="6136454740115613653">"Sledeći tajmer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
-    <string name="screensaver_settings" msgid="7013450738357352801">"Podešavanja za San"</string>
-    <string name="night_mode_title" msgid="5983813889469616299">"Noćni režim"</string>
-    <string name="night_mode_summary" msgid="1017350187324162631">"Veoma taman ekran (za mračne sobe)"</string>
-    <string name="expand_alarm" msgid="7392616528943305020">"Proširi alarm"</string>
-    <string name="collapse_alarm" msgid="3561772046433483980">"Skupi alarm"</string>
-    <string name="alarm_undo" msgid="5710042601177655254">"opozovi"</string>
-    <string name="alarm_deleted" msgid="6131529309389084785">"Alarm je izbrisan"</string>
-    <string name="slash" msgid="2077577763821006919">"/"</string>
-    <string name="world_day_of_week_label" msgid="5911196322328341288">"/<xliff:g id="LABEL">%s</xliff:g>"</string>
-    <string name="next_alarm_description" msgid="2650244835760747046">"Sledeći alarm: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="alarms_selected" msgid="1075308195332888260">"Izabranih: <xliff:g id="ALARMS">%d</xliff:g>"</string>
-    <string name="deleted_message" msgid="1220848140260509437">"Izbrisano je"</string>
-    <plurals name="alarm_delete_confirmation" formatted="false" msgid="3591262014329613293">
-      <item quantity="one">Želite li da izbrišete izabrane alarme?</item>
-      <item quantity="few">Želite li da izbrišete izabrane alarme?</item>
-      <item quantity="other">Želite li da izbrišete izabrane alarme?</item>
-    </plurals>
-    <string name="timer_delete_confirmation" msgid="2815524107015816453">"Želite li da izbrišete ovaj tajmer?"</string>
-    <string name="city_delete_confirmation" msgid="1783441538785676299">"Želite li da uklonite ovaj grad?"</string>
-    <string name="digital_gadget" msgid="2326954556720571358">"Digitalni sat"</string>
-    <string name="no_alarms" msgid="6429431324842022917">"Bez alarma"</string>
-    <string name="no_alarms_set" msgid="4887558279496044764">"Nema alarma"</string>
-    <string name="no_upcoming_alarms" msgid="2889840988069436254">"NEMA PREDSTOJEĆIH ALARMA"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
-    <string name="invalid_time" msgid="2782334750243998633">"Nevažeće vreme <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
-    <string name="no_alarm_at" msgid="8140632482969193119">"Nema alarma u <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
-    <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nema zakazanih alarma"</string>
-    <string name="no_label_specified" msgid="2008482054428460626">"Nije navedena nijedna oznaka"</string>
-    <string name="no_alarms_with_label" msgid="6250998794542941665">"Nijedan alarm ne sadrži oznaku"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Štoperica je već pokrenuta"</string>
-    <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Štoperica nije pokrenuta"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Štoperica ne može da se resetuje jer je aktivna"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Štoperica je zaustavljena"</string>
-    <string name="stopwatch_reset" msgid="7585914953721021042">"Štoperica je resetovana"</string>
-    <string name="stopwatch_lapped" msgid="5844686448815550482">"Obeleženo je vreme za krug na štoperici"</string>
-    <string name="stopwatch_started" msgid="7843882246387176304">"Štoperica je pokrenuta"</string>
-    <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Nijedan alarm nije zakazan za ovo vreme"</string>
-    <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarm za <xliff:g id="ALARM_TIME">%s</xliff:g> je odbačen"</string>
-    <string name="alarm_is_set" msgid="5503226382620011088">"Alarm je podešen za <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Nijedan tajmer nije podešen"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Tajmer je izbrisan"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Tajmer je već pokrenut"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Nije uspelo dovršavanje zahteva jer je dostupno više tajmera"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Tajmer je pokrenut"</string>
-    <string name="timer_created" msgid="4381027137335885547">"Tajmer je napravljen"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Nevažeća dužina tajmera"</string>
-    <string name="timer_was_reset" msgid="6495796785185062631">"Tajmer je resetovan"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Tajmer ne može da se resetuje jer je još uvek pokrenut. Zaustavite tajmer da biste ga resetovali."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Tajmer je već zaustavljen"</string>
-    <string name="no_city_selected" msgid="1007596865203283741">"Nijedan grad nije izabran"</string>
-    <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Grad koji ste naveli nije dostupan"</string>
-    <string name="the_city_already_added" msgid="3799050213771793020">"Ovaj grad je već dodat"</string>
-    <string name="city_added" msgid="1335509457349179514">"Dodali ste: <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
-    <string name="city_deleted" msgid="3935141305276867838">"Izbrisali ste: <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
-    <string name="alarm_cant_be_dismissed_still_more_than_24_hours_away" msgid="8810520940995307437">"Alarm za <xliff:g id="ALARM_TIME">%s</xliff:g> još uvek ne može da se odbaci, i dalje ima više od 24 sata do vremena alarma"</string>
-    <string name="dismiss_alarm" msgid="7204593078688533541">"Odbaci alarm"</string>
-    <string name="pick_alarm_to_dismiss" msgid="5408769235866082896">"Izaberite alarm koji želite da odbacite"</string>
-    <string name="no_firing_alarms" msgid="4986161963178722289">"Ne aktivira se nijedan alarm"</string>
-    <string name="alarm_is_snoozed" msgid="7044644119744928846">"Alarm za <xliff:g id="ALARM_TIME">%s</xliff:g> je odložen za 10 minuta"</string>
-</resources>
diff --git a/res/values-bg/array.xml b/res/values-bg/array.xml
index 34bd5fa..8f2cd4d 100644
--- a/res/values-bg/array.xml
+++ b/res/values-bg/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Форталеза"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Гранд Търк"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Гренада"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Гватемала"</item>
+    <item msgid="6216160110733510854">"<xliff:g id="SEPARATOR">=</xliff:g>Гватемала Сити"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Гаяна"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Халифакс"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Хавана"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Торонто"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Ванкувър"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Уинипег"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Южен полюс"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Южен полюс<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Лонгирбюен"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Алмати"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Аман"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Газа"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Хеброн"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Хо Ши Мин"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Хонконг"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Хонконг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Истанбул"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Джакарта"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Йерусалим"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Манила"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Маскат"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Пном Пен"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Пхенян"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Пхенян<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Катар"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Рангун"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Рияд"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Сайгон"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Сеул"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Шанхай"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Шанхай<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Сингапур"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Тайпей"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Тайпей<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Техеран"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Тел Авив"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Токио"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Токио<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Улан Батор"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Бермуда"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Канарски острови"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Рино"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Блек Рок Сити"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Доха"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Пекин"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Пекин<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Мумбай"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Делхи"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Осака"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Осака<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Лахор"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Сана"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Барселона"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Кеймбридж"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Къркланд"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Медисън"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Гуанджоу"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Гуанджоу<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Хайдерабад"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Рестън"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Бело Оризонте"</item>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index b1db80a..2f879ed 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Показване на часовника"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Скриване на часовника"</string>
     <string name="label" msgid="162189613902857319">"Етикет"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Включено"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Изключено"</string>
     <string name="default_label" msgid="5590025289805630372">"Будилник"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Навиване на будилника"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Вибриране"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Да се повтаря"</string>
     <string name="alert" msgid="6506982899651975645">"Мелодия на будилника"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Персонализирана мелодия"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Изтичане на времето на таймера"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Тих режим"</string>
     <string name="ringtone" msgid="9110746249688559579">"Мелодия"</string>
     <string name="time" msgid="8067216534232296518">"Час"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Утре"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Отлагане до <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Предстоящ будилник"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Пропуснатият ви будилник е изтрит"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Остава по-малко от минута"</item>
-    <item msgid="83197792732433351">"Остават <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Остават <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Остават <xliff:g id="HOURS">%1$s</xliff:g> и <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Остава по-малко от минута"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Остават <xliff:g id="HOURS">%1$s</xliff:g> и <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"Остава"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"Остават"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Будилникът e настроен за след по-малко от минута."</item>
     <item msgid="6002066367368421848">"Будилникът е настроен за след <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="other"> минути</item>
       <item quantity="one"> минута</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Постепенно увеличаване на силата на звука"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Изключено"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> секунди"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"секунди"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Заглушаване след"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> минути</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Възстановяване"</string>
     <string name="delete" msgid="5732434972457000541">"Изтриване"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Сила на звука на будилника"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Тих режим"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Тих режим"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Неизвестно"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Отлагане или отхвърлянe на будилника."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (отложено)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Будилникът е настроен за <xliff:g id="TIME">%s</xliff:g>. Докоснете, за да анулирате."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Мелодията се зарежда..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Услуга за възпроизвеждане на звук за таймерите, зададени в часовника."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Навиване на будилника"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Будилник"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Таймер"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Часовник"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Сортиране по име"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Избрани градове"</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_start_button" msgid="8373422516681242270">"Старт"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Поставяне на пауза"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Етап"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Споделяне"</string>
     <string name="hours_label" msgid="3393478155635368097">"ч"</string>
     <string name="minutes_label" msgid="3568098128251438588">"м"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Времето ми е <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Междинни резултати:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Етап <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"№ <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"№ <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> часа</item>
       <item quantity="one">1 час</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Добавяне на 1 минута"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Добавяне на 1 мин"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Спиране"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Готово"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Спиране на всички таймери"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Нулиране"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Отказ"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Таймерът е анулиран"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Времето изтече"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> таймера са изтекли"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Таймер"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Максимално 4 таймера"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Пауза"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Таймери: Нулир."</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Развивате светкавична скорост."</item>
     <item msgid="6332879039890727169">"Радвайте се на плодовете от труда си."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Градове"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Часовник"</string>
     <string name="clock_style" msgid="2265011060429742344">"Стил"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Промяна на датата и часа"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Аналогов"</item>
     <item msgid="8483930821046925592">"Цифров"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"–"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Поставихте отметка за <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Премахнахте отметката от <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Маршалови острови"</item>
     <item msgid="4196408495909011020">"Мидуей, о-в"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Джакарта"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Будилници"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Услуга на хронометъра за пускане на известието."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Спряно"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Обработва действията от известията на таймера."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Обработва действията от известията на хронометъра."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"На пауза"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Прекарайте пръст надясно, за да отхвърлите"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Прекарайте пръст наляво, за да отложите"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Прекарайте пръст наляво, за да отложите, или надясно за отхвърляне"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Таймери"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Мелодия на таймера"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Таймерът е спрян"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> таймера са спрени"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Таймерът е на пауза"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> таймера са на пауза"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Докоснете, за да видите таймерите си"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> таймера"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Следващ таймер: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Няма будилници"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Няма будилници"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"НЯМА ПРЕДСТОЯЩИ БУДИЛНИЦИ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"<xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g> е невалиден час"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Няма будилник за <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Няма насрочени будилници"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Няма посочен етикет"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Етикетът не се съдържа в нито един будилник"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Хронометърът вече работи"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Хронометърът не работи"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Хронометърът не може да бъде нулиран, защото работи"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Хронометърът е спрян"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Хронометърът е на пауза"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Хронометърът е нулиран"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Хронометърът засече междинно време"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Хронометърът е стартиран"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Няма насрочен будилник за този час"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Будилникът за <xliff:g id="ALARM_TIME">%s</xliff:g> е премахнат"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Будилникът е зададен за <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Няма зададен таймер"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Таймерът е изтрит"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Таймерът вече работи"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Заявката ви не може да се изпълни. Налице са няколко таймера"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Таймерът е стартиран"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Не съществуват таймери"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Съществува повече от един таймер"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Таймерът е премахнат."</string>
     <string name="timer_created" msgid="4381027137335885547">"Таймерът е създаден"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Невалидна продължителност на таймера"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Таймерът е нулиран"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Не можете да нулирате таймера, защото още работи. Трябва първо да го спрете."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Таймерът вече е спрян"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Таймерът е изтрит"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Таймерът е стартиран"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Невалидна продължителност на таймера"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Няма избран град"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Посоченият от вас град не е налице"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Този град вече е добавен"</string>
diff --git a/res/values-bn-rBD/array.xml b/res/values-bn-rBD/array.xml
index 5c1e7a4..6210c8c 100644
--- a/res/values-bn-rBD/array.xml
+++ b/res/values-bn-rBD/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ফ<xliff:g id="SEPARATOR">=</xliff:g>ফোর্তলেজ়া"</item>
     <item msgid="5801558418916235541">"গা<xliff:g id="SEPARATOR">=</xliff:g>গ্র্যান্ড টার্ক"</item>
     <item msgid="2103759276235503048">"গ্রা<xliff:g id="SEPARATOR">=</xliff:g>গ্রেনাডা"</item>
-    <item msgid="1490069759176391533">"গু<xliff:g id="SEPARATOR">=</xliff:g>গুয়াটেমালা"</item>
+    <item msgid="6216160110733510854">"গ<xliff:g id="SEPARATOR">=</xliff:g>গুয়াটেমালা সিটি"</item>
     <item msgid="525959305652046261">"গি<xliff:g id="SEPARATOR">=</xliff:g>গিয়ানা"</item>
     <item msgid="7565596629973190931">"হা<xliff:g id="SEPARATOR">=</xliff:g>হ্যালিফ্যাক্স"</item>
     <item msgid="3811169155065582644">"হা<xliff:g id="SEPARATOR">=</xliff:g>হাভানা"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ট<xliff:g id="SEPARATOR">=</xliff:g>টরন্টো"</item>
     <item msgid="1506838283840737263">"ভ্যা<xliff:g id="SEPARATOR">=</xliff:g>ভ্যাঙ্কুভার"</item>
     <item msgid="8935386104773857399">"উ<xliff:g id="SEPARATOR">=</xliff:g>উইনিপেগ"</item>
-    <item msgid="1132634022412399582">"দ<xliff:g id="SEPARATOR">=</xliff:g>দক্ষিণ মেরু"</item>
+    <item msgid="498429228419399474">"দ<xliff:g id="SEPARATOR">=</xliff:g>দক্ষিণ মেরু<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ল<xliff:g id="SEPARATOR">=</xliff:g>লঞ্জিয়বিয়েঁন"</item>
     <item msgid="3784788073896028355">"আ<xliff:g id="SEPARATOR">=</xliff:g>আলমাটি"</item>
     <item msgid="7895695236056852523">"আ<xliff:g id="SEPARATOR">=</xliff:g>আম্মান"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"গা<xliff:g id="SEPARATOR">=</xliff:g>গাজা"</item>
     <item msgid="2359068282340162319">"হি<xliff:g id="SEPARATOR">=</xliff:g>হিব্রোণ"</item>
     <item msgid="6223396610551759129">"হো<xliff:g id="SEPARATOR">=</xliff:g>হো চি মিন"</item>
-    <item msgid="4731022818651322736">"হ<xliff:g id="SEPARATOR">=</xliff:g>হংকং"</item>
+    <item msgid="3439764751788710130">"হ<xliff:g id="SEPARATOR">=</xliff:g>হংকং<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"ই<xliff:g id="SEPARATOR">=</xliff:g>ইস্তাম্বুল"</item>
     <item msgid="758800913783999425">"জা<xliff:g id="SEPARATOR">=</xliff:g>জাকার্তা"</item>
     <item msgid="8956406398692698126">"জে<xliff:g id="SEPARATOR">=</xliff:g>জেরুসালেম"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"ম্যা<xliff:g id="SEPARATOR">=</xliff:g>ম্যানিলা"</item>
     <item msgid="6033964325069060422">"মা<xliff:g id="SEPARATOR">=</xliff:g>মাস্কট"</item>
     <item msgid="6077458941399984780">"ন<xliff:g id="SEPARATOR">=</xliff:g>নম ফেন"</item>
-    <item msgid="935474308903572975">"পি<xliff:g id="SEPARATOR">=</xliff:g>পিয়ংইয়েন"</item>
+    <item msgid="1245515372520913197">"পি<xliff:g id="SEPARATOR">=</xliff:g>পিয়ংইয়েন<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"কা<xliff:g id="SEPARATOR">=</xliff:g>কাতার"</item>
     <item msgid="1667243110545095146">"রে<xliff:g id="SEPARATOR">=</xliff:g>রেঙ্গুন"</item>
     <item msgid="4460370766685855731">"রি<xliff:g id="SEPARATOR">=</xliff:g>রিয়াদ"</item>
     <item msgid="4229224905931739201">"সা<xliff:g id="SEPARATOR">=</xliff:g>সাইগন"</item>
     <item msgid="8705359848250215620">"সি<xliff:g id="SEPARATOR">=</xliff:g>সিউল"</item>
-    <item msgid="583367295371395814">"সা<xliff:g id="SEPARATOR">=</xliff:g>সাংহাই"</item>
+    <item msgid="3814881931186962624">"সা<xliff:g id="SEPARATOR">=</xliff:g>সাংহাই<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"সি<xliff:g id="SEPARATOR">=</xliff:g>সিঙ্গাপুর"</item>
-    <item msgid="1972491729911039207">"তা<xliff:g id="SEPARATOR">=</xliff:g>তাইপেই"</item>
+    <item msgid="8982451946156859368">"তা<xliff:g id="SEPARATOR">=</xliff:g>তাইপেই<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"তে<xliff:g id="SEPARATOR">=</xliff:g>তেহরান"</item>
     <item msgid="8629402941285674273">"তে<xliff:g id="SEPARATOR">=</xliff:g>তেল আভিভ"</item>
-    <item msgid="8499164674454654525">"টো<xliff:g id="SEPARATOR">=</xliff:g>টোকিও"</item>
+    <item msgid="76330681636547168">"টো<xliff:g id="SEPARATOR">=</xliff:g>টোকিও<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"উ<xliff:g id="SEPARATOR">=</xliff:g>উলানবাটর"</item>
     <item msgid="2028626988021468640">"বা<xliff:g id="SEPARATOR">=</xliff:g>বারমুডা"</item>
     <item msgid="4527109966513690429">"কা<xliff:g id="SEPARATOR">=</xliff:g>কানারি"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"রে<xliff:g id="SEPARATOR">=</xliff:g>রেনু"</item>
     <item msgid="9155068631060038769">"বা<xliff:g id="SEPARATOR">=</xliff:g>ব্ল্যাক রক সিটি"</item>
     <item msgid="8498761319928979900">"দো<xliff:g id="SEPARATOR">=</xliff:g>দোহা"</item>
-    <item msgid="8307897251088048641">"বে<xliff:g id="SEPARATOR">=</xliff:g>বেইজিং"</item>
+    <item msgid="5327010922199714808">"বে<xliff:g id="SEPARATOR">=</xliff:g>বেইজিং<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"ম<xliff:g id="SEPARATOR">=</xliff:g>মুম্বাই"</item>
     <item msgid="6668274273067049125">"দি<xliff:g id="SEPARATOR">=</xliff:g>দিল্লি"</item>
-    <item msgid="2933410189478233292">"ও<xliff:g id="SEPARATOR">=</xliff:g>ওসাকা"</item>
+    <item msgid="7199039603593847813">"ও<xliff:g id="SEPARATOR">=</xliff:g>ওসাকা<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"লা<xliff:g id="SEPARATOR">=</xliff:g>লাহোর"</item>
     <item msgid="1448378291805481500">"সা<xliff:g id="SEPARATOR">=</xliff:g>সানা"</item>
     <item msgid="5233119846682408301">"বা<xliff:g id="SEPARATOR">=</xliff:g>বার্সেলোনা"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"কে<xliff:g id="SEPARATOR">=</xliff:g>কেমব্রিজ"</item>
     <item msgid="759409010285366934">"কা<xliff:g id="SEPARATOR">=</xliff:g>কার্কল্যান্ড"</item>
     <item msgid="6308007059287569663">"মা<xliff:g id="SEPARATOR">=</xliff:g>ম্যাডিসন"</item>
-    <item msgid="6971636434858330021">"গু<xliff:g id="SEPARATOR">=</xliff:g>গুয়াংঝো"</item>
+    <item msgid="2077617905582224600">"গু<xliff:g id="SEPARATOR">=</xliff:g>গুয়াংঝো<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"হা<xliff:g id="SEPARATOR">=</xliff:g>হায়দ্রাবাদ"</item>
     <item msgid="3032295682584784261">"রে<xliff:g id="SEPARATOR">=</xliff:g>রেস্টন"</item>
     <item msgid="7722837296297332268">"বে<xliff:g id="SEPARATOR">=</xliff:g>বেলো হরিজন্তে"</item>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 8884bd6..1ae0afa 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"ঘড়ি দেখান"</string>
     <string name="hide_clock" msgid="3217727306480505694">"ঘড়ি লুকান"</string>
     <string name="label" msgid="162189613902857319">"লেবেল"</string>
+    <string name="on_switch" msgid="2297966258029227449">"চালু আছে"</string>
+    <string name="off_switch" msgid="3381070073851148013">"বন্ধ আছে"</string>
     <string name="default_label" msgid="5590025289805630372">"অ্যালার্ম"</string>
     <string name="set_alarm" msgid="9148359866152726808">"অ্যালার্ম সেট করুন"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"কম্পন"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"পুনরাবৃত্তি করুন"</string>
     <string name="alert" msgid="6506982899651975645">"অ্যালার্ম রিংটোন"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"কাস্টম রিংটোন"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"টাইমারের মেয়াদ শেষ হয়ে গেছে"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"নীরব"</string>
     <string name="ringtone" msgid="9110746249688559579">"রিংটোন"</string>
     <string name="time" msgid="8067216534232296518">"সময়"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"আগামীকাল"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> পর্যন্ত স্নুজ হয়ে থাকবে"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"আসন্ন এলার্ম"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"আপনার মিসড অ্যালার্ম মুছে ফেলা হয়েছে"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"এক মিনিটেরও কম সময় বাকি আছে"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> বাকি"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> বাকি"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> বাকি"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"এক মিনিটেরও কম সময় বাকি আছে"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> বাকি আছে"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"বাকি আছে"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"বাকি আছে"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"এখন থেকে ১ মিনিটের কম সময়ের জন্য অ্যালার্ম সেট করা হয়েছে।"</item>
     <item msgid="6002066367368421848">"এখন থেকে <xliff:g id="DAYS">%1$s</xliff:g>-র জন্য অ্যালার্ম সেট করা হয়েছে।"</item>
@@ -101,6 +104,10 @@
       <item quantity="one">মিনিট</item>
       <item quantity="other">মিনিট</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"ধীরে ধীরে ভলিউম বড়ান"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"বন্ধ"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> সেকেন্ড"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"সেকেন্ড"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"এর পরে নীরব করুন"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> মিনিট</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"ফেরান"</string>
     <string name="delete" msgid="5732434972457000541">"মুছুন"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"অ্যালার্মের ভলিউম"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"নীরব"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"নীরব"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"অজানা"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"অ্যালার্ম স্নুজ বা খারিজ করুন।"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (পরে মনে করা)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"<xliff:g id="TIME">%s</xliff:g> এর জন্য অ্যালার্ম সেট হয়েছে। বাতিল করার জন্য ছোঁন।"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"রিংটোন লোড হচ্ছে…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"ঘড়িতে টাইমারের জন্য সাউন্ড প্লেব্যাক পরিষেবা।"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"অ্যালার্ম সেট করুন"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"অ্যালার্ম"</string>
     <string name="menu_timer" msgid="6459070074762877114">"টাইমার"</string>
     <string name="menu_clock" msgid="5612760670606829805">"ঘড়ি"</string>
@@ -167,11 +173,12 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"নাম অনুসারে সাজান"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"নির্বাচন করা শহরগুলি"</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_start_button" msgid="8373422516681242270">"শুরু করুন"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"ল্যাপ"</string>
+    <string name="sw_share_button" msgid="4478648110382859382">"ভাগ করুন"</string>
     <string name="hours_label" msgid="3393478155635368097">"ঘ."</string>
     <string name="minutes_label" msgid="3568098128251438588">"মি."</string>
     <string name="seconds_label" msgid="124655952824003246">"সে."</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"আমার সময় <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"ল্যাপ সময়:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g> টি ল্যাপ"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> ঘন্টা</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ঘন্টা</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 মিনিট যোগ করুন"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 মিনিট যোগ করুন"</string>
     <string name="timer_stop" msgid="3361154678667736722">"থামান"</string>
-    <string name="timer_done" msgid="2375990511982914051">"সম্পন্ন"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"সব টাইমার বন্ধ করুন"</string>
     <string name="timer_reset" msgid="7848424809190171640">"পুনরায় সেট করুন"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"বাতিল করুন"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"টাইমার বাতিল করা হয়েছে"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"সময় শেষ"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g>টি টাইমারের সময় শেষ হয়েছে"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"টাইমার"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"সর্বোচ্চ ৪টি টাইমার"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"বিরাম দিন"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"সমস্ত টাইমার পুনরায় সেট করুন"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"আপনি আসলেই এক গতিময় দৈত্য।"</item>
     <item msgid="6332879039890727169">"আপনার শ্রমের ফসল উপভোগ করুন।"</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"শহর"</string>
     <string name="clock_settings" msgid="8317286807280600391">"ঘড়ি"</string>
     <string name="clock_style" msgid="2265011060429742344">"শৈলী"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"তারিখ এবং সময় পরিবর্তন করুন"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"অ্যানালগ"</item>
     <item msgid="8483930821046925592">"ডিজিটাল"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> এ টিক চিহ্ন দেওয়া হয়েছে"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> থেকে টিক চিহ্ন সরানো হয়েছে"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"মার্শাল আইল্যান্ডস"</item>
     <item msgid="4196408495909011020">"মিডওয়ে আইল্যান্ড"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"জাকার্তা"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"অ্যালার্মগুলি"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"বিজ্ঞপ্তি চালানোর জন্য স্টপওয়াচ পরিষেবা"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"থেমেছে"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"টাইমার বিজ্ঞপ্তিগুলি থেকে কাজগুলি প্রক্রিয়া করে"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"স্টপওয়াচ বিজ্ঞপ্তিগুলি থেকে কাজগুলি প্রক্রিয়া করে"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"বিরাম দেওয়া হয়েছে"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"খারিজ করতে সোয়াইপ করুন"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"পরে মনে করিয়ে দিতে বামে সোয়াইপ করুন"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"মনে করিয়ে দিতে বাম দিকে বা খারিজ করতে ডান দিকে সোয়াইপ করুন"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"টাইমারগুলো"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"টাইমার রিংয়ের শব্দ"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"টাইমার থেমেছে"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> টি টাইমার বন্ধ হয়েছে"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"টাইমারে বিরাম দেওয়া হয়েছে"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g>টি টাইমারে বিরাম দেওয়া হয়েছে"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"আপনার টাইমারগুলি দেখার জন্য ছোঁন"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> টি টাইমার"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"পরবর্তী টাইমার: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"কোনো অ্যালার্ম নাই"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"কোনো অ্যালার্ম সেট করা নেই"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"কোনো আসন্ন অ্যালার্ম নাই"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"অবৈধ সময় <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> -এ কোনো অ্যালার্ম নেই"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"কোনো সময়সূচী নেই"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"কোনো লেবেল নির্দিষ্ট করা নেই"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"লেবেলটিতে কোনো অ্যালার্ম নির্দিষ্ট করা নেই"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"স্টপওয়াচ ইতিমধ্যেই চলছে"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"স্টপওয়াচ চলছে না"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"স্টপওয়াচটি এখন চালু থাকায় এটিকে পুনরায় সেট করা যাবে না"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"স্টপওয়াচ বন্ধ হয়েছে"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"স্টপ ওয়াচকে বিরাম দেওয়া হয়েছে"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"স্টপওয়াচ পুনরায় সেট হয়েছে"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"স্টপওয়াচ ল্যাপ করা হয়েছে"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"স্টপওয়াচ শুরু হয়েছে"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"এই সময়ের জন্য কোনো অ্যালার্ম পূর্বনির্ধারিত করা নেই"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> অ্যালার্ম খারিজ করা হয়েছে"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g> -এ অ্যালার্ম সেট করা আছে"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"কোনো টাইমার সেট করা নেই"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"টাইমার মুছে ফেলা হয়েছে"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"টাইমার ইতিমধ্যেই চলছে"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"আপনার অনুরোধ সম্পূর্ণ করা যায়নি, একাধিক টাইমার উপলব্ধ রয়েছে"</string>
-    <string name="timer_started" msgid="6715582052946641641">"টাইমার শুরু হয়েছে"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"কোনো টাইমার বিদ্যমান নেই"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"একটির থেকে বেশি টাইমার বিদ্যমান"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"টাইমরটিকে সরানো হয়েছে৷"</string>
     <string name="timer_created" msgid="4381027137335885547">"টাইমার তৈরি হয়েছে"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"অবৈধ টাইমার দৈর্ঘ্য"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"টাইমার পুনরায় সেট করা হয়েছে"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"টাইমার পুনরায় সেট করা যাবে না কারণ এটি এখনও চলছে৷ পুনরায় সেট করতে টাইমার বন্ধ করুন৷"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"টাইমার ইতিমধ্যেই থেমে গেছে"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"টাইমার মুছে ফেলা হয়েছে"</string>
+    <string name="timer_started" msgid="6715582052946641641">"টাইমার শুরু হয়েছে"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"অবৈধ টাইমার দৈর্ঘ্য"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"কোনো শহর নির্বাচিত নেই"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"আপনার নির্দিষ্ট করা শহরটি উপলব্ধ নেই"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"এই শহরটি ইতিমধ্যেই যোগ করা হয়েছে"</string>
diff --git a/res/values-bs-rBA/array.xml b/res/values-bs-rBA/array.xml
deleted file mode 100644
index 2c1fad1..0000000
--- a/res/values-bs-rBA/array.xml
+++ /dev/null
@@ -1,322 +0,0 @@
-<?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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="cities_names">
-    <item msgid="4653806289288974388">"<xliff:g id="SEPARATOR">=</xliff:g>Abidžan"</item>
-    <item msgid="4864167603178202155">"<xliff:g id="SEPARATOR">=</xliff:g>Akra"</item>
-    <item msgid="6478898553803167749">"<xliff:g id="SEPARATOR">=</xliff:g>Adis Abeba"</item>
-    <item msgid="5618029992528436448">"<xliff:g id="SEPARATOR">=</xliff:g>Alžir"</item>
-    <item msgid="2906834750114790793">"<xliff:g id="SEPARATOR">=</xliff:g>Blantyre"</item>
-    <item msgid="8153571933836629863">"<xliff:g id="SEPARATOR">=</xliff:g>Brazavil"</item>
-    <item msgid="3703129580594640833">"<xliff:g id="SEPARATOR">=</xliff:g>Kairo"</item>
-    <item msgid="2300915410194647320">"<xliff:g id="SEPARATOR">=</xliff:g>Kazablanka"</item>
-    <item msgid="1217039002304887948">"<xliff:g id="SEPARATOR">=</xliff:g>Konakri"</item>
-    <item msgid="8775104707806220928">"<xliff:g id="SEPARATOR">=</xliff:g>Dakar"</item>
-    <item msgid="5948764589113643811">"<xliff:g id="SEPARATOR">=</xliff:g>Dar es Salam"</item>
-    <item msgid="6306254507715416077">"DŽ<xliff:g id="SEPARATOR">=</xliff:g>Džibuti"</item>
-    <item msgid="4286108029159501866">"<xliff:g id="SEPARATOR">=</xliff:g>Freetown"</item>
-    <item msgid="4514786733035528116">"<xliff:g id="SEPARATOR">=</xliff:g>Gaborone"</item>
-    <item msgid="7367496854968219671">"<xliff:g id="SEPARATOR">=</xliff:g>Harare"</item>
-    <item msgid="6837746379726020288">"<xliff:g id="SEPARATOR">=</xliff:g>Johannesburg"</item>
-    <item msgid="6284185156591171506">"<xliff:g id="SEPARATOR">=</xliff:g>Kampala"</item>
-    <item msgid="3299518884693668985">"<xliff:g id="SEPARATOR">=</xliff:g>Kartum"</item>
-    <item msgid="4614879508966043969">"<xliff:g id="SEPARATOR">=</xliff:g>Kigali"</item>
-    <item msgid="8878437043772547732">"<xliff:g id="SEPARATOR">=</xliff:g>Kinšasa"</item>
-    <item msgid="6325601635544067909">"<xliff:g id="SEPARATOR">=</xliff:g>Lagos"</item>
-    <item msgid="6094357506290323524">"<xliff:g id="SEPARATOR">=</xliff:g>Maseru"</item>
-    <item msgid="7270525814400329098">"<xliff:g id="SEPARATOR">=</xliff:g>Mogadišu"</item>
-    <item msgid="353110101402547540">"<xliff:g id="SEPARATOR">=</xliff:g>Najrobi"</item>
-    <item msgid="1688121892646984549">"<xliff:g id="SEPARATOR">=</xliff:g>São Tomé"</item>
-    <item msgid="3642219084651687800">"<xliff:g id="SEPARATOR">=</xliff:g>Timbuktu"</item>
-    <item msgid="7287513493631179463">"<xliff:g id="SEPARATOR">=</xliff:g>Tripoli"</item>
-    <item msgid="5052614613671591560">"<xliff:g id="SEPARATOR">=</xliff:g>Tunis"</item>
-    <item msgid="7976303179193839859">"<xliff:g id="SEPARATOR">=</xliff:g>Anchorage"</item>
-    <item msgid="193703779380497120">"<xliff:g id="SEPARATOR">=</xliff:g>Mendoza"</item>
-    <item msgid="5448884981082519628">"<xliff:g id="SEPARATOR">=</xliff:g>Aruba"</item>
-    <item msgid="1577938273323914773">"<xliff:g id="SEPARATOR">=</xliff:g>Asunsion"</item>
-    <item msgid="5617155978105010520">"<xliff:g id="SEPARATOR">=</xliff:g>Barbados"</item>
-    <item msgid="3600025702357376322">"<xliff:g id="SEPARATOR">=</xliff:g>Belize"</item>
-    <item msgid="2847679817118467051">"<xliff:g id="SEPARATOR">=</xliff:g>Bogota"</item>
-    <item msgid="9029003541681282929">"<xliff:g id="SEPARATOR">=</xliff:g>Buenos Aires"</item>
-    <item msgid="2338367960332622522">"<xliff:g id="SEPARATOR">=</xliff:g>Kankun"</item>
-    <item msgid="4339797536047170278">"<xliff:g id="SEPARATOR">=</xliff:g>Karakas"</item>
-    <item msgid="9199080438977757863">"<xliff:g id="SEPARATOR">=</xliff:g>Kajman"</item>
-    <item msgid="1993203473281589891">"<xliff:g id="SEPARATOR">=</xliff:g>Chicago"</item>
-    <item msgid="7990342776303470263">"<xliff:g id="SEPARATOR">=</xliff:g>Kostarika"</item>
-    <item msgid="5676109900908808628">"<xliff:g id="SEPARATOR">=</xliff:g>Kurasao"</item>
-    <item msgid="5519120432577564812">"<xliff:g id="SEPARATOR">=</xliff:g>Dawson Creek"</item>
-    <item msgid="2126228972377380680">"<xliff:g id="SEPARATOR">=</xliff:g>Denver"</item>
-    <item msgid="3298410632922319193">"<xliff:g id="SEPARATOR">=</xliff:g>Detroit"</item>
-    <item msgid="2819032085688382805">"<xliff:g id="SEPARATOR">=</xliff:g>Dominika"</item>
-    <item msgid="6170433208654553821">"<xliff:g id="SEPARATOR">=</xliff:g>Edmonton"</item>
-    <item msgid="795461860173291499">"<xliff:g id="SEPARATOR">=</xliff:g>El Salvador"</item>
-    <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
-    <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
-    <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Gvatemala"</item>
-    <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Gvajana"</item>
-    <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
-    <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
-    <item msgid="3733555435078090201">"<xliff:g id="SEPARATOR">=</xliff:g>Indianapolis"</item>
-    <item msgid="226982663848410981">"<xliff:g id="SEPARATOR">=</xliff:g>Knox"</item>
-    <item msgid="3815293080342229459">"<xliff:g id="SEPARATOR">=</xliff:g>Marengo"</item>
-    <item msgid="6594853515451547389">"<xliff:g id="SEPARATOR">=</xliff:g>Petersburg"</item>
-    <item msgid="6091571889213283534">"<xliff:g id="SEPARATOR">=</xliff:g>Tell City"</item>
-    <item msgid="3089369312058696669">"<xliff:g id="SEPARATOR">=</xliff:g>Vevaj"</item>
-    <item msgid="1334860422444068943">"<xliff:g id="SEPARATOR">=</xliff:g>Vincennes"</item>
-    <item msgid="7775105082093691756">"<xliff:g id="SEPARATOR">=</xliff:g>Winamac"</item>
-    <item msgid="4043335541899184547">"<xliff:g id="SEPARATOR">=</xliff:g>Kingston"</item>
-    <item msgid="1063757593477259280">"<xliff:g id="SEPARATOR">=</xliff:g>Nuestra Señora de La Paz"</item>
-    <item msgid="349901732062388869">"<xliff:g id="SEPARATOR">=</xliff:g>Lima"</item>
-    <item msgid="4977592519316837842">"<xliff:g id="SEPARATOR">=</xliff:g>Los Angeles"</item>
-    <item msgid="7713051790509638572">"<xliff:g id="SEPARATOR">=</xliff:g>Louisville"</item>
-    <item msgid="8460620935898405225">"<xliff:g id="SEPARATOR">=</xliff:g>Managua"</item>
-    <item msgid="8328345293081464192">"<xliff:g id="SEPARATOR">=</xliff:g>Martinique"</item>
-    <item msgid="8010357327448619637">"<xliff:g id="SEPARATOR">=</xliff:g>Mendoza"</item>
-    <item msgid="2046777213916219253">"<xliff:g id="SEPARATOR">=</xliff:g>Metlakatla"</item>
-    <item msgid="2227885609632709258">"<xliff:g id="SEPARATOR">=</xliff:g>Mexico City"</item>
-    <item msgid="9089629663998569289">"<xliff:g id="SEPARATOR">=</xliff:g>Monterrey"</item>
-    <item msgid="2782276175306930748">"<xliff:g id="SEPARATOR">=</xliff:g>Montevideo"</item>
-    <item msgid="4942386959622269480">"<xliff:g id="SEPARATOR">=</xliff:g>Montreal"</item>
-    <item msgid="3068203952968918165">"<xliff:g id="SEPARATOR">=</xliff:g>Nasau"</item>
-    <item msgid="4234515454127289962">"<xliff:g id="SEPARATOR">=</xliff:g>New York"</item>
-    <item msgid="1660551302087304308">"<xliff:g id="SEPARATOR">=</xliff:g>Beulah"</item>
-    <item msgid="415823390775449071">"<xliff:g id="SEPARATOR">=</xliff:g>Centar"</item>
-    <item msgid="6644186958433380884">"<xliff:g id="SEPARATOR">=</xliff:g>Novi Salem"</item>
-    <item msgid="6408587617047971798">"<xliff:g id="SEPARATOR">=</xliff:g>Panama"</item>
-    <item msgid="5576899364199447991">"<xliff:g id="SEPARATOR">=</xliff:g>Phoenix"</item>
-    <item msgid="5541266909095409447">"<xliff:g id="SEPARATOR">=</xliff:g>Port of Spain"</item>
-    <item msgid="6417519313622785932">"<xliff:g id="SEPARATOR">=</xliff:g>Port-au-Prince"</item>
-    <item msgid="2078589249210571366">"<xliff:g id="SEPARATOR">=</xliff:g>Portoriko"</item>
-    <item msgid="8522030474373927681">"<xliff:g id="SEPARATOR">=</xliff:g>Santo Domingo"</item>
-    <item msgid="4763853453317431594">"<xliff:g id="SEPARATOR">=</xliff:g>Sao Paolo"</item>
-    <item msgid="2713153284784311646">"<xliff:g id="SEPARATOR">=</xliff:g>St. Johns"</item>
-    <item msgid="8252666620333105271">"<xliff:g id="SEPARATOR">=</xliff:g>St. Kitts"</item>
-    <item msgid="4851597775036027515">"<xliff:g id="SEPARATOR">=</xliff:g>Sv. Lucija"</item>
-    <item msgid="2395485473100271503">"<xliff:g id="SEPARATOR">=</xliff:g>Sv. Tomas"</item>
-    <item msgid="4148037555658225145">"<xliff:g id="SEPARATOR">=</xliff:g>Tihuana"</item>
-    <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
-    <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
-    <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Južni pol"</item>
-    <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
-    <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almati"</item>
-    <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Aman"</item>
-    <item msgid="1795426532295280371">"<xliff:g id="SEPARATOR">=</xliff:g>Anadir"</item>
-    <item msgid="7194236926158343552">"<xliff:g id="SEPARATOR">=</xliff:g>Aktau"</item>
-    <item msgid="4796350130854360870">"<xliff:g id="SEPARATOR">=</xliff:g>Bagdad"</item>
-    <item msgid="4020105434451091851">"<xliff:g id="SEPARATOR">=</xliff:g>Bahrein"</item>
-    <item msgid="3895868797052686484">"<xliff:g id="SEPARATOR">=</xliff:g>Baku"</item>
-    <item msgid="228001522630057957">"<xliff:g id="SEPARATOR">=</xliff:g>Bangkok"</item>
-    <item msgid="5555647809114820537">"<xliff:g id="SEPARATOR">=</xliff:g>Bejrut"</item>
-    <item msgid="2960873998178478784">"<xliff:g id="SEPARATOR">=</xliff:g>Kalkuta"</item>
-    <item msgid="8765555959722950691">"<xliff:g id="SEPARATOR">=</xliff:g>Damask"</item>
-    <item msgid="4979709428925196546">"<xliff:g id="SEPARATOR">=</xliff:g>Daka"</item>
-    <item msgid="310419600200885308">"<xliff:g id="SEPARATOR">=</xliff:g>Dubai"</item>
-    <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
-    <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
-    <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Ši Min"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
-    <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
-    <item msgid="758800913783999425">"DŽ<xliff:g id="SEPARATOR">=</xliff:g>Džakarta"</item>
-    <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
-    <item msgid="1664426577433326419">"<xliff:g id="SEPARATOR">=</xliff:g>Kabul"</item>
-    <item msgid="7700349511508357396">"<xliff:g id="SEPARATOR">=</xliff:g>Karači"</item>
-    <item msgid="5273241794521591984">"<xliff:g id="SEPARATOR">=</xliff:g>Katmandu"</item>
-    <item msgid="4754850915168634158">"<xliff:g id="SEPARATOR">=</xliff:g>Kuala Lumpur"</item>
-    <item msgid="5187849635785055693">"<xliff:g id="SEPARATOR">=</xliff:g>Kuvajt"</item>
-    <item msgid="2923385979252179376">"<xliff:g id="SEPARATOR">=</xliff:g>Makau"</item>
-    <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
-    <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Muskat"</item>
-    <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Pnom Pen"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang"</item>
-    <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
-    <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangun"</item>
-    <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Rijad"</item>
-    <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Sajgon"</item>
-    <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Šangaj"</item>
-    <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Tajpeh"</item>
-    <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
-    <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
-    <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulan Bator"</item>
-    <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermudi"</item>
-    <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Kanari"</item>
-    <item msgid="4886308317040330383">"<xliff:g id="SEPARATOR">=</xliff:g>Kabo Verde"</item>
-    <item msgid="1003307362164178007">"<xliff:g id="SEPARATOR">=</xliff:g>Rejkjavik"</item>
-    <item msgid="6742010412815268657">"<xliff:g id="SEPARATOR">=</xliff:g>Stanley"</item>
-    <item msgid="5659389449738592757">"<xliff:g id="SEPARATOR">=</xliff:g>Adelaide"</item>
-    <item msgid="4567804576346784523">"<xliff:g id="SEPARATOR">=</xliff:g>Brisbane"</item>
-    <item msgid="8730590400362815585">"<xliff:g id="SEPARATOR">=</xliff:g>Canberra"</item>
-    <item msgid="6416990927714140153">"<xliff:g id="SEPARATOR">=</xliff:g>Darwin"</item>
-    <item msgid="3073969292696516135">"<xliff:g id="SEPARATOR">=</xliff:g>Melbourne"</item>
-    <item msgid="1719286228375722176">"<xliff:g id="SEPARATOR">=</xliff:g>Novi Južni Wales"</item>
-    <item msgid="3663940748056976266">"<xliff:g id="SEPARATOR">=</xliff:g>Perth"</item>
-    <item msgid="3383881736858438153">"<xliff:g id="SEPARATOR">=</xliff:g>Queensland"</item>
-    <item msgid="971889339240879138">"<xliff:g id="SEPARATOR">=</xliff:g>Sydney"</item>
-    <item msgid="5542803438162180311">"<xliff:g id="SEPARATOR">=</xliff:g>Victoria"</item>
-    <item msgid="11828841481838883">"<xliff:g id="SEPARATOR">=</xliff:g>Newfoundland"</item>
-    <item msgid="1734331918410561807">"<xliff:g id="SEPARATOR">=</xliff:g>Saskatchewan"</item>
-    <item msgid="9184412695613864979">"<xliff:g id="SEPARATOR">=</xliff:g>Uskršnji otok"</item>
-    <item msgid="1014282454239014527">"<xliff:g id="SEPARATOR">=</xliff:g>Amsterdam"</item>
-    <item msgid="4928363054269791193">"<xliff:g id="SEPARATOR">=</xliff:g>Andora"</item>
-    <item msgid="912290900213826368">"<xliff:g id="SEPARATOR">=</xliff:g>Atina"</item>
-    <item msgid="6097000352459209495">"<xliff:g id="SEPARATOR">=</xliff:g>Belfast"</item>
-    <item msgid="3285885824311481790">"<xliff:g id="SEPARATOR">=</xliff:g>Beograd"</item>
-    <item msgid="911055049821251982">"<xliff:g id="SEPARATOR">=</xliff:g>Berlin"</item>
-    <item msgid="9099244516556291111">"<xliff:g id="SEPARATOR">=</xliff:g>Bratislava"</item>
-    <item msgid="158977749726480076">"<xliff:g id="SEPARATOR">=</xliff:g>Brisel"</item>
-    <item msgid="8875102297676173346">"<xliff:g id="SEPARATOR">=</xliff:g>Bukurešt"</item>
-    <item msgid="804451569472542912">"<xliff:g id="SEPARATOR">=</xliff:g>Budimpešta"</item>
-    <item msgid="6827506774445509939">"<xliff:g id="SEPARATOR">=</xliff:g>Kišinjev"</item>
-    <item msgid="487345893088732797">"<xliff:g id="SEPARATOR">=</xliff:g>Kopenhagen"</item>
-    <item msgid="7760953471297773537">"<xliff:g id="SEPARATOR">=</xliff:g>Dublin"</item>
-    <item msgid="323414429034825249">"<xliff:g id="SEPARATOR">=</xliff:g>Gibraltar"</item>
-    <item msgid="1785566206078328830">"<xliff:g id="SEPARATOR">=</xliff:g>Helsinki"</item>
-    <item msgid="5938185647271923359">"<xliff:g id="SEPARATOR">=</xliff:g>Otok Man"</item>
-    <item msgid="5974864320735263245">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
-    <item msgid="3567775364750772947">"<xliff:g id="SEPARATOR">=</xliff:g>Kijev"</item>
-    <item msgid="540344101798867007">"<xliff:g id="SEPARATOR">=</xliff:g>Lisabon"</item>
-    <item msgid="5091062403792923657">"<xliff:g id="SEPARATOR">=</xliff:g>London"</item>
-    <item msgid="7075006205000490364">"<xliff:g id="SEPARATOR">=</xliff:g>Luksemburg"</item>
-    <item msgid="4901781246584739451">"<xliff:g id="SEPARATOR">=</xliff:g>Madrid"</item>
-    <item msgid="9047080834315777144">"<xliff:g id="SEPARATOR">=</xliff:g>Malta"</item>
-    <item msgid="8200456520732452034">"<xliff:g id="SEPARATOR">=</xliff:g>Minsk"</item>
-    <item msgid="5452744619736513383">"<xliff:g id="SEPARATOR">=</xliff:g>Monako"</item>
-    <item msgid="3513517408062322298">"<xliff:g id="SEPARATOR">=</xliff:g>Moskva"</item>
-    <item msgid="7917103295878081674">"<xliff:g id="SEPARATOR">=</xliff:g>Oslo"</item>
-    <item msgid="4245547231693746977">"<xliff:g id="SEPARATOR">=</xliff:g>Pariz"</item>
-    <item msgid="3778652900196715557">"<xliff:g id="SEPARATOR">=</xliff:g>Prag"</item>
-    <item msgid="1827175423974383675">"<xliff:g id="SEPARATOR">=</xliff:g>Riga"</item>
-    <item msgid="2095130417232677930">"<xliff:g id="SEPARATOR">=</xliff:g>Rim"</item>
-    <item msgid="7631654618289353520">"<xliff:g id="SEPARATOR">=</xliff:g>San Marino"</item>
-    <item msgid="7219835179107610398">"<xliff:g id="SEPARATOR">=</xliff:g>Sarajevo"</item>
-    <item msgid="7199868165463282240">"<xliff:g id="SEPARATOR">=</xliff:g>Simferopol"</item>
-    <item msgid="2786395006682246794">"<xliff:g id="SEPARATOR">=</xliff:g>Skoplje"</item>
-    <item msgid="4706927178872100023">"<xliff:g id="SEPARATOR">=</xliff:g>Sofija"</item>
-    <item msgid="1982417589953195308">"<xliff:g id="SEPARATOR">=</xliff:g>Štokholm"</item>
-    <item msgid="1596083919400921960">"<xliff:g id="SEPARATOR">=</xliff:g>Tallin"</item>
-    <item msgid="3079313598974879114">"<xliff:g id="SEPARATOR">=</xliff:g>Vatikan"</item>
-    <item msgid="6516636001856910888">"<xliff:g id="SEPARATOR">=</xliff:g>Beč"</item>
-    <item msgid="6377314532157945456">"<xliff:g id="SEPARATOR">=</xliff:g>Viljnus"</item>
-    <item msgid="3427175235616698721">"<xliff:g id="SEPARATOR">=</xliff:g>Varšava"</item>
-    <item msgid="8404354243761332922">"<xliff:g id="SEPARATOR">=</xliff:g>Zagreb"</item>
-    <item msgid="1457280242717152391">"<xliff:g id="SEPARATOR">=</xliff:g>Cirih"</item>
-    <item msgid="1065940089741359291">"<xliff:g id="SEPARATOR">=</xliff:g>Antananarivo"</item>
-    <item msgid="5176181880014090003">"<xliff:g id="SEPARATOR">=</xliff:g>Maldivi"</item>
-    <item msgid="8281854645557426433">"<xliff:g id="SEPARATOR">=</xliff:g>Mauricijus"</item>
-    <item msgid="2686249517389816420">"<xliff:g id="SEPARATOR">=</xliff:g>Auckland"</item>
-    <item msgid="279925671775807392">"<xliff:g id="SEPARATOR">=</xliff:g>Fidži"</item>
-    <item msgid="7971492669765264840">"<xliff:g id="SEPARATOR">=</xliff:g>Guam"</item>
-    <item msgid="889371273355762733">"<xliff:g id="SEPARATOR">=</xliff:g>Honolulu"</item>
-    <item msgid="5516500578074269817">"<xliff:g id="SEPARATOR">=</xliff:g>Kiritimati"</item>
-    <item msgid="2740704911915073056">"<xliff:g id="SEPARATOR">=</xliff:g>Noumea"</item>
-    <item msgid="8732832728949672807">"<xliff:g id="SEPARATOR">=</xliff:g>Samoa"</item>
-    <item msgid="6489500698846864993">"<xliff:g id="SEPARATOR">=</xliff:g>Tahiti"</item>
-    <item msgid="3983121625709442324">"<xliff:g id="SEPARATOR">=</xliff:g>Antigua"</item>
-    <item msgid="2650510570709806322">"<xliff:g id="SEPARATOR">=</xliff:g>Austin"</item>
-    <item msgid="5257283506227357911">"<xliff:g id="SEPARATOR">=</xliff:g>Boston"</item>
-    <item msgid="6326368958641850267">"<xliff:g id="SEPARATOR">=</xliff:g>Calgary"</item>
-    <item msgid="8830116365016232583">"<xliff:g id="SEPARATOR">=</xliff:g>Columbus"</item>
-    <item msgid="6986556538341883811">"<xliff:g id="SEPARATOR">=</xliff:g>Dallas"</item>
-    <item msgid="836479352500251902">"<xliff:g id="SEPARATOR">=</xliff:g>Knoxville"</item>
-    <item msgid="8495291458467378851">"<xliff:g id="SEPARATOR">=</xliff:g>Memphis"</item>
-    <item msgid="2788807207554683122">"<xliff:g id="SEPARATOR">=</xliff:g>Miami"</item>
-    <item msgid="3984640407077208471">"<xliff:g id="SEPARATOR">=</xliff:g>Minneapolis"</item>
-    <item msgid="6997305266329324161">"<xliff:g id="SEPARATOR">=</xliff:g>Ottawa"</item>
-    <item msgid="5191741145278683016">"<xliff:g id="SEPARATOR">=</xliff:g>Philadelphia"</item>
-    <item msgid="5898032730733441936">"<xliff:g id="SEPARATOR">=</xliff:g>Portland"</item>
-    <item msgid="9070160716002203069">"<xliff:g id="SEPARATOR">=</xliff:g>San Diego"</item>
-    <item msgid="1829944133410079040">"<xliff:g id="SEPARATOR">=</xliff:g>San Francisco"</item>
-    <item msgid="8407905318529692654">"<xliff:g id="SEPARATOR">=</xliff:g>Salt Lake City"</item>
-    <item msgid="3091392589347990898">"<xliff:g id="SEPARATOR">=</xliff:g>San Jose"</item>
-    <item msgid="7080627414383807284">"<xliff:g id="SEPARATOR">=</xliff:g>San Salvador"</item>
-    <item msgid="3430371213266252049">"<xliff:g id="SEPARATOR">=</xliff:g>Seattle"</item>
-    <item msgid="9177491393818757071">"<xliff:g id="SEPARATOR">=</xliff:g>St. Louis"</item>
-    <item msgid="6234359686676312837">"<xliff:g id="SEPARATOR">=</xliff:g>Washington D.C."</item>
-    <item msgid="4325057056005132331">"<xliff:g id="SEPARATOR">=</xliff:g>Houston"</item>
-    <item msgid="38148255938075867">"<xliff:g id="SEPARATOR">=</xliff:g>San Antonio"</item>
-    <item msgid="3601481860893666763">"<xliff:g id="SEPARATOR">=</xliff:g>Jacksonville"</item>
-    <item msgid="3987471437354665534">"<xliff:g id="SEPARATOR">=</xliff:g>Baltimore"</item>
-    <item msgid="3389674262267006887">"<xliff:g id="SEPARATOR">=</xliff:g>Nashville"</item>
-    <item msgid="7521690366448637309">"<xliff:g id="SEPARATOR">=</xliff:g>Milwaukee"</item>
-    <item msgid="2231069593975740859">"<xliff:g id="SEPARATOR">=</xliff:g>Oklahoma City"</item>
-    <item msgid="1970008262236914770">"<xliff:g id="SEPARATOR">=</xliff:g>Las Vegas"</item>
-    <item msgid="7113811028304266017">"<xliff:g id="SEPARATOR">=</xliff:g>Albuquerque"</item>
-    <item msgid="6481469458896644678">"<xliff:g id="SEPARATOR">=</xliff:g>Tucson"</item>
-    <item msgid="5970857542995467466">"<xliff:g id="SEPARATOR">=</xliff:g>Sacramento"</item>
-    <item msgid="1999267306329214429">"<xliff:g id="SEPARATOR">=</xliff:g>Atlanta"</item>
-    <item msgid="8761847787537443648">"<xliff:g id="SEPARATOR">=</xliff:g>Cleveland"</item>
-    <item msgid="2987455647692324208">"<xliff:g id="SEPARATOR">=</xliff:g>New Orleans"</item>
-    <item msgid="8104109426412705845">"<xliff:g id="SEPARATOR">=</xliff:g>Tampa"</item>
-    <item msgid="1410067233842240795">"<xliff:g id="SEPARATOR">=</xliff:g>Pittsburgh"</item>
-    <item msgid="3339955740367374442">"<xliff:g id="SEPARATOR">=</xliff:g>Cincinnati"</item>
-    <item msgid="6091407424772799978">"<xliff:g id="SEPARATOR">=</xliff:g>Mountain View"</item>
-    <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
-    <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
-    <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
-    <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
-    <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
-    <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
-    <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sana"</item>
-    <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barselona"</item>
-    <item msgid="9146746514265554721">"<xliff:g id="SEPARATOR">=</xliff:g>Minhen"</item>
-    <item msgid="157866084892734979">"<xliff:g id="SEPARATOR">=</xliff:g>Milano"</item>
-    <item msgid="2787346322341414963">"<xliff:g id="SEPARATOR">=</xliff:g>Frankfurt"</item>
-    <item msgid="8407511504088696581">"<xliff:g id="SEPARATOR">=</xliff:g>Hanoj"</item>
-    <item msgid="5184417944073499453">"<xliff:g id="SEPARATOR">=</xliff:g>Ankara"</item>
-    <item msgid="4028784954452197920">"<xliff:g id="SEPARATOR">=</xliff:g>Bangalore"</item>
-    <item msgid="190152483600862776">"<xliff:g id="SEPARATOR">=</xliff:g>Brazilija"</item>
-    <item msgid="8009516135735104388">"<xliff:g id="SEPARATOR">=</xliff:g>Cape Town"</item>
-    <item msgid="6057191797622953016">"<xliff:g id="SEPARATOR">=</xliff:g>Islamabad"</item>
-    <item msgid="2702029416591153210">"<xliff:g id="SEPARATOR">=</xliff:g>Rio de Žaneiro"</item>
-    <item msgid="1753927312634708098">"<xliff:g id="SEPARATOR">=</xliff:g>Ann Arbor"</item>
-    <item msgid="4225721108475278979">"<xliff:g id="SEPARATOR">=</xliff:g>Boulder"</item>
-    <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
-    <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
-    <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzou"</item>
-    <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hajderabad"</item>
-    <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
-    <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
-    <item msgid="3593516299122577780">"<xliff:g id="SEPARATOR">=</xliff:g>Santjago"</item>
-    <item msgid="2293331653589266583">"<xliff:g id="SEPARATOR">=</xliff:g>Monrovija"</item>
-    <item msgid="7899128359620301710">"<xliff:g id="SEPARATOR">=</xliff:g>Kolombo"</item>
-    <item msgid="5294489752262543829">"<xliff:g id="SEPARATOR">=</xliff:g>Chihuahua"</item>
-    <item msgid="8066356061184206341">"<xliff:g id="SEPARATOR">=</xliff:g>Salvador"</item>
-    <item msgid="4806867741334453982">"<xliff:g id="SEPARATOR">=</xliff:g>Gurgaon"</item>
-    <item msgid="2585780177649876827">"<xliff:g id="SEPARATOR">=</xliff:g>Manchester"</item>
-    <item msgid="234104953526248139">"<xliff:g id="SEPARATOR">=</xliff:g>Kijev"</item>
-    <item msgid="5245429461217350012">"<xliff:g id="SEPARATOR">=</xliff:g>St. Petersburg"</item>
-    <item msgid="6738531308006017215">"<xliff:g id="SEPARATOR">=</xliff:g>Krakov"</item>
-    <item msgid="8972702613339139467">"<xliff:g id="SEPARATOR">=</xliff:g>Vroclav"</item>
-    <item msgid="187278924459096566">"<xliff:g id="SEPARATOR">=</xliff:g>Hamburg"</item>
-    <item msgid="6173267862207394917">"<xliff:g id="SEPARATOR">=</xliff:g>Oulu"</item>
-    <item msgid="5639324478037405990">"<xliff:g id="SEPARATOR">=</xliff:g>Haifa"</item>
-    <item msgid="3157180661352354058">"<xliff:g id="SEPARATOR">=</xliff:g>San Juan"</item>
-    <item msgid="6995939579417282715">"<xliff:g id="SEPARATOR">=</xliff:g>Tegusigalpa"</item>
-    <item msgid="1641840677391275004">"<xliff:g id="SEPARATOR">=</xliff:g>Paramaribo"</item>
-    <item msgid="7317049454800260290">"<xliff:g id="SEPARATOR">=</xliff:g>Kito"</item>
-    <item msgid="4524380876433343244">"LJ<xliff:g id="SEPARATOR">=</xliff:g>Ljubljana"</item>
-  </string-array>
-</resources>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
deleted file mode 100644
index d9c411b..0000000
--- a/res/values-bs-rBA/strings.xml
+++ /dev/null
@@ -1,415 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2007 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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="6674495003718166674">"Sat"</string>
-    <string name="alarm_list_title" msgid="7589940465292950600">"Alarmi"</string>
-    <string name="add_alarm" msgid="5976616107390962899">"Dodaj alarm"</string>
-    <string name="menu_desk_clock" msgid="3241995064554071588">"Stoni sat"</string>
-    <string name="menu_edit_alarm" msgid="7204602994918829751">"Uredi alarm"</string>
-    <string name="delete_alarm" msgid="3457780990646206817">"Izbriši alarm"</string>
-    <string name="enable_alarm" msgid="1834599140632142536">"Uključi alarm"</string>
-    <string name="disable_alarm" msgid="5889378670229554109">"Isključi alarm"</string>
-    <string name="delete_alarm_confirm" msgid="6578572637340860840">"Izbrisati ovaj alarm?"</string>
-    <string name="show_clock" msgid="8358759982675616915">"Prikaži sat"</string>
-    <string name="hide_clock" msgid="3217727306480505694">"Sakrij sat"</string>
-    <string name="label" msgid="162189613902857319">"Oznaka"</string>
-    <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
-    <string name="set_alarm" msgid="9148359866152726808">"Postavi alarm"</string>
-    <string name="alarm_vibrate" msgid="3476686921490362230">"Vibracija"</string>
-    <string name="alarm_repeat" msgid="7242985466344233206">"Ponovi"</string>
-    <string name="alert" msgid="6506982899651975645">"Melodija zvona alarma"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Prilagođena melodija zvona"</string>
-    <string name="ringtone" msgid="9110746249688559579">"Melodija zvona"</string>
-    <string name="time" msgid="8067216534232296518">"Vrijeme"</string>
-    <string name="alarm_tomorrow" msgid="131356848787643420">"Sutra"</string>
-    <string name="alarm_today" msgid="7873594221106531654">"Danas"</string>
-    <string name="alarm_alert_wake_up" msgid="6790780716498252583">"Buđenje!"</string>
-    <string name="alarm_alert_off_action_text" msgid="2459925305288819812">"Isključeno"</string>
-    <string name="alarm_alert_dismiss_text" msgid="4942914605480888820">"Odbaci"</string>
-    <string name="alarm_alert_dismiss_now_text" msgid="3272183025444682500">"Odbaci sada"</string>
-    <string name="alarm_missed_title" msgid="3828345099754063392">"Propušteni alarm"</string>
-    <string name="alarm_missed_text" msgid="6585658367289194023">"<xliff:g id="ALARM_TIME">%s</xliff:g> - <xliff:g id="ALARM_LABEL">%s</xliff:g>"</string>
-    <string name="alarm_alert_snoozed_text" msgid="7064642998528766113">"Odloženo"</string>
-    <plurals name="alarm_alert_snooze_duration" formatted="false" msgid="7844300009062867865">
-      <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> min.</item>
-      <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> min.</item>
-      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> min.</item>
-    </plurals>
-    <string name="alarm_alert_off_text" msgid="4472073417593915002">"Alarm isključen"</string>
-    <string name="alarm_alert_snooze_text" msgid="1774416052207651584">"Odloži"</string>
-    <plurals name="alarm_alert_snooze_set" formatted="false" msgid="3212729193036041768">
-      <item quantity="one">Odlaganje na <xliff:g id="MINUTES">%d</xliff:g> minutu.</item>
-      <item quantity="few">Odlaganje na <xliff:g id="MINUTES">%d</xliff:g> minute.</item>
-      <item quantity="other">Odlaganje na <xliff:g id="MINUTES">%d</xliff:g> minuta.</item>
-    </plurals>
-    <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Odlaganje do <xliff:g id="TIME">%s</xliff:g>"</string>
-    <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Predstojeći alarm"</string>
-    <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Propušteni alarm je izbrisan"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Preostalo je manje od minute"</item>
-    <item msgid="83197792732433351">"Preostalo <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Preostalo <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Preostalo <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
-  <string-array name="alarm_set">
-    <item msgid="6450913786084215050">"Alarm postavljen za manje od 1 minute od sada."</item>
-    <item msgid="6002066367368421848">"Alarm postavljen za <xliff:g id="DAYS">%1$s</xliff:g> od sada."</item>
-    <item msgid="8824719306247973774">"Alarm postavljen za <xliff:g id="HOURS">%2$s</xliff:g> od sada."</item>
-    <item msgid="8182406852935468862">"Alarm postavljen za <xliff:g id="DAYS">%1$s</xliff:g> i <xliff:g id="HOURS">%2$s</xliff:g> od sada."</item>
-    <item msgid="2532279224777213194">"Alarm postavljen za <xliff:g id="MINUTES">%3$s</xliff:g> od sada."</item>
-    <item msgid="5936557894247187717">"Alarm postavljen za <xliff:g id="DAYS">%1$s</xliff:g> i <xliff:g id="MINUTES">%3$s</xliff:g> od sada."</item>
-    <item msgid="9115697840826129603">"Alarm postavljen za <xliff:g id="HOURS">%2$s</xliff:g> i <xliff:g id="MINUTES">%3$s</xliff:g> od sada."</item>
-    <item msgid="2332583385137381060">"Alarm postavljen za <xliff:g id="DAYS">%1$s</xliff:g>, <xliff:g id="HOURS">%2$s</xliff:g> i <xliff:g id="MINUTES">%3$s</xliff:g> od sada."</item>
-  </string-array>
-    <plurals name="days" formatted="false" msgid="3706846447285206235">
-      <item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> dan</item>
-      <item quantity="few"><xliff:g id="NUMBER">%s</xliff:g> dana</item>
-      <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> dana</item>
-    </plurals>
-    <plurals name="hours" formatted="false" msgid="3871283109767171655">
-      <item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> sat</item>
-      <item quantity="few"><xliff:g id="NUMBER">%s</xliff:g> sata</item>
-      <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> sati</item>
-    </plurals>
-    <plurals name="minutes" formatted="false" msgid="5484431721696058697">
-      <item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> minuta</item>
-      <item quantity="few"><xliff:g id="NUMBER">%s</xliff:g> minute</item>
-      <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> minuta</item>
-    </plurals>
-    <string name="every_day" msgid="4100909974923444602">"Svakog dana"</string>
-    <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="snooze_duration_title" msgid="1097309861110780483">"Dužina odlaganja"</string>
-    <plurals name="snooze_duration" formatted="false" msgid="3112918131095248271">
-      <item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> minuta</item>
-      <item quantity="few"><xliff:g id="NUMBER">%s</xliff:g> minute</item>
-      <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> minuta</item>
-    </plurals>
-    <plurals name="snooze_picker_label" formatted="false" msgid="322739253661747732">
-      <item quantity="one">minuta</item>
-      <item quantity="few">minute</item>
-      <item quantity="other">minuta</item>
-    </plurals>
-    <string name="auto_silence_title" msgid="2012754009554434544">"Utišaj nakon"</string>
-    <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
-      <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuta</item>
-      <item quantity="few"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minute</item>
-      <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuta</item>
-    </plurals>
-    <string name="auto_silence_never" msgid="4821982647348750809">"Nikad"</string>
-  <string-array name="auto_silence_entries">
-    <item msgid="3024545954917711306">"1 minuta"</item>
-    <item msgid="5431906692406316549">"5 minuta"</item>
-    <item msgid="7742728812068919959">"10 minuta"</item>
-    <item msgid="2855948657259647629">"15 minuta"</item>
-    <item msgid="6330196381284475079">"20 minuta"</item>
-    <item msgid="7809240121716151904">"25 minuta"</item>
-    <item msgid="4278641338024561333">"Nikad"</item>
-  </string-array>
-    <string name="week_start_title" msgid="4268917518596832096">"Prvi dan sedmice"</string>
-  <string-array name="week_start_entries">
-    <item msgid="9010198173394482639">"subota"</item>
-    <item msgid="3993530639455360921">"nedjelja"</item>
-    <item msgid="8594709368683324282">"ponedjeljak"</item>
-  </string-array>
-    <string name="done" msgid="6509722361933858451">"Gotovo"</string>
-    <string name="revert" msgid="9100911171235162926">"Vrati"</string>
-    <string name="delete" msgid="5732434972457000541">"Izbriši"</string>
-    <string name="alarm_volume_title" msgid="8506245173912428522">"Jačina zvuka alarma"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Nečujno"</string>
-    <string name="alarm_notify_text" msgid="4891014685945904766">"Odložite ili odbacite alarm."</string>
-    <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (odloženo)"</string>
-    <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm postavljen za <xliff:g id="TIME">%s</xliff:g>. Dodirnite da otkažete."</string>
-    <string name="volume_button_setting_title" msgid="6937131248843413357">"Dugmad za jačinu zvuka"</string>
-    <string name="volume_button_dialog_title" msgid="8768042543750036853">"Radnja dugmeta"</string>
-  <string-array name="volume_button_setting_entries">
-    <item msgid="7972756698723318690">"Odloži"</item>
-    <item msgid="3450979320164769576">"Odbaci"</item>
-    <item msgid="6302517608411378024">"Ne radi ništa"</item>
-  </string-array>
-    <string name="default_ringtone_setting_title" msgid="4549726190682964245">"Postavi zadanu melodiju zvona"</string>
-    <string name="alarm_button_description" msgid="740283647046258651">"Alarmi"</string>
-    <string name="gallery_button_description" msgid="1151743663255257668">"Galerija"</string>
-    <string name="music_button_description" msgid="1626593420810117999">"Muzika"</string>
-    <string name="nightmode_button_description" msgid="990894208217576381">"Priguši"</string>
-    <string name="home_button_description" msgid="3383859096809056157">"Pokretač"</string>
-    <string name="desk_clock_button_description" msgid="4207371097361657274">"Prikaz sata"</string>
-    <string name="label_description" msgid="8736179296142915727">"Oznaka"</string>
-    <string name="ringtone_description" msgid="7580922112921069925">"Melodija zvona"</string>
-    <string name="weather_fetch_failure" msgid="3425804832021006835">"Informacije o vremenskim prilikama trenutno nisu dostupne."</string>
-    <string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Usluga reproduciranja zvuka za alarme postavljene u aplikaciji Sat."</string>
-    <string name="loading_ringtone" msgid="6523322777415268044">"Učitavanje melodije zvona…"</string>
-    <string name="timer_ring_service_desc" msgid="2620214305660322415">"Usluga reproduciranja zvuka za tajmere postavljene u aplikaciji Sat."</string>
-    <string name="control_set_alarm" msgid="2194676418924016327">"Postavi alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
-    <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
-    <string name="menu_timer" msgid="6459070074762877114">"Tajmer"</string>
-    <string name="menu_clock" msgid="5612760670606829805">"Sat"</string>
-    <string name="menu_stopwatch" msgid="3396117705293574701">"Štoperica"</string>
-    <string name="button_alarms" msgid="3907838219512538763">"Dodaj alarm"</string>
-    <string name="button_cities" msgid="4555761857494501363">"Gradovi"</string>
-    <string name="button_menu" msgid="6050484561842120282">"Više opcija"</string>
-    <string name="menu_item_settings" msgid="1413723516369078665">"Postavke"</string>
-    <string name="menu_item_help" msgid="4570953476186849841">"Pomoć"</string>
-    <string name="menu_item_night_mode" msgid="3486930302245398975">"Noćni način rada"</string>
-    <string name="menu_item_sort_by_gmt_offset" msgid="3120860422682721706">"Sortiraj po vremenu"</string>
-    <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sortiraj po nazivu"</string>
-    <string name="selected_cities_label" msgid="3607479399424246605">"Odabrani gradovi"</string>
-    <string name="sw_resume_button" msgid="2569360966002022248">"Nastavi"</string>
-    <string name="sw_start_button" msgid="8373422516681242270">"Pokreni"</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">"Podijeli"</string>
-    <string name="hours_label" msgid="3393478155635368097">"h"</string>
-    <string name="minutes_label" msgid="3568098128251438588">"m"</string>
-    <string name="seconds_label" msgid="124655952824003246">"s"</string>
-    <string name="hours_label_description" msgid="8652842524970971830">"sati"</string>
-    <string name="minutes_label_description" msgid="965686733490357796">"minuta"</string>
-    <string name="seconds_label_description" msgid="3821620053141299692">"sekundi"</string>
-    <string name="zero" msgid="7102083421938355017">"0"</string>
-    <string name="sw_share_main" msgid="7703563468204234405">"Moje vrijeme je <xliff:g id="TIME">%s</xliff:g>"</string>
-    <string name="sw_share_laps" msgid="614390674795945007">"Vremena krugova:"</string>
-    <string name="sw_notification_lap_number" msgid="3535420316052647126">"Krug <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
-    <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
-      <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> sat</item>
-      <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> sata</item>
-      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> sati</item>
-    </plurals>
-    <plurals name="Nminutes_description" formatted="false" msgid="6373760365221990859">
-      <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> minuta</item>
-      <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> minute</item>
-      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> minuta</item>
-    </plurals>
-    <plurals name="Nseconds_description" formatted="false" msgid="6456500168536594889">
-      <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> sekunda</item>
-      <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> sekunde</item>
-      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> sekundi</item>
-    </plurals>
-    <string name="timer_add_timer" msgid="862733633862574752">"Dodaj tajmer"</string>
-    <string name="timer_start" msgid="6158486445614356442">"Pokreni"</string>
-    <string name="timer_delete" msgid="8699122001991909302">"Izbriši"</string>
-    <string name="timer_descriptive_delete" msgid="8794915342760383536">"Izbriši <xliff:g id="NUMBER_STRING">%s</xliff:g>"</string>
-    <string name="timer_plus_one" msgid="6631211310420106116">"Dodajte 1 minutu"</string>
-    <string name="timer_plus_1_min" msgid="8645224089494875062">"Dodaj 1 min."</string>
-    <string name="timer_stop" msgid="3361154678667736722">"Zaustavi"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Gotovo"</string>
-    <string name="timer_reset" msgid="7848424809190171640">"Poništi"</string>
-    <string name="timer_cancel" msgid="3572868404230815644">"Otkaži"</string>
-    <string name="timer_times_up" msgid="9190440395938519009">"Vrijeme je isteklo"</string>
-    <string name="timer_notification_label" msgid="4933184831583137249">"Tajmer"</string>
-    <string name="timers_max_count_reached" msgid="9140022846793903813">"Maksimalno 4 tajmera"</string>
-  <string-array name="sw_share_strings">
-    <item msgid="842841032273927988">"Ni ptica trkačica nije ovako brza."</item>
-    <item msgid="6332879039890727169">"Uživaj, zasluženo je."</item>
-    <item msgid="815382761274660130">"Androidi su brzi, ali ne kao ti!"</item>
-    <item msgid="7916250650982813737">"Uh."</item>
-    <item msgid="6836603904515182333">"Vrhunsko vrij3m3."</item>
-    <item msgid="7508085100680861631">"Monstruozno brzo."</item>
-    <item msgid="5961245252909589573">"Ovo je bilo brže od munje, hoćemo još jednom?"</item>
-    <item msgid="5211891900854545940">"Idemo ludo, idemo jako."</item>
-    <item msgid="9071353477103826053">"Tebi se baš žuri."</item>
-    <item msgid="3785193933691117181">"Brže od svjetlosti."</item>
-  </string-array>
-    <string name="home_label" msgid="4436139365695453870">"Matična"</string>
-    <string name="cities_activity_title" msgid="8552462751129256730">"Gradovi"</string>
-    <string name="clock_settings" msgid="8317286807280600391">"Sat"</string>
-    <string name="clock_style" msgid="2265011060429742344">"Stil"</string>
-  <string-array name="clock_style_entries">
-    <item msgid="917900462224167608">"Analogni"</item>
-    <item msgid="8483930821046925592">"Digitalni"</item>
-  </string-array>
-    <string name="automatic_home_clock" msgid="6274174710735449252">"Automatski sat s vremenom kod kuće"</string>
-    <string name="automatic_home_clock_summary" msgid="6020476321040807273">"Dok putujete u područje u kojem vrijedi drugo vrijeme, dodajte sat za vrijeme kod kuće"</string>
-    <string name="home_time_zone" msgid="9199730676287974501">"Matična vremenska zona"</string>
-    <string name="home_time_zone_title" msgid="807894493443834624">"Matična vremenska zona"</string>
-    <string name="time_picker_cancel" msgid="7437106489606013077">"Otkaži"</string>
-    <string name="time_picker_set" msgid="331153175471468051">"Uredu"</string>
-    <string name="time_picker_time_seperator" msgid="7484926510054777041">":"</string>
-    <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
-    <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
-    <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
-  <string-array name="timezone_labels">
-    <item msgid="5495601234086197399">"Marshallovi otoci"</item>
-    <item msgid="4196408495909011020">"Otok Midway"</item>
-    <item msgid="1414384194857730006">"Havaji"</item>
-    <item msgid="2687091371581931926">"Aljaska"</item>
-    <item msgid="1922100269679049660">"Pacifičko vrijeme"</item>
-    <item msgid="7156402158716866161">"Tihuana"</item>
-    <item msgid="1144117502254612241">"Arizona"</item>
-    <item msgid="101284182011722637">"Chihuahua"</item>
-    <item msgid="689121094232986897">"Planinsko vrijeme"</item>
-    <item msgid="5445331923942302756">"Centralna Amerika"</item>
-    <item msgid="2749806434052452351">"Centralno vrijeme"</item>
-    <item msgid="3997138870229703753">"Mexico City"</item>
-    <item msgid="5425567073027744888">"Saskatchewan"</item>
-    <item msgid="2877342865396629368">"Bogota"</item>
-    <item msgid="568682398893899670">"Istočno vrijeme"</item>
-    <item msgid="668135984541863866">"Venecuela"</item>
-    <item msgid="3737474220861486223">"Atlantsko vrijeme (Barbados)"</item>
-    <item msgid="6279116051273436870">"Atlantsko vrijeme (Kanada)"</item>
-    <item msgid="8513382867172014244">"Manaus"</item>
-    <item msgid="7776299003105932407">"Santiago"</item>
-    <item msgid="8636989494746218677">"Newfoundland"</item>
-    <item msgid="4402541016410147505">"Brazilija"</item>
-    <item msgid="2251184440733164084">"Buenos Aires"</item>
-    <item msgid="6202926618569004969">"Grenland"</item>
-    <item msgid="2355275037115290628">"Montevideo"</item>
-    <item msgid="1377549694711708945">"Srednje Atlantsko"</item>
-    <item msgid="3457671272126347981">"Azori"</item>
-    <item msgid="3659315141063710840">"Zelenortski otoci"</item>
-    <item msgid="1260941741802367635">"Kazablanka"</item>
-    <item msgid="8275203689687954762">"London, Dablin"</item>
-    <item msgid="5970179539479320905">"Amsterdam, Berlin"</item>
-    <item msgid="5396319478750517962">"Beograd"</item>
-    <item msgid="8688787475056663004">"Brisel"</item>
-    <item msgid="3415827874921681622">"Sarajevo"</item>
-    <item msgid="402008965928320066">"Windhoek"</item>
-    <item msgid="6436942724959275569">"Zapadnoafričko vrijeme"</item>
-    <item msgid="954536568417204026">"Aman, Jordan"</item>
-    <item msgid="8932745482008902551">"Atina, Istanbul"</item>
-    <item msgid="320025725949024510">"Bejrut, Liban"</item>
-    <item msgid="7242083112551905970">"Kairo"</item>
-    <item msgid="7241520146011450419">"Helsinki"</item>
-    <item msgid="2717065017510546526">"Jeruzalem"</item>
-    <item msgid="8698556287741466553">"Minsk"</item>
-    <item msgid="1797598357342084506">"Harare"</item>
-    <item msgid="5169119919905066998">"Bagdad"</item>
-    <item msgid="2615788116201065182">"Moskva"</item>
-    <item msgid="9084354867885584646">"Kuvajt"</item>
-    <item msgid="1351570519986178268">"Najrobi"</item>
-    <item msgid="7094569580635877460">"Teheran"</item>
-    <item msgid="3953138772617909704">"Baku"</item>
-    <item msgid="2868893113598800752">"Tbilisi"</item>
-    <item msgid="7088581865802476373">"Erevan"</item>
-    <item msgid="1941122257623887992">"Dubai"</item>
-    <item msgid="9194797225058249720">"Kabul"</item>
-    <item msgid="6486569254364577332">"Islamabad, Karači"</item>
-    <item msgid="5487724896895412089">"Uralsk"</item>
-    <item msgid="364906869710826982">"Ekaterinburg"</item>
-    <item msgid="2106505051751383358">"Kolkata"</item>
-    <item msgid="6851586621581501447">"Šri Lanka"</item>
-    <item msgid="800438544128213134">"Katmandu"</item>
-    <item msgid="6173621471007643021">"Astana"</item>
-    <item msgid="8645125891971581128">"Jangon"</item>
-    <item msgid="2886407505119737794">"Krasnojarsk"</item>
-    <item msgid="3408222398188107090">"Bangkok"</item>
-    <item msgid="4441612937172851228">"Peking"</item>
-    <item msgid="4936715789028996930">"Hong Kong"</item>
-    <item msgid="4261031143777385525">"Irkutsk"</item>
-    <item msgid="3538060959338191835">"Kuala Lumpur"</item>
-    <item msgid="1438847562643099201">"Perth"</item>
-    <item msgid="3063913827688244383">"Tajpeh"</item>
-    <item msgid="3502757135046564209">"Seul"</item>
-    <item msgid="6107588684519111669">"Tokio, Osaka"</item>
-    <item msgid="4350769099755608471">"Jakutsk"</item>
-    <item msgid="2422707004533526462">"Adelaide"</item>
-    <item msgid="1292192084554134339">"Darwin"</item>
-    <item msgid="1320883699470001716">"Brisbane"</item>
-    <item msgid="5137198806146386527">"Hobart"</item>
-    <item msgid="5920063686933941174">"Sydney, Canberra"</item>
-    <item msgid="615906039696009425">"Vladivostok"</item>
-    <item msgid="7738680449356275374">"Guam"</item>
-    <item msgid="2882915026380778227">"Magadan"</item>
-    <item msgid="8255615641810148152">"Auckland"</item>
-    <item msgid="3027153773466391728">"Fidži"</item>
-    <item msgid="5911600083231840181">"Tonga"</item>
-    <item msgid="5176858645450908751">"Džakarta"</item>
-  </string-array>
-    <string name="alarm_settings" msgid="2947147071388290814">"Alarmi"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Usluga štoperice za pokretanje obavještenja."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Zaustavljeno"</string>
-    <string name="description_direction_right" msgid="5709209043267548985">"Prevucite desno da odbacite"</string>
-    <string name="description_direction_left" msgid="7448141043674998679">"Prevucite lijevo da odložite"</string>
-    <string name="description_direction_both" msgid="1841309486023845685">"Prevucite lijevo da odložite ili desno da odbacite"</string>
-    <string name="timer_stopped" msgid="2730331837832462008">"Tajmer zaustavljen"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Zaustavljenih tajmera: <xliff:g id="NUMBER">%d</xliff:g>"</string>
-    <string name="all_timers_stopped_notif" msgid="278532320068394600">"Dodirnite da vidite tajmer"</string>
-    <string name="timers_in_use" msgid="5570729467344408506">"Tajmeri: <xliff:g id="NUMBER">%d</xliff:g>"</string>
-    <string name="next_timer_notif" msgid="6136454740115613653">"Naredni tajmer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
-    <string name="screensaver_settings" msgid="7013450738357352801">"Postavke za čuvara ekrana"</string>
-    <string name="night_mode_title" msgid="5983813889469616299">"Noćni način rada"</string>
-    <string name="night_mode_summary" msgid="1017350187324162631">"Veoma prigušen ekran (za mračne prostorije)"</string>
-    <string name="expand_alarm" msgid="7392616528943305020">"Proširi alarm"</string>
-    <string name="collapse_alarm" msgid="3561772046433483980">"Skupi alarm"</string>
-    <string name="alarm_undo" msgid="5710042601177655254">"opozovi radnju"</string>
-    <string name="alarm_deleted" msgid="6131529309389084785">"Alarm izbrisan"</string>
-    <string name="slash" msgid="2077577763821006919">"/"</string>
-    <string name="world_day_of_week_label" msgid="5911196322328341288">"/ <xliff:g id="LABEL">%s</xliff:g>"</string>
-    <string name="next_alarm_description" msgid="2650244835760747046">"Naredni alarm: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="alarms_selected" msgid="1075308195332888260">"Odabrano <xliff:g id="ALARMS">%d</xliff:g>"</string>
-    <string name="deleted_message" msgid="1220848140260509437">"Izbrisan"</string>
-    <plurals name="alarm_delete_confirmation" formatted="false" msgid="3591262014329613293">
-      <item quantity="one">Izbrisati odabrane alarme?</item>
-      <item quantity="few">Izbrisati odabrane alarme?</item>
-      <item quantity="other">Izbrisati odabrane alarme?</item>
-    </plurals>
-    <string name="timer_delete_confirmation" msgid="2815524107015816453">"Izbrisati ovaj tajmer?"</string>
-    <string name="city_delete_confirmation" msgid="1783441538785676299">"Ukloniti ovaj grad?"</string>
-    <string name="digital_gadget" msgid="2326954556720571358">"Digitalni sat"</string>
-    <string name="no_alarms" msgid="6429431324842022917">"Nema alarma"</string>
-    <string name="no_alarms_set" msgid="4887558279496044764">"Nema postavljenih alarma"</string>
-    <string name="no_upcoming_alarms" msgid="2889840988069436254">"NEMA PREDSTOJEĆIH ALARMA"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm prij."</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
-    <string name="invalid_time" msgid="2782334750243998633">"Nevažeće vrijeme <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
-    <string name="no_alarm_at" msgid="8140632482969193119">"Nema alarma u <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
-    <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nema zakazanih alarma"</string>
-    <string name="no_label_specified" msgid="2008482054428460626">"Nije navedena oznaka"</string>
-    <string name="no_alarms_with_label" msgid="6250998794542941665">"Nijedan alarm nema oznaku"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Štoperica je već pokrenuta"</string>
-    <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Štoperica nije pokrenuta"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Štoperica se ne može poništiti jer je pokrenuta"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Štoperica zaustavljena"</string>
-    <string name="stopwatch_reset" msgid="7585914953721021042">"Poništavanje štoperice"</string>
-    <string name="stopwatch_lapped" msgid="5844686448815550482">"Štoperica je izmjerila krug"</string>
-    <string name="stopwatch_started" msgid="7843882246387176304">"Štoperica pokrenuta"</string>
-    <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Nema zakazanih alarma za ovo vrijeme"</string>
-    <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarm za <xliff:g id="ALARM_TIME">%s</xliff:g> odbačen"</string>
-    <string name="alarm_is_set" msgid="5503226382620011088">"Alarm postavljen za <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Nije postavljen tajmer"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Tajmer izbrisan"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Tajmer je već pokrenut"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Nije moguće izvršiti zahtjev, dostupno je više tajmera"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Tajmer pokrenut"</string>
-    <string name="timer_created" msgid="4381027137335885547">"Tajmer kreiran"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Nevažeća dužina tajmera"</string>
-    <string name="timer_was_reset" msgid="6495796785185062631">"Tajmer poništen"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Tajmer se ne može poništiti jer je još uvijek aktivan. Zaustavite tajmer kako biste ga poništili."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Tajmer je već zaustavljen"</string>
-    <string name="no_city_selected" msgid="1007596865203283741">"Nije odabran grad"</string>
-    <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Grad koji ste naveli nije dostupan"</string>
-    <string name="the_city_already_added" msgid="3799050213771793020">"Taj grad je već dodan"</string>
-    <string name="city_added" msgid="1335509457349179514">"<xliff:g id="CITY_NAME">%s</xliff:g> dodan"</string>
-    <string name="city_deleted" msgid="3935141305276867838">"<xliff:g id="CITY_NAME">%s</xliff:g> izbrisan"</string>
-    <string name="alarm_cant_be_dismissed_still_more_than_24_hours_away" msgid="8810520940995307437">"<xliff:g id="ALARM_TIME">%s</xliff:g> alarm se još ne može odbaciti; do njega ima više od 24 sata"</string>
-    <string name="dismiss_alarm" msgid="7204593078688533541">"Odbaci alarm"</string>
-    <string name="pick_alarm_to_dismiss" msgid="5408769235866082896">"Odaberite koji će se alarm odbaciti"</string>
-    <string name="no_firing_alarms" msgid="4986161963178722289">"Nema aktivnih alarma"</string>
-    <string name="alarm_is_snoozed" msgid="7044644119744928846">"Alarm za <xliff:g id="ALARM_TIME">%s</xliff:g> odložen na 10 minuta"</string>
-</resources>
diff --git a/res/values-ca/array.xml b/res/values-ca/array.xml
index 0bf7ccf..e66cc43 100644
--- a/res/values-ca/array.xml
+++ b/res/values-ca/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Gran Turca, Illa"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"C<xliff:g id="SEPARATOR">=</xliff:g>Ciutat de Guatemala"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havana, L\'"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Pol sud"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Pol sud<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Masqat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangun"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riad"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seül"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Xangai"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Xangai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tòquio"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tòquio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulan Bator"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermudes, Illes"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Canàries, Illes"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Pequín"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Pequín<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Bombai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sanà"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Canton"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Canton<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 8727b62..88e5611 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Mostra el rellotge"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Amaga el rellotge"</string>
     <string name="label" msgid="162189613902857319">"Nom de l\'alarma"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Activada"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Desactivada"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarma"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Defineix l\'alarma"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibra"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Repeteix"</string>
     <string name="alert" msgid="6506982899651975645">"So de l\'alarma"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"So de trucada personalitzat"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Temporitzador finalitzat"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silenci"</string>
     <string name="ringtone" msgid="9110746249688559579">"So"</string>
     <string name="time" msgid="8067216534232296518">"Hora"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Demà"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Es posposarà fins a les <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Pròxima alarma"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"L\'alarma perduda s\'ha suprimit"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Queda menys d\'un minut"</item>
-    <item msgid="83197792732433351">"Queden <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Queden <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Queden <xliff:g id="HOURS">%1$s</xliff:g> i <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Queda menys d\'un minut"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Temps restant: <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"restant"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"restants"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"L\'alarma sonarà d\'aquí a menys d\'un minut."</item>
     <item msgid="6002066367368421848">"L\'alarma sonarà d\'aquí a <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minuts</item>
       <item quantity="one">minut</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Apuja el volum gradualment"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Desactivat"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> segons"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"segons"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Silencia després de"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuts</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Reverteix"</string>
     <string name="delete" msgid="5732434972457000541">"Suprimeix"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volum de l\'alarma"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silenciosa"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silenci"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Desconegut"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Posposa o ignora l\'alarma"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (repetida)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarma definida per a les <xliff:g id="TIME">%s</xliff:g>. Toca per cancel·lar."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"S\'està carregant el so..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Servei de reproducció de temporitzadors definits al rellotge."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Defineix l\'alarma"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarma"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Temporitzador"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Rellotge"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Ordena per nom"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Ciutats seleccionades"</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_start_button" msgid="8373422516681242270">"Inicia"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Atura"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Volta"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Comparteix"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"La meva hora: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Durada de les voltes:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Volta <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Núm. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Núm. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> hores</item>
       <item quantity="one">1 hora</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Afegeix 1 minut"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Afegeix 1 minut"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Atura"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Fet"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Atura els temporitzadors"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Restableix"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Cancel·la"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"S\'ha cancel·lat el temporitzador"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"S\'ha esgotat el temps"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Temporitzadors caducats: <xliff:g id="NUM_TIMERS">%d</xliff:g>"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Temporitzador"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"4 temporitzadors com a màxim"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Posa en pausa"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Restableix tots els temporitz."</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Ets un boig del volant."</item>
     <item msgid="6332879039890727169">"Gaudeix dels fruits de la teva feina."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Ciutats"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Rellotge"</string>
     <string name="clock_style" msgid="2265011060429742344">"Estil"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Canvia la data i l\'hora"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analògic"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"S\'ha marcat <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"S\'ha desmarcat <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Illes Marshall"</item>
     <item msgid="4196408495909011020">"Illa de Midway"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmes"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Servei de cronòmetre per executar les notificacions."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Aturat"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Processa les accions de les notificacions del temporitzador."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Processa les accions de les notificacions del cronòmetre."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Aturat"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Llisca cap a la dreta per ignorar"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Llisca cap a l\'esquerra per posposar"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Llisca cap a l\'esquerra per posposar l\'alarma o cap a la dreta per ignorar-la"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Temporitzadors"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"So de trucada del temporitzador"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"S\'ha aturat el temporitzador"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"S\'han aturat <xliff:g id="NUMBER">%d</xliff:g> temporitzadors"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Temporitzador en pausa"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> temporitzadors en pausa"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Toca per veure els temporitzadors"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> temporitzadors"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Pròxim: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Cap alarma"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Sense alarmes"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NO HI HA ALARMES PROPERAMENT"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"L\'hora no és vàlida (<xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>)"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"No hi ha cap alarma a les <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"No s\'ha programat cap alarma"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"No s\'ha especificat cap etiqueta"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"No hi ha cap alarma que contingui l\'etiqueta"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"El cronòmetre ja està en marxa"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"El cronòmetre no s\'ha posat en marxa"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"El cronòmetre no es pot restablir perquè està en funcionament"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"S\'ha aturat el cronòmetre"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"El cronòmetre s\'ha aturat"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"S\'ha restablert el cronòmetre"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"El cronòmetre ha completat una volta"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"S\'ha iniciat el cronòmetre"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"No hi ha cap alarma programada per a aquesta hora"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"L\'alarma <xliff:g id="ALARM_TIME">%s</xliff:g> s\'ha ignorat"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"L\'alarma està definida per a les <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"No s\'ha definit cap temporitzador"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"El temporitzador s\'ha suprimit"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"El temporitzador ja està en marxa"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"No es pot completar la sol·licitud. Hi ha diversos temporitzadors disponibles"</string>
-    <string name="timer_started" msgid="6715582052946641641">"El temporitzador s\'ha iniciat"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"No hi ha temporitzadors"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Hi ha més d\'un temporitzador"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"El temporitzador s\'ha suprimit."</string>
     <string name="timer_created" msgid="4381027137335885547">"S\'ha creat el temporitzador"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"La durada del temporitzador no és vàlida"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"El temporitzador s\'ha restablert"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"El temporitzador no es pot restablir perquè encara està en marxa. Atura\'l per restablir-lo."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"El temporitzador ja s\'ha aturat"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"El temporitzador s\'ha suprimit"</string>
+    <string name="timer_started" msgid="6715582052946641641">"El temporitzador s\'ha iniciat"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"La durada del temporitzador no és vàlida"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"No s\'ha seleccionat cap ciutat"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"La ciutat que has especificat no està disponible"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Aquesta ciutat ja s\'ha afegit"</string>
diff --git a/res/values-cs/array.xml b/res/values-cs/array.xml
index 52c372a..fe2918d 100644
--- a/res/values-cs/array.xml
+++ b/res/values-cs/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"C<xliff:g id="SEPARATOR">=</xliff:g>Ciudad de Guatemala"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"J<xliff:g id="SEPARATOR">=</xliff:g>Jižní pól"</item>
+    <item msgid="498429228419399474">"J<xliff:g id="SEPARATOR">=</xliff:g>Jižní pól<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Ammán"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Či Minovo Město"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jeruzalém"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Maskat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnompenh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pchjongjang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pchjongjang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"K<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangún"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Rijád"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Soul"</item>
-    <item msgid="583367295371395814">"Š<xliff:g id="SEPARATOR">=</xliff:g>Šanghaj"</item>
+    <item msgid="3814881931186962624">"Š<xliff:g id="SEPARATOR">=</xliff:g>Šanghaj<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Tchaj-pej"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Tchaj-pej<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teherán"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulánbátar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermudy"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanárské ostrovy"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Dauhá"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Peking<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"B<xliff:g id="SEPARATOR">=</xliff:g>Bombaj"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Dillí"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Ósaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Ósaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Láhaur"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>San\'á"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanton"</item>
+    <item msgid="2077617905582224600">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanton<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hajdarábád"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 0dc2ce8..9b7d80d 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Zobrazit hodiny"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Skrýt hodiny"</string>
     <string name="label" msgid="162189613902857319">"Popisek"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Zapnuto"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Vypnuto"</string>
     <string name="default_label" msgid="5590025289805630372">"Budík"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Nastavit budík"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrace"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Opakovat"</string>
     <string name="alert" msgid="6506982899651975645">"Vyzváněcí tón budíku"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Vlastní vyzváněcí tón"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Časovač vypršel"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Tiché"</string>
     <string name="ringtone" msgid="9110746249688559579">"Vyzváněcí tón"</string>
     <string name="time" msgid="8067216534232296518">"Čas"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Zítra"</string>
@@ -62,12 +65,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Odloženo do <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Nadcházející budík"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Zmeškaný budík byl smazán"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Zbývá méně než minuta"</item>
-    <item msgid="83197792732433351">"zbývá <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"zbývá <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"zbývá <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Zbývající čas: méně než minuta"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g>: <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g>: <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Zbývající čas: <xliff:g id="HOURS">%1$s</xliff:g> h <xliff:g id="MINUTES">%2$s</xliff:g> min"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"Zbývající čas"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"Zbývající čas"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Budík se spustí za méně než 1 minutu."</item>
     <item msgid="6002066367368421848">"Budík se spustí za <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -115,6 +118,10 @@
       <item quantity="other">minut</item>
       <item quantity="one">1 minuta</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Postupně zvyšovat hlasitost"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Vypnuto"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> s"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"s"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Ztišit po"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="few"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuty</item>
@@ -142,7 +149,8 @@
     <string name="revert" msgid="9100911171235162926">"Vrátit zpět"</string>
     <string name="delete" msgid="5732434972457000541">"Smazat"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Hlasitost budíku"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Tichý"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Tiché"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Neznámé"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Odložit nebo zrušit budík"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (odloženo)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Budík je nastaven na <xliff:g id="TIME">%s</xliff:g>. Dotykem jej zrušíte."</string>
@@ -167,8 +175,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Načítání vyzváněcího tónu..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Služba přehrávání zvuku časovačů nastavených v aplikaci Hodiny."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Nastavit budík"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Budík"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Časovač"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Hodiny"</string>
@@ -183,10 +189,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Seřadit podle názvu"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Vybraná města"</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_start_button" msgid="8373422516681242270">"Spustit"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pozastavit"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Úsek"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Sdílet"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -198,10 +204,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Můj čas je <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Časy etap:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. úsek"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Č. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Č. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> hodiny</item>
       <item quantity="many"><xliff:g id="NUMBER">%d</xliff:g> hodiny</item>
@@ -227,12 +229,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Přidat 1 minutu"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Přidat 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Zastavit"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Hotovo"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Zastavit všechny časovače"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Resetovat"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Zrušit"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Časovač zrušen"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Čas vypršel"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Vypršené časovače: <xliff:g id="NUM_TIMERS">%d</xliff:g>"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Časovač"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Můžete mít maximálně čtyři časovače"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pozastavit"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Reset. časovače"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Jste rychlí jako ďas."</item>
     <item msgid="6332879039890727169">"Vychutnejte si plody své práce."</item>
@@ -249,6 +255,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Města"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Hodiny"</string>
     <string name="clock_style" msgid="2265011060429742344">"Styl"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Změnit datum a čas"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogové"</item>
     <item msgid="8483930821046925592">"Digitální"</item>
@@ -263,6 +270,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"–"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Město <xliff:g id="CITY_NAME">%s</xliff:g> je zaškrtnuto"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Město <xliff:g id="CITY_NAME">%s</xliff:g> není zaškrtnuto"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshallovy ostrovy"</item>
     <item msgid="4196408495909011020">"Midwayské ostrovy"</item>
@@ -351,13 +360,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Budíky"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Služba Stopky ke spouštění upozornění."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Zastaveno"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Zpracovává akce z oznámení časovače."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Zpracovává akce z oznámení stopek."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Pozastaveno"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Přejetím prstem vpravo budík zrušíte."</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Přejetím prsem vlevo budík odložíte."</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Přejetím vlevo budík odložíte, přejetím vpravo jej zrušíte"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Časovače"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Vyzváněcí tón časovače"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Časovač zastaven"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Zastavené časovače (<xliff:g id="NUMBER">%d</xliff:g>)"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Časovač pozastaven"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Pozastavené časovače: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Dotykem zobrazíte časovače"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"Časovače (<xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Další časovač: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -385,35 +398,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Žádné budíky"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Budíky nejsou nastaveny."</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ŽÁDNÉ PLÁNOVANÉ BUDÍKY"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Čas <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g> je neplatný"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Na čas <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> není nastaven žádný budík."</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Žádné plánované budíky"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Není zadán žádný štítek"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Tento štítek neobsahují žádné budíky"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stopky již běží"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stopky neběží"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stopky nelze skrýt, protože jsou momentálně spuštěny"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stopky byly zastaveny"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stopky byly pozastaveny"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stopky byly resetovány"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stopky zaznamenaly mezičas"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stopky byly spuštěny"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Na tento čas není naplánován žádný budík."</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Budík v čase <xliff:g id="ALARM_TIME">%s</xliff:g> byl zrušen"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Budík je nastaven na <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Není nastaven žádný časovač"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Časovač byl smazán"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Časovač již běží"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Požadavek nelze dokončit: časovačů je k dispozici několik."</string>
-    <string name="timer_started" msgid="6715582052946641641">"Časovač byl spuštěn"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Nejsou nastaveny žádné časovače"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Je nastaveno několik časovačů"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Časovač byl odstraněn."</string>
     <string name="timer_created" msgid="4381027137335885547">"Časovač byl vytvořen"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Neplatná délka časovače"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Časovač byl resetován"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Časovač nelze resetovat, protože stále běží. Chcete-li jej resetovat, nejprve jej zastavte."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Časovač již byl zastaven"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Časovač byl smazán"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Časovač byl spuštěn"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Neplatná délka časovače"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Není vybráno žádné město"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Zadané město není k dispozici"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Toto město již bylo přidáno"</string>
diff --git a/res/values-da/array.xml b/res/values-da/array.xml
index 0096ea1..cb8d357 100644
--- a/res/values-da/array.xml
+++ b/res/values-da/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala City"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Sydpolen"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Sydpolen<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Kanariske Øer"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 9fdd766..7d26fd0 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Vis ur"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Skjul ur"</string>
     <string name="label" msgid="162189613902857319">"Etiket"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Til"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Fra"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Angiv alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibration"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Gentag"</string>
     <string name="alert" msgid="6506982899651975645">"Ringetone for alarm"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Tilpasset ringtone"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Timeren er udløbet"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Lydløs"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ringetone"</string>
     <string name="time" msgid="8067216534232296518">"Tid"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"I morgen"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Snoozer indtil <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Kommende alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Din ubesvarede alarm er blevet slettet"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Mindre end 1 minut tilbage"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> tilbage"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> tilbage"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> tilbage"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Mindre end ét minut tilbage"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> og <xliff:g id="MINUTES">%2$s</xliff:g> tilbage"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"tilbage"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"tilbage"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarmen er indstillet til mindre end 1 minut fra nu."</item>
     <item msgid="6002066367368421848">"Alarmen er indstillet til <xliff:g id="DAYS">%1$s</xliff:g> fra nu."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">minutter</item>
       <item quantity="other">minutter</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Skru gradvist op for lyden"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Fra"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> sekunder"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sekunder"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Slukkes efter"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutter</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Annuller"</string>
     <string name="delete" msgid="5732434972457000541">"Slet"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Lydstyrke for alarm"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Lydløs"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Lydløs"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Ukendt"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Udsæt eller afvis alarm."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (udsat)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarmen er indstillet til <xliff:g id="TIME">%s</xliff:g>. Vælg for at annullere."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Indlæser ringetone..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Tjenesten til afspilning af alarmlyd, der angives i uret."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Indstil alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Ur"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sortér efter navn"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Valgte byer"</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_start_button" msgid="8373422516681242270">"Start"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pause"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Omgang"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Del"</string>
     <string name="hours_label" msgid="3393478155635368097">"t"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Min tid er <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Omgangstider:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Omgang <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> timer</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> timer</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Tilføj 1 minut"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Tilføj 1 min."</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stop"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Afvis"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Stop alle timere"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Nulstil"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Annuller"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Timeren blev annulleret"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Tiden er gået"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> timere er udløbet"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Timer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Maks. fire timere"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Sæt på pause"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Nulstil alle timere"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Du er en rigtig fartdjævel."</item>
     <item msgid="6332879039890727169">"Nyd frugterne af dit arbejde."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Byer"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Ur"</string>
     <string name="clock_style" msgid="2265011060429742344">"Urtype"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Skift dato &amp; klokkeslæt"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analog"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> blev markeret"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Markeringen af <xliff:g id="CITY_NAME">%s</xliff:g> blev fjernet"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshalløerne"</item>
     <item msgid="4196408495909011020">"Midwayøen"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmer"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Stopurstjeneste, der skal køre underretningen."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Stoppet"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Behandler handlinger fra underretninger for timeren."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Behandler handlinger fra underretninger for stopuret."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Sat på pause"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Stryg til højre for at slå fra"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Stryg til venstre for at udsætte"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Stryg til venstre for at udsætte eller til højre for at slå fra"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Timere"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ringetone for timeren"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Ur stoppet"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> timere stoppet"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Timeren blev sat på pause"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> timere blev sat på pause"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Tryk for at se dine timere"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> timere"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Næste timer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Ingen alarmer"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Ingen alarmer"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"INGEN KOMMENDE ALARMER"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"t.mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k.mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, t.mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Ugyldigt klokkeslæt <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Der er ingen alarm kl. <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Der er ikke nogen planlagte alarmer"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Der er ikke angivet nogen etiket"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Der er ingen alarmer med etiketten"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stopuret er allerede i gang"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stopuret er ikke i gang"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stopuret kan ikke nulstilles, fordi det kører"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stopuret er stoppet"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stopuret er sat på pause"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stopuret blev nulstillet"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stopuret har registreret en omgangstid"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stopuret er startet"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Der er ikke angivet nogen alarm på dette tidspunkt"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarmen kl. <xliff:g id="ALARM_TIME">%s</xliff:g> er afvist"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarmen er indstillet til <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Der er ikke angivet nogen timer"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Timeren blev slettet"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Timeren er allerede i gang"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Din anmodning kunne ikke gennemføres. Der er flere relevante timere."</string>
-    <string name="timer_started" msgid="6715582052946641641">"Timeren blev igangsat"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Der er ikke nogen timere"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Der er mere end én timer"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Timeren blev fjernet."</string>
     <string name="timer_created" msgid="4381027137335885547">"Timeren er oprettet"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Ugyldig timerlængde"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Timeren blev nulstillet"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Timeren kan ikke nulstilles, da den stadig er i gang. Stop timeren for at nulstille den."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Timeren er allerede stoppet"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Timeren blev slettet"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Timeren blev igangsat"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Ugyldig timerlængde"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Der er ikke valgt nogen by"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Den by, du har angivet, er ikke tilgængelig"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Byen er allerede blevet tilføjet"</string>
diff --git a/res/values-de/array.xml b/res/values-de/array.xml
index 644ddf1..d17cfb7 100644
--- a/res/values-de/array.xml
+++ b/res/values-de/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala-Stadt"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havanna"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Südpol"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Südpol<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho-Chi-Minh-Stadt"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Maskat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pjöngjang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pjöngjang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangun"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riad"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulan-Bator"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Kanarische Inseln"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Peking<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sanaa"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index e1e5c36..b2687a3 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Uhr anzeigen"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Uhr ausblenden"</string>
     <string name="label" msgid="162189613902857319">"Name"</string>
+    <string name="on_switch" msgid="2297966258029227449">"An"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Aus"</string>
     <string name="default_label" msgid="5590025289805630372">"Wecker"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Wecker einstellen"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrieren"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Wiederholen"</string>
     <string name="alert" msgid="6506982899651975645">"Weckton"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Benutzerdefinierter Klingelton"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Timer abgelaufen"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Lautlos"</string>
     <string name="ringtone" msgid="9110746249688559579">"Klingelton"</string>
     <string name="time" msgid="8067216534232296518">"Uhrzeit"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Morgen"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Schlummern bis <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Anstehender Weckruf"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Der entgangene Weckruf wurde gelöscht."</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Nur noch weniger als eine Minute"</item>
-    <item msgid="83197792732433351">"Noch <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Noch <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Noch <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Nur noch weniger als eine Minute"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Noch <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"Noch"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"Noch"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Der Wecker klingelt in weniger als einer Minute."</item>
     <item msgid="6002066367368421848">"Der Wecker klingelt in <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">Minuten</item>
       <item quantity="one">Minute</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Lautstärke schrittweise erhöhen"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Aus"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> Sekunden"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"Sekunden"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Stummschalten nach"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> Minuten</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Rückgängig"</string>
     <string name="delete" msgid="5732434972457000541">"Löschen"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Lautstärke für Wecker"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Lautlos-Modus"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Lautlos"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Unbekannt"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Schlummern oder Beenden"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (Schlummern)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Wecker für <xliff:g id="TIME">%s</xliff:g> gestellt. Zum Abbrechen berühren."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Klingelton wird geladen..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Tonwiedergabedienst für in der Weckfunktion eingestellte Timer"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Wecker einstellen"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Wecker"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Uhr"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Nach Namen sortieren"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Ausgewählte Städte"</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">"Anhalten"</string>
-    <string name="sw_lap_button" msgid="6992264696039004233">"Runde"</string>
     <string name="sw_reset_button" msgid="6616804728322906117">"Reset"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Starten"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Anhalten"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Runde"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Teilen"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Meine Zeit: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Rundenzeiten:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. Runde"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Nr. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Nr. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> Stunden</item>
       <item quantity="one">1 Stunde</item>
@@ -205,28 +207,33 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 Minute hinzufügen"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 Min. hinzufügen"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Anhalten"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Fertig"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Alle Timer anhalten"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Reset"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Abbrechen"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Timer abgebrochen"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Zeit ist abgelaufen."</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> Timer abgelaufen"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Timer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Es können maximal 4 Timer gestellt werden."</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pausieren"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Alle Timer zurücksetzen"</string>
   <string-array name="sw_share_strings">
-    <item msgid="842841032273927988">"Du bist teuflisch schnell."</item>
-    <item msgid="6332879039890727169">"Ernte die Früchte deiner Arbeit!"</item>
-    <item msgid="815382761274660130">"Du bist ja schneller als ein Roboter!"</item>
+    <item msgid="842841032273927988">"Sie sind teuflisch schnell."</item>
+    <item msgid="6332879039890727169">"Ernten Sie die Früchte Ihrer Arbeit!"</item>
+    <item msgid="815382761274660130">"Sie sind ja schneller als ein Roboter!"</item>
     <item msgid="7916250650982813737">"Puh!"</item>
     <item msgid="6836603904515182333">"L33t-Zeiten"</item>
     <item msgid="7508085100680861631">"Wahnsinnsgeschwindigkeit"</item>
     <item msgid="5961245252909589573">"Let\'s do the time warp again!"</item>
     <item msgid="5211891900854545940">"Just a jump to the left."</item>
-    <item msgid="9071353477103826053">"Du hast es ganz schön eilig."</item>
+    <item msgid="9071353477103826053">"Sie haben es ganz schön eilig."</item>
     <item msgid="3785193933691117181">"Photonengeschwindigkeit"</item>
   </string-array>
     <string name="home_label" msgid="4436139365695453870">"Zuhause"</string>
     <string name="cities_activity_title" msgid="8552462751129256730">"Städte"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Uhr"</string>
     <string name="clock_style" msgid="2265011060429742344">"Design"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Datum &amp; Uhrzeit ändern"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analog"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ausgewählt"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> nicht ausgewählt"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshallinseln"</item>
     <item msgid="4196408495909011020">"Midwayinseln"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Wecker"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Benachrichtigung über Stoppuhr-Dienst"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Gestoppt"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Verarbeitet Aktionen von Timer-Benachrichtigungen."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Verarbeitet Aktionen von Stoppuhr-Benachrichtigungen."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Angehalten"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Zum Schließen nach rechts wischen"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Zum Schlummern nach links wischen"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Zum Schlummern nach links, zum Schließen nach rechts wischen"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Timer"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Timer-Klingelton"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Timer gestoppt"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> Timer gestoppt"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Timer pausiert"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> Timer pausiert"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Zum Ansehen der Timer berühren"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> Timer"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Nächster Timer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Keine Wecker"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Keine Wecker"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"Keine anstehenden Alarme"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Ungültige Zeit: <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Kein Weckruf um <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> vorhanden"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Keine eingerichteten Weckrufe"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Kein Name angegeben"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Der Name ist in keinem Weckruf enthalten."</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Die Stoppuhr wird bereits ausgeführt."</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Die Stoppuhr wird nicht ausgeführt."</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Die Stoppuhr kann nicht zurückgesetzt werden, da sie gerade läuft."</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stoppuhr angehalten"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stoppuhr angehalten"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stoppuhr zurückgesetzt"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Runden für Stoppuhr festgelegt"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stoppuhr gestartet"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Für diese Zeit ist kein Weckruf eingerichtet."</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Weckruf um <xliff:g id="ALARM_TIME">%s</xliff:g> wurde verworfen."</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Weckzeit: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Kein Timer eingerichtet"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Timer gelöscht"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Der Timer wird bereits ausgeführt."</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Anfrage kann nicht ausgeführt werden. Mehrere Timer verfügbar."</string>
-    <string name="timer_started" msgid="6715582052946641641">"Timer gestartet"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Keine Timer vorhanden"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Es sind mehrere Timer vorhanden."</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Der Timer wurde entfernt."</string>
     <string name="timer_created" msgid="4381027137335885547">"Timer erstellt"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Ungültige Dauer für Timer"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Timer zurückgesetzt"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Der Timer kann nicht zurückgesetzt werden, da er noch ausgeführt wird. Halte den Timer an, um ihn zurückzusetzen."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Der Timer wurde bereits beendet."</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Timer gelöscht"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Timer gestartet"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Ungültige Dauer für Timer"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Keine Stadt ausgewählt"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Die angegebene Stadt ist nicht verfügbar."</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Diese Stadt wurde bereits hinzugefügt."</string>
diff --git a/res/values-el/array.xml b/res/values-el/array.xml
index a081c04..5cb1ae1 100644
--- a/res/values-el/array.xml
+++ b/res/values-el/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"Φ<xliff:g id="SEPARATOR">=</xliff:g>Φορταλέζα"</item>
     <item msgid="5801558418916235541">"Κ<xliff:g id="SEPARATOR">=</xliff:g>Κόκμπερν Τάουν"</item>
     <item msgid="2103759276235503048">"Γ<xliff:g id="SEPARATOR">=</xliff:g>Γρενάδα"</item>
-    <item msgid="1490069759176391533">"Γ<xliff:g id="SEPARATOR">=</xliff:g>Γουατεμάλα"</item>
+    <item msgid="6216160110733510854">"Γ<xliff:g id="SEPARATOR">=</xliff:g>Γουατεμάλα Σίτι"</item>
     <item msgid="525959305652046261">"Γ<xliff:g id="SEPARATOR">=</xliff:g>Γουιάνα"</item>
     <item msgid="7565596629973190931">"Χ<xliff:g id="SEPARATOR">=</xliff:g>Χάλιφαξ"</item>
     <item msgid="3811169155065582644">"Α<xliff:g id="SEPARATOR">=</xliff:g>Αβάνα"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"Τ<xliff:g id="SEPARATOR">=</xliff:g>Τορόντο"</item>
     <item msgid="1506838283840737263">"Β<xliff:g id="SEPARATOR">=</xliff:g>Βανκούβερ"</item>
     <item msgid="8935386104773857399">"Γ<xliff:g id="SEPARATOR">=</xliff:g>Γουίνιπεγκ"</item>
-    <item msgid="1132634022412399582">"Ν<xliff:g id="SEPARATOR">=</xliff:g>Νότιο Πόλο"</item>
+    <item msgid="498429228419399474">"Ν<xliff:g id="SEPARATOR">=</xliff:g>Νότιο Πόλο<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"Λ<xliff:g id="SEPARATOR">=</xliff:g>Λονγκιαρμπίεν"</item>
     <item msgid="3784788073896028355">"Α<xliff:g id="SEPARATOR">=</xliff:g>Αλμάτι"</item>
     <item msgid="7895695236056852523">"Α<xliff:g id="SEPARATOR">=</xliff:g>Αμάν"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"Γ<xliff:g id="SEPARATOR">=</xliff:g>Γάζα"</item>
     <item msgid="2359068282340162319">"Χ<xliff:g id="SEPARATOR">=</xliff:g>Χεβρώνα"</item>
     <item msgid="6223396610551759129">"Χ<xliff:g id="SEPARATOR">=</xliff:g>Χο Τσι Μινχ"</item>
-    <item msgid="4731022818651322736">"Χ<xliff:g id="SEPARATOR">=</xliff:g>Χονγκ Κονγκ"</item>
+    <item msgid="3439764751788710130">"Χ<xliff:g id="SEPARATOR">=</xliff:g>Χονγκ Κονγκ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"Κ<xliff:g id="SEPARATOR">=</xliff:g>Κωνσταντινούπολη"</item>
     <item msgid="758800913783999425">"Τ<xliff:g id="SEPARATOR">=</xliff:g>Τζακάρτα"</item>
     <item msgid="8956406398692698126">"Ι<xliff:g id="SEPARATOR">=</xliff:g>Ιερουσαλήμ"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"Μ<xliff:g id="SEPARATOR">=</xliff:g>Μανίλα"</item>
     <item msgid="6033964325069060422">"Μ<xliff:g id="SEPARATOR">=</xliff:g>Μουσκάτ"</item>
     <item msgid="6077458941399984780">"Π<xliff:g id="SEPARATOR">=</xliff:g>Πνομ Πενχ"</item>
-    <item msgid="935474308903572975">"Π<xliff:g id="SEPARATOR">=</xliff:g>Πιονγκγιάνγκ"</item>
+    <item msgid="1245515372520913197">"Π<xliff:g id="SEPARATOR">=</xliff:g>Πιονγκγιάνγκ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Κ<xliff:g id="SEPARATOR">=</xliff:g>Κατάρ"</item>
     <item msgid="1667243110545095146">"Ρ<xliff:g id="SEPARATOR">=</xliff:g>Ρανγκούν"</item>
     <item msgid="4460370766685855731">"Ρ<xliff:g id="SEPARATOR">=</xliff:g>Ριάντ"</item>
     <item msgid="4229224905931739201">"Σ<xliff:g id="SEPARATOR">=</xliff:g>Σαϊγκόν"</item>
     <item msgid="8705359848250215620">"Σ<xliff:g id="SEPARATOR">=</xliff:g>Σεούλ"</item>
-    <item msgid="583367295371395814">"Σ<xliff:g id="SEPARATOR">=</xliff:g>Σαγκάη"</item>
+    <item msgid="3814881931186962624">"Σ<xliff:g id="SEPARATOR">=</xliff:g>Σαγκάη<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"Σ<xliff:g id="SEPARATOR">=</xliff:g>Σιγκαπούρη"</item>
-    <item msgid="1972491729911039207">"Τ<xliff:g id="SEPARATOR">=</xliff:g>Ταϊπέι"</item>
+    <item msgid="8982451946156859368">"Τ<xliff:g id="SEPARATOR">=</xliff:g>Ταϊπέι<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"Τ<xliff:g id="SEPARATOR">=</xliff:g>Τεχεράνη"</item>
     <item msgid="8629402941285674273">"Τ<xliff:g id="SEPARATOR">=</xliff:g>Τελ Αβίβ"</item>
-    <item msgid="8499164674454654525">"Τ<xliff:g id="SEPARATOR">=</xliff:g>Τόκιο"</item>
+    <item msgid="76330681636547168">"Τ<xliff:g id="SEPARATOR">=</xliff:g>Τόκιο<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"Ο<xliff:g id="SEPARATOR">=</xliff:g>Ουλάν Μπατόρ"</item>
     <item msgid="2028626988021468640">"Β<xliff:g id="SEPARATOR">=</xliff:g>Βερμούδα"</item>
     <item msgid="4527109966513690429">"Κ<xliff:g id="SEPARATOR">=</xliff:g>Κανάρια"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"Ρ<xliff:g id="SEPARATOR">=</xliff:g>Ρίνο"</item>
     <item msgid="9155068631060038769">"Μ<xliff:g id="SEPARATOR">=</xliff:g>Μπλακ Ροκ Σίτι"</item>
     <item msgid="8498761319928979900">"Ν<xliff:g id="SEPARATOR">=</xliff:g>Ντόχα"</item>
-    <item msgid="8307897251088048641">"Π<xliff:g id="SEPARATOR">=</xliff:g>Πεκίνο"</item>
+    <item msgid="5327010922199714808">"Π<xliff:g id="SEPARATOR">=</xliff:g>Πεκίνο<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"Β<xliff:g id="SEPARATOR">=</xliff:g>Βομβάη"</item>
     <item msgid="6668274273067049125">"Δ<xliff:g id="SEPARATOR">=</xliff:g>Δελχί"</item>
-    <item msgid="2933410189478233292">"Ο<xliff:g id="SEPARATOR">=</xliff:g>Οζάκα"</item>
+    <item msgid="7199039603593847813">"Ο<xliff:g id="SEPARATOR">=</xliff:g>Οζάκα<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"Λ<xliff:g id="SEPARATOR">=</xliff:g>Λαχόρη"</item>
     <item msgid="1448378291805481500">"Σ<xliff:g id="SEPARATOR">=</xliff:g>Σαναά"</item>
     <item msgid="5233119846682408301">"Β<xliff:g id="SEPARATOR">=</xliff:g>Βαρκελώνη"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"Κ<xliff:g id="SEPARATOR">=</xliff:g>Κέιμπριτζ"</item>
     <item msgid="759409010285366934">"Κ<xliff:g id="SEPARATOR">=</xliff:g>Κίρκλαντ"</item>
     <item msgid="6308007059287569663">"Μ<xliff:g id="SEPARATOR">=</xliff:g>Μάντισον"</item>
-    <item msgid="6971636434858330021">"Κ<xliff:g id="SEPARATOR">=</xliff:g>Κουανγκτσόου"</item>
+    <item msgid="2077617905582224600">"Κ<xliff:g id="SEPARATOR">=</xliff:g>Κουανγκτσόου<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"Χ<xliff:g id="SEPARATOR">=</xliff:g>Χαϊντεραμπάντ"</item>
     <item msgid="3032295682584784261">"Ρ<xliff:g id="SEPARATOR">=</xliff:g>Ρέστον"</item>
     <item msgid="7722837296297332268">"Μ<xliff:g id="SEPARATOR">=</xliff:g>Μπέλο Οριζόντε"</item>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index ae97436..ba757dd 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Εμφάνιση ρολογιού"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Απόκρυψη ρολογιού"</string>
     <string name="label" msgid="162189613902857319">"Ετικέτα"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Ενεργό"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Ανενεργό"</string>
     <string name="default_label" msgid="5590025289805630372">"Ξυπνητήρι"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Ορισμός ξυπνητηριού"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Δόνηση"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Επανάληψη"</string>
     <string name="alert" msgid="6506982899651975645">"Ήχος κλήσης ξυπνητηριού"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Προσαρμοσμένος ήχος κλήσης"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Η αντίστροφη μέτρηση έληξε"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Αθόρυβο"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ήχος κλήσης"</string>
     <string name="time" msgid="8067216534232296518">"Ώρα"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Αύριο"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Αναβολή έως τις <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Επόμενο ξυπνητήρι"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Η ειδοποίηση που παραβλέψατε έχει διαγραφεί"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Απομένει λιγότερο από ένα λεπτό"</item>
-    <item msgid="83197792732433351">"Απομένουν <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Απομένουν <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Απομένουν <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Απομένει λιγότερο από ένα λεπτό"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Απομένουν <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"απομένουν"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"απομένουν"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Το ξυπνητήρι έχει οριστεί σε λιγότερο από 1 λεπτό από τώρα."</item>
     <item msgid="6002066367368421848">"Το ξυπνητήρι έχει οριστεί σε <xliff:g id="DAYS">%1$s</xliff:g> από τώρα."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">λεπτά</item>
       <item quantity="one">λεπτό</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Σταδιακή αύξηση της έντασης"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Ανενεργό"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> δευτερόλεπτα"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"δευτερόλεπτα"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Σίγαση μετά"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> λεπτά</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Επαναφορά"</string>
     <string name="delete" msgid="5732434972457000541">"Διαγραφή"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Ένταση ήχου ξυπνητηριού"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Σίγαση"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Αθόρυβο"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Άγνωστο"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Αναβολή αφύπνισης ή παράβλεψη ξυπνητηριού."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (αναβολή)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Το ξυπνητήρι ρυθμίστηκε για τις <xliff:g id="TIME">%s</xliff:g>. Αγγίξτε για να ακυρώσετε."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Φόρτωση ήχου κλήσης"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Η υπηρεσία αναπαραγωγής ήχου για ξυπνητήρια έχει ρυθμιστεί στο Ρολόι."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Ορισμός ξυπνητηριού"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Ξυπνητήρι"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Χρονόμετρο"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Ρολόι"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Ταξινόμηση κατά όνομα"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Επιλεγμένες πόλεις"</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_start_button" msgid="8373422516681242270">"Εκκίνηση"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Παύση"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Γύρος"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Κοινή χρήση"</string>
     <string name="hours_label" msgid="3393478155635368097">"ω."</string>
     <string name="minutes_label" msgid="3568098128251438588">"λ."</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Ο χρόνος μου είναι <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Χρόνοι γύρων:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Γύρος <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ώρες</item>
       <item quantity="one">1 ώρα</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Προσθήκη 1 λεπτού"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Προσθήκη 1 λεπτού"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Διακοπή"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Τέλος"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Διακοπή των χρονομέτρων"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Επαναφορά"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Ακύρωση"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Το χρονόμετρο ακυρώθηκε"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Ο χρόνος έχει τελειώσει"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> χρονόμετρα έληξαν"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Χρονόμετρο"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"4 χρονόμετρα το μέγιστο"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Παύση"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Επαν. χρονομ."</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Είστε πάρα πολύ γρήγοροι."</item>
     <item msgid="6332879039890727169">"Απολαύστε"</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Πόλεις"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Ρολόι"</string>
     <string name="clock_style" msgid="2265011060429742344">"Στυλ"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Αλλαγή ημερομηνίας και ώρας"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Αναλογικό"</item>
     <item msgid="8483930821046925592">"Ψηφιακό"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Έχει επιλεχθεί η πόλη <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Έχει καταργηθεί η επιλογή της πόλης <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Νήσοι Μάρσαλ"</item>
     <item msgid="4196408495909011020">"Νήσος Μιντγουέι"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Τζακάρτα"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Ξυπνητήρια"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Υπηρεσία χρονόμετρου για την εκτέλεση της ειδοποίησης."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Διακόπηκε"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Επεξεργάζεται ενέργειες από τις ειδοποιήσεις αντίστροφης μέτρησης."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Επεξεργάζεται ενέργειες από τις ειδοποιήσεις του χρονομέτρου."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Σε παύση"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Σύρετε δεξιά για παράβλεψη"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Σύρετε αριστερά για αναβολή"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Σύρετε το δάχτυλό σας προς τα αριστερά για αναβολή ή προς τα δεξιά για απόρριψη"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Χρονόμετρα"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ήχος χρονόμετρου"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Το χρονόμετρο διακόπηκε"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> ξυπνητήρια διακόπηκαν"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Χρονόμετρο σε παύση"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> χρονόμετρα σε παύση"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Αγγίξτε για να δείτε τα ξυπνητήρια σας"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> χρονόμετρα"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Επόμενο χρονόμετρο: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Δεν υπάρχουν ξυπνητήρια"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Χωρίς ειδοπ."</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ΧΩΡΙΣ ΠΡΟΣΕΧΕΙΣ ΕΙΔΟΠΟΙΗΣΕΙΣ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"ω:λλ π.μ."</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"ω:λλ"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"ΗΗΗ, ω:λλ π.μ."</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"ΗΗΗ, ω: λλ"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Μη έγκυρη ώρα <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Δεν υπάρχει ξυπνητήρι στις <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Δεν υπάρχουν προγραμματισμένα ξυπνητήρια"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Δεν έχει καθοριστεί ετικέτα"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Δεν υπάρχουν ειδοποιήσεις που περιέχουν την ετικέτα"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Το χρονόμετρο λειτουργεί ήδη"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Το χρονόμετρο δεν λειτουργεί"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Δεν είναι δυνατή η εκ νέου ρύθμιση του χρονομέτρου επειδή είναι σε λειτουργία αυτήν τη στιγμή"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Το χρονόμετρο σταμάτησε"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Το χρονόμετρο τέθηκε σε παύση"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Έγινε επαναφορά του χρονομέτρου"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Επανάληψη χρονομέτρου"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Το χρονόμετρο ξεκίνησε"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Δεν προγραμματίστηκε κανένα ξυπνητήρι γι\' αυτήν την ώρα"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Έγινε παράβλεψη του ξυπνητηριού <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Το ξυπνητήρι ορίστηκε στις <xliff:g id="ALARM_TIME">%s</xliff:g>."</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Δεν ορίστηκε αντίστροφη μέτρηση"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Η αντίστροφη μέτρηση διαγράφηκε"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Η αντίστροφη μέτρηση ξεκίνησε ήδη"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Δεν είναι δυνατή η ολοκλήρωση του αιτήματος, διατίθενται πολλές αντίστροφες μετρήσεις"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Η αντίστροφη μέτρηση ξεκίνησε"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Δεν υπάρχουν χρονόμετρα"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Υπάρχουν περισσότερα από ένα χρονόμετρα"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Το χρονόμετρο έχει καταργηθεί."</string>
     <string name="timer_created" msgid="4381027137335885547">"Δημιουργήθηκε αντίστροφη μέτρηση"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Μη έγκυρη διάρκεια αντίστροφης μέτρησης"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Επαναφορά αντίστροφης μέτρησης"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Δεν είναι δυνατή η επαναφορά της αντίστροφης μέτρησης, επειδή εξακολουθεί να λειτουργεί. Διακόψτε την αντίστροφη μέτρηση για να την επαναφέρετε."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Η αντίστροφη μέτρηση διακόπηκε ήδη"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Η αντίστροφη μέτρηση διαγράφηκε"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Η αντίστροφη μέτρηση ξεκίνησε"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Μη έγκυρη διάρκεια αντίστροφης μέτρησης"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Δεν επιλέχτηκε πόλη"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Η πόλη που καθορίσατε δεν είναι διαθέσιμη"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Αυτή η πόλη προστέθηκε ήδη"</string>
diff --git a/res/values-en-rAU/array.xml b/res/values-en-rAU/array.xml
index c12a7fd..0f09673 100644
--- a/res/values-en-rAU/array.xml
+++ b/res/values-en-rAU/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala City"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>South Pole"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>South Pole<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh City"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Tehran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 81b9679..f6e50f2 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Show clock"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Hide clock"</string>
     <string name="label" msgid="162189613902857319">"Label"</string>
+    <string name="on_switch" msgid="2297966258029227449">"On"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Off"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Set alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrate"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Repeat"</string>
     <string name="alert" msgid="6506982899651975645">"Alarm Ringtone"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Customised Ringtone"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Timer Expired"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silent"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ring tone"</string>
     <string name="time" msgid="8067216534232296518">"Time"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Tomorrow"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Snoozing until <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Upcoming alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Your missed alarm has been deleted"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Less than a minute remaining"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> remaining"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> remaining"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> remaining"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Less than a minute remaining"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"remaining"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"remaining"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarm set for less than 1 minute from now."</item>
     <item msgid="6002066367368421848">"Alarm set for <xliff:g id="DAYS">%1$s</xliff:g> from now."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minutes</item>
       <item quantity="one">minute</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Gradually increase volume"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Off"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> seconds"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"seconds"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Silence after"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutes</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Revert"</string>
     <string name="delete" msgid="5732434972457000541">"Delete"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Alarm volume"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silent"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silent"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Unknown"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Snooze or dismiss alarm."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (snoozed)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm set for <xliff:g id="TIME">%s</xliff:g>. Touch to cancel."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Loading ringtone…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Sound playback service for timers set in Clock."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Set alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Clock"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sort by name"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Selected Cities"</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_start_button" msgid="8373422516681242270">"Start"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pause"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Lap"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Share"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"My time is <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Lap times:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Lap <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> hours</item>
       <item quantity="one">1 hour</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Add 1 minute"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Add 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stop"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Finished"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Stop all timers"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Reset"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Cancel"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Timer cancelled"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Time\'s up"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> timers expired"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Timer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"4 timers maximum"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pause"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Reset all timers"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"You\'re quite the speed demon."</item>
     <item msgid="6332879039890727169">"Enjoy the fruits of your labour."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Cities"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Clock"</string>
     <string name="clock_style" msgid="2265011060429742344">"Style"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Change Date &amp; time"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogue"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ticked"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> unticked"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshall Islands"</item>
     <item msgid="4196408495909011020">"Midway Island"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarms"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Stopwatch service to run the notification."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Stopped"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Processes actions from timer notifications."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Processes actions from stopwatch notifications."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Paused"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Swipe right to dismiss"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Swipe left to snooze"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Swipe left to snooze or right to dismiss"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Timers"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Timer ring tone"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Timer stopped"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> timers stopped"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Timer paused"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> timers paused"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Touch to see your timers"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> timers"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Next timer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"No Alarms"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"No alarms set"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NO UPCOMING ALARMS"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h.mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h.mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Invalid time <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"No alarm at <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"No scheduled alarms"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"No label specified"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"No alarms contain the label"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stopwatch is already running"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stopwatch isn\'t running"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stopwatch cannot be reset because it is running"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stopwatch stopped"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stopwatch paused"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stopwatch reset"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stopwatch lapped"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stopwatch started"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"No alarm scheduled for this time"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> alarm dismissed"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm is set for <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"No timer set"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Timer deleted"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Timer already running"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Unable to complete your request, multiple timers available"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Timer started"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"No timers exist"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"More than one timer exists"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"The timer has been removed."</string>
     <string name="timer_created" msgid="4381027137335885547">"Timer created"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Invalid timer length"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Timer reset"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Timer can\'t be reset because it\'s still running. Stop timer to reset."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Timer already stopped"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Timer deleted"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Timer started"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Invalid timer length"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"No city selected"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"The city you specified is not available"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"That city has already been added"</string>
diff --git a/res/values-en-rGB/array.xml b/res/values-en-rGB/array.xml
index c12a7fd..0f09673 100644
--- a/res/values-en-rGB/array.xml
+++ b/res/values-en-rGB/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala City"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>South Pole"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>South Pole<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh City"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Tehran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 81b9679..f6e50f2 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Show clock"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Hide clock"</string>
     <string name="label" msgid="162189613902857319">"Label"</string>
+    <string name="on_switch" msgid="2297966258029227449">"On"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Off"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Set alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrate"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Repeat"</string>
     <string name="alert" msgid="6506982899651975645">"Alarm Ringtone"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Customised Ringtone"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Timer Expired"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silent"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ring tone"</string>
     <string name="time" msgid="8067216534232296518">"Time"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Tomorrow"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Snoozing until <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Upcoming alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Your missed alarm has been deleted"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Less than a minute remaining"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> remaining"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> remaining"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> remaining"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Less than a minute remaining"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"remaining"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"remaining"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarm set for less than 1 minute from now."</item>
     <item msgid="6002066367368421848">"Alarm set for <xliff:g id="DAYS">%1$s</xliff:g> from now."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minutes</item>
       <item quantity="one">minute</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Gradually increase volume"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Off"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> seconds"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"seconds"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Silence after"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutes</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Revert"</string>
     <string name="delete" msgid="5732434972457000541">"Delete"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Alarm volume"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silent"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silent"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Unknown"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Snooze or dismiss alarm."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (snoozed)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm set for <xliff:g id="TIME">%s</xliff:g>. Touch to cancel."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Loading ringtone…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Sound playback service for timers set in Clock."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Set alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Clock"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sort by name"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Selected Cities"</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_start_button" msgid="8373422516681242270">"Start"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pause"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Lap"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Share"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"My time is <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Lap times:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Lap <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> hours</item>
       <item quantity="one">1 hour</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Add 1 minute"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Add 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stop"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Finished"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Stop all timers"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Reset"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Cancel"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Timer cancelled"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Time\'s up"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> timers expired"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Timer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"4 timers maximum"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pause"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Reset all timers"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"You\'re quite the speed demon."</item>
     <item msgid="6332879039890727169">"Enjoy the fruits of your labour."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Cities"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Clock"</string>
     <string name="clock_style" msgid="2265011060429742344">"Style"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Change Date &amp; time"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogue"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ticked"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> unticked"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshall Islands"</item>
     <item msgid="4196408495909011020">"Midway Island"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarms"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Stopwatch service to run the notification."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Stopped"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Processes actions from timer notifications."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Processes actions from stopwatch notifications."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Paused"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Swipe right to dismiss"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Swipe left to snooze"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Swipe left to snooze or right to dismiss"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Timers"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Timer ring tone"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Timer stopped"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> timers stopped"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Timer paused"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> timers paused"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Touch to see your timers"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> timers"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Next timer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"No Alarms"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"No alarms set"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NO UPCOMING ALARMS"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h.mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h.mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Invalid time <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"No alarm at <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"No scheduled alarms"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"No label specified"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"No alarms contain the label"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stopwatch is already running"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stopwatch isn\'t running"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stopwatch cannot be reset because it is running"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stopwatch stopped"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stopwatch paused"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stopwatch reset"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stopwatch lapped"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stopwatch started"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"No alarm scheduled for this time"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> alarm dismissed"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm is set for <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"No timer set"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Timer deleted"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Timer already running"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Unable to complete your request, multiple timers available"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Timer started"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"No timers exist"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"More than one timer exists"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"The timer has been removed."</string>
     <string name="timer_created" msgid="4381027137335885547">"Timer created"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Invalid timer length"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Timer reset"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Timer can\'t be reset because it\'s still running. Stop timer to reset."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Timer already stopped"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Timer deleted"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Timer started"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Invalid timer length"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"No city selected"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"The city you specified is not available"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"That city has already been added"</string>
diff --git a/res/values-en-rIN/array.xml b/res/values-en-rIN/array.xml
index c12a7fd..0f09673 100644
--- a/res/values-en-rIN/array.xml
+++ b/res/values-en-rIN/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala City"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>South Pole"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>South Pole<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh City"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Tehran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 81b9679..f6e50f2 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Show clock"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Hide clock"</string>
     <string name="label" msgid="162189613902857319">"Label"</string>
+    <string name="on_switch" msgid="2297966258029227449">"On"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Off"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Set alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrate"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Repeat"</string>
     <string name="alert" msgid="6506982899651975645">"Alarm Ringtone"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Customised Ringtone"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Timer Expired"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silent"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ring tone"</string>
     <string name="time" msgid="8067216534232296518">"Time"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Tomorrow"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Snoozing until <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Upcoming alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Your missed alarm has been deleted"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Less than a minute remaining"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> remaining"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> remaining"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> remaining"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Less than a minute remaining"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"remaining"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"remaining"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarm set for less than 1 minute from now."</item>
     <item msgid="6002066367368421848">"Alarm set for <xliff:g id="DAYS">%1$s</xliff:g> from now."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minutes</item>
       <item quantity="one">minute</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Gradually increase volume"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Off"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> seconds"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"seconds"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Silence after"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutes</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Revert"</string>
     <string name="delete" msgid="5732434972457000541">"Delete"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Alarm volume"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silent"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silent"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Unknown"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Snooze or dismiss alarm."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (snoozed)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm set for <xliff:g id="TIME">%s</xliff:g>. Touch to cancel."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Loading ringtone…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Sound playback service for timers set in Clock."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Set alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Clock"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sort by name"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Selected Cities"</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_start_button" msgid="8373422516681242270">"Start"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pause"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Lap"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Share"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"My time is <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Lap times:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Lap <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> hours</item>
       <item quantity="one">1 hour</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Add 1 minute"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Add 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stop"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Finished"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Stop all timers"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Reset"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Cancel"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Timer cancelled"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Time\'s up"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> timers expired"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Timer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"4 timers maximum"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pause"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Reset all timers"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"You\'re quite the speed demon."</item>
     <item msgid="6332879039890727169">"Enjoy the fruits of your labour."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Cities"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Clock"</string>
     <string name="clock_style" msgid="2265011060429742344">"Style"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Change Date &amp; time"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogue"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ticked"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> unticked"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshall Islands"</item>
     <item msgid="4196408495909011020">"Midway Island"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarms"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Stopwatch service to run the notification."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Stopped"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Processes actions from timer notifications."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Processes actions from stopwatch notifications."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Paused"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Swipe right to dismiss"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Swipe left to snooze"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Swipe left to snooze or right to dismiss"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Timers"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Timer ring tone"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Timer stopped"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> timers stopped"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Timer paused"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> timers paused"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Touch to see your timers"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> timers"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Next timer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"No Alarms"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"No alarms set"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NO UPCOMING ALARMS"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h.mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h.mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Invalid time <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"No alarm at <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"No scheduled alarms"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"No label specified"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"No alarms contain the label"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stopwatch is already running"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stopwatch isn\'t running"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stopwatch cannot be reset because it is running"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stopwatch stopped"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stopwatch paused"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stopwatch reset"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stopwatch lapped"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stopwatch started"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"No alarm scheduled for this time"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> alarm dismissed"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm is set for <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"No timer set"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Timer deleted"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Timer already running"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Unable to complete your request, multiple timers available"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Timer started"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"No timers exist"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"More than one timer exists"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"The timer has been removed."</string>
     <string name="timer_created" msgid="4381027137335885547">"Timer created"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Invalid timer length"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Timer reset"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Timer can\'t be reset because it\'s still running. Stop timer to reset."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Timer already stopped"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Timer deleted"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Timer started"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Invalid timer length"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"No city selected"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"The city you specified is not available"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"That city has already been added"</string>
diff --git a/res/values-es-rUS/array.xml b/res/values-es-rUS/array.xml
index 485c258..edde2e5 100644
--- a/res/values-es-rUS/array.xml
+++ b/res/values-es-rUS/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Gran Turca"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Granada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"C<xliff:g id="SEPARATOR">=</xliff:g>Ciudad de Guatemala"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>La Habana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Polo Sur"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Polo Sur<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amán"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebrón"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Estambul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Yakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jerusalén"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Mascate"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pionyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pionyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangún"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riad"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigón"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seúl"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghái"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghái<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipéi"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipéi<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teherán"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulán Bator"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermudas"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Islas Canarias"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Pekín"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Pekín<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Bombay"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Saná"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 7146a1a..17fac9e 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Mostrar reloj"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Ocultar reloj"</string>
     <string name="label" msgid="162189613902857319">"Etiqueta"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Activado"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Desactivado"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarma"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Establecer alarma"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrar"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Repetir"</string>
     <string name="alert" msgid="6506982899651975645">"Tono de alarma"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Tono personalizado"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Caducó el temporizador"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silencio"</string>
     <string name="ringtone" msgid="9110746249688559579">"Tono"</string>
     <string name="time" msgid="8067216534232296518">"Hora"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Mañana"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Posponer hasta la hora <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Próxima alarma"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Se eliminó la alarma perdida."</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Queda menos de 1 minuto."</item>
-    <item msgid="83197792732433351">"Quedan <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Quedan <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Quedan <xliff:g id="HOURS">%1$s</xliff:g> y <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Queda menos de 1 minuto"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Quedan <xliff:g id="HOURS">%1$s</xliff:g> horas y <xliff:g id="MINUTES">%2$s</xliff:g> minutos"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"restante"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"restantes"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"La alarma sonará en menos de un minuto."</item>
     <item msgid="6002066367368421848">"La alarma sonará en <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minutos</item>
       <item quantity="one">minuto</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Subir el volumen de forma gradual"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Desactivada"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> segundos"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"segundos"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Silenciar automáticamente"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutos</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Revertir"</string>
     <string name="delete" msgid="5732434972457000541">"Eliminar"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volumen"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silencioso"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silencio"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Desconocido"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Posponer o ignorar alarma"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (pospuesta)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"La alarma sonará a las <xliff:g id="TIME">%s</xliff:g>. Toca para cancelarla."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Cargando tono..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Servicio de reproducción de sonido de temporizadores definido en Reloj"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Establecer alarma"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarma"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Temporizador"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Reloj"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Ordenar por nombre"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Ciudades seleccionadas"</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_start_button" msgid="8373422516681242270">"Comenzar"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pausa"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Vuelta"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Compartir"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Mi hora es <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Duración:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Vuelta <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"N.º <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"N.º <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> horas</item>
       <item quantity="one">1 hora</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Agregar 1 minuto"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Agregar 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Detener"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Listo"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Detener todos"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Restablecer"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Cancelar"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Se canceló el temporizador"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Se acabó el tiempo"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> temp. finalizaron"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Temporizador"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Máximo: 4 temporizadores"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pausar"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Restablecer"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Vas a la velocidad de la luz."</item>
     <item msgid="6332879039890727169">"Disfruta de los frutos de tu trabajo."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Ciudades"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Reloj"</string>
     <string name="clock_style" msgid="2265011060429742344">"Estilo"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Cambiar fecha y hora"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analógico"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Se marcó <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Se desmarcó <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Islas Marshall"</item>
     <item msgid="4196408495909011020">"Islas Midway"</item>
@@ -329,17 +338,21 @@
     <item msgid="5176858645450908751">"Yakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmas"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Servicio de cronómetro para ejecutar la notificación"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Detenido"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Procesa acciones de las notificaciones del temporizador."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Procesa acciones de las notificaciones del cronómetro."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"En pausa"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Desliza hacia la derecha para descartar."</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Desliza hacia la izquierda para posponer."</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Desliza el dedo hacia la izquierda para posponer la alarma o hacia la derecha para ignorarla."</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Temporizadores"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Tono del temporizador"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Temporizador detenido"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores detenidos"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Se pausó el temporizador"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores pausados"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Toca para ver tus temporizadores."</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Próximo temporizador: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
-    <string name="screensaver_settings" msgid="7013450738357352801">"Configuración de Dream"</string>
+    <string name="screensaver_settings" msgid="7013450738357352801">"Configuración"</string>
     <string name="night_mode_title" msgid="5983813889469616299">"Modo nocturno"</string>
     <string name="night_mode_summary" msgid="1017350187324162631">"Pantalla muy atenuada (para ambientes poco iluminados)"</string>
     <string name="expand_alarm" msgid="7392616528943305020">"Expandir alarma"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Sin alarmas"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"No hay alarmas."</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NO HAY ALARMAS PRÓXIMAMENTE"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"La hora <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g> no es válida"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"No hay ninguna alarma programada a las <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"No hay alarmas programadas"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"No se especificó ninguna etiqueta"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"No hay ninguna alarma con esa etiqueta"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"El cronómetro ya se está ejecutando"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"El cronómetro no se está ejecutando"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"No se puede restablecer el cronómetro porque se está ejecutando"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Se detuvo el cronómetro"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Cronómetro en pausa"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Se restableció el cronómetro"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Se estableció una vuelta en el cronómetro"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Se inició el cronómetro"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"No hay ninguna alarma programada para esta hora"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Se ignoró la alarma <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarma establecida a la(s) <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"No se configuró ningún temporizador"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Se borró el temporizador"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"El temporizador ya se está ejecutando"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"No se puede completar la solicitud porque hay varios temporizadores disponibles"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Se inició el temporizador"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"No hay ningún temporizador"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Hay más de un temporizador"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Se quitó el temporizador."</string>
     <string name="timer_created" msgid="4381027137335885547">"Se creó el temporizador"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"La duración del temporizador no es válida"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Se restableció el temporizador"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"No se puede restablecer el temporizador porque todavía se está ejecutando. Para restablecerlo, detén el temporizador."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"El temporizador ya se detuvo"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Se borró el temporizador"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Se inició el temporizador"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"La duración del temporizador no es válida"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"No se seleccionó ninguna ciudad"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"La ciudad que especificaste no está disponible"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Esa ciudad ya se agregó"</string>
diff --git a/res/values-es/array.xml b/res/values-es/array.xml
index 5a3bef5..a7f6552 100644
--- a/res/values-es/array.xml
+++ b/res/values-es/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"I<xliff:g id="SEPARATOR">=</xliff:g>Isla Gran Turca"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Granada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"C<xliff:g id="SEPARATOR">=</xliff:g>Ciudad de Guatemala"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"L<xliff:g id="SEPARATOR">=</xliff:g>La Habana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"P<xliff:g id="SEPARATOR">=</xliff:g>Polo Sur"</item>
+    <item msgid="498429228419399474">"P<xliff:g id="SEPARATOR">=</xliff:g>Polo Sur<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almatý"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amán"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebrón"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"E<xliff:g id="SEPARATOR">=</xliff:g>Estambul"</item>
     <item msgid="758800913783999425">"Y<xliff:g id="SEPARATOR">=</xliff:g>Yakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jerusalén"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Mascate"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pionyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pionyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"C<xliff:g id="SEPARATOR">=</xliff:g>Catar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangún"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riad"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigón"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seúl"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghái"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghái<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipéi"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipéi<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teherán"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulán Bator"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermudas"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Canarias"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Pekín"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Pekín<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"B<xliff:g id="SEPARATOR">=</xliff:g>Bombay"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Saná"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Cantón"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Cantón<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index a1746db..174b996 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Mostrar reloj"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Ocultar reloj"</string>
     <string name="label" msgid="162189613902857319">"Nombre"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Sí"</string>
+    <string name="off_switch" msgid="3381070073851148013">"No"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarma"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Establecer alarma"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrar"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Repetir"</string>
     <string name="alert" msgid="6506982899651975645">"Tono de alarma"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Tono de llamada personalizado"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Temporizador agotado"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silencio"</string>
     <string name="ringtone" msgid="9110746249688559579">"Tono de llamada"</string>
     <string name="time" msgid="8067216534232296518">"Hora"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Mañana"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Repetir a las <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Próxima alarma"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Se han eliminado las alarmas perdidas"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Queda menos de 1 minuto"</item>
-    <item msgid="83197792732433351">"Quedan <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Quedan <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Quedan <xliff:g id="HOURS">%1$s</xliff:g> y <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Queda menos de 1 minuto"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Quedan <xliff:g id="HOURS">%1$s</xliff:g> horas y <xliff:g id="MINUTES">%2$s</xliff:g> minutos"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"Queda"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"Quedan"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"La alarma sonará en menos de 1 minuto."</item>
     <item msgid="6002066367368421848">"La alarma sonará en <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minutos</item>
       <item quantity="one">minuto</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Subir volumen gradualmente"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"No"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> segundos"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"segundos"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Silenciar después de"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutos</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Revertir"</string>
     <string name="delete" msgid="5732434972457000541">"Eliminar"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volumen de la alarma"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silencio"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silencio"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Desconocido"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Posponer o aceptar alarma"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (pospuesta)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"La alarma sonará a las <xliff:g id="TIME">%s</xliff:g>. Toca para cancelar."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Cargando tono…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Reproducción de temporizadores definidos en el reloj"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Establecer alarma"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarma"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Temporizador"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Reloj"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Ordenar por nombre"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Ciudades seleccionadas"</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">"+1 vuelta"</string>
     <string name="sw_reset_button" msgid="6616804728322906117">"Reiniciar"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Iniciar"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pausa"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"+1 vuelta"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Compartir"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Hora: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Duración de las vueltas:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Vuelta <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"N.º <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"N.º <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> horas</item>
       <item quantity="one">1 hora</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Añadir 1 minuto"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Añadir 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Detener"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Listo"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Detener temporizadores"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Reiniciar"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Cancelar"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Temporizador cancelado"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Tiempo agotado"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> temporizadores caducados"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Temporizador"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Máximo: 4 temporizadores"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pausar"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Restablecer todo"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Eres el rey de la velocidad."</item>
     <item msgid="6332879039890727169">"Disfruta de los frutos de tu trabajo."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Ciudades"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Reloj"</string>
     <string name="clock_style" msgid="2265011060429742344">"Estilo"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Cambiar fecha y hora"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analógico"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Has seleccionado <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"No has seleccionado <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Islas Marshall"</item>
     <item msgid="4196408495909011020">"Islas Midway"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Yakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmas"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Servicio de cronómetro para ejecutar la notificación"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Detenido"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Procesa acciones de notificaciones del temporizador."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Procesa acciones de notificaciones del cronómetro."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"En pausa"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Deslizar hacia la derecha para aceptar"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Deslizar hacia la izquierda para posponer"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Desliza el dedo hacia la izquierda para posponer la alarma o hacia la derecha para ignorarla"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Temporizadores"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Tono de temporizador"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Temporizador detenido"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores detenidos"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Temporizador pausado"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores en pausa"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Toca para ver tus temporizadores"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Próximo: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"No hay alarmas"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"No hay alarmas"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NO HAY ALARMAS PRÓXIMAMENTE"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"La hora <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g> no es válida"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"No hay ninguna alarma a las <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"No hay ninguna alarma programada"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"No se ha especificado ninguna etiqueta"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"No hay ninguna alarma con esa etiqueta"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Ya se está utilizando el cronómetro"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"No se está utilizando el cronómetro"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"El cronómetro no se puede restablecer porque se está ejecutando"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Cronómetro detenido"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Se ha pausado el cronómetro"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Cronómetro restablecido"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Cronómetro con tiempo parcial establecido"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Cronómetro iniciado"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"No hay ninguna alarma programada para esta hora"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarma de las <xliff:g id="ALARM_TIME">%s</xliff:g> ignorada"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarma establecida a las <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"No se ha establecido ningún temporizador"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Temporizador eliminado"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Ya se está utilizando el temporizador"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"No se puede procesar la solicitud porque hay varios temporizadores disponibles"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Temporizador iniciado"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"No hay temporizadores"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Hay varios temporizadores"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Se ha quitado el temporizador."</string>
     <string name="timer_created" msgid="4381027137335885547">"Temporizador creado"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Duración de temporizador no válida"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Temporizador restablecido"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"No se puede restablecer el temporizador porque aún se está utilizando. Debes detenerlo para restablecerlo."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Ya se ha detenido el temporizador"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Temporizador eliminado"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Temporizador iniciado"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Duración de temporizador no válida"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"No has seleccionado ninguna ciudad"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"La ciudad especificada no está disponible"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Esa ciudad ya se ha añadido"</string>
diff --git a/res/values-et-rEE/array.xml b/res/values-et-rEE/array.xml
index 5bfa498..808fb01 100644
--- a/res/values-et-rEE/array.xml
+++ b/res/values-et-rEE/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala City"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havanna"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Lõunapoolus"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Lõunapoolus<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almatõ"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jeruusalemm"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Masqaţ"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Yangon"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Ar-Riyāḑ"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Soul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Kanaarid"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Peking<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sanaa"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderābād"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index d8f92a0..5a4b585 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Näita kella"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Peida kell"</string>
     <string name="label" msgid="162189613902857319">"Silt"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Sees"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Väljas"</string>
     <string name="default_label" msgid="5590025289805630372">"Äratus"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Määra äratus"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Värin"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Kordus"</string>
     <string name="alert" msgid="6506982899651975645">"Äratuse helin"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Kohandatud helin"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Taimer on aegunud"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Hääletu"</string>
     <string name="ringtone" msgid="9110746249688559579">"Helin"</string>
     <string name="time" msgid="8067216534232296518">"Kellaaeg"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Homme"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Äratuse edasilükkamine kuni <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Tulevane alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Märkamata jäänud alarm on kustutatud"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Jäänud vähem kui minut"</item>
-    <item msgid="83197792732433351">"Jäänud <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Jäänud <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Jäänud <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Jäänud on vähem kui minut"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Jäänud on <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"on jäänud"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"on jäänud"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Äratuseni on jäänud vähem kui 1 minut."</item>
     <item msgid="6002066367368421848">"Äratuseni on jäänud <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minutit</item>
       <item quantity="one">minut</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Helitugevuse järkjärguline suurendamine"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Väljas"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> sekundit"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sekundid"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Vaikus pärast"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutit</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Ennista"</string>
     <string name="delete" msgid="5732434972457000541">"Kustuta"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Äratuse helitugevus"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Hääletu"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Hääletu"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Tundmatu"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Lükake äratus edasi või loobuge sellest."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (edasi lükatud)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Äratus on määratud: <xliff:g id="TIME">%s</xliff:g>. Tühistamiseks puudutage."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Helina laadimine ..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Määratud ajastite heli taasesitamise teenus."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Äratuse määramine"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Taimer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Kell"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sordi nime järgi"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Valitud linnad"</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_start_button" msgid="8373422516681242270">"Alusta"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Peata"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Ring"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Jaga"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Minu aeg on <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Ringi ajad:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. ring"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Nr <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Nr <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> tundi</item>
       <item quantity="one">1 tund</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Lisa 1 minut"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Lisa 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Peata"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Valmis"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Kõigi taimerite peatamine"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Lähtesta"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Tühista"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Taimer on tühistatud"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Aeg on läbi"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> taimerit on aegunud"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Taimer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Maksimaalselt võib olla 4 taimerit"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Peatamine"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Taimerite läht."</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Olete ülikiire."</item>
     <item msgid="6332879039890727169">"Nautige oma töö vilju."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Linnad"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Kell"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stiil"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Kuupäeva ja kellaaja muutmine"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analoog"</item>
     <item msgid="8483930821046925592">"Digitaalne"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> on märgitud"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> pole märgitud"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshalli saared"</item>
     <item msgid="4196408495909011020">"Midway saared"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmid"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Märguandeid käitav stopperiteenus."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Peatatud"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Töötleb taimeri märguannete toiminguid."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Töötleb stopperi märguannete toiminguid."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Peatatud"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Loobumiseks pühkige paremale"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Edasilükkamiseks pühkige vasakule"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Edasilükkamiseks pühkige vasakule ja loobumiseks paremale"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Taimerid"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Taimeri helin"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Taimer on peatatud"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> taimerit on peatatud"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Taimer peatati"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> taimerit peatati"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Puudutage, et näha oma taimereid"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> taimerit"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Järgmine taimer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Alarme pole"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Alarme pole"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"TULEVASI ALARME POLE"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"<xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g> on sobimatu kellaaeg"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Kellaajaks <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> ei ole alarmi määratud"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Ühtegi määratud alarmi pole"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Silti pole määratud"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Ühelgi alarmil pole seda silti"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stopper juba käib"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stopper ei käi"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stopperit ei saa lähtestada, kuna see käib"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stopper peatati"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stopper on peatatud"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stopper lähtestati"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stopper alustas uut ringi"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stopper käivitati"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Selleks kellaajaks ei ole alarmi määratud"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarmist kellaajaks <xliff:g id="ALARM_TIME">%s</xliff:g> loobuti"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm on seatud – <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Taimerit pole määratud"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Taimer kustutati"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Taimer juba käib"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Taotlust ei saa lõpule viia, saadaval on mitu taimerit"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Taimer käivitati"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Taimereid ei ole"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Olemas on rohkem kui üks taimer"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Taimer on eemaldatud."</string>
     <string name="timer_created" msgid="4381027137335885547">"Taimer on loodud"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Taimeri kestus on sobimatu"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Taimer lähtestati"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Taimerit ei saa lähtestada, kuna see alles käib. Lähtestamiseks peatage taimer."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Taimer juba peatati"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Taimer kustutati"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Taimer käivitati"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Taimeri kestus on sobimatu"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Ühtegi linna pole valitud"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Määratud linn pole saadaval"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"See linn on juba lisatud"</string>
diff --git a/res/values-eu-rES/array.xml b/res/values-eu-rES/array.xml
index 319fd9b..08777e7 100644
--- a/res/values-eu-rES/array.xml
+++ b/res/values-eu-rES/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Turk Handia"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala hiria"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Habana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Hego poloa"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Hego poloa<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Maskat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangun"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulan Bator"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sana"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Bartzelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 25a1f44..3b5073c 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Erakutsi erlojua"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Ezkutatu erlojua"</string>
     <string name="label" msgid="162189613902857319">"Etiketa"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Aktibatuta"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Desaktibatuta"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarma"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Ezarri alarma"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Egin dar-dar"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Errepikapena"</string>
     <string name="alert" msgid="6506982899651975645">"Alarmaren tonua"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Tonu pertsonalizatua"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Iraungi egin da tenporizadorea"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Isilik modua"</string>
     <string name="ringtone" msgid="9110746249688559579">"Tonua"</string>
     <string name="time" msgid="8067216534232296518">"Ordua"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Bihar"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Atzeratu ordu honetara arte: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Alarma jotzear"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Ezikusi egindako alarma ezabatu da"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Minutu bat baino gutxiago geratzen da"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> ordu geratzen dira"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> minutu geratzen dira"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> ordu eta <xliff:g id="MINUTES">%2$s</xliff:g> minutu geratzen dira"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Minutu bat baino gutxiago geratzen da"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> eta <xliff:g id="MINUTES">%2$s</xliff:g> geratzen dira"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"geratzen da"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"geratzen dira"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarma 1 minutu baino gutxiago barru jotzeko ezarri da."</item>
     <item msgid="6002066367368421848">"Alarma <xliff:g id="DAYS">%1$s</xliff:g> ordu barru jotzeko ezarri da."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minutu</item>
       <item quantity="one">minutu</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Igo bolumena apurka-apurka"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Desaktibatuta"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> segundo"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"segundo"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Gelditu tarte hau igaro ondoren"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutu</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Leheneratu"</string>
     <string name="delete" msgid="5732434972457000541">"Ezabatu"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Alarmaren bolumena"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Isilik modua"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Isila"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Ezezaguna"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Atzeratu edo baztertu alarma."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (atzeratuta)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarma ezarri da ordu honetarako: <xliff:g id="TIME">%s</xliff:g>. Uzteko, ukitu hau."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Tonua kargatzen…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Erlojuan ezarritako tenporizadoreetarako soinuen erreprodukzio-zerbitzua."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Ezarri alarma"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarma"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Tenporizadorea"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Erlojua"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Ordenatu izenaren arabera"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Hautatutako hiriak"</string>
     <string name="sw_resume_button" msgid="2569360966002022248">"Berrekin"</string>
-    <string name="sw_start_button" msgid="8373422516681242270">"Hasi"</string>
-    <string name="sw_stop_button" msgid="8322958613123274451">"Gelditu"</string>
-    <string name="sw_lap_button" msgid="6992264696039004233">"Itzulia"</string>
     <string name="sw_reset_button" msgid="6616804728322906117">"Berrezarri"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Hasi"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Itzulia"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Partekatu"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Nire denbora <xliff:g id="TIME">%s</xliff:g> da"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Itzulien denborak:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. itzulia"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"<xliff:g id="NUMBER">%d</xliff:g>.a"</item>
-    <item msgid="316923361931627987">"<xliff:g id="NUMBER">%02d</xliff:g>.a"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ordu</item>
       <item quantity="one">1 ordu</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Gehitu 1 minutu"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Gehitu 1 minutu"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Gelditu"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Eginda"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Gelditu tenporizadoreak"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Berrezarri"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Utzi"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Utzi egin da tenporizadorea"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Denbora agortu da"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> tenporizadore iraungi dira"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Tenporizadorea"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Lau tenporizadore gehienez"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pausatu"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Berrezarri guztiak"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Suziria bezain bizkorra zara."</item>
     <item msgid="6332879039890727169">"Gozatu zure lanaren fruituez."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Hiriak"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Erlojua"</string>
     <string name="clock_style" msgid="2265011060429742344">"Estiloa"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Aldatu data eta ordua"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogikoa"</item>
     <item msgid="8483930821046925592">"Digitala"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> markatu da"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Marka kendu zaio <xliff:g id="CITY_NAME">%s</xliff:g> koadroari"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshall uharteak"</item>
     <item msgid="4196408495909011020">"Midway uhartea"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmak"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Jakinarazpena exekutatzeko kronometro-zerbitzua."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Geldituta"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Ekintzak prozesatzen ditu tenporizadorearen jakinarazpenetatik abiatuta."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Ekintzak prozesatzen ditu kronometroaren jakinarazpenetatik abiatuta."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Pausatu da kronometroa"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Baztertzeko, pasatu hatza eskuinera"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Atzeratzeko, pasatu hatza ezkerrera"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Atzeratzeko, pasatu hatza ezkerrera. Baztertzeko, pasatu hatza eskuinera."</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Tenporizadoreak"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Tenporizadorearen tonua"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Tenporizadorea gelditu da"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> tenporizadore gelditu dira"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Pausatu da tenporizadorea"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> tenporizadore pausatuta"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Tenporizadoreak ikusteko, ukitu hau"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> tenporizadore"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Hurrengo tenporizadorea: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Alarmarik ez"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Ez da alarmarik ezarri"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"EZ DAGO ALARMARIK"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Ordu honek ez du balio: <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Ez dago alarmarik (<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>)"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Ez dago alarmarik programatuta"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Ez da zehaztu etiketarik"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Ez dago etiketa hori duen alarmarik"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Kronometroa abian da dagoeneko"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Kronometroa ez da abian"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Ezin da berrezarri kronometroa, exekutatzen ari delako"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Gelditu da kronometroa"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Gelditu da kronometroa"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Berrezarri da kronometroa"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Ezarri da kronometroaren denbora tarte partziala"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Hasi da kronometroa"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Ez dago alarmarik programatuta ordu horretarako"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Baztertu da <xliff:g id="ALARM_TIME">%s</xliff:g> alarma"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarmaren ordua: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Ez dago tenporizadorerik ezarrita"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Ezabatu da tenporizadorea"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Tenporizadorea abian da dagoeneko"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Ezin da eskaera osatu; tenporizadore bat baino gehiago dago"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Abiarazi da tenporizadorea"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Ez dago tenporizadorerik"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Tenporizadore bat baino gehiago daude"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Kendu egin da tenporizadorea."</string>
     <string name="timer_created" msgid="4381027137335885547">"Sortu da tenporizadorea"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Tenporizadorearen iraupenak ez du balio"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Berrezarri da tenporizadorea"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Ezin da berrezarri tenporizadorea, oraindik abian baita. Berrezartzeko, gelditu tenporizadorea."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Tenporizadorea gelditu da dagoeneko"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Ezabatu da tenporizadorea"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Abiarazi da tenporizadorea"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Tenporizadorearen iraupenak ez du balio"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Ez da hautatu hiririk"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Adierazi duzun hiria ez dago erabilgarri"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Hiri hori gehitu da dagoeneko"</string>
diff --git a/res/values-fa/array.xml b/res/values-fa/array.xml
index 1b4a322..d170539 100644
--- a/res/values-fa/array.xml
+++ b/res/values-fa/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>فورتالزا"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>گراند تورک"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>گرنادا"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>گواتمالا"</item>
+    <item msgid="6216160110733510854">"گ<xliff:g id="SEPARATOR">=</xliff:g>گواتمالا"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>گویان"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>هالیفاکس"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>هاوانا"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>تورنتو"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>ونکوور"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>وینیپگ"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>قطب جنوب"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>قطب جنوب<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>لانگیربین"</item>
     <item msgid="3784788073896028355">"ا<xliff:g id="SEPARATOR">=</xliff:g>آلماتی"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>امان"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>غزه"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>هبرون"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>هو شی‌ مین"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>هنگ‌ کنگ"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>هنگ‌ کنگ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>استانبول"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>جاکارتا"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>اورشلیم"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>مانیل"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>مسقط"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>پنوم‌‌پن"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>پیونگ‌یانگ"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>پیونگ‌یانگ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>قطر"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>رانگون"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>ریاض"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>سایگون"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>سئول"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>شانگهای"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>شانگهای<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>سنگاپور"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>تایپه"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>تایپه<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>تهران"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>تل‌آویو"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>توکیو"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>توکیو<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>اولان‌باتور"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>برمودا"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>قناری"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>رنو"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>بلک راک سیتی"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>دوحه"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>پکن"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>پکن<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>بمبئی"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>دهلی"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>اوزاکا"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>اوزاکا<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>لاهور"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>صنعا"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>بارسلون"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>کمبریج"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>کرکلند"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>مدیسون"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>گوانگ‌ژو"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>گوانگ‌ژو<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>حیدرآباد"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>رستون"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>بلو هوریزونته"</item>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 4fbdaba..2e7d138 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"نمایش ساعت"</string>
     <string name="hide_clock" msgid="3217727306480505694">"پنهان کردن ساعت"</string>
     <string name="label" msgid="162189613902857319">"برچسب"</string>
+    <string name="on_switch" msgid="2297966258029227449">"روشن"</string>
+    <string name="off_switch" msgid="3381070073851148013">"خاموش"</string>
     <string name="default_label" msgid="5590025289805630372">"هشدار"</string>
     <string name="set_alarm" msgid="9148359866152726808">"تنظیم زنگ ساعت"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"لرزش"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"تکرار"</string>
     <string name="alert" msgid="6506982899651975645">"آهنگ زنگ هشدار"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"آهنگ زنگ سفارشی"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"تایمر به پایان رسید"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"بی‌صدا"</string>
     <string name="ringtone" msgid="9110746249688559579">"آهنگ زنگ"</string>
     <string name="time" msgid="8067216534232296518">"زمان"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"فردا"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"تعویق تا <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"هشدار بعدی"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"هشدار بی‌پاسخ حذف شد"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"کمتر از یک دقیقه باقیمانده است"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> باقیمانده"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> باقیمانده"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> باقیمانده"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"کمتر از یک دقیقه باقیمانده است"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> باقیمانده"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"باقیمانده"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"باقیمانده"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"هشدار برای کمتر از ۱ دقیقه دیگر از حالا تنظیم شد."</item>
     <item msgid="6002066367368421848">"هشدار برای <xliff:g id="DAYS">%1$s</xliff:g> دیگر از حالا تنظیم شد."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">دقیقه</item>
       <item quantity="other">دقیقه</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"افزایش تدریجی صدا"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"خاموش"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> ثانیه"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"ثانیه"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"سکوت پس از"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> دقیقه</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"برگشت"</string>
     <string name="delete" msgid="5732434972457000541">"حذف"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"میزان صدای هشدار"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"ساکت"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"بی‌صدا"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"نامشخص"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"هشدار را قطع کنید یا به‌تعویق بیندازید."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (معوق)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"هشدار برای <xliff:g id="TIME">%s</xliff:g> تنظیم شد. جهت لغو لمس کنید."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"در حال بارگیری آهنگ زنگ..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"تنظیم سرویس بازپخش صدا برای تایمرها در «ساعت»."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"تنظیم زنگ ساعت"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"هشدار"</string>
     <string name="menu_timer" msgid="6459070074762877114">"تایمر"</string>
     <string name="menu_clock" msgid="5612760670606829805">"ساعت"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"مرتب‌سازی براساس نام"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"شهرهای منتخب"</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_start_button" msgid="8373422516681242270">"شروع"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"مکث"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"دور"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"اشتراک‏‌گذاری"</string>
     <string name="hours_label" msgid="3393478155635368097">"س"</string>
     <string name="minutes_label" msgid="3568098128251438588">"د"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"زمان من <xliff:g id="TIME">%s</xliff:g> است"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"زمان‌های دور:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"دور <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"شماره <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"شماره <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one">‏<xliff:g id="NUMBER">%d</xliff:g> ساعت</item>
       <item quantity="other">‏<xliff:g id="NUMBER">%d</xliff:g> ساعت</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"افزودن ۱ دقیقه"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"افزودن ۱ دقیقه"</string>
     <string name="timer_stop" msgid="3361154678667736722">"توقف"</string>
-    <string name="timer_done" msgid="2375990511982914051">"تمام"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"توقف همه تایمرها"</string>
     <string name="timer_reset" msgid="7848424809190171640">"بازنشانی"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"لغو"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"تایمر لغو شد"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"وقت تمام است"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> تایمر منقضی شده"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"تایمر"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"حداکثر ۴ تایمر"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"مکث"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"بازنشانی همه تایمرها"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"شما واقعاً خدای سرعت هستید."</item>
     <item msgid="6332879039890727169">"از ثمره زحمات خود لذت ببرید."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"شهرها"</string>
     <string name="clock_settings" msgid="8317286807280600391">"ساعت"</string>
     <string name="clock_style" msgid="2265011060429742344">"سبک"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"تغییر تاریخ و زمان"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"آنالوگ"</item>
     <item msgid="8483930821046925592">"دیجیتال"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":۰۰"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">"۳۰:"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> علامت‌گذاری شد"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"علامت <xliff:g id="CITY_NAME">%s</xliff:g> برداشته شد"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"جزایر مارشال"</item>
     <item msgid="4196408495909011020">"جزیره میدوی"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"جاکارتا"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"هشدارها"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"سرویس کرنومتر برای اجرای اعلان."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"متوقف شد"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"اقدامات را از اعلان‌های تایمر پردازش می‌کند."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"اقدامات را از اعلان‌های کرونومتر پردازش می‌کند."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"متوقف شد"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"برای ردکردن، انگشتتان را روی صفحه تند به راست بکشید"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"برای تعویق، انگشتتان را روی صفحه تند به چپ بکشید"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"برای تعویق، انگشتتان را روی صفحه به چپ و برای رد کردن به راست بکشید"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"تایمرها"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"آهنگ زنگ تایمر"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"تایمر متوقف شد"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> تایمر متوقف شد"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"تایمر متوقف شد"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> تایمر متوقف شد"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"برای دیدن تایمرهای خود لمس کنید"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> تایمر‌"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"تایمر بعدی: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"بدون هشدار"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"هشداری تنظیم نشده است"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"هشداری در آینده فعال نیست"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"‏EEE، ‏h:mm ‏a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"‏EEE، ‏k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"زمان نامعتبر است <xliff:g id="INVALID_AMPM">%s</xliff:g> ‏<xliff:g id="INVALID_MINUTES">%d</xliff:g>:‏<xliff:g id="INVALID_HOUR">%d</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"زنگ هشداری برای <xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>‏:<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g> تنظیم نشده است"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"هیچ زنگ هشدار زمان‌بندی‌شده‌ای وجود ندارد"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"هیچ برچسبی مشخص نشده است"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"هیچ زنگ هشداری دارای این برچسب نیست"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"کرونومتر در حال حاضر فعال است"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"کرونومتر فعال نیست"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"نمی‌توان کرنومتر را بازنشانی کرد، چون در حال استفاده است"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"کرنومتر متوقف شد"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"کرونومتر متوقف شد"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"کرنومتر بازنشانی شد"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"صفحه کرنومتر برای خوانش زمان ثابت شد"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"کرنومتر شروع شد"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"هیچ زنگ هشداری برای این زمان برنامه‌ریزی نشده است"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"زنگ هشدار <xliff:g id="ALARM_TIME">%s</xliff:g> خاموش شد"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"هشدار برای <xliff:g id="ALARM_TIME">%s</xliff:g> تنظیم می‌شود"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"هیچ تایمری تنظیم نشده است"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"تایمر حذف شد"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"تایمر در حال حاضر فعال است"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"تکمیل درخواست شما ممکن نیست، چندین تایمر وجود دارد"</string>
-    <string name="timer_started" msgid="6715582052946641641">"تایمر شروع شد"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"تایمری وجود ندارد"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"بیش از یک تایمر وجود دارد"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"تایمر حذف شد."</string>
     <string name="timer_created" msgid="4381027137335885547">"تایمر ایجاد شد"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"مدت زمان  تایمر نامعتبر است"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"بازنشانی تایمر"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"تایمر بازنشانی نمی‌شود، چون هنوز فعال است. تایمر را برای بازنشانی متوقف کنید."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"تایمر در حال حاضر متوقف است"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"تایمر حذف شد"</string>
+    <string name="timer_started" msgid="6715582052946641641">"تایمر شروع شد"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"مدت زمان  تایمر نامعتبر است"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"هیچ شهری انتخاب نشده است"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"شهری که مشخص کردید در دسترس نیست"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"این شهر قبلاً اضافه شده است"</string>
diff --git a/res/values-fi/array.xml b/res/values-fi/array.xml
index 760089e..8d46de5 100644
--- a/res/values-fi/array.xml
+++ b/res/values-fi/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemalan kaupunki"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havanna"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"E<xliff:g id="SEPARATOR">=</xliff:g>Etelänapa"</item>
+    <item msgid="498429228419399474">"E<xliff:g id="SEPARATOR">=</xliff:g>Etelänapa<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Soul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulan Bator"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanaria"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Peking<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sanaa"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanton"</item>
+    <item msgid="2077617905582224600">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanton<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 2379abc..c53290f 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Näytä kello"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Piilota kello"</string>
     <string name="label" msgid="162189613902857319">"Tunniste"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Käytössä"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Ei käytössä"</string>
     <string name="default_label" msgid="5590025289805630372">"Herätys"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Aseta herätys"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Värinä"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Toisto"</string>
     <string name="alert" msgid="6506982899651975645">"Herätyksen soittoääni"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Muokattu soittoääni"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Ajastin lopussa"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Äänetön"</string>
     <string name="ringtone" msgid="9110746249688559579">"Soittoääni"</string>
     <string name="time" msgid="8067216534232296518">"Aika"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Huomenna"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Torkkuhälytys <xliff:g id="TIME">%s</xliff:g> saakka"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Tuleva herätys"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Ohitettu herätys on poistettu"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Alle minuutti jäljellä"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> jäljellä"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> jäljellä"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> jäljellä"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Alle minuutti jäljellä"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> jäljellä"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"jäljellä"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"jäljellä"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Herätykseen on aikaa alle minuutti."</item>
     <item msgid="6002066367368421848">"Herätykseen on aikaa <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minuuttia</item>
       <item quantity="one">minuutti</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Lisää äänenvoimakkuutta vähitellen"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Ei käytössä"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> sekuntia"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sekuntia"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Herätyksen kesto"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuuttia</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Peruuta muutokset"</string>
     <string name="delete" msgid="5732434972457000541">"Poista"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Herätysäänen voimakkuus"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Äänetön"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Äänetön"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Tuntematon"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Aseta torkku tai hylkää herätys."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (torkku)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Herätysajaksi on asetettu <xliff:g id="TIME">%s</xliff:g>. Peruuta koskettamalla."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Ladataan soittoääntä..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Äänentoistopalvelu kelloon asetetuille ajastuksille."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Aseta herätys"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Herätys"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Ajastin"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Kello"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Lajittele nimen mukaan"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Valitut kaupungit"</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_start_button" msgid="8373422516681242270">"Käynnistä"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Keskeytä"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Kierros"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Jaa"</string>
     <string name="hours_label" msgid="3393478155635368097">"t"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Oma aika: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Kierrosajat:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Kierros <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> tuntia</item>
       <item quantity="one">1 tunti</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Lisää 1 minuutti"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Lisää 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Pysäytä"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Valmis"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Pysäytä kaikki ajastimet"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Nollaa"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Peruuta"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Ajastimen asetus peruutettiin."</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Aika loppui"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ajastinta umpeutui"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Ajastin"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Enintään neljä ajastinta"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Keskeytä"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Nollaa ajastimet"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Olet supernopea."</item>
     <item msgid="6332879039890727169">"Nauti työsi hedelmistä."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Kaupungit"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Kello"</string>
     <string name="clock_style" msgid="2265011060429742344">"Tyyli"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Vaihda päivämäärä ja aika"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analoginen"</item>
     <item msgid="8483930821046925592">"Digitaalinen"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"-"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">".00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">".30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> valittu"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"valinta <xliff:g id="CITY_NAME">%s</xliff:g> poistettu"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshallinsaaret"</item>
     <item msgid="4196408495909011020">"Midwaysaari"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Herätykset"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Sekuntikello, joka näyttää ilmoituksen."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Pysäytetty"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Käsittelee ajastimen ilmoitusten toimintoja."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Käsittelee sekuntikellon ilmoitusten toimintoja."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Pysäytetty"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Ohita pyyhkäisemällä oikealle"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Torkuta pyyhkäisemällä vasemmalle"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Torkuta pyyhkäisemällä vasemmalle tai sulje pyyhkäisemällä oikealle."</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Ajastimet"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ajastimen soittoääni"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Ajastin pysäytetty"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> ajastinta pysäytetty"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Ajastin keskeytetty"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> ajastinta keskeytetty"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Kosketa ja näytä ajastimet"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ajastinta"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Seuraava ajastin: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Ei herätyksiä"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Ei herätyksiä"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"EI TULEVIA HÄLYTYKSIÄ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k.mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h.mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k.mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Virheellinen aika <xliff:g id="INVALID_HOUR">%d</xliff:g>.<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Kello <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>.<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> ei ole hälytystä."</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Ei ajastettuja hälytyksiä"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Tunnistetta ei ole määritetty."</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Yksikään herätys ei sisällä tunnistetta."</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Sekuntikello on jo käynnissä."</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Sekuntikello ei ole käynnissä."</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Sekuntikelloa ei voi nollata sen ollessa käynnissä."</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Sekuntikello on pysäytetty."</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Sekuntikello pysäytetty"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Sekuntikello on nollattu."</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Sekuntikellon kierrosaika on asetettu."</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Sekuntikello on käynnistetty."</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Kyseisenä ajankohtana ei ole hälytystä."</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> herätys ohitettiin."</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Herätysajaksi on asetettu <xliff:g id="ALARM_TIME">%s</xliff:g>."</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Ajastinta ei ole asetettu."</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Ajastin poistettiin."</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Ajastin on jo käynnissä."</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Pyynnön suorittaminen ei onnistu. Asetettuna on useita ajastimia."</string>
-    <string name="timer_started" msgid="6715582052946641641">"Ajastin käynnistettiin."</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Ajastimia ei ole."</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Ajastimia on useita."</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Ajastin on poistettu."</string>
     <string name="timer_created" msgid="4381027137335885547">"Ajastin on luotu."</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Virheellinen ajastimen pituus"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Ajastin nollattiin."</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Ajastinta ei voi nollata, koska se on yhä käynnissä. Pysäytä ajastin ennen nollausta."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Ajastin on jo pysäytetty."</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Ajastin poistettiin."</string>
+    <string name="timer_started" msgid="6715582052946641641">"Ajastin käynnistettiin."</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Virheellinen ajastimen pituus"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Kaupunkia ei ole valittu."</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Määrittämäsi kaupunki ei ole käytettävissä."</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Kaupunki on jo lisätty."</string>
diff --git a/res/values-fr-rCA/array.xml b/res/values-fr-rCA/array.xml
index 2117870..a60b11b 100644
--- a/res/values-fr-rCA/array.xml
+++ b/res/values-fr-rCA/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenade"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala (ville)"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyane"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"L<xliff:g id="SEPARATOR">=</xliff:g>La Havane"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"P<xliff:g id="SEPARATOR">=</xliff:g>Pôle Sud"</item>
+    <item msgid="498429228419399474">"P<xliff:g id="SEPARATOR">=</xliff:g>Pôle Sud<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hébron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Hô-Chi-Minh-Ville"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jérusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manille"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Mascate"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoun"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyad"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saïgon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Séoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapour"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Téhéran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"O<xliff:g id="SEPARATOR">=</xliff:g>Oulan-Bator"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermudes"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canari"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Pékin"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Pékin<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sanaa"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelone"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"C<xliff:g id="SEPARATOR">=</xliff:g>Canton"</item>
+    <item msgid="2077617905582224600">"C<xliff:g id="SEPARATOR">=</xliff:g>Canton<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index db449e7..e8a77ec 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Afficher l\'horloge"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Masquer l\'horloge"</string>
     <string name="label" msgid="162189613902857319">"Étiquette"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Activée"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Désactivée"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarme"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Régler l\'alarme"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibreur"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Répéter"</string>
     <string name="alert" msgid="6506982899651975645">"Sonnerie de l\'alarme"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Sonnerie personnalisée"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Minuterie expirée"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Mode silencieux"</string>
     <string name="ringtone" msgid="9110746249688559579">"Sonnerie"</string>
     <string name="time" msgid="8067216534232296518">"Heure"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Demain"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Répétition jusqu\'à <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Alarme imminente"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Votre alarme manquée a été supprimée"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Dans moins d\'une minute"</item>
-    <item msgid="83197792732433351">"Dans <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Dans <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Dans <xliff:g id="HOURS">%1$s</xliff:g> et <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Il reste moins d\'une minute…"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Il reste <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"Il reste"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"Il reste"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Prochaine alarme prévue dans moins d\'une minute."</item>
     <item msgid="6002066367368421848">"Prochaine alarme prévue dans <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">minute</item>
       <item quantity="other">minutes</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Augmenter le volume progressivement"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Désactivé"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> secondes"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"secondes"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Silencieux automatique après"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minute</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Rétablir"</string>
     <string name="delete" msgid="5732434972457000541">"Supprimer"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volume de l\'alarme"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Mode silencieux"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Mode silencieux"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Inconnu"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Répétez ou ignorez l\'alarme."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (répétition)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Prochaine alarme à <xliff:g id="TIME">%s</xliff:g>. Appuyez pour annuler."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Chargement de la sonnerie..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Service de lecture audio pour les minuteurs définis via l\'Horloge."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Régler l\'alarme"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarme"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Minuteur"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Horloge"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Trier par nom"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Villes sélectionnées"</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_start_button" msgid="8373422516681242270">"Démarrer"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Intervalle"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Partager"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"min"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Mon heure est <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Temps de circuit :"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Tour <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Nº <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Nº <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> heure</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> heures</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Ajouter 1 minute"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Ajouter 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Arrêter"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Terminé"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Arrêter tous les minuteurs"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Réinitialiser"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Annuler"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Le minuteur a été annulé"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Le temps est écoulé."</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> minuteries expirées"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Minuteur"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Un maximum de quatre minuteries est autorisé"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Interrompre"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Réinit. minut."</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"On peut dire que vous êtes rapide."</item>
     <item msgid="6332879039890727169">"Profitez du fruit de votre travail."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Villes"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Horloge"</string>
     <string name="clock_style" msgid="2265011060429742344">"Style"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Modifier la date et l\'heure"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogique"</item>
     <item msgid="8483930821046925592">"Numérique"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"-"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> coché"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> décoché"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Îles Marshall"</item>
     <item msgid="4196408495909011020">"Atoll de Midway"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmes"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Chronomètre pour exécuter la notification"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Arrêté"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Traite les actions des notifications du minuteur."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Traite les actions des notifications du chronomètre."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Interrompu"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Glissez vers la droite pour supprimer"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Glissez vers la gauche pour répéter"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Glisser le doigt vers la gauche pour répéter, ou vers la droite pour ignorer"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Minuteurs"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Sonnerie du minuteur"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Arrêt du minuteur"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Arrêt de <xliff:g id="NUMBER">%d</xliff:g> minuteurs"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Minuterie en pause"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> minuteries en pause"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Appuyer ici pour afficher les minuteurs"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> minuteurs"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Minuteur suivant : <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Aucune alarme"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Aucune alarme"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"AUCUNE ALARME À VENIR"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h h mm min"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k h mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h h mm"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k h mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Heure non valide : <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Aucune alarme définie à <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Aucun alarme n\'a été programmée"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Aucune étiquette n\'a été spécifiée"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Aucune alarme ne contient cette étiquette"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Le chronomètre est déjà en cours d\'utilisation"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Le chronomètre n\'est pas lancé"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Le chronomètre ne peut pas être remis à zéro, car il est en cours d\'utilisation"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Chronomètre arrêté"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Le chronomètre est interrompu"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Chronomètre remis à zéro"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Chronomètre en mode tour"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Chronomètre démarré"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Aucune alarme prévue à cette heure"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"L\'alarme de <xliff:g id="ALARM_TIME">%s</xliff:g> a été ignorée"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"L\'alarme est réglée à <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Aucune minuterie n\'est définie"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Minuterie supprimée"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"La minuterie est déjà en cours d\'exécution"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Impossible de traiter votre demande. Plusieurs minuteries sont actives."</string>
-    <string name="timer_started" msgid="6715582052946641641">"La minuterie a été lancée"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Aucune minuterie définie"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Plusieurs minuteries existent"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"La minuterie a été supprimée."</string>
     <string name="timer_created" msgid="4381027137335885547">"Minuterie créée"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Longueur de minuterie non valide"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"La minuterie a été remise à zéro"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Impossible de remettre la minuterie à zéro, car elle est toujours en cours. Arrêtez-la pour la réinitialiser."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"La minuterie est déjà arrêtée"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Minuterie supprimée"</string>
+    <string name="timer_started" msgid="6715582052946641641">"La minuterie a été lancée"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Longueur de minuterie non valide"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Aucune ville n\'a été sélectionnée"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"La ville que vous avez indiquée n\'a pas été trouvée"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Cette ville a déjà été ajoutée"</string>
diff --git a/res/values-fr/array.xml b/res/values-fr/array.xml
index d91b3f3..68b16a9 100644
--- a/res/values-fr/array.xml
+++ b/res/values-fr/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenade"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala (ville)"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyane"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"L<xliff:g id="SEPARATOR">=</xliff:g>La Havane"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"P<xliff:g id="SEPARATOR">=</xliff:g>Pôle Sud"</item>
+    <item msgid="498429228419399474">"P<xliff:g id="SEPARATOR">=</xliff:g>Pôle Sud<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hébron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Hô-Chi-Minh-Ville"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"D<xliff:g id="SEPARATOR">=</xliff:g>Djakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jérusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manille"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Mascate"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoun"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyad"</item>
     <item msgid="4229224905931739201">"H<xliff:g id="SEPARATOR">=</xliff:g>Hô-Chi-Minh-Ville"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Séoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapour"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Téhéran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel-Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"O<xliff:g id="SEPARATOR">=</xliff:g>Oulan-Bator"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermudes"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canaries"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Pékin"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Pékin<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sanaa"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelone"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 9546a2e..d8a7fab 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Afficher l\'horloge"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Masquer l\'horloge"</string>
     <string name="label" msgid="162189613902857319">"Libellé"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Activée"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Désactivée"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarme"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Régler l\'alarme"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibreur"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Répéter"</string>
     <string name="alert" msgid="6506982899651975645">"Sonnerie de l\'alarme"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Sonnerie personnalisée"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Minuteur arrivé à expiration"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silencieux"</string>
     <string name="ringtone" msgid="9110746249688559579">"Sonnerie"</string>
     <string name="time" msgid="8067216534232296518">"Heure"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Demain"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Répétition jusqu\'à <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Alarme imminente"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Votre alarme manquée a été supprimée."</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Dans moins d\'une minute"</item>
-    <item msgid="83197792732433351">"Dans <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Dans <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Dans <xliff:g id="HOURS">%1$s</xliff:g> et <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Dans moins d\'une minute"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Dans <xliff:g id="HOURS">%1$s</xliff:g> et <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"Dans"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"Dans"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Prochaine alarme prévue dans moins d\'une minute."</item>
     <item msgid="6002066367368421848">"Prochaine alarme prévue dans <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">minute</item>
       <item quantity="other">minutes</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Augmenter le volume progressivement"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Désactivé"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> secondes"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"secondes"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Arrêter la sonnerie après"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minute</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Annuler"</string>
     <string name="delete" msgid="5732434972457000541">"Supprimer"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volume"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silencieuse"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silencieux"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Inconnue"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Répétez ou ignorez l\'alarme."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (répétition)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Prochaine alarme à <xliff:g id="TIME">%s</xliff:g>. Appuyez pour annuler."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Chargement de la sonnerie..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Service de lecture audio pour les minuteurs définis via l\'Horloge."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Régler l\'alarme"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarme"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Minuteur"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Horloge"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Trier par nom"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Villes sélectionnées"</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_start_button" msgid="8373422516681242270">"Démarrer"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pause"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Intervalle"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Partager"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"min"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Mon heure est <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Temps de circuit :"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Tour <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"N° <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"N° <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> heure</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> heures</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Ajouter 1 minute"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Ajouter 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Arrêter"</string>
-    <string name="timer_done" msgid="2375990511982914051">"OK"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Arrêter tous les minuteurs"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Réinitialiser"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Annuler"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Le minuteur a été annulé."</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Le temps est écoulé."</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> minuteurs ont expiré."</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Minuteur"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Quatre minuteurs maximum."</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Interrompre"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Réinit. minuteurs"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"On peut dire que vous êtes rapide."</item>
     <item msgid="6332879039890727169">"Profitez du fruit de votre travail."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Villes"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Horloge"</string>
     <string name="clock_style" msgid="2265011060429742344">"Style"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Modifier la date et l\'heure"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogique"</item>
     <item msgid="8483930821046925592">"Numérique"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Case \"<xliff:g id="CITY_NAME">%s</xliff:g>\" cochée"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Case \"<xliff:g id="CITY_NAME">%s</xliff:g>\" décochée"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Îles Marshall"</item>
     <item msgid="4196408495909011020">"Atoll de Midway"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmes"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Chronomètre pour exécuter la notification"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Arrêté"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Traite les actions issues des notifications du minuteur."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Traite les actions issues des notifications du chronomètre."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Interrompu"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Faire glisser le doigt vers la droite pour ignorer"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Faire glisser le doigt vers la gauche pour répéter"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Faire glisser le doigt vers la gauche pour répéter ou vers la droite pour ignorer"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Minuteurs"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Sonnerie du minuteur"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Arrêt du minuteur"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Arrêt de <xliff:g id="NUMBER">%d</xliff:g> minuteurs"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Minuteur interrompu"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> minuteurs interrompus"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Appuyer ici pour afficher les minuteurs"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> minuteurs"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Minuteur suivant : <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Aucune alarme"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Aucune alarme"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"AUCUNE ALARME À VENIR"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Heure non valide <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Aucune alarme définie à <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>."</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Aucune alarme n\'est programmée."</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Aucun libellé spécifié."</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Aucune alarme ne comporte le libellé"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Le chronomètre est déjà lancé."</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Le chronomètre n\'est pas lancé."</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Impossible de réinitialiser le chronomètre, car il est en cours d\'exécution."</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Le chronomètre a bien été arrêté."</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Le chronomètre a bien été interrompu."</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Le chronomètre a bien été réinitialisé."</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Le chronomètre a bien enregistré un tour."</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Le chronomètre a bien été lancé."</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Aucune alarme n\'est programmée à cette heure."</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"L\'alarme de <xliff:g id="ALARM_TIME">%s</xliff:g> a été ignorée."</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarme à <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Aucun minuteur n\'est défini."</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Le minuteur a été supprimé."</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Le minuteur est déjà lancé."</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Impossible de traiter votre demande. Plusieurs minuteurs sont disponibles."</string>
-    <string name="timer_started" msgid="6715582052946641641">"Le minuteur a été lancé."</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Aucun minuteur défini."</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Plusieurs minuteurs sont définis."</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Le minuteur a été supprimé."</string>
     <string name="timer_created" msgid="4381027137335885547">"Le minuteur a bien été créé."</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Durée de minuteur incorrecte."</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Le minuteur a été remis à zéro."</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Impossible de remettre le minuteur à zéro, car il est toujours en cours. Arrêtez-le pour le réinitialiser."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Le minuteur est déjà arrêté."</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Le minuteur a été supprimé."</string>
+    <string name="timer_started" msgid="6715582052946641641">"Le minuteur a été lancé."</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Durée de minuteur incorrecte."</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Aucune ville n\'a été sélectionnée."</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"La ville indiquée n\'est pas disponible."</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Cette ville a déjà été ajoutée."</string>
diff --git a/res/values-gl-rES/array.xml b/res/values-gl-rES/array.xml
index e07e5eb..3e64c41 100644
--- a/res/values-gl-rES/array.xml
+++ b/res/values-gl-rES/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Granada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"C<xliff:g id="SEPARATOR">=</xliff:g>Cidade de Guatemala"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Güiana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>A Habana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Polo Sur"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Polo Sur<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almati"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amán"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebrón"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istambul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Iacarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Xerusalén"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Mascate"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangún"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riad"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigón"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seúl"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teherán"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Toquio"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Toquio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulán Bátor"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermudas"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Canarias"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Pequín"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Pequín<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sana"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hiderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index 6a7304a..1b7e11b 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Mostrar reloxo"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Ocultar reloxo"</string>
     <string name="label" msgid="162189613902857319">"Etiqueta"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Activada"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Desactivada"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarma"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Definir alarma"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrar"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Repetir"</string>
     <string name="alert" msgid="6506982899651975645">"Ton de chamada da alarma"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Ton de chamada personalizado"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Finalizou o temporizador"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silencio"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ton de chamada"</string>
     <string name="time" msgid="8067216534232296518">"Hora"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Mañá"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Repetir ás <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Próxima alarma"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Eliminouse a alarma perdida"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Queda menos dun minuto"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> restantes"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> restantes"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> restantes"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Queda menos dun minuto"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Quedan <xliff:g id="HOURS">%1$s</xliff:g> e <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"queda"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"quedan"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarma definida para dentro de menos de 1 minuto a partir de agora."</item>
     <item msgid="6002066367368421848">"Alarma definida para dentro de <xliff:g id="DAYS">%1$s</xliff:g> a partir de agora."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minutos</item>
       <item quantity="one">minuto</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Aumentar o volume gradualmente"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Desactivado"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> segundos"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"segundos"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Silenciar despois de"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutos</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Reverter"</string>
     <string name="delete" msgid="5732434972457000541">"Eliminar"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volume da alarma"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silencio"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silencio"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Descoñecido"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Adiar ou ignorar alarma."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (adiada)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarma definida para as <xliff:g id="TIME">%s</xliff:g>. Toca para cancelar."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Cargando ton de chamada..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Servizo de reprodución de son para os temporizadores definidos en Reloxo."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Definir alarma"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarma"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Temporizador"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Reloxo"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Ordenar por nome"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Cidades seleccionadas"</string>
     <string name="sw_resume_button" msgid="2569360966002022248">"Continuar"</string>
-    <string name="sw_start_button" msgid="8373422516681242270">"Iniciar"</string>
-    <string name="sw_stop_button" msgid="8322958613123274451">"Deter"</string>
-    <string name="sw_lap_button" msgid="6992264696039004233">"Volta"</string>
     <string name="sw_reset_button" msgid="6616804728322906117">"Restablecer"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Iniciar"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Volta"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Compartir"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"O meu tempo é <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Tempos de volta:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Volta <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"N.º <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"N.º <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> horas</item>
       <item quantity="one">Unha hora</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Engadir 1 minuto"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Engadir 1 minuto"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Deter"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Feito"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Deter temporizadores"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Restablecer"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Cancelar"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Cancelouse o temporizador"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Acabouse o tempo"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Xa se completaron <xliff:g id="NUM_TIMERS">%d</xliff:g> temporizadores"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Temporizador"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"4 temporizadores como máximo"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pausa"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Restablecer todo"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Es o rei da velocidade."</item>
     <item msgid="6332879039890727169">"Goza dos froitos do teu traballo."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Cidades"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Reloxo"</string>
     <string name="clock_style" msgid="2265011060429742344">"Estilo"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Cambiar data e hora"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analóxico"</item>
     <item msgid="8483930821046925592">"Dixital"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Marcouse <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Desmarcouse <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Illas Marshall"</item>
     <item msgid="4196408495909011020">"Illas Midway"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Iacarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmas"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Servizo de cronómetro para executar a notificación."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Detido"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Procesa accións das notificacións do temporizador."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Procesa accións das notificacións do cronómetro."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"En pausa"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Pasa o dedo cara a dereita para rexeitar"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Pasa o dedo cara a esquerda para adiar"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Pasa o dedo cara a esquerda para adiar e cara a dereita para ignorar"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Temporizadores"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ton de chamada do temporizador"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Temporizador detido"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores detidos"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Pausouse o temporizador"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores en pausa"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Toca para ver os temporizadores"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Seguinte temporizador: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Non hai alarmas"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Ningunha alarma"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NON HAI ALARMAS PROXIMAMENTE"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Hora non válida <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Non hai ningunha alarma ás <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Non hai ningunha alarma programada"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Non hai etiquetas especificadas"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Ningunha alarma contén a etiqueta"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Xa se está usando o cronómetro"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Non se está usando o cronómetro"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"O cronómetro non se pode restablecer porque está en funcionamento"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Detívose o cronómetro"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Pausouse o cronómetro"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Restableceuse o cronómetro"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Rexistrouse unha volta no cronómetro"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Iniciouse o cronómetro"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Non hai ningunha alarma programada para esta hora"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Ignorouse a alarma das <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"A alarma está definida para as <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Non hai ningún temporizador definido"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Eliminouse o temporizador"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Xa se está usando o temporizador"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Non se puido completar a solicitude porque hai varios temporizadores dispoñibles"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Iniciouse o temporizador"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Non hai temporizadores"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Hai máis dun temporizador"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Eliminouse o temporizador."</string>
     <string name="timer_created" msgid="4381027137335885547">"Creouse o temporizador"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Duración de temporizador non válida"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Restableceuse o temporizador"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"O temporizador non se pode restablecer porque aínda se está usando. Detén o temporizador para restablecelo."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Xa se detivo o temporizador"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Eliminouse o temporizador"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Iniciouse o temporizador"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Duración de temporizador non válida"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Non hai ningunha cidade seleccionada"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"A cidade que especificaches non está dispoñible"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Xa se engadiu esa cidade"</string>
diff --git a/res/values-gu-rIN/array.xml b/res/values-gu-rIN/array.xml
index f51783b..d0dceb1 100644
--- a/res/values-gu-rIN/array.xml
+++ b/res/values-gu-rIN/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ફ<xliff:g id="SEPARATOR">=</xliff:g>ફોર્ટાલેઝા"</item>
     <item msgid="5801558418916235541">"ગ<xliff:g id="SEPARATOR">=</xliff:g>ગ્રાન્ડ ટર્ક"</item>
     <item msgid="2103759276235503048">"ગ<xliff:g id="SEPARATOR">=</xliff:g>ગ્રેનેડા"</item>
-    <item msgid="1490069759176391533">"ગ<xliff:g id="SEPARATOR">=</xliff:g>ગ્વાટેમાલા"</item>
+    <item msgid="6216160110733510854">"ગ<xliff:g id="SEPARATOR">=</xliff:g>ગ્વાટેમાલા શહેર"</item>
     <item msgid="525959305652046261">"ગ<xliff:g id="SEPARATOR">=</xliff:g>ગયાના"</item>
     <item msgid="7565596629973190931">"હ<xliff:g id="SEPARATOR">=</xliff:g>હેલિફેક્સ"</item>
     <item msgid="3811169155065582644">"હ<xliff:g id="SEPARATOR">=</xliff:g>હવાના"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ટ<xliff:g id="SEPARATOR">=</xliff:g>ટોરોન્ટો"</item>
     <item msgid="1506838283840737263">"વ<xliff:g id="SEPARATOR">=</xliff:g>વેન્કુવર"</item>
     <item msgid="8935386104773857399">"વ<xliff:g id="SEPARATOR">=</xliff:g>વિન્નિપેગ"</item>
-    <item msgid="1132634022412399582">"સ<xliff:g id="SEPARATOR">=</xliff:g>સાઉથ પોલ"</item>
+    <item msgid="498429228419399474">"સ<xliff:g id="SEPARATOR">=</xliff:g>સાઉથ પોલ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"લ<xliff:g id="SEPARATOR">=</xliff:g>લોંગઇયરબિયેન"</item>
     <item msgid="3784788073896028355">"અ<xliff:g id="SEPARATOR">=</xliff:g>અલ્માટી"</item>
     <item msgid="7895695236056852523">"અ<xliff:g id="SEPARATOR">=</xliff:g>અમ્માન"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ગ<xliff:g id="SEPARATOR">=</xliff:g>ગાઝા"</item>
     <item msgid="2359068282340162319">"હ<xliff:g id="SEPARATOR">=</xliff:g>હેબ્રોન"</item>
     <item msgid="6223396610551759129">"હ<xliff:g id="SEPARATOR">=</xliff:g>હો ચી મિંહ"</item>
-    <item msgid="4731022818651322736">"હ<xliff:g id="SEPARATOR">=</xliff:g>હોંગકોંગ"</item>
+    <item msgid="3439764751788710130">"હ<xliff:g id="SEPARATOR">=</xliff:g>હોંગકોંગ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"ઇ<xliff:g id="SEPARATOR">=</xliff:g>ઇસ્તંબુલ"</item>
     <item msgid="758800913783999425">"જ<xliff:g id="SEPARATOR">=</xliff:g>જકાર્તા"</item>
     <item msgid="8956406398692698126">"જ<xliff:g id="SEPARATOR">=</xliff:g>જેરુસલેમ"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"મ<xliff:g id="SEPARATOR">=</xliff:g>મનિલા"</item>
     <item msgid="6033964325069060422">"મ<xliff:g id="SEPARATOR">=</xliff:g>મસ્કત"</item>
     <item msgid="6077458941399984780">"ફ<xliff:g id="SEPARATOR">=</xliff:g>ફ્નોમ પેન્હ"</item>
-    <item msgid="935474308903572975">"પ<xliff:g id="SEPARATOR">=</xliff:g>પ્યોંગયાંગ"</item>
+    <item msgid="1245515372520913197">"પ<xliff:g id="SEPARATOR">=</xliff:g>પ્યોંગયાંગ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"ક<xliff:g id="SEPARATOR">=</xliff:g>કતાર"</item>
     <item msgid="1667243110545095146">"ર<xliff:g id="SEPARATOR">=</xliff:g>રંગૂન"</item>
     <item msgid="4460370766685855731">"ર<xliff:g id="SEPARATOR">=</xliff:g>રિયાધ"</item>
     <item msgid="4229224905931739201">"સ<xliff:g id="SEPARATOR">=</xliff:g>સૈગોન"</item>
     <item msgid="8705359848250215620">"સ<xliff:g id="SEPARATOR">=</xliff:g>સીઓલ"</item>
-    <item msgid="583367295371395814">"સ<xliff:g id="SEPARATOR">=</xliff:g>શંઘાઇ"</item>
+    <item msgid="3814881931186962624">"સ<xliff:g id="SEPARATOR">=</xliff:g>શંઘાઇ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"સ<xliff:g id="SEPARATOR">=</xliff:g>સિંગાપુર"</item>
-    <item msgid="1972491729911039207">"ત<xliff:g id="SEPARATOR">=</xliff:g>તાઇપેઇ"</item>
+    <item msgid="8982451946156859368">"ત<xliff:g id="SEPARATOR">=</xliff:g>તાઇપેઇ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"ત<xliff:g id="SEPARATOR">=</xliff:g>તેહરાન"</item>
     <item msgid="8629402941285674273">"ત<xliff:g id="SEPARATOR">=</xliff:g>તેલ અવિવ"</item>
-    <item msgid="8499164674454654525">"ટ<xliff:g id="SEPARATOR">=</xliff:g>ટોકિયો"</item>
+    <item msgid="76330681636547168">"ટ<xliff:g id="SEPARATOR">=</xliff:g>ટોકિયો<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"ઉ<xliff:g id="SEPARATOR">=</xliff:g>ઉલાંબતાર"</item>
     <item msgid="2028626988021468640">"બ<xliff:g id="SEPARATOR">=</xliff:g>બર્મુડા"</item>
     <item msgid="4527109966513690429">"ક<xliff:g id="SEPARATOR">=</xliff:g>કૅનેરી"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"ર<xliff:g id="SEPARATOR">=</xliff:g>રેનો"</item>
     <item msgid="9155068631060038769">"બ<xliff:g id="SEPARATOR">=</xliff:g>બ્લેક રોક સિટી"</item>
     <item msgid="8498761319928979900">"દ<xliff:g id="SEPARATOR">=</xliff:g>દોહા"</item>
-    <item msgid="8307897251088048641">"બ<xliff:g id="SEPARATOR">=</xliff:g>બેઇજિંગ"</item>
+    <item msgid="5327010922199714808">"બ<xliff:g id="SEPARATOR">=</xliff:g>બેઇજિંગ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"મ<xliff:g id="SEPARATOR">=</xliff:g>મુંબઈ"</item>
     <item msgid="6668274273067049125">"દ<xliff:g id="SEPARATOR">=</xliff:g>દિલ્હી"</item>
-    <item msgid="2933410189478233292">"ઓ<xliff:g id="SEPARATOR">=</xliff:g>ઓસાકા"</item>
+    <item msgid="7199039603593847813">"ઓ<xliff:g id="SEPARATOR">=</xliff:g>ઓસાકા<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"લ<xliff:g id="SEPARATOR">=</xliff:g>લાહોર"</item>
     <item msgid="1448378291805481500">"સ<xliff:g id="SEPARATOR">=</xliff:g>સાના"</item>
     <item msgid="5233119846682408301">"બ<xliff:g id="SEPARATOR">=</xliff:g>બાર્સેલોના"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"ક<xliff:g id="SEPARATOR">=</xliff:g>કેમ્બ્રિજ"</item>
     <item msgid="759409010285366934">"ક<xliff:g id="SEPARATOR">=</xliff:g>કિર્કલૅંડ"</item>
     <item msgid="6308007059287569663">"મ<xliff:g id="SEPARATOR">=</xliff:g>મેડિસન"</item>
-    <item msgid="6971636434858330021">"ગ<xliff:g id="SEPARATOR">=</xliff:g>ગુઆંગઝાઉ"</item>
+    <item msgid="2077617905582224600">"ગ<xliff:g id="SEPARATOR">=</xliff:g>ગુઆંગઝાઉ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"હ<xliff:g id="SEPARATOR">=</xliff:g>હૈદરાબાદ"</item>
     <item msgid="3032295682584784261">"ર<xliff:g id="SEPARATOR">=</xliff:g>રેસ્ટોન"</item>
     <item msgid="7722837296297332268">"બ<xliff:g id="SEPARATOR">=</xliff:g>બેલો હોરીઝોન્ટે"</item>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index e036fab..09d80f0 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"ઘડિયાળ બતાવો"</string>
     <string name="hide_clock" msgid="3217727306480505694">"ઘડિયાળ છુપાવો"</string>
     <string name="label" msgid="162189613902857319">"લેબલ"</string>
+    <string name="on_switch" msgid="2297966258029227449">"ચાલુ"</string>
+    <string name="off_switch" msgid="3381070073851148013">"બંધ"</string>
     <string name="default_label" msgid="5590025289805630372">"એલાર્મ"</string>
     <string name="set_alarm" msgid="9148359866152726808">"એલાર્મ સેટ કરો"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"વાઇબ્રેટ"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"પુનરાવર્તન"</string>
     <string name="alert" msgid="6506982899651975645">"એલાર્મ રિંગટોન"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"કસ્ટમ રિંગટોન"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"ટાઇમરની સમય સીમા સમાપ્ત થઈ"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"શાંત"</string>
     <string name="ringtone" msgid="9110746249688559579">"રિંગટોન"</string>
     <string name="time" msgid="8067216534232296518">"સમય"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"આવતીકાલે"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> સુધી સ્નૂઝ કરીને"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"આગામી એલાર્મ"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"તમારો મિસ્ડ એલાર્મ કાઢી નાખવામાં આવ્યો છે"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"એક મિનિટ કરતા ઓછી બાકી છે"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> બાકી છે"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> બાકી છે"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> બાકી છે"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"એક મિનિટ કરતા ઓછી બાકી છે"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> બાકી છે"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"બાકી"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"બાકી"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"એલાર્મ હવેથી 1 મિનિટથી ઓછા સમય માટે સેટ થયો."</item>
     <item msgid="6002066367368421848">"એલાર્મ હવેથી <xliff:g id="DAYS">%1$s</xliff:g> માટે સેટ થયો."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">મિનિટ</item>
       <item quantity="other">મિનિટ</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"ધીમે-ધીમે વૉલ્યૂમ વધારો"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"બંધ"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> સેકંડ"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"સેકંડ"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"આના પછી શાંતિ"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> મિનિટ</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"પાછા ફરો"</string>
     <string name="delete" msgid="5732434972457000541">"કાઢી નાખો"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"એલાર્મ વૉલ્યૂમ"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"શાંત"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"શાંત"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"અજાણ્યું"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"એલાર્મ સ્નૂઝ કરો અથવા કાઢી નાખો."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (સ્નૂઝ કરેલ)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"એલાર્મ <xliff:g id="TIME">%s</xliff:g> માટે સેટ થયો. રદ કરવા માટે ટચ કરો."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"રિંગટોન લોડ કરી રહ્યું છે..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"ઘડિયાળમાં સેટ કરેલ ટાઇમર્સ માટે ધ્વનિ પ્લેબેક સેવા."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"એલાર્મ સેટ કરો"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"એલાર્મ"</string>
     <string name="menu_timer" msgid="6459070074762877114">"ટાઇમર"</string>
     <string name="menu_clock" msgid="5612760670606829805">"ઘડિયાળ"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"નામ દ્વારા સૉર્ટ કરો"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"પસંદ કરેલ શહેરો"</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_start_button" msgid="8373422516681242270">"પ્રારંભ કરો"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"લેપ"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"શેર કરો"</string>
     <string name="hours_label" msgid="3393478155635368097">"ક"</string>
     <string name="minutes_label" msgid="3568098128251438588">"મી."</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"મારો સમય છે <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"લેપ સમય:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"લેપ <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> કલાક</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> કલાક</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 મિનિટ ઉમેરો"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 મિનિટ ઉમેરો"</string>
     <string name="timer_stop" msgid="3361154678667736722">"રોકો"</string>
-    <string name="timer_done" msgid="2375990511982914051">"થઈ ગયું"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"બધા ટાઇમર્સ રોકો"</string>
     <string name="timer_reset" msgid="7848424809190171640">"રીસેટ કરો"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"રદ કરો"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"ટાઇમર રદ કર્યું"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"સમય પૂરો થયો!"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ટાઇમર્સનો સમય સમાપ્ત થયો"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"ટાઇમર"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"મહત્તમ 4 ટાઇમર્સ"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"થોભાવો"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"બધા ટાઇમર્સ ફરીથી સેટ કરો"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"તમે એકદમ વેગવાન રાક્ષસ છો."</item>
     <item msgid="6332879039890727169">"તમારી મહેનતના ફળનો આનંદ લો."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"શહેરો"</string>
     <string name="clock_settings" msgid="8317286807280600391">"ઘડિયાળ"</string>
     <string name="clock_style" msgid="2265011060429742344">"શૈલી"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"તારીખ અને સમય બદલો"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"એનાલોગ"</item>
     <item msgid="8483930821046925592">"ડિજિટલ"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ચિહ્નિત કર્યું"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> અચિહ્નિત કર્યું"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"માર્શલ આઇલેન્ડ્સ"</item>
     <item msgid="4196408495909011020">"મિડવે આઇલેન્ડ"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"જાકાર્તા"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"એલાર્મ્સ"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"સૂચના ચલાવવા માટે સ્ટોપવૉચ સેવા."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"રોક્યું"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"ટાઇમર સૂચનાઓમાંથી ક્રિયાઓ પર પ્રક્રિયા કરે છે."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"સ્ટોપવોચ સૂચનાઓમાંથી ક્રિયાઓ પર પ્રક્રિયા કરે છે."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"થોભાવી"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"કાઢી નાખવા માટે જમણે સવાઇપ કરો"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"સ્નૂઝ કરવા માટે ડાબે સ્વાઇપ કરો"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"સ્નૂઝ કરવા માટે ડાબે અથવા છોડી દેવા માટે જમણે સવાઇપ કરો"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"ટાઇમર્સ"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"ટાઇમર રિંગટોન"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"ટાઇમર બંધ કર્યું"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> ટાઇમર્સ બંધ કર્યાં"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"ટાઇમર થોભાવ્યું"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> ટાઇમર્સ થોભાવ્યાં"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"તમારા ટાઇમર્સ જોવા માટે ટચ કરો"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ટાઇમર્સ"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"આગલું ટાઇમર: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"એલાર્મ્સ નથી"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"કોઈ એલાર્મ્સ સેટ નથી"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"કોઈ આગામી એલાર્મ નથી"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"hh:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"અમાન્ય સમય <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> વાગ્યે કોઈ એલાર્મ નથી"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"કોઇ શેડ્યુલ કરેલ એલાર્મ્સ નથી"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"કોઈ લેબલ નિર્દિષ્ટ કરવામાં આવ્યું નથી"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"કોઈ એલાર્મ્સ લેબલ ધરાવતું નથી"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"સ્ટોપવૉચ પહેલાથી જ ચાલુ છે"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"સ્ટોપવૉચ ચાલુ નથી"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"સ્ટોપવૉચ ફરીથી સેટ કરી શકાતી નથી કારણ કે તે ચાલુ છે"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"સ્ટોપવૉચ બંધ થઈ"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"સ્ટોપવૉચ થોભાવી"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"સ્ટોપવૉચ ફરીથી સેટ કરવામાં આવી"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"સ્ટોપવૉચ લેપ થઈ ગઈ"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"સ્ટોપવૉચ શરૂ થઈ"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"આ સમય માટે કોઇ એલાર્મ શેડ્યુલ કરેલ નથી"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> એલાર્મ છોડી દીધો"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g> માટે એલાર્મ સેટ કરેલ છે"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"કોઇ ટાઇમર સેટ નથી"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"ટાઇમર કાઢી નાખ્યું"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"ટાઇમર પહેલેથી ચાલુ છે"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"તમારી વિનંતી પૂર્ણ કરવામાં અસમર્થ, બહુવિધ ટાઇમર્સ ઉપલબ્ધ"</string>
-    <string name="timer_started" msgid="6715582052946641641">"ટાઇમર શરૂ કર્યું"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"કોઈ ટાઇમર્સ અસ્તિત્વમાં નથી"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"એક કરતાં વધુ ટાઇમર અસ્તિત્વમાં છે"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"ટાઇમર દૂર કરવામાં આવ્યું છે."</string>
     <string name="timer_created" msgid="4381027137335885547">"ટાઇમર બનાવ્યું"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"અમાન્ય ટાઇમર લંબાઈ"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"ટાઇમર ફરીથી સેટ કર્યું"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"ટાઇમર ફરીથી સેટ કરી શકાતું નથી કારણ કે તે હજી ચાલુ છે. ફરીથી સેટ કરવા માટે ટાઇમર બંધ કરો."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"ટાઇમર પહેલેથી બંધ કરેલું છે"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"ટાઇમર કાઢી નાખ્યું"</string>
+    <string name="timer_started" msgid="6715582052946641641">"ટાઇમર શરૂ કર્યું"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"અમાન્ય ટાઇમર લંબાઈ"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"કોઇ શહેર પસંદ કરેલ નથી"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"તમે ઉલ્લેખ કરેલ શહેર ઉપલબ્ધ નથી"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"તે શહેર પહેલેથી ઉમેરેલું છે"</string>
diff --git a/res/values-hi/array.xml b/res/values-hi/array.xml
index 7912e30..476c7e3 100644
--- a/res/values-hi/array.xml
+++ b/res/values-hi/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"फ़<xliff:g id="SEPARATOR">=</xliff:g>फ़ोर्टालेज़ा"</item>
     <item msgid="5801558418916235541">"ग<xliff:g id="SEPARATOR">=</xliff:g>ग्रांड टर्क"</item>
     <item msgid="2103759276235503048">"ग<xliff:g id="SEPARATOR">=</xliff:g>ग्रेनेडा"</item>
-    <item msgid="1490069759176391533">"ग<xliff:g id="SEPARATOR">=</xliff:g>ग्वाटेमाला"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>ग्‍वाटेमाला शहर"</item>
     <item msgid="525959305652046261">"ग<xliff:g id="SEPARATOR">=</xliff:g>गुयाना"</item>
     <item msgid="7565596629973190931">"ह<xliff:g id="SEPARATOR">=</xliff:g>हैलिफ़ैक्स"</item>
     <item msgid="3811169155065582644">"ह<xliff:g id="SEPARATOR">=</xliff:g>हवाना"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ट<xliff:g id="SEPARATOR">=</xliff:g>टोरंटो"</item>
     <item msgid="1506838283840737263">"व<xliff:g id="SEPARATOR">=</xliff:g>वैंकूवर"</item>
     <item msgid="8935386104773857399">"व<xliff:g id="SEPARATOR">=</xliff:g>विनीपेग"</item>
-    <item msgid="1132634022412399582">"द<xliff:g id="SEPARATOR">=</xliff:g>दक्षिणी ध्रुव"</item>
+    <item msgid="498429228419399474">"द<xliff:g id="SEPARATOR">=</xliff:g>दक्षिणी ध्रुव<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ल<xliff:g id="SEPARATOR">=</xliff:g>लॉन्जीरब्येन"</item>
     <item msgid="3784788073896028355">"अ<xliff:g id="SEPARATOR">=</xliff:g>अल्माटी"</item>
     <item msgid="7895695236056852523">"अ<xliff:g id="SEPARATOR">=</xliff:g>अम्मान"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ग<xliff:g id="SEPARATOR">=</xliff:g>गाज़ा"</item>
     <item msgid="2359068282340162319">"ह<xliff:g id="SEPARATOR">=</xliff:g>हीब्रन"</item>
     <item msgid="6223396610551759129">"ह<xliff:g id="SEPARATOR">=</xliff:g>हो ची मिन्ह"</item>
-    <item msgid="4731022818651322736">"ह<xliff:g id="SEPARATOR">=</xliff:g>हांग कांग"</item>
+    <item msgid="3439764751788710130">"ह<xliff:g id="SEPARATOR">=</xliff:g>हांग कांग<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"इ<xliff:g id="SEPARATOR">=</xliff:g>इस्तांबुल"</item>
     <item msgid="758800913783999425">"ज<xliff:g id="SEPARATOR">=</xliff:g>जकार्ता"</item>
     <item msgid="8956406398692698126">"य<xliff:g id="SEPARATOR">=</xliff:g>यरूशलम"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"म<xliff:g id="SEPARATOR">=</xliff:g>मनीला"</item>
     <item msgid="6033964325069060422">"म<xliff:g id="SEPARATOR">=</xliff:g>मस्कट"</item>
     <item msgid="6077458941399984780">"न<xliff:g id="SEPARATOR">=</xliff:g>नॉम पेन्ह"</item>
-    <item msgid="935474308903572975">"प<xliff:g id="SEPARATOR">=</xliff:g>प्योंगयांग"</item>
+    <item msgid="1245515372520913197">"प<xliff:g id="SEPARATOR">=</xliff:g>प्योंगयांग<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"क<xliff:g id="SEPARATOR">=</xliff:g>कतर"</item>
     <item msgid="1667243110545095146">"र<xliff:g id="SEPARATOR">=</xliff:g>रंगून"</item>
     <item msgid="4460370766685855731">"र<xliff:g id="SEPARATOR">=</xliff:g>रियाद"</item>
     <item msgid="4229224905931739201">"स<xliff:g id="SEPARATOR">=</xliff:g>सेगॉन"</item>
     <item msgid="8705359848250215620">"स<xliff:g id="SEPARATOR">=</xliff:g>सियोल"</item>
-    <item msgid="583367295371395814">"श<xliff:g id="SEPARATOR">=</xliff:g>शंघाई"</item>
+    <item msgid="3814881931186962624">"श<xliff:g id="SEPARATOR">=</xliff:g>शंघाई<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"स<xliff:g id="SEPARATOR">=</xliff:g>सिंगापुर"</item>
-    <item msgid="1972491729911039207">"त<xliff:g id="SEPARATOR">=</xliff:g>ताईपेई"</item>
+    <item msgid="8982451946156859368">"त<xliff:g id="SEPARATOR">=</xliff:g>ताईपेई<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"त<xliff:g id="SEPARATOR">=</xliff:g>तेहरान"</item>
     <item msgid="8629402941285674273">"त<xliff:g id="SEPARATOR">=</xliff:g>तेल अवीव"</item>
-    <item msgid="8499164674454654525">"ट<xliff:g id="SEPARATOR">=</xliff:g>टोक्यो"</item>
+    <item msgid="76330681636547168">"ट<xliff:g id="SEPARATOR">=</xliff:g>टोक्यो<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"उ<xliff:g id="SEPARATOR">=</xliff:g>उलानबाटार"</item>
     <item msgid="2028626988021468640">"ब<xliff:g id="SEPARATOR">=</xliff:g>बरमूडा"</item>
     <item msgid="4527109966513690429">"क<xliff:g id="SEPARATOR">=</xliff:g>कैनैरी"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"र<xliff:g id="SEPARATOR">=</xliff:g>रेनो"</item>
     <item msgid="9155068631060038769">"ब<xliff:g id="SEPARATOR">=</xliff:g>ब्लैक रॉक सिटी"</item>
     <item msgid="8498761319928979900">"द<xliff:g id="SEPARATOR">=</xliff:g>दोहा"</item>
-    <item msgid="8307897251088048641">"ब<xliff:g id="SEPARATOR">=</xliff:g>बीजिंग"</item>
+    <item msgid="5327010922199714808">"ब<xliff:g id="SEPARATOR">=</xliff:g>बीजिंग<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"म<xliff:g id="SEPARATOR">=</xliff:g>मुंबई"</item>
     <item msgid="6668274273067049125">"द<xliff:g id="SEPARATOR">=</xliff:g>दिल्ली"</item>
-    <item msgid="2933410189478233292">"ओ<xliff:g id="SEPARATOR">=</xliff:g>ओसाका"</item>
+    <item msgid="7199039603593847813">"ओ<xliff:g id="SEPARATOR">=</xliff:g>ओसाका<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ल<xliff:g id="SEPARATOR">=</xliff:g>लाहौर"</item>
     <item msgid="1448378291805481500">"स<xliff:g id="SEPARATOR">=</xliff:g>साना"</item>
     <item msgid="5233119846682408301">"ब<xliff:g id="SEPARATOR">=</xliff:g>बार्सीलोना"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"क<xliff:g id="SEPARATOR">=</xliff:g>कैम्ब्रिज"</item>
     <item msgid="759409010285366934">"क<xliff:g id="SEPARATOR">=</xliff:g>किर्कलैंड"</item>
     <item msgid="6308007059287569663">"म<xliff:g id="SEPARATOR">=</xliff:g>मेडिसन"</item>
-    <item msgid="6971636434858330021">"ग<xliff:g id="SEPARATOR">=</xliff:g>ग्वांगझू"</item>
+    <item msgid="2077617905582224600">"ग<xliff:g id="SEPARATOR">=</xliff:g>ग्वांगझू<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"ह<xliff:g id="SEPARATOR">=</xliff:g>हैदराबाद"</item>
     <item msgid="3032295682584784261">"र<xliff:g id="SEPARATOR">=</xliff:g>रेस्टन"</item>
     <item msgid="7722837296297332268">"ब<xliff:g id="SEPARATOR">=</xliff:g>बेलो हॉरीज़ोंटे"</item>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 5599172..7a6c306 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"घड़ी दिखाएं"</string>
     <string name="hide_clock" msgid="3217727306480505694">"घड़ी छुपाएं"</string>
     <string name="label" msgid="162189613902857319">"लेबल"</string>
+    <string name="on_switch" msgid="2297966258029227449">"चालू"</string>
+    <string name="off_switch" msgid="3381070073851148013">"बंद"</string>
     <string name="default_label" msgid="5590025289805630372">"अलार्म"</string>
     <string name="set_alarm" msgid="9148359866152726808">"अलार्म सेट करें"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"कंपन"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"दोहराएं"</string>
     <string name="alert" msgid="6506982899651975645">"अलार्म रिंगटोन"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"कस्टम रिंगटोन"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"टाइमर की समय सीमा समाप्‍त हो गई"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"मौन"</string>
     <string name="ringtone" msgid="9110746249688559579">"रिंगटोन"</string>
     <string name="time" msgid="8067216534232296518">"समय"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"कल"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> तक स्नूज़ कर रहा है"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"आगामी अलार्म"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"आपका छूटा हुआ अलार्म हटा दिया गया है"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"एक मिनट से कम समय शेष है"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> शेष"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> शेष"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> शेष"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"एक मिनट से कम समय शेष है"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> शेष"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"शेष"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"शेष"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"अब से 1 मिनट या उससे भी कम के भीतर का अलार्म सेट है."</item>
     <item msgid="6002066367368421848">"अलार्म अब से <xliff:g id="DAYS">%1$s</xliff:g> के लिए सेट."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">मिनट</item>
       <item quantity="other">मिनट</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"धीरे-धीरे वॉल्‍यूम बढ़ाएं"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"बंद"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> सेकंड"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"सेकंड"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"इतनी देर के बाद शांत करें"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> मिनट</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"पहले जैसा करें"</string>
     <string name="delete" msgid="5732434972457000541">"हटाएं"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"अलार्म का वॉल्‍यूम"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"मौन"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"मौन"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"अज्ञात"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"थोडी देर बाद याद दिलाएं/बंद करें."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (याद दिलाया जाएगा)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"अलार्म <xliff:g id="TIME">%s</xliff:g> के लिए सेट. रद्द करने के लिए स्‍पर्श करें."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"रिंगटोन लोड कर रहा है…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"घड़ी में सेट टाइमर के लिए आवाज़ प्लेबैक सेवा."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"अलार्म सेट करें"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"अलार्म"</string>
     <string name="menu_timer" msgid="6459070074762877114">"टाइमर"</string>
     <string name="menu_clock" msgid="5612760670606829805">"घड़ी"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"नाम द्वारा क्रमित करें"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"चुनिंदा शहर"</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_start_button" msgid="8373422516681242270">"प्रारंभ करें"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"पॉज़ करें"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"लैप"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"साझा करें"</string>
     <string name="hours_label" msgid="3393478155635368097">"घं."</string>
     <string name="minutes_label" msgid="3568098128251438588">"मि."</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"मेरा समय <xliff:g id="TIME">%s</xliff:g> है"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"लैप अवधियां:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"लैप <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> घंटे</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> घंटे</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 मिनट जोड़ें"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 मिनट जोड़ें"</string>
     <string name="timer_stop" msgid="3361154678667736722">"रोकें"</string>
-    <string name="timer_done" msgid="2375990511982914051">"यहां हटाया गया"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"सभी टाइमर रोकें"</string>
     <string name="timer_reset" msgid="7848424809190171640">"रीसेट करें"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"अभी नहीं"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"टाइमर रोक दिया गया"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"समय समाप्त"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> टाइमर की समय-सीमा समाप्त"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"टाइमर"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"अधिकतम 4 टाइमर"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"रोकें"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"सभी टाइमर रीसेट करें"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"आप गति को बहुत पसंद करते हैं."</item>
     <item msgid="6332879039890727169">"अपने परिश्रम के फल का आनंद लें."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"शहर"</string>
     <string name="clock_settings" msgid="8317286807280600391">"घड़ी"</string>
     <string name="clock_style" msgid="2265011060429742344">"शैली"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"दिनांक और समय बदलना"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"ऐनालॉग"</item>
     <item msgid="8483930821046925592">"डिजिटल"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> को चेक किया गया"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> को अनचेक किया गया"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"मार्शल द्वीप समूह"</item>
     <item msgid="4196408495909011020">"मिडवे द्वीप"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"जकार्ता"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"अलार्म"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"नोटिफिकेशन चलाने के लिए स्टॉपवॉच सेवा."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"रोका गया"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"टाइमर नोटिफिकेशन से कार्यवाइयां संसाधित करती है."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"स्‍टॉपवॉच नोटिफिकेशन से कार्यवाइयां संसाधित करती है."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"रोका गया"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"ख़ारिज करने के लिए दाएं स्वाइप करें"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"याद दिलाने के लिए बाएं स्वाइप करें"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"याद दिलाने के लिए बाएं या ख़ारिज करने के लिए दाएं स्‍वाइप करें"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"टाइमर"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"टाइमर रिंगटोन"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"टाइमर रुक गया"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> टाइमर रुक गए"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"टाइमर रोका गया"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> टाइमर रोके गए"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"अपने टाइमर देखने के लिए स्पर्श करें"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> टाइमर"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"अगला टाइमर: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"कोई अलार्म नहीं"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"अलार्म सेट नहीं"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"कोई आगामी अलार्म नहीं"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"अमान्य समय <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> बजे का कोई अलार्म नहीं"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"कोई शेड्यूल किया गया अलार्म नहीं"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"कोई भी लेबल निर्दिष्‍ट नहीं है"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"किसी भी अलार्म में लेबल शामिल नहीं है"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"स्टॉपवॉच पहले से ही चल रही है"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"स्टॉपवॉच नहीं चल रही है"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"स्‍टॉपवॉच को रीसेट नहीं किया जा सकता क्‍योंकि वह चल रही है"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"स्टॉपवॉच बंद की गई"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"स्टॉपवॉच को रोका गया"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"स्टॉपवॉच को रीसेट किया गया"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"स्टॉपवॉच को लैप किया गया"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"स्टॉपवॉच प्रारंभ की गई"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"इस समय के लिए कोई अलार्म शेड्यूल नहीं किया गया है"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> अलार्म को ख़ारिज किया गया"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g> के लिए अलार्म सेट है"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"कोई टाइमर सेट नहीं किया गया"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"टाइमर हटाया गया"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"टाइमर पहले से चल रहा है"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"आपके अनुरोध को पूरा करने में असमर्थ, एकाधिक टाइमर उपलब्ध हैं"</string>
-    <string name="timer_started" msgid="6715582052946641641">"टाइमर प्रारंभ हो गया"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"कोई टाइमर मौजूद नहीं है"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"एक से अधिक टाइमर मौजूद हैं"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"टाइमर निकाल दिया गया है."</string>
     <string name="timer_created" msgid="4381027137335885547">"टाइमर बनाया गया"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"अमान्य टाइमर अवधि"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"टाइमर रीसेट किया गया"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"टाइमर को रीसेट नहीं किया जा सकता क्योंकि वह अब भी चल रहा है. टाइमर को रीसेट करने के लिए उसे बंद करें."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"टाइमर पहले से बंद कर दिया गया"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"टाइमर हटाया गया"</string>
+    <string name="timer_started" msgid="6715582052946641641">"टाइमर प्रारंभ हो गया"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"अमान्य टाइमर अवधि"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"कोई शहर नहीं चुना गया"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"आपके द्वारा निर्दिष्ट शहर उपलब्ध नहीं है"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"उस शहर को पहले से जोड़ा गया है"</string>
diff --git a/res/values-hr/array.xml b/res/values-hr/array.xml
index 17c8f63..fc310ba 100644
--- a/res/values-hr/array.xml
+++ b/res/values-hr/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Gvatemala"</item>
+    <item msgid="6216160110733510854">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Gvajana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"J<xliff:g id="SEPARATOR">=</xliff:g>Južni Pol"</item>
+    <item msgid="498429228419399474">"J<xliff:g id="SEPARATOR">=</xliff:g>Južni Pol<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Ši Min"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jeruzalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"K<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Rijad"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"Š<xliff:g id="SEPARATOR">=</xliff:g>Šangaj"</item>
+    <item msgid="3814881931186962624">"Š<xliff:g id="SEPARATOR">=</xliff:g>Šangaj<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanari"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Peking<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 43fc193..7bd7619 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Prikaži sat"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Sakrij sat"</string>
     <string name="label" msgid="162189613902857319">"Oznaka"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Uključeno"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Isključeno"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Postavi alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibracija"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Ponovi"</string>
     <string name="alert" msgid="6506982899651975645">"Melodija alarma"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Prilagođena melodija zvona"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Tajmer je istekao"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Bešumno"</string>
     <string name="ringtone" msgid="9110746249688559579">"Zvuk zvona"</string>
     <string name="time" msgid="8067216534232296518">"Vrijeme"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Sutra"</string>
@@ -60,12 +63,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Odgoda alarma do <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Predstojeći alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Propušteni je alarm izbrisan"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Preostalo manje od minute"</item>
-    <item msgid="83197792732433351">"Preostalo <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Preostalo <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Preostalo <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Preostalo manje od minute"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Preostalo je <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"preostalo"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"preostalo"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarm će se oglasiti za manje od 1 minute."</item>
     <item msgid="6002066367368421848">"Alarm će se oglasiti za <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -108,6 +111,10 @@
       <item quantity="few">minute</item>
       <item quantity="other">minuta</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Postupno pojačavanje glasnoće"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Isključeno"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> s"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"s"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Utišaj nakon"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuta</item>
@@ -134,7 +141,8 @@
     <string name="revert" msgid="9100911171235162926">"Poništi"</string>
     <string name="delete" msgid="5732434972457000541">"Izbriši"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Glasnoća alarma"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Bešumno"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Tiho"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Nepoznato"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Odgodite ili obustavite alarm."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (odgoda alarma)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm će se oglasiti u <xliff:g id="TIME">%s</xliff:g>. Dodirnite za poništavanje."</string>
@@ -159,8 +167,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Učitavanje melodije zvona…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Usluga reprodukcije zvuka za timere postavljena je u aplikaciji Sat."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Postavi alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Mjerač vremena"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Sat"</string>
@@ -175,10 +181,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Poredaj po nazivu"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Odabrani gradovi"</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_start_button" msgid="8373422516681242270">"Kreni"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pauziraj"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Krug"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Dijeli"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -190,10 +196,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Moje je vrijeme <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Vremena krugova:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. krug"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Br. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Br. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> sat</item>
       <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> sata</item>
@@ -216,12 +218,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Dodaj 1 minutu"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Dodaj 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Zaustavi"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Završeno"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Zaustavi sve tajmere"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Poništi"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Odustani"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Odbrojavanje je otkazano"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Vrijeme je isteklo"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Tajmeri su istekli (<xliff:g id="NUM_TIMERS">%d</xliff:g>)"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Mjerač vremena"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Maksimalno 4 tajmera"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pauziraj"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Poništi tajmere"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Brzi ste kao munja."</item>
     <item msgid="6332879039890727169">"Uživajte u plodovima svojeg rada."</item>
@@ -238,6 +244,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Gradovi"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Sat"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stil"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Promijeni datum i vrijeme"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogni"</item>
     <item msgid="8483930821046925592">"Digitalni"</item>
@@ -252,6 +259,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Grad <xliff:g id="CITY_NAME">%s</xliff:g> potvrđen"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Grad <xliff:g id="CITY_NAME">%s</xliff:g> nije potvrđen"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Maršalovi Otoci"</item>
     <item msgid="4196408495909011020">"Otok Midway"</item>
@@ -340,13 +349,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmi"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Usluga kronometra za pokretanje obavijesti."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Zaustavljeno"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Obrađuje radnje obavijesti mjerača vremena."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Obrađuje radnje obavijesti štoperice."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Pauzirano"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Prijeđite prstom udesno za odbacivanje"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Prijeđite prstom ulijevo za odgodu"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Prijeđite prstom ulijevo za odgodu ili udesno za odbacivanje"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Tajmeri"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Melodija zvona tajmera"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Mjerač vremena zaustavljen je"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Broj zaustavljenih mjerača vremena: <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Tajmer je pauziran"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Broj pauziranih tajmera: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Dodirnite da biste vidjeli svoje mjerače vremena"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> mjerača vremena"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Sljedeći: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -373,35 +386,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Bez alarma"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Nema alarma"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NEMA PREDSTOJEĆIH ALARMA"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Vrijeme <xliff:g id="INVALID_HOUR">%d</xliff:g>.<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g> nije važeće"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Nema alarma u <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>.<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nema postavljenih alarma"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nije navedena oznaka"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Nema alarma s tom oznakom"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Štoperica je već pokrenuta"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Štoperica nije pokrenuta"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Štoperica se ne može poništiti jer je pokrenuta"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Štoperica je zaustavljena"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Štoperica pauzirana"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Štoperica je poništena"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Novi krug štoperice"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Štoperica je pokrenuta"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Za to vrijeme nema postavljenih alarma"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Odbačen je alarm u <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm će se oglasiti u <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Nema postavljenih tajmera"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Tajmer je izbrisan"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Tajmer je već pokrenut"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Nije moguće dovršiti zahtjev jer je dostupno više tajmera"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Tajmer je pokrenut"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Nema mjerača vremena"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Ima više mjerača vremena"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Mjerač vremena je uklonjen."</string>
     <string name="timer_created" msgid="4381027137335885547">"Tajmer je izrađen"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Nevažeća duljina tajmera"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Tajmer je poništen"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Tajmer se ne može poništiti jer još uvijek radi. Zaustavite ga da biste ga poništili."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Tajmer je već zaustavljen"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Tajmer je izbrisan"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Tajmer je pokrenut"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Nevažeća duljina tajmera"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Nije odabran nijedan grad"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Grad koji ste naveli nije dostupan"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Taj je grad već dodan"</string>
diff --git a/res/values-hu/array.xml b/res/values-hu/array.xml
index e3342c3..0a59f36 100644
--- a/res/values-hu/array.xml
+++ b/res/values-hu/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk-sziget"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemalaváros"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havanna"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"D<xliff:g id="SEPARATOR">=</xliff:g>Déli-sark"</item>
+    <item msgid="498429228419399474">"D<xliff:g id="SEPARATOR">=</xliff:g>Déli-sark<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almati"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Ammán"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gáza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Si Minh-város"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Isztambul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jeruzsálem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Maszkat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnompen"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Phenjan"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Phenjan<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"K<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangun"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Rijád"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"Sz<xliff:g id="SEPARATOR">=</xliff:g>Szöul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Sanghaj"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Sanghaj<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"Sz<xliff:g id="SEPARATOR">=</xliff:g>Szingapúr"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Tajpej"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Tajpej<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teherán"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel-Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokió"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokió<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulánbátor"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanári-szigetek"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Peking<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Oszaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Oszaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahor"</item>
     <item msgid="1448378291805481500">"Sz<xliff:g id="SEPARATOR">=</xliff:g>Szanaa"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanton"</item>
+    <item msgid="2077617905582224600">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanton<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Haidarábád"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index a8ed015..fa29b6f 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Óra megjelenítése"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Óra elrejtése"</string>
     <string name="label" msgid="162189613902857319">"Címke"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Be"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Ki"</string>
     <string name="default_label" msgid="5590025289805630372">"Ébresztő"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Ébresztés beállítása"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Rezgés"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Ismétlődés"</string>
     <string name="alert" msgid="6506982899651975645">"Ébresztés csengőhangja"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Egyéni csengőhang"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Az időzítő lejárt"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Néma"</string>
     <string name="ringtone" msgid="9110746249688559579">"Csengőhang"</string>
     <string name="time" msgid="8067216534232296518">"Időpont"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Holnap"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Ébresztés elhalasztása eddig: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Következő ébresztés"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Elmulasztott ébresztés törölve"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Kevesebb mint 1 perc van hátra"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> van hátra"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> van hátra"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> van hátra"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Kevesebb mint 1 perc van hátra"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> óra <xliff:g id="MINUTES">%2$s</xliff:g> perc van hátra"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"hátralévő idő"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"hátralévő idő:"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Riasztás beállítva: a jelenlegi időponttól számított kevesebb mint 1 perc múlva."</item>
     <item msgid="6002066367368421848">"Riasztás beállítva: a jelenlegi időponttól számított <xliff:g id="DAYS">%1$s</xliff:g> múlva."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">perc</item>
       <item quantity="one">perc</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Hangerő fokozatos növelése"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Ki"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> másodperc"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"másodperc"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Elnémítás ennyi idő után:"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> perc</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Visszavonás"</string>
     <string name="delete" msgid="5732434972457000541">"Törlés"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Ébresztés hangereje"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Néma"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Néma"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Ismeretlen"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Szundi, vagy riasztás bezárása."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (szundiban)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Riasztás ideje: <xliff:g id="TIME">%s</xliff:g>. Érintse meg a visszavonáshoz."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Csengőhang betöltése..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Hanglejátszó szolgáltatás az Órában beállított időzítőkhöz."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Ébresztés beállítása"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Ébresztő"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Időzítő"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Óra"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Rendezés név szerint"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Kiválasztott városok"</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">"Nullázás"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Indítás"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Szünet"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Kör"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Megosztás"</string>
     <string name="hours_label" msgid="3393478155635368097">"ó"</string>
     <string name="minutes_label" msgid="3568098128251438588">"p"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Az én időm: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Köridők:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. kör"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Körök száma <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Körök száma <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> óra</item>
       <item quantity="one">1 óra</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 perc hozzáadása"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 perc hozzáadása"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Leállítás"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Kész"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Az összes időzítő leállítása"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Visszaállítás"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Mégse"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Időzítés visszavonva"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Az idő lejárt!"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> időzítő lejárt"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Időzítő"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Legfeljebb 4 időzítő lehetséges"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Szüneteltetés"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Visszaállítás"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Ön valósággal a sebesség ördöge."</item>
     <item msgid="6332879039890727169">"Élvezze a munkája gyümölcsét."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Városok"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Óra"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stílus"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Dátum és idő módosítása"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analóg"</item>
     <item msgid="8483930821046925592">"Digitális"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"–"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> bejelölve"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> jelölése eltávolítva"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshall-szigetek"</item>
     <item msgid="4196408495909011020">"Midway-szigetek"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Ébresztés"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Stopperóra az értesítés futtatásához."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Leállítva"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Feldolgozza az időzítő értesítéseiből származó műveleteket."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Feldolgozza a stopperóra értesítéseiből származó műveleteket."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Szüneteltetve"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Az elutasításhoz csúsztassa gyorsan jobbra"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"A szundihoz csúsztassa gyorsan balra"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"A szundihoz csúsztassa gyorsan balra, az elvetéshez pedig jobbra"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Időzítők"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Időzítő csengőhangja"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Időzítő megállítva"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> időzítő megállítva"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Időzítő szüneteltetve"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> időzítő szüneteltetve"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Érintse meg az időzítők megtekintéséhez"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> időzítő"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Következő időzítő: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Nincs ébresztés"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Nincs ébresztés"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NINCS KÖZELGŐ ÉBRESZTÉS"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Érvénytelen időpont: <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Nincs riasztás ekkor: <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nincs ütemezett riasztás"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nincs megadva címke"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Egy riasztás sem tartalmazza a címkét"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"A stopper már elindult"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"A stopper nem indult el"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"A stoppert nem lehet visszaállítani, mert már elindult"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stopper megállítva"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stopper szüneteltetve"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stopper visszaállítva"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stopper részidő mérve"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stopper elindítva"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Nincs riasztás beállítva erre az időpontra"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> – riasztás elvetve"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"A riasztás időpontja: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Nincs időzítő beállítva"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Időzítő törölve"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Az időzítő már elindult"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Nem sikerült teljesíteni a műveletet, mert több időzítő áll rendelkezésre"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Időzítő elindítva"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Nincs időzítő"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Egynél több időzítő van beállítva"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Az időzítőt eltávolították."</string>
     <string name="timer_created" msgid="4381027137335885547">"Időzítő létrehozva"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Az időzítő hossza érvénytelen"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Időzítő visszaállítva"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Az időzítőt nem lehet visszaállítani, mert még mindig fut. Állítsa le a visszaállításhoz."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Az időzítő már megállt"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Időzítő törölve"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Időzítő elindítva"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Az időzítő hossza érvénytelen"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Nincs város kiválasztva"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"A megadott város nem érhető el"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Ez a város már hozzá van adva"</string>
diff --git a/res/values-hy-rAM/array.xml b/res/values-hy-rAM/array.xml
index aa1b741..a84305d 100644
--- a/res/values-hy-rAM/array.xml
+++ b/res/values-hy-rAM/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"Ֆ<xliff:g id="SEPARATOR">=</xliff:g>Ֆորտալեզա"</item>
     <item msgid="5801558418916235541">"Գ<xliff:g id="SEPARATOR">=</xliff:g>Գրանդ Տերկ"</item>
     <item msgid="2103759276235503048">"Գ<xliff:g id="SEPARATOR">=</xliff:g>Գրենադա"</item>
-    <item msgid="1490069759176391533">"Գ<xliff:g id="SEPARATOR">=</xliff:g>Գվատեմալա"</item>
+    <item msgid="6216160110733510854">"Գ<xliff:g id="SEPARATOR">=</xliff:g>Գվատեմալա"</item>
     <item msgid="525959305652046261">"Գ<xliff:g id="SEPARATOR">=</xliff:g>Գայանա"</item>
     <item msgid="7565596629973190931">"Հ<xliff:g id="SEPARATOR">=</xliff:g>Հալիֆաքս"</item>
     <item msgid="3811169155065582644">"Հ<xliff:g id="SEPARATOR">=</xliff:g>Հավանա"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"Տ<xliff:g id="SEPARATOR">=</xliff:g>Տորոնտո"</item>
     <item msgid="1506838283840737263">"Վ<xliff:g id="SEPARATOR">=</xliff:g>Վանկուվեր"</item>
     <item msgid="8935386104773857399">"Վ<xliff:g id="SEPARATOR">=</xliff:g>Վիննիպեգ"</item>
-    <item msgid="1132634022412399582">"Հ<xliff:g id="SEPARATOR">=</xliff:g>Հարավային Բևեռ"</item>
+    <item msgid="498429228419399474">"Հ<xliff:g id="SEPARATOR">=</xliff:g>Հարավային Բևեռ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"Լ<xliff:g id="SEPARATOR">=</xliff:g>Լոնգյերբյեն"</item>
     <item msgid="3784788073896028355">"Ա<xliff:g id="SEPARATOR">=</xliff:g>Ալմա Աթա"</item>
     <item msgid="7895695236056852523">"Ա<xliff:g id="SEPARATOR">=</xliff:g>Ամման"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"Գ<xliff:g id="SEPARATOR">=</xliff:g>Գազա"</item>
     <item msgid="2359068282340162319">"Հ<xliff:g id="SEPARATOR">=</xliff:g>Հևրոն"</item>
     <item msgid="6223396610551759129">"Հ<xliff:g id="SEPARATOR">=</xliff:g>Հո Չի Մին"</item>
-    <item msgid="4731022818651322736">"Հ<xliff:g id="SEPARATOR">=</xliff:g>Հոնկոնգ"</item>
+    <item msgid="3439764751788710130">"Հ<xliff:g id="SEPARATOR">=</xliff:g>Հոնկոնգ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"Ս<xliff:g id="SEPARATOR">=</xliff:g>Ստամբուլ"</item>
     <item msgid="758800913783999425">"Ջ<xliff:g id="SEPARATOR">=</xliff:g>Ջակարտա"</item>
     <item msgid="8956406398692698126">"Ե<xliff:g id="SEPARATOR">=</xliff:g>Երուսաղեմ"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"Մ<xliff:g id="SEPARATOR">=</xliff:g>Մանիլա"</item>
     <item msgid="6033964325069060422">"Մ<xliff:g id="SEPARATOR">=</xliff:g>Մուսկաթ"</item>
     <item msgid="6077458941399984780">"Պ<xliff:g id="SEPARATOR">=</xliff:g>Պնոմպեն"</item>
-    <item msgid="935474308903572975">"Փ<xliff:g id="SEPARATOR">=</xliff:g>Փխենյան"</item>
+    <item msgid="1245515372520913197">"Փ<xliff:g id="SEPARATOR">=</xliff:g>Փխենյան<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Ք<xliff:g id="SEPARATOR">=</xliff:g>Քաթար"</item>
     <item msgid="1667243110545095146">"Ռ<xliff:g id="SEPARATOR">=</xliff:g>Ռանգուն"</item>
     <item msgid="4460370766685855731">"Ռ<xliff:g id="SEPARATOR">=</xliff:g>Ռիադ"</item>
     <item msgid="4229224905931739201">"Ս<xliff:g id="SEPARATOR">=</xliff:g>Սայգոն"</item>
     <item msgid="8705359848250215620">"Ս<xliff:g id="SEPARATOR">=</xliff:g>Սեուլ"</item>
-    <item msgid="583367295371395814">"Շ<xliff:g id="SEPARATOR">=</xliff:g>Շանհայ"</item>
+    <item msgid="3814881931186962624">"Շ<xliff:g id="SEPARATOR">=</xliff:g>Շանհայ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"Ս<xliff:g id="SEPARATOR">=</xliff:g>Սինգապուր"</item>
-    <item msgid="1972491729911039207">"Տ<xliff:g id="SEPARATOR">=</xliff:g>Տայպեյ"</item>
+    <item msgid="8982451946156859368">"Տ<xliff:g id="SEPARATOR">=</xliff:g>Տայպեյ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"Թ<xliff:g id="SEPARATOR">=</xliff:g>Թեհրան"</item>
     <item msgid="8629402941285674273">"Տ<xliff:g id="SEPARATOR">=</xliff:g>Տել Ավիվ"</item>
-    <item msgid="8499164674454654525">"Տ<xliff:g id="SEPARATOR">=</xliff:g>Տոկիո"</item>
+    <item msgid="76330681636547168">"Տ<xliff:g id="SEPARATOR">=</xliff:g>Տոկիո<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"Ու<xliff:g id="SEPARATOR">=</xliff:g>Ուլան Բատոր"</item>
     <item msgid="2028626988021468640">"Բ<xliff:g id="SEPARATOR">=</xliff:g>Բերմուդյան կղզիներ"</item>
     <item msgid="4527109966513690429">"Կ<xliff:g id="SEPARATOR">=</xliff:g>Կանարյան կղզիներ"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"Ռ<xliff:g id="SEPARATOR">=</xliff:g>Ռենո"</item>
     <item msgid="9155068631060038769">"Բ<xliff:g id="SEPARATOR">=</xliff:g>Բլեք Ռոք Սիթի"</item>
     <item msgid="8498761319928979900">"Դ<xliff:g id="SEPARATOR">=</xliff:g>Դոհա"</item>
-    <item msgid="8307897251088048641">"Պ<xliff:g id="SEPARATOR">=</xliff:g>Պեկին"</item>
+    <item msgid="5327010922199714808">"Պ<xliff:g id="SEPARATOR">=</xliff:g>Պեկին<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"Մ<xliff:g id="SEPARATOR">=</xliff:g>Մումբայ"</item>
     <item msgid="6668274273067049125">"Դ<xliff:g id="SEPARATOR">=</xliff:g>Դելի"</item>
-    <item msgid="2933410189478233292">"Օ<xliff:g id="SEPARATOR">=</xliff:g>Օսակա"</item>
+    <item msgid="7199039603593847813">"Օ<xliff:g id="SEPARATOR">=</xliff:g>Օսակա<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"Լ<xliff:g id="SEPARATOR">=</xliff:g>Լահոր"</item>
     <item msgid="1448378291805481500">"Ս<xliff:g id="SEPARATOR">=</xliff:g>Սանաա"</item>
     <item msgid="5233119846682408301">"Բ<xliff:g id="SEPARATOR">=</xliff:g>Բարսելոնա"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"Ք<xliff:g id="SEPARATOR">=</xliff:g>Քեմբրիջ"</item>
     <item msgid="759409010285366934">"Կ<xliff:g id="SEPARATOR">=</xliff:g>Կիրկլենդ"</item>
     <item msgid="6308007059287569663">"Մ<xliff:g id="SEPARATOR">=</xliff:g>Մեդիսոն"</item>
-    <item msgid="6971636434858330021">"Գ<xliff:g id="SEPARATOR">=</xliff:g>Գուանչժոու"</item>
+    <item msgid="2077617905582224600">"Գ<xliff:g id="SEPARATOR">=</xliff:g>Գուանչժոու<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"Հ<xliff:g id="SEPARATOR">=</xliff:g>Հայդարաբադ"</item>
     <item msgid="3032295682584784261">"Ռ<xliff:g id="SEPARATOR">=</xliff:g>Ռեստոն"</item>
     <item msgid="7722837296297332268">"Բ<xliff:g id="SEPARATOR">=</xliff:g>Բելո Հորիզոնտե"</item>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 8396530..4764169 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Ցուցադրել ժամացույցը"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Թաքցնել ժամացույցը"</string>
     <string name="label" msgid="162189613902857319">"Պիտակ"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Միացված է"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Անջատված է"</string>
     <string name="default_label" msgid="5590025289805630372">"Զարթուցիչ"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Դնել զարթուցիչ"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Թրթռալ"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Կրկնել"</string>
     <string name="alert" msgid="6506982899651975645">"Զարթուցիչի զանգերանգը"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Հարմարեցրած զանգերանգ"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Ժամաչափի ժամանակը սպառվել է"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Լուռ"</string>
     <string name="ringtone" msgid="9110746249688559579">"Զանգերանգ"</string>
     <string name="time" msgid="8067216534232296518">"Ժամանակ"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Վաղը"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Ննջում է մինչև <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Սպասվող ազդանշան"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Ձեր բաց թողած ազդանշանը հեռացված է"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Մնացել է մեկ րոպեից պակաս ժամանակ:"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> մինչ ավարտը"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> մինչ ավարտը"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> մինչ ավարտը"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Մնացել է գրեթե մեկ րոպե:"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Մնացել է <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"մնացել է"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"մնացել է"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Զարթուցիչը դրված է այս պահից 1 րոպեից պակաս:"</item>
     <item msgid="6002066367368421848">"Զարթուցիչը դրված է այս պահից <xliff:g id="DAYS">%1$s</xliff:g> օր անց:"</item>
@@ -101,6 +104,10 @@
       <item quantity="one">րոպե</item>
       <item quantity="other">րոպե</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Աստիճանաբար մեծացնել տևողությունը"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Անջատված է"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> վայրկյան"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"վայրկյան"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Լռել"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> րոպե</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Հետադարձել"</string>
     <string name="delete" msgid="5732434972457000541">"Ջնջել"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Զարթուցիչի ձայնի բարձրությունը"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Լուռ"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Լուռ"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Անհայտ"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Ննջել կամ անտեսել զարթուցիչը:"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (ննջած է)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Զարթուցիչը դրված է <xliff:g id="TIME">%s</xliff:g>: Հպեք՝ չեղարկելու համար:"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Բեռնվում է զանգերանգը…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Զարթուցիչների ձայնի նվագարկման ծառայությունը դրված է ժամացույցում:"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Դնել զարթուցիչ"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Զարթուցիչ"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Ժամաչափ"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Ժամացույց"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Դասակարգել ըստ անունների"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Ընտրված քաղաքներ"</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_start_button" msgid="8373422516681242270">"Մեկնարկել"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Շրջան"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Տարածել"</string>
     <string name="hours_label" msgid="3393478155635368097">"ժ"</string>
     <string name="minutes_label" msgid="3568098128251438588">"ր"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Իմ ժամանակն է <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Շրջանի ժամանակը՝"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Շրջան <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> ժամ</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ժամ</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Ավելացնել 1 րոպե"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Ավելացնել 1 րոպե"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Դադարեցնել"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Կատարված է"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Կանգնեցնել ժամանակաչափերը"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Վերակայել"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Չեղարկել"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Ժամաչափը չեղարկվել է"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Ժամանակը սպառվել է"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ժամանակաչափ սպառվել է"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Ժամաչափ"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"թույլատրվում է առավելագույնը 4 ժամաչափ"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Դադարեցնել"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Բոլոր ժամաչափերի վերակայում"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Դուք լրիվ արագության խենթ եք:"</item>
     <item msgid="6332879039890727169">"Վայելեք ձեր աշխատանքի պտուղները:"</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Քաղաքներ"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Ժամացույց"</string>
     <string name="clock_style" msgid="2265011060429742344">"Տեսակը"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Ամսաթվի և ժամի փոփոխում"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Անալոգ"</item>
     <item msgid="8483930821046925592">"Թվային"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Նշված է <xliff:g id="CITY_NAME">%s</xliff:g> քաղաքը"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> քաղաքը նշված չէ"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Մարշալյան Կղզիներ"</item>
     <item msgid="4196408495909011020">"Միդուեյ Կղզիներ"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Ջակարտա"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Զարթուցիչներ"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Վայկյանաչափի ծառայությունը կգործարկի ծանուցումներ:"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Դադարեցված է"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Մշակում է ժամաչափի ծանուցումներից ծագող գործողությունները:"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Մշակում է վայրկենաչափի ծանուցումներից ծագող գործողությունները:"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Կանգնեցված է"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Անջատելու համար սահեցրեք աջ"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Հետաձգելու համար սահեցրեք ձախ"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Ննջեցնելու համար սահահարվածեք ձախ կամ աջ՝ բաց թողնելու համար"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Ժամանակաչափեր"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ժամանակաչափի զանգերանգ"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Ժամաչափը դադարեցված է"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> ժամաչափ դադարեցված է"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Ժամաչափը դադարեցված է"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> ժամաչափ դադարեցված է"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Հպեք՝ ձեր ժամաչափերը տեսնելու համար"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ժամաչափ"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Հաջորդ զարթուցիչը՝ <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Զարթուցիչներ չկան"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Սահմանված զարթուցիչներ չկան"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"Սպասվող ազդանշաններ չկան"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Անվավեր ժամանակ՝ <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>-ի համար նշանակված զարթուցիչ չկա"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Հերթագրված զարթուցիչներ չկան"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Նշված պիտակ չկա"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Ոչ մի զարթուցիչ պիտակ չունի"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Վայրկյանաչափը արդեն աշխատում է"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Վայրկյանաչափը չի աշխատում"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Հնարավոր չէ վերակայել վայրկյանաչափը: Այն այս պահին աշխատում է"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Վայրկյանաչափը դադարեցված է"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Վայրկենաչափը կանգնեցվել է"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Վայրկյանաչափը վերակայվեց"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Վայրկյանաչափը միացված է"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Վայրկյանաչափը մեկնարկել է"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Այս ժամանակի համար նշանակված զարթուցիչ չկա"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Ժ. <xliff:g id="ALARM_TIME">%s</xliff:g>-ի զարթուցիչը անտեսված է"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Զարթուցիչը դրված է <xliff:g id="ALARM_TIME">%s</xliff:g>-ին"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Տեղակայված ժամաչափ չկա"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Ժամաչափը ջնջված է"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Ժամաչափն արդեն աշխատում է"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Հնարավոր չէ կատարել ձեր հարցումը, քանի որ մի քանի ժամաչափեր կան"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Ժամաչափը սկսված է"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Ժամաչափեր չկան"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Առկա է մեկից ավելի ժամաչափ"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Ժամաչափը հեռացվել է:"</string>
     <string name="timer_created" msgid="4381027137335885547">"Ժամաչափը ստեղծված է"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Ժամաչափի տևողությունը սխալ է"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Ժամաչափը վերակայված է"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Հնարավոր չէ վերակայել ժամաչափը, քանի որ այն դեռ աշխատում է: Վերակայելու համար նախ դադարեցրեք այն::"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Ժամաչափն արդեն դադարեցված է"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Ժամաչափը ջնջված է"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Ժամաչափը սկսված է"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Ժամաչափի տևողությունը սխալ է"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Ընտրված քաղաք չկա"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Նշված քաղաքը հասանելի չէ"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Այդ քաղաքն արդեն ավելացվել է"</string>
diff --git a/res/values-in/array.xml b/res/values-in/array.xml
index 0f33292..0eebbe8 100644
--- a/res/values-in/array.xml
+++ b/res/values-in/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Kota Guatemala"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Kutub Selatan"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Kutub Selatan<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Yerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Muskat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapura"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulan Bator"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index d4c40e9..4731c27 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Tampilkan jam"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Sembunyikan jam"</string>
     <string name="label" msgid="162189613902857319">"Label"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Aktif"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Nonaktif"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Setel alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Getar"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Ulangi"</string>
     <string name="alert" msgid="6506982899651975645">"Nada Dering Alarm"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Nada Dering Khusus"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Pewaktu Berakhir"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Senyap"</string>
     <string name="ringtone" msgid="9110746249688559579">"Nada Dering"</string>
     <string name="time" msgid="8067216534232296518">"Waktu"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Besok"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Menunda hingga <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Alarm mendatang"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Alarm yang terlewat telah dihapus"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Sisa kurang dari satu menit"</item>
-    <item msgid="83197792732433351">"Sisa <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Sisa <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Sisa <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Sisa kurang dari satu menit"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Sisa <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"tersisa"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"tersisa"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarm disetel untuk kurang dari 1 menit dari sekarang."</item>
     <item msgid="6002066367368421848">"Alarm disetel untuk <xliff:g id="DAYS">%1$s</xliff:g> dari sekarang."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">menit</item>
       <item quantity="one">menit</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Keraskan volume secara bertahap"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Nonaktif"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> detik"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"detik"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Senyapkan setelah"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> menit</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Kembalikan"</string>
     <string name="delete" msgid="5732434972457000541">"Hapus"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volume alarm"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Senyap"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Senyap"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Tidak diketahui"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Tunda atau tutup alarm."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (ditunda)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm disetel untuk <xliff:g id="TIME">%s</xliff:g>. Sentuh untuk membatalkan."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Memuat nada dering…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Layanan pemutaran suara untuk pewaktu yang disetel di Clock."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Setel alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Pewaktu"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Jam"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Urutkan menurut nama"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Kota yang Dipilih"</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_start_button" msgid="8373422516681242270">"Mulai"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Jeda"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Putaran"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Bagikan"</string>
     <string name="hours_label" msgid="3393478155635368097">"j"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Waktu saya adalah <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Waktu putaran:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Putaran <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> jam</item>
       <item quantity="one">1 jam</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Tambah 1 menit"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Tambahkan 1 mnt"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Hentikan"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Selesai"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Menghentikan semua pewaktu"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Setel ulang"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Batal"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Pewaktu dibatalkan"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Waktu habis"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> pewaktu telah berakhir"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Pewaktu"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"maksimum 4 pewaktu"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Jeda"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Setel ulang semua pewaktu"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Anda benar-benar cepat."</item>
     <item msgid="6332879039890727169">"Nikmati hasil kerja keras Anda."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Kota"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Jam"</string>
     <string name="clock_style" msgid="2265011060429742344">"Gaya"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Ubah Tanggal &amp; waktu"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analog"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> dicentang"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> dihapus centangnya"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Kepulauan Marshall"</item>
     <item msgid="4196408495909011020">"Pulau Midway"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarm"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Layanan stopwatch untuk menjalankan pemberitahuan."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Dihentikan"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Memproses tindakan dari notifikasi pewaktu."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Memproses tindakan dari notifikasi stopwatch."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Dijeda"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Geser ke kanan untuk menutup"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Geser ke kiri untuk menunda"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Gesek ke kiri untuk menunda atau ke kanan untuk menutup"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Pewaktu"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Nada dering pewaktu"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Pewaktu dihentikan"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> pewaktu dihentikan"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Pewaktu dijeda"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> pewaktu dijeda"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Sentuh untuk melihat pewaktu Anda"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> pewaktu"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Pewaktu Berikutnya: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Tidak Ada Alarm"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Tak ada alarm"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"TIDAK ADA ALARM MENDATANG"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"j.mm"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"j.mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"HHH, j.mm"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"H, j.mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Waktu tidak valid <xliff:g id="INVALID_HOUR">%d</xliff:g>.<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Tidak ada alarm pukul <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>.<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Tidak ada jadwal alarm"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Tidak ada label yang ditentukan"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Tidak ada alarm yang berisi label tersebut"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stopwatch sudah berjalan"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stopwatch tidak berjalan"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stopwatch tidak dapat disetel ulang karena sedang berjalan"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stopwatch dihentikan"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stopwatch dijeda"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stopwatch disetel ulang"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stopwatch diputar"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stopwatch dimulai"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Tidak ada jadwal alarm untuk waktu ini"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarm pukul <xliff:g id="ALARM_TIME">%s</xliff:g> ditutup"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm disetel untuk <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Pewaktu tidak disetel"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Pewaktu dihapus"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Pewaktu sudah berjalan"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Tidak dapat menyelesaikan permintaan, ada beberapa pewaktu"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Pewaktu dimulai"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Tidak ada pewaktu"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Ada lebih dari satu pewaktu"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Pewaktu telah dihapus."</string>
     <string name="timer_created" msgid="4381027137335885547">"Pewaktu telah dibuat"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Lamanya pewaktu tidak valid"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Pewaktu disetel ulang"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Pewaktu tidak dapat disetel ulang karena masih berjalan. Hentikan pewaktu untuk menyetel ulang."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Pewaktu sudah dihentikan"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Pewaktu dihapus"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Pewaktu dimulai"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Lamanya pewaktu tidak valid"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Tidak ada kota yang dipilih"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Kota yang Anda sebutkan tidak tersedia"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Kota tersebut telah ditambahkan"</string>
diff --git a/res/values-is-rIS/array.xml b/res/values-is-rIS/array.xml
index 1761fd9..013db6e 100644
--- a/res/values-is-rIS/array.xml
+++ b/res/values-is-rIS/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Gvatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Gvatemalaborg"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Gvæjana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Torontó"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>Suðurpóllinn"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>Suðurpóllinn<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbúl"</item>
     <item msgid="758800913783999425">"D<xliff:g id="SEPARATOR">=</xliff:g>Djakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerúsalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"K<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Ríad"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seúl"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Sjanghæ"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Sjanghæ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapúr"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taípei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taípei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Avív"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tókýó"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tókýó<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"Ú<xliff:g id="SEPARATOR">=</xliff:g>Úlan Bator"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermúda"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanarí"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delí"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index d08c733..b927e86 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Sýna klukku"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Fela klukku"</string>
     <string name="label" msgid="162189613902857319">"Skýring"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Kveikt"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Slökkt"</string>
     <string name="default_label" msgid="5590025289805630372">"Vekjari"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Stilla vekjara"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Titringur"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Endurtaka"</string>
     <string name="alert" msgid="6506982899651975645">"Hringitónn vekjara"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Sjálfgefinn hringitónn"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Teljari útrunninn"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Hljóðlaus"</string>
     <string name="ringtone" msgid="9110746249688559579">"Hringitónn"</string>
     <string name="time" msgid="8067216534232296518">"Tími"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Á morgun"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Blundar fram til <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Næsti vekjari"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Hunsuðum vekjara var eytt"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Innan við mínúta eftir"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> eftir"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> eftir"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> og <xliff:g id="MINUTES">%2$s</xliff:g> eftir"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Innan við mínúta eftir"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> og <xliff:g id="MINUTES">%2$s</xliff:g> eftir"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"eftir"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"eftir"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Vekjari stilltur á innan við mínútu héðan í frá."</item>
     <item msgid="6002066367368421848">"Vekjari stilltur á <xliff:g id="DAYS">%1$s</xliff:g> héðan í frá."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">mínúta</item>
       <item quantity="other">mínútur</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Auka hljóðstyrk smám saman"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Slökkt"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> sekúndur"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sekúndur"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Slökkva á hljóði eftir"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> mínúta</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Snúa í fyrra horf"</string>
     <string name="delete" msgid="5732434972457000541">"Eyða"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Hljóðstyrkur vekjara"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Hljóðlaust"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Hljóðlaus"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Óþekktur"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Blunda eða hunsa vekjara."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (blundað)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Vekjari stilltur á <xliff:g id="TIME">%s</xliff:g>. Snertu til að hætta við."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Hleður hringitón…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Hljóðspilunarþjónusta teljara sem stilltir eru í klukkunni."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Stilla vekjara"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Vekjari"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Teljari"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Klukka"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Raða eftir heiti"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Valdar borgir"</string>
     <string name="sw_resume_button" msgid="2569360966002022248">"Halda áfram"</string>
-    <string name="sw_start_button" msgid="8373422516681242270">"Byrja"</string>
-    <string name="sw_stop_button" msgid="8322958613123274451">"Stöðva"</string>
-    <string name="sw_lap_button" msgid="6992264696039004233">"Millitími"</string>
     <string name="sw_reset_button" msgid="6616804728322906117">"Endurstilla"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Byrja"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Millitími"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Deila"</string>
     <string name="hours_label" msgid="3393478155635368097">"k"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Tíminn minn er <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Millitímar:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Hringur <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Nr. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Nr. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> klukkustund</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> klukkustundir</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Bæta 1 mínútu við"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Bæta 1 mín. við"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stöðva"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Lokið"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Stöðva alla teljara"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Endurstilla"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Hætta við"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Hætt við teljara"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Tíminn er liðinn"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> teljarar útrunnir"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Teljari"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Hámark fjórir teljarar"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Gera hlé"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Núlla teljara"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Skolli ferðu hratt yfir."</item>
     <item msgid="6332879039890727169">"Njóttu ávaxta erfiðisins."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Borgir"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Klukka"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stíll"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Breyta dagsetningu og tíma"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Með vísum"</item>
     <item msgid="8483930821046925592">"Stafræn"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Merkt við <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Ekki merkt við <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshall-eyjar"</item>
     <item msgid="4196408495909011020">"Midway Island"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Djakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Vekjarar"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Skeiðklukkuþjónusta til að keyra tilkynninguna."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Stöðvuð"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Vinnur úr aðgerðum með tilkynningum frá teljara."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Vinnur úr aðgerðum með tilkynningum frá skeiðklukku."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Í bið"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Strjúktu til hægri til að hunsa"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Strjúktu til vinstri til að þagga tímabundið"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Strjúktu til vinstri til að blunda eða til hægri til að hunsa"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Teljarar"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Hringitónn teljara"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Teljari stöðvaður"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> teljarar stöðvaðir"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Hlé gert á teljara"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Hlé gert á <xliff:g id="NUMBER">%d</xliff:g> teljurum"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Snertu til að sjá teljarana þína"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> teljarar"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Næsti teljari: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Engir vekjarar"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Engir vekjarar"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ENGIR VÆNTANLEGIR VEKJARAR"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"HH:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, HH:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Ógildur tími <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Enginn vekjari kl. <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Engir stilltir vekjarar"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Enginn flokkur tilgreindur"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Engir vekjarar eru í flokknum"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Skeiðklukka er nú þegar í gangi"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Skeiðklukka er ekki í gangi"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Ekki er hægt að núllstilla skeiðklukkuna vegna þess að hún er í gangi"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Skeiðklukka stöðvuð"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Hlé gert á skeiðklukku"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Skeiðklukka núllstillt"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Skeiðklukka komin hring"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Skeiðklukka ræst"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Enginn vekjari stilltur fyrir þennan tíma"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Vekjari kl. <xliff:g id="ALARM_TIME">%s</xliff:g> hunsaður"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Vekjari er stilltur á <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Enginn teljari stilltur"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Teljara eytt"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Teljari þegar í gangi"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Ekki hægt að afgreiða beiðnina, margir teljarar í boði"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Teljari ræstur"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Engir teljarar fyrir hendi"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Fleiri en einn teljari fyrir hendi"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Teljarinn hefur verið fjarlægður."</string>
     <string name="timer_created" msgid="4381027137335885547">"Teljari búinn til"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Ógild teljaralengd"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Teljari endurstilltur"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Ekki er hægt að endurstilla teljara þar sem hann er enn í gangi. Stöðvaðu teljarann til að endurstilla hann."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Teljari þegar stöðvaður"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Teljara eytt"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Teljari ræstur"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Ógild teljaralengd"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Engin borg valin"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Borgin sem þú tilgreindir er ekki tiltæk"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Þessari borg hefur þegar verið bætt við"</string>
diff --git a/res/values-it/array.xml b/res/values-it/array.xml
index ddaa93b..56383f8 100644
--- a/res/values-it/array.xml
+++ b/res/values-it/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"C<xliff:g id="SEPARATOR">=</xliff:g>Città del Guatemala"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>Polo sud"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>Polo sud<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Giacarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Gerusalemme"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Tehran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canaria"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Pechino"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Pechino<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcellona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Canton"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Canton<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 0820a98..34fbb28 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Mostra orologio"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Nascondi orologio"</string>
     <string name="label" msgid="162189613902857319">"Etichetta"</string>
+    <string name="on_switch" msgid="2297966258029227449">"On"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Off"</string>
     <string name="default_label" msgid="5590025289805630372">"Sveglia"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Imposta sveglia"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrazione"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Ripeti"</string>
     <string name="alert" msgid="6506982899651975645">"Suoneria sveglia"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Suoneria personalizzata"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Timer scaduto"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silenzioso"</string>
     <string name="ringtone" msgid="9110746249688559579">"Suoneria"</string>
     <string name="time" msgid="8067216534232296518">"Ora"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Domani"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Ripetizione sveglia fino alle <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Prossima sveglia"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"La sveglia ignorata è stata eliminata"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Resta meno di un minuto"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> rimanenti"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> rimanenti"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> e <xliff:g id="MINUTES">%2$s</xliff:g> rimanenti"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Resta meno di un minuto."</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> e <xliff:g id="MINUTES">%2$s</xliff:g> rimanenti"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"rimanente"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"rimanenti"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"La sveglia sarà attivata tra meno di 1 minuto."</item>
     <item msgid="6002066367368421848">"La sveglia sarà attivata tra <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minuti</item>
       <item quantity="one">minuto</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Aumenta gradualmente il volume"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Non attiva"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> secondi"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"secondi"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Disattiva suoneria dopo"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuti</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Annulla modifiche"</string>
     <string name="delete" msgid="5732434972457000541">"Elimina"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volume sveglia"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silenzioso"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silenzioso"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Elemento sconosciuto"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Posticipa o elimina sveglia."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (sospeso)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"La sveglia sarà attivata alle <xliff:g id="TIME">%s</xliff:g>. Tocca per annullare."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Caricamento suoneria..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Servizio di riproduzione dei suoni per i timer impostati in Orologio."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Imposta sveglia"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Sveglia"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Orologio"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Ordina per nome"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Città selezionate"</string>
     <string name="sw_resume_button" msgid="2569360966002022248">"Riprendi"</string>
-    <string name="sw_start_button" msgid="8373422516681242270">"Avvia"</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_start_button" msgid="8373422516681242270">"Avvia"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pausa"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Giro"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Condividi"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Il mio tempo è <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Tempi sul giro:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Giro <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"n. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"n. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ore</item>
       <item quantity="one">1 ora</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Aggiungi un minuto"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Aggiungi 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Interrompi"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Fine"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Interrompi tutti i timer"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Azzera"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Annulla"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Timer annullato"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Tempo scaduto"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> timer scaduti"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Timer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Massimo quattro timer"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pausa"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Reimposta timer"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Sei davvero un fulmine."</item>
     <item msgid="6332879039890727169">"Goditi i frutti del tuo lavoro."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Città"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Orologio"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stile"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Modifica data e ora"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogico"</item>
     <item msgid="8483930821046925592">"Digitale"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Città <xliff:g id="CITY_NAME">%s</xliff:g> selezionata"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Città <xliff:g id="CITY_NAME">%s</xliff:g> non selezionata"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Isole Marshall"</item>
     <item msgid="4196408495909011020">"Isola di Midway"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Giacarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Sveglie"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Servizio cronometro per pubblicare la notifica."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Interrotto"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Consente di elaborare le azioni derivanti dalle notifiche relative al timer."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Consente di elaborare le azioni derivanti dalle notifiche relative al cronometro."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"In pausa"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Fai scorrere a destra per eliminare"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Fai scorrere a sinistra per posticipare"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Fai scorrere a sinistra per posticiparla o a destra per chiuderla"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Timer"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Suoneria del timer"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Timer fermato"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> timer fermati"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Timer in pausa"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> timer in pausa"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Tocca per visualizzare i timer"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> timer"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Prossimo timer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Nessuna sveglia"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Nessuna sveglia"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NESSUNA SVEGLIA A BREVE"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Orario <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g> non valido"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Nessuna sveglia alle <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nessuna sveglia pianificata"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nessuna etichetta specificata"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Nessuna sveglia con l\'etichetta indicata"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Cronometro già in esecuzione"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Cronometro non in esecuzione"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Impossibile reimpostare il cronometro perché è in funzione"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Cronometro interrotto"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Cronometro in pausa"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Cronometro reimpostato"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Cronometro impostato sul giro"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Cronometro avviato"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Nessuna sveglia pianificata per questo orario"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Sveglia alle <xliff:g id="ALARM_TIME">%s</xliff:g> ignorata"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Sveglia impostata per le ore <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Nessun timer impostato"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Timer eliminato"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Timer già in esecuzione"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Impossibile completare la richiesta. Diversi timer disponibili"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Timer avviato"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Non è presente alcun timer"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"È presente più di un timer"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Il timer è stato rimosso."</string>
     <string name="timer_created" msgid="4381027137335885547">"Timer creato"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Durata del timer non valida"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Timer reimpostato"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Impossibile reimpostare il timer perché è ancora in esecuzione. Per reimpostare il timer, interrompilo."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Timer già interrotto"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Timer eliminato"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Timer avviato"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Durata del timer non valida"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Nessuna città selezionata"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"La città specificata non è disponibile"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"La città è già stata aggiunta"</string>
diff --git a/res/values-iw/array.xml b/res/values-iw/array.xml
index b2d161f..9b81402 100644
--- a/res/values-iw/array.xml
+++ b/res/values-iw/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"פ<xliff:g id="SEPARATOR">=</xliff:g>פורטלזה"</item>
     <item msgid="5801558418916235541">"ג<xliff:g id="SEPARATOR">=</xliff:g>גראנד טורק"</item>
     <item msgid="2103759276235503048">"ג<xliff:g id="SEPARATOR">=</xliff:g>גרנדה"</item>
-    <item msgid="1490069759176391533">"ג<xliff:g id="SEPARATOR">=</xliff:g>גואטמלה"</item>
+    <item msgid="6216160110733510854">"ג<xliff:g id="SEPARATOR">=</xliff:g>גואטמלה סיטי"</item>
     <item msgid="525959305652046261">"ג<xliff:g id="SEPARATOR">=</xliff:g>גיאנה"</item>
     <item msgid="7565596629973190931">"ה<xliff:g id="SEPARATOR">=</xliff:g>האליפקס"</item>
     <item msgid="3811169155065582644">"ה<xliff:g id="SEPARATOR">=</xliff:g>הוואנה"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ט<xliff:g id="SEPARATOR">=</xliff:g>טורונטו"</item>
     <item msgid="1506838283840737263">"ו<xliff:g id="SEPARATOR">=</xliff:g>ונקובר"</item>
     <item msgid="8935386104773857399">"ו<xliff:g id="SEPARATOR">=</xliff:g>וויניפג"</item>
-    <item msgid="1132634022412399582">"ק<xliff:g id="SEPARATOR">=</xliff:g>הקוטב הדרומי"</item>
+    <item msgid="498429228419399474">"ק<xliff:g id="SEPARATOR">=</xliff:g>הקוטב הדרומי<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ל<xliff:g id="SEPARATOR">=</xliff:g>לונגיירביאן"</item>
     <item msgid="3784788073896028355">"א<xliff:g id="SEPARATOR">=</xliff:g>אלמטי"</item>
     <item msgid="7895695236056852523">"ע<xliff:g id="SEPARATOR">=</xliff:g>עמאן"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ע<xliff:g id="SEPARATOR">=</xliff:g>עזה"</item>
     <item msgid="2359068282340162319">"ח<xliff:g id="SEPARATOR">=</xliff:g>חברון"</item>
     <item msgid="6223396610551759129">"ה<xliff:g id="SEPARATOR">=</xliff:g>הו צ\'י מין"</item>
-    <item msgid="4731022818651322736">"ה<xliff:g id="SEPARATOR">=</xliff:g>הונג קונג"</item>
+    <item msgid="3439764751788710130">"ה<xliff:g id="SEPARATOR">=</xliff:g>הונג קונג<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"א<xliff:g id="SEPARATOR">=</xliff:g>איסטנבול"</item>
     <item msgid="758800913783999425">"ג<xliff:g id="SEPARATOR">=</xliff:g>ג\'קרטה"</item>
     <item msgid="8956406398692698126">"י<xliff:g id="SEPARATOR">=</xliff:g>ירושלים"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"מ<xliff:g id="SEPARATOR">=</xliff:g>מנילה"</item>
     <item msgid="6033964325069060422">"מ<xliff:g id="SEPARATOR">=</xliff:g>מוסקט"</item>
     <item msgid="6077458941399984780">"פ<xliff:g id="SEPARATOR">=</xliff:g>פנום פן"</item>
-    <item msgid="935474308903572975">"פ<xliff:g id="SEPARATOR">=</xliff:g>פיונגיאנג"</item>
+    <item msgid="1245515372520913197">"פ<xliff:g id="SEPARATOR">=</xliff:g>פיונגיאנג<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"ק<xliff:g id="SEPARATOR">=</xliff:g>קטאר"</item>
     <item msgid="1667243110545095146">"י<xliff:g id="SEPARATOR">=</xliff:g>ינגון"</item>
     <item msgid="4460370766685855731">"ר<xliff:g id="SEPARATOR">=</xliff:g>ריאד"</item>
     <item msgid="4229224905931739201">"ס<xliff:g id="SEPARATOR">=</xliff:g>סייגון"</item>
     <item msgid="8705359848250215620">"ס<xliff:g id="SEPARATOR">=</xliff:g>סיאול"</item>
-    <item msgid="583367295371395814">"ש<xliff:g id="SEPARATOR">=</xliff:g>שנגחאי"</item>
+    <item msgid="3814881931186962624">"ש<xliff:g id="SEPARATOR">=</xliff:g>שנגחאי<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"ס<xliff:g id="SEPARATOR">=</xliff:g>סינגפור"</item>
-    <item msgid="1972491729911039207">"ט<xliff:g id="SEPARATOR">=</xliff:g>טאיפיי"</item>
+    <item msgid="8982451946156859368">"ט<xliff:g id="SEPARATOR">=</xliff:g>טאיפיי<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"ט<xliff:g id="SEPARATOR">=</xliff:g>טהרן"</item>
     <item msgid="8629402941285674273">"ת<xliff:g id="SEPARATOR">=</xliff:g>תל אביב"</item>
-    <item msgid="8499164674454654525">"ט<xliff:g id="SEPARATOR">=</xliff:g>טוקיו"</item>
+    <item msgid="76330681636547168">"ט<xliff:g id="SEPARATOR">=</xliff:g>טוקיו<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"א<xliff:g id="SEPARATOR">=</xliff:g>אולאנבאטר"</item>
     <item msgid="2028626988021468640">"ב<xliff:g id="SEPARATOR">=</xliff:g>ברמודה"</item>
     <item msgid="4527109966513690429">"ק<xliff:g id="SEPARATOR">=</xliff:g>קנארי"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"ר<xliff:g id="SEPARATOR">=</xliff:g>רינו"</item>
     <item msgid="9155068631060038769">"ב<xliff:g id="SEPARATOR">=</xliff:g>בלאק רוק סיטי"</item>
     <item msgid="8498761319928979900">"ד<xliff:g id="SEPARATOR">=</xliff:g>דוחה"</item>
-    <item msgid="8307897251088048641">"ב<xliff:g id="SEPARATOR">=</xliff:g>בייג\'ינג"</item>
+    <item msgid="5327010922199714808">"ב<xliff:g id="SEPARATOR">=</xliff:g>בייג\'ינג<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"מ<xliff:g id="SEPARATOR">=</xliff:g>מומבאי"</item>
     <item msgid="6668274273067049125">"ד<xliff:g id="SEPARATOR">=</xliff:g>דלהי"</item>
-    <item msgid="2933410189478233292">"א<xliff:g id="SEPARATOR">=</xliff:g>אוסקה"</item>
+    <item msgid="7199039603593847813">"א<xliff:g id="SEPARATOR">=</xliff:g>אוסקה<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ל<xliff:g id="SEPARATOR">=</xliff:g>לאהור"</item>
     <item msgid="1448378291805481500">"צ<xliff:g id="SEPARATOR">=</xliff:g>צנעא"</item>
     <item msgid="5233119846682408301">"ב<xliff:g id="SEPARATOR">=</xliff:g>ברצלונה"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"ק<xliff:g id="SEPARATOR">=</xliff:g>קיימברידג\'"</item>
     <item msgid="759409010285366934">"ק<xliff:g id="SEPARATOR">=</xliff:g>קירקלנד"</item>
     <item msgid="6308007059287569663">"מ<xliff:g id="SEPARATOR">=</xliff:g>מדיסון"</item>
-    <item msgid="6971636434858330021">"ג<xliff:g id="SEPARATOR">=</xliff:g>גואנגג\'ו"</item>
+    <item msgid="2077617905582224600">"ג<xliff:g id="SEPARATOR">=</xliff:g>גואנגג\'ו<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"ה<xliff:g id="SEPARATOR">=</xliff:g>היידראבאד"</item>
     <item msgid="3032295682584784261">"ר<xliff:g id="SEPARATOR">=</xliff:g>רסטון"</item>
     <item msgid="7722837296297332268">"ב<xliff:g id="SEPARATOR">=</xliff:g>בלו הוריזונטה"</item>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 06fe4d7..7b6adae 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"הצג שעון"</string>
     <string name="hide_clock" msgid="3217727306480505694">"הסתר שעון"</string>
     <string name="label" msgid="162189613902857319">"תווית"</string>
+    <string name="on_switch" msgid="2297966258029227449">"פועל"</string>
+    <string name="off_switch" msgid="3381070073851148013">"כבוי"</string>
     <string name="default_label" msgid="5590025289805630372">"התראה"</string>
     <string name="set_alarm" msgid="9148359866152726808">"הגדר צלצול"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"רטט"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"חוזר"</string>
     <string name="alert" msgid="6506982899651975645">"צלצול שעון מעורר"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"רינגטון בהתאמה אישית"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"הטיימר סיים"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"שקט"</string>
     <string name="ringtone" msgid="9110746249688559579">"רינגטון"</string>
     <string name="time" msgid="8067216534232296518">"שעה"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"מחר"</string>
@@ -62,12 +65,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"מצב נמנום עד <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"התראה קרובה"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"ההתראה שהחמצת נמחקה"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"נותרה פחות מדקה"</item>
-    <item msgid="83197792732433351">"נותרו <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"נותרו <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"נותרו <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"נותרה פחות מדקה"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"נותרו <xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"נותרו <xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"נותרו <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"נותרה"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"נותרו"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"ההתראה הוגדרה לעוד פחות מדקה מעכשיו."</item>
     <item msgid="6002066367368421848">"ההתראה הוגדרה לעוד <xliff:g id="DAYS">%1$s</xliff:g> מעכשיו."</item>
@@ -115,6 +118,10 @@
       <item quantity="other">דקות</item>
       <item quantity="one">דקה</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"הגבר בהדרגה את עוצמת הקול"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"כבוי"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> שניות"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"שניות"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"השתק לאחר"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="two"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> דקות</item>
@@ -142,7 +149,8 @@
     <string name="revert" msgid="9100911171235162926">"חזור למצב קודם"</string>
     <string name="delete" msgid="5732434972457000541">"מחק"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"עוצמת קול של התראה"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"שקט"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"שקט"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"לא ידוע"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"נודניק או ביטול ההתראה."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (מצב נמנום)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"ההתראה מכוונת לשעה <xliff:g id="TIME">%s</xliff:g>. גע כדי לבטל."</string>
@@ -167,8 +175,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"טוען צלצול..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"שירות השמעת צלילים עבור טיימרים שהוגדרו ב\'שעון\'."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"הגדר צלצול"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"התראה"</string>
     <string name="menu_timer" msgid="6459070074762877114">"טיימר"</string>
     <string name="menu_clock" msgid="5612760670606829805">"שעון"</string>
@@ -183,10 +189,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"מיין לפי שם"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"ערים נבחרות"</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_start_button" msgid="8373422516681242270">"התחל"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"השהה"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"הקפה"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"שתף"</string>
     <string name="hours_label" msgid="3393478155635368097">"ש\'"</string>
     <string name="minutes_label" msgid="3568098128251438588">"ד\'"</string>
@@ -198,10 +204,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"הזמן שלי הוא <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"זמני הקפה:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"הקפה <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"מס\' <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"מס\' <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="two"><xliff:g id="NUMBER">%d</xliff:g> שעות</item>
       <item quantity="many"><xliff:g id="NUMBER">%d</xliff:g> שעות</item>
@@ -227,12 +229,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"הוסף דקה"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"הוסף דקה"</string>
     <string name="timer_stop" msgid="3361154678667736722">"עצור"</string>
-    <string name="timer_done" msgid="2375990511982914051">"בוצע"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"הפסק את כל הטיימרים"</string>
     <string name="timer_reset" msgid="7848424809190171640">"אפס"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"בטל"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"הטיימר בוטל"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"הזמן נגמר"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"הפעולה של <xliff:g id="NUM_TIMERS">%d</xliff:g> טיימרים הושלמה"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"טיימר"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"4 טיימרים לכל היותר"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"השהה"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"אפס את הטיימרים"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"אתה מהיר כשד משחת."</item>
     <item msgid="6332879039890727169">"תיהנה מפירות עמלך."</item>
@@ -249,6 +255,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"ערים"</string>
     <string name="clock_settings" msgid="8317286807280600391">"שעון"</string>
     <string name="clock_style" msgid="2265011060429742344">"סגנון"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"שנה תאריך ושעה"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"אנלוגי"</item>
     <item msgid="8483930821046925592">"דיגיטלי"</item>
@@ -263,6 +270,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">"00:"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">"30:"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> מסומנת"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> לא מסומנת"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"איי מרשל"</item>
     <item msgid="4196408495909011020">"האי מידוויי"</item>
@@ -351,13 +360,17 @@
     <item msgid="5176858645450908751">"ג\'אקארטה"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"התראות"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"שירות שעון עצר להפעלת ההתראה."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"נעצר"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"מעבד פעולות מההודעות של הטיימר."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"מעבד פעולות מההודעות של שעון העצר."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"מושהה"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"החלק ימינה כדי לבטל"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"החלק שמאלה כדי להפעיל נודניק"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"החלק שמאלה כדי להעביר למצב נודניק או ימינה כדי לסגור"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"טיימרים"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"רינגטון של טיימר"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"טיימר נעצר"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> טיימרים נעצרו"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"הטיימר מושהה"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> טיימרים הושהו"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"גע כדי לראות את הטיימרים שלך"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> טיימרים"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"הטיימר הבא: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -385,35 +398,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"ללא התראות"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"לא הוגדרו התראות"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"אין התראות קרובות"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"‏EEE‏, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"‏EEE‏, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"‏שעה לא חוקית ‎<xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>‎"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"‏אין התראה ב-‎<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>‎"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"לא נקבעו התראות"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"לא צוינה תווית"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"אין התראות הכוללות את התווית"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"שעון העצר כבר פועל"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"שעון העצר אינו פועל"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"לא ניתן לאפס את שעון העצר מפני שהוא פועל"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"שעון העצר הופסק"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"שעון העצר מושהה"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"שעון העצר אופס"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"שעון העצר סיים סיבוב"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"שעון העצר הופעל"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"לא נקבעה התראה לשעה הזו"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"ההתראה של <xliff:g id="ALARM_TIME">%s</xliff:g> נסגרה"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"הוגדרה התראה לשעה <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"לא הוגדר טיימר"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"הטיימר נמחק"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"הטיימר כבר פועל"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"לא ניתן להשלים את הבקשה. יש מספר טיימרים זמינים"</string>
-    <string name="timer_started" msgid="6715582052946641641">"הטיימר הופעל"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"לא קיימים טיימרים"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"קיים יותר מטיימר אחד"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"הטיימר הוסר."</string>
     <string name="timer_created" msgid="4381027137335885547">"הטיימר נוצר"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"משך טיימר לא חוקי"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"הטיימר אופס"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"לא ניתן לאפס את הטיימר כי הוא עדיין פועל. הפסק את הטיימר כדי לאפס."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"הטיימר כבר הופסק"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"הטיימר נמחק"</string>
+    <string name="timer_started" msgid="6715582052946641641">"הטיימר הופעל"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"משך טיימר לא חוקי"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"לא נבחרה עיר"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"העיר שציינת אינה זמינה"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"העיר הזו כבר נוספה"</string>
diff --git a/res/values-ja/array.xml b/res/values-ja/array.xml
index 8177183..e094325 100644
--- a/res/values-ja/array.xml
+++ b/res/values-ja/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"は<xliff:g id="SEPARATOR">=</xliff:g>フォルタレザ"</item>
     <item msgid="5801558418916235541">"か<xliff:g id="SEPARATOR">=</xliff:g>グランドターク"</item>
     <item msgid="2103759276235503048">"か<xliff:g id="SEPARATOR">=</xliff:g>グレナダ"</item>
-    <item msgid="1490069759176391533">"か<xliff:g id="SEPARATOR">=</xliff:g>グアテマラ"</item>
+    <item msgid="6216160110733510854">"か<xliff:g id="SEPARATOR">=</xliff:g>グアテマラシティ"</item>
     <item msgid="525959305652046261">"か<xliff:g id="SEPARATOR">=</xliff:g>ガイアナ"</item>
     <item msgid="7565596629973190931">"は<xliff:g id="SEPARATOR">=</xliff:g>ハリファックス"</item>
     <item msgid="3811169155065582644">"は<xliff:g id="SEPARATOR">=</xliff:g>ハバナ"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"た<xliff:g id="SEPARATOR">=</xliff:g>トロント"</item>
     <item msgid="1506838283840737263">"は<xliff:g id="SEPARATOR">=</xliff:g>バンクーバー"</item>
     <item msgid="8935386104773857399">"あ<xliff:g id="SEPARATOR">=</xliff:g>ウィニペグ"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>南極"</item>
+    <item msgid="498429228419399474">"な<xliff:g id="SEPARATOR">=</xliff:g>南極<xliff:g id="PHONETIC">:</xliff:g>ナンキョク"</item>
     <item msgid="4076962667198039206">"ら<xliff:g id="SEPARATOR">=</xliff:g>ロングイェールビーン"</item>
     <item msgid="3784788073896028355">"あ<xliff:g id="SEPARATOR">=</xliff:g>アルマトイ"</item>
     <item msgid="7895695236056852523">"あ<xliff:g id="SEPARATOR">=</xliff:g>アンマン"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"か<xliff:g id="SEPARATOR">=</xliff:g>ガザ"</item>
     <item msgid="2359068282340162319">"は<xliff:g id="SEPARATOR">=</xliff:g>ヘブロン"</item>
     <item msgid="6223396610551759129">"は<xliff:g id="SEPARATOR">=</xliff:g>ホーチミン"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>香港"</item>
+    <item msgid="3439764751788710130">"は<xliff:g id="SEPARATOR">=</xliff:g>香港<xliff:g id="PHONETIC">:</xliff:g>ホンコン"</item>
     <item msgid="8104778702069607166">"あ<xliff:g id="SEPARATOR">=</xliff:g>イスタンブール"</item>
     <item msgid="758800913783999425">"さ<xliff:g id="SEPARATOR">=</xliff:g>ジャカルタ"</item>
     <item msgid="8956406398692698126">"あ<xliff:g id="SEPARATOR">=</xliff:g>エルサレム"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"ま<xliff:g id="SEPARATOR">=</xliff:g>マニラ"</item>
     <item msgid="6033964325069060422">"ま<xliff:g id="SEPARATOR">=</xliff:g>マスカット"</item>
     <item msgid="6077458941399984780">"は<xliff:g id="SEPARATOR">=</xliff:g>プノンペン"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>平壌"</item>
+    <item msgid="1245515372520913197">"は<xliff:g id="SEPARATOR">=</xliff:g>平壌<xliff:g id="PHONETIC">:</xliff:g>ピョンヤン"</item>
     <item msgid="5336632319992664889">"か<xliff:g id="SEPARATOR">=</xliff:g>カタール"</item>
     <item msgid="1667243110545095146">"ら<xliff:g id="SEPARATOR">=</xliff:g>ラングーン"</item>
     <item msgid="4460370766685855731">"ら<xliff:g id="SEPARATOR">=</xliff:g>リヤド"</item>
     <item msgid="4229224905931739201">"さ<xliff:g id="SEPARATOR">=</xliff:g>サイゴン"</item>
     <item msgid="8705359848250215620">"さ<xliff:g id="SEPARATOR">=</xliff:g>ソウル"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>上海"</item>
+    <item msgid="3814881931186962624">"さ<xliff:g id="SEPARATOR">=</xliff:g>上海<xliff:g id="PHONETIC">:</xliff:g>シャンハイ"</item>
     <item msgid="1422156732794771136">"さ<xliff:g id="SEPARATOR">=</xliff:g>シンガポール"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>台北"</item>
+    <item msgid="8982451946156859368">"た<xliff:g id="SEPARATOR">=</xliff:g>台北<xliff:g id="PHONETIC">:</xliff:g>タイペイ"</item>
     <item msgid="5563193560935461106">"た<xliff:g id="SEPARATOR">=</xliff:g>テヘラン"</item>
     <item msgid="8629402941285674273">"た<xliff:g id="SEPARATOR">=</xliff:g>テルアビブ"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>東京"</item>
+    <item msgid="76330681636547168">"た<xliff:g id="SEPARATOR">=</xliff:g>東京<xliff:g id="PHONETIC">:</xliff:g>トウキョウ"</item>
     <item msgid="1705804745888992744">"あ<xliff:g id="SEPARATOR">=</xliff:g>ウランバートル"</item>
     <item msgid="2028626988021468640">"は<xliff:g id="SEPARATOR">=</xliff:g>バミューダ"</item>
     <item msgid="4527109966513690429">"か<xliff:g id="SEPARATOR">=</xliff:g>カナリア"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"ら<xliff:g id="SEPARATOR">=</xliff:g>リノ"</item>
     <item msgid="9155068631060038769">"は<xliff:g id="SEPARATOR">=</xliff:g>ブラックロックシティ"</item>
     <item msgid="8498761319928979900">"た<xliff:g id="SEPARATOR">=</xliff:g>ドーハ"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>北京"</item>
+    <item msgid="5327010922199714808">"は<xliff:g id="SEPARATOR">=</xliff:g>北京<xliff:g id="PHONETIC">:</xliff:g>ペキン"</item>
     <item msgid="8605970953750147428">"ま<xliff:g id="SEPARATOR">=</xliff:g>ムンバイ"</item>
     <item msgid="6668274273067049125">"た<xliff:g id="SEPARATOR">=</xliff:g>デリー"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>大阪"</item>
+    <item msgid="7199039603593847813">"あ<xliff:g id="SEPARATOR">=</xliff:g>大阪<xliff:g id="PHONETIC">:</xliff:g>オオサカ"</item>
     <item msgid="9011026093638055579">"ら<xliff:g id="SEPARATOR">=</xliff:g>ラホール"</item>
     <item msgid="1448378291805481500">"さ<xliff:g id="SEPARATOR">=</xliff:g>サヌア"</item>
     <item msgid="5233119846682408301">"は<xliff:g id="SEPARATOR">=</xliff:g>バルセロナ"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"か<xliff:g id="SEPARATOR">=</xliff:g>ケンブリッジ"</item>
     <item msgid="759409010285366934">"か<xliff:g id="SEPARATOR">=</xliff:g>カークランド"</item>
     <item msgid="6308007059287569663">"ま<xliff:g id="SEPARATOR">=</xliff:g>マディソン"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>広州"</item>
+    <item msgid="2077617905582224600">"か<xliff:g id="SEPARATOR">=</xliff:g>広州<xliff:g id="PHONETIC">:</xliff:g>コウシュウ"</item>
     <item msgid="1185109514180068650">"は<xliff:g id="SEPARATOR">=</xliff:g>ハイデラーバード"</item>
     <item msgid="3032295682584784261">"ら<xliff:g id="SEPARATOR">=</xliff:g>レストン"</item>
     <item msgid="7722837296297332268">"は<xliff:g id="SEPARATOR">=</xliff:g>ベロオリゾンテ"</item>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 9546063..eda6d1d 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"時計を表示"</string>
     <string name="hide_clock" msgid="3217727306480505694">"時計を隠す"</string>
     <string name="label" msgid="162189613902857319">"ラベル"</string>
+    <string name="on_switch" msgid="2297966258029227449">"ON"</string>
+    <string name="off_switch" msgid="3381070073851148013">"OFF"</string>
     <string name="default_label" msgid="5590025289805630372">"アラーム"</string>
     <string name="set_alarm" msgid="9148359866152726808">"アラームを設定"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"バイブレーション"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"繰り返し"</string>
     <string name="alert" msgid="6506982899651975645">"アラーム音"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"カスタム着信音"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"タイマーの完了時"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"マナーモード"</string>
     <string name="ringtone" msgid="9110746249688559579">"着信音"</string>
     <string name="time" msgid="8067216534232296518">"時刻"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"明日"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"スヌーズ終了時刻: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"次のアラーム"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"聞き逃したアラームを削除しました"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"残り1分未満"</item>
-    <item msgid="83197792732433351">"残り<xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"残り<xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"残り<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"残り1分未満"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g><xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g><xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"残り<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"残り"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"残り"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"アラームは今から1分以内に設定されています。"</item>
     <item msgid="6002066367368421848">"アラームは<xliff:g id="DAYS">%1$s</xliff:g>後に設定されています。"</item>
@@ -101,6 +104,10 @@
       <item quantity="other">分</item>
       <item quantity="one">分</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"徐々に音量を上げる"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"OFF"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g>秒"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"秒"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"消音までの時間"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g>分</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"キャンセル"</string>
     <string name="delete" msgid="5732434972457000541">"削除"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"アラームの音量"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"マナーモード"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"マナーモード"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"不明"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"アラームをスヌーズ/解除します。"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g>(スヌーズ)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"アラームは<xliff:g id="TIME">%s</xliff:g>に設定されています。選択すると解除されます。"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"着信音を読み込み中..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"時計で設定したタイマー用のサウンド再生サービスです。"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"アラームを設定"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"アラーム"</string>
     <string name="menu_timer" msgid="6459070074762877114">"タイマー"</string>
     <string name="menu_clock" msgid="5612760670606829805">"時計"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"名前順"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"選択した都市"</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_start_button" msgid="8373422516681242270">"開始"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"一時停止"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"ラップ"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"共有"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"私の時間は<xliff:g id="TIME">%s</xliff:g>です"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"ラップ時間:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"ラップ<xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g>時間</item>
       <item quantity="one">1時間</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1分延長"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1分追加"</string>
     <string name="timer_stop" msgid="3361154678667736722">"停止"</string>
-    <string name="timer_done" msgid="2375990511982914051">"完了"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"タイマーをすべて停止"</string>
     <string name="timer_reset" msgid="7848424809190171640">"リセット"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"キャンセル"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"タイマーをキャンセルしました"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"タイムアップ"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g>件のタイマーが完了"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"タイマー"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"タイマーは最大4個まで"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"一時停止"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"全タイマーをリセット"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"なかなかのスピード狂です。"</item>
     <item msgid="6332879039890727169">"まさに努力の賜物です。"</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"世界時計"</string>
     <string name="clock_settings" msgid="8317286807280600391">"時計"</string>
     <string name="clock_style" msgid="2265011060429742344">"スタイル"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"日付と時刻の変更"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"アナログ"</item>
     <item msgid="8483930821046925592">"デジタル"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"「<xliff:g id="CITY_NAME">%s</xliff:g>」をオンにしました"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"「<xliff:g id="CITY_NAME">%s</xliff:g>」をオフにしました"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"マーシャル諸島"</item>
     <item msgid="4196408495909011020">"ミッドウェー諸島"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"ジャカルタ"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"アラーム"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"通知を行うためのストップウォッチサービスです。"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"停止"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"タイマーの通知からの操作を処理します。"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"ストップウォッチの通知からの操作を処理します。"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"一時停止しました"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"右にスワイプすると解除できます"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"左にスワイプするとスヌーズを設定できます"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"左にスワイプでスヌーズを設定、右にスワイプで解除できます"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"タイマー"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"タイマーの着信音です"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"タイマーが停止しました"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g>件のタイマーが停止しました"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"タイマーを一時停止しました"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g>個のタイマーを一時停止しました"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"タップしてタイマーを表示"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g>件のタイマー"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"次のタイマー: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"アラームはありません"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"アラーム未設定"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"次のアラームはありません"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mma"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE、h:mma"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE、k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"無効な時間<xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g><xliff:g id="INVALID_AMPM">%s</xliff:g>が指定されました"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>に設定されたアラームはありません"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"設定されたアラームはありません"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"ラベルは指定されていません"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"ラベルを含むアラームはありません"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"ストップウォッチは既に作動しています"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"ストップウォッチは作動していません"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"ストップウォッチは作動中のためリセットできません"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"ストップウォッチを停止しました"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"ストップウォッチを一時停止しました"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"ストップウォッチをリセットしました"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"ストップウォッチのラップを記録しました"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"ストップウォッチを開始しました"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"この時間に設定されたアラームはありません"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g>のアラームを解除しました"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"アラームは<xliff:g id="ALARM_TIME">%s</xliff:g>に設定されています"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"設定されたタイマーはありません"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"タイマーを削除しました"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"タイマーは既に作動しています"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"リクエストを完了できません。複数のタイマーがあります"</string>
-    <string name="timer_started" msgid="6715582052946641641">"タイマーを開始しました"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"タイマーは設定されていません"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"複数のタイマーが設定されています"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"タイマーは削除されています。"</string>
     <string name="timer_created" msgid="4381027137335885547">"タイマーを作成しました"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"タイマーの長さが無効です"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"タイマーをリセットしました"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"作動中のため、タイマーをリセットすることはできません。タイマーをリセットするには停止してください。"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"タイマーは既に停止しています"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"タイマーを削除しました"</string>
+    <string name="timer_started" msgid="6715582052946641641">"タイマーを開始しました"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"タイマーの長さが無効です"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"都市が選択されていません"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"指定された都市は使用できません"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"この都市は既に追加されています"</string>
diff --git a/res/values-ka-rGE/array.xml b/res/values-ka-rGE/array.xml
index d49dab3..27c09a4 100644
--- a/res/values-ka-rGE/array.xml
+++ b/res/values-ka-rGE/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>ფორტალეზა"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>გრანდ-ტერკი"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>გრენადა"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>გვატემალა"</item>
+    <item msgid="6216160110733510854">"გ<xliff:g id="SEPARATOR">=</xliff:g>გვატემალა"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>გაიანა"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>ჰალიფაქსი"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>ჰავანა"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>ტორონტო"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>ვანკუვერი"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>უინიპეგი"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>სამხრეთი პოლუსი"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>სამხრეთი პოლუსი<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>ლონგირი"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>ალმათი"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>ამანი"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>ღაზა"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>ჰებრონი"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>ჰოშიმინი"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>ჰონგ-კონგი"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>ჰონგ-კონგი<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>სტამბული"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>ჯაკარტა"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>იერუსალიმი"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>მანილა"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>მუსკატი"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>პნომპენი"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>ფხენიანი"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>ფხენიანი<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>კატარი"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>იანგონი"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>ერ-რიადი"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>საიგონი"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>სეული"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>შანხაი"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>შანხაი<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>სინგაპური"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>ტაიბეი"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>ტაიბეი<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>თეირანი"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>თელ-ავივი"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>ტოკიო"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>ტოკიო<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>ულან-ბატორი"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>ბერმუდის კუნძულები"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>კანარის კუნძულები"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>რინო"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>ბლექ-როკ-სიტი"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>დოჰა"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>პეკინი"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>პეკინი<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>მუმბაი"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>დელი"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>ოსაკა"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>ოსაკა<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>ლაჰორი"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>სანა"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>ბარსელონა"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>კემბრიჯი"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>კირკლენდი"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>მედისონი"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>გუანჯოუ"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>გუანჯოუ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>ჰაიდარაბადი"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>რესტონი"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>ბელუ-ორიზონტი"</item>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index f2c015d..26ea70d 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"საათის ჩვენება"</string>
     <string name="hide_clock" msgid="3217727306480505694">"საათის დამალვა"</string>
     <string name="label" msgid="162189613902857319">"ლეიბლი"</string>
+    <string name="on_switch" msgid="2297966258029227449">"ჩართული"</string>
+    <string name="off_switch" msgid="3381070073851148013">"გამორთული"</string>
     <string name="default_label" msgid="5590025289805630372">"მაღვიძარა"</string>
     <string name="set_alarm" msgid="9148359866152726808">"მაღვიძარას დაყენება"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"ვიბრაცია"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"გამეორება"</string>
     <string name="alert" msgid="6506982899651975645">"მაღვიძარას ზარი"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"მორგებული ზარი"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"ტაიმერის დრო ამოიწურა"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"უხმო"</string>
     <string name="ringtone" msgid="9110746249688559579">"ზარი"</string>
     <string name="time" msgid="8067216534232296518">"დრო"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"ხვალ"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"ჩაჩუმება  <xliff:g id="TIME">%s</xliff:g>-მდე"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"მომავალი მაღვიძარა"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"თქვენი გაცდენილი მაღვიძარა წაიშალა"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"დარჩენილია ერთ წუთზე ნაკლები"</item>
-    <item msgid="83197792732433351">"დარჩენილია <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"დარჩენილია <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"დარჩენილია <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"დარჩენილია ერთ წუთზე ნაკლები"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g><xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g><xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"დარჩენილია <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"დარჩენილია"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"დარჩენილია"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"მაღვიძარა დაყენებულია ამ მომენტიდან 1 წუთზე ნაკლებ დროზე."</item>
     <item msgid="6002066367368421848">"მაღვიძარა დაყენებულია ამ მომენტიდან <xliff:g id="DAYS">%1$s</xliff:g>-ით."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">წუთი</item>
       <item quantity="one">წუთი</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"ხმის თანდათანობით გაზრდა"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"გამორთული"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> წამი"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"წამები"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"სიჩუმე გააქტიურდება:"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> წუთი</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"წინანდელზე დაბრუნება"</string>
     <string name="delete" msgid="5732434972457000541">"წაშლა"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"მაღვიძარას ხმა"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"ჩუმად"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"ჩუმი"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"უცნობი"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"მაღვიძარას ჩაჩუმება ან დახურვა"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (ჩაჩუმებული)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"მაღვიძარა დაყენებულია <xliff:g id="TIME">%s</xliff:g>-ზე. შეეხეთ გასაუქმებლად."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"ზარის ჩატვირთვა…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Sound playback service for timers set in Clock."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"მაღვიძარას დაყენება"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"მაღვიძარა"</string>
     <string name="menu_timer" msgid="6459070074762877114">"ტაიმერი"</string>
     <string name="menu_clock" msgid="5612760670606829805">"საათი"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"სორტირება სახელის მიხედვით"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"არჩეული ქალაქები"</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_start_button" msgid="8373422516681242270">"დაწყება"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"წრე"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"გაზიარება"</string>
     <string name="hours_label" msgid="3393478155635368097">"სთ"</string>
     <string name="minutes_label" msgid="3568098128251438588">"წთ"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"ჩემი დრო არის <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"წრის დრო:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"წრე <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> საათი</item>
       <item quantity="one">1 საათი</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 წუთის დამატება"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 წუთის დამატება"</string>
     <string name="timer_stop" msgid="3361154678667736722">"შეჩერება"</string>
-    <string name="timer_done" msgid="2375990511982914051">"დასრულდა"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"ყველა ტაიმერის შეჩერება"</string>
     <string name="timer_reset" msgid="7848424809190171640">"ჩამოყრა"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"გაუქმება"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"ტაიმერი გაუქმდა"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"დრო ამოიწურა"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ტაიმერის დრო ამოიწურა"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"ტაიმერი"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"მაქსიმუმ 4 ტაიმერი"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"პაუზა"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"ტაიმერებ.ჩამოყრა"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"საკმაოდ სწრაფი ხართ."</item>
     <item msgid="6332879039890727169">"ისიამოვნეთ თქვენი შრომის ნაყოფით."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"ქალაქები"</string>
     <string name="clock_settings" msgid="8317286807280600391">"საათი"</string>
     <string name="clock_style" msgid="2265011060429742344">"სტილი"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"დროისა და თარიღის შეცვლა"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"ანალოგი"</item>
     <item msgid="8483930821046925592">"ციფრული"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> მონიშნულია"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> არ არის მონიშნული"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"მარშალის კუნძულები"</item>
     <item msgid="4196408495909011020">"მიდუეის კუნძული"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"ჯაკარტა"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"მაღვიძარები"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"წამზომის სერვისი შეტყობინებების გასაგზავნად."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"შეჩერდა"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"ამუშავებს მოქმედებებს ტაიმერის შეტყობინებებიდან."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"ამუშავებს მოქმედებებს წამზომის შეტყობინებებიდან."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"დაპაუზებულია"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"დასახურად გადაფურცლეთ მარჯვნივ"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"ჩაჩუმებისათვის გადაფურცლეთ მარცხნივ"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"გადაფურცლეთ მარცხნივ ჩასაჩუმებლად, ან მარჯვნივ გასაუქმებლად"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"ტაიმერები"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"ტაიმერის ზარი"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"ტაიმერი შეჩერდა"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> ტაიმერი შეჩერდა"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"ტაიმერი დაპაუზებულია"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"დაპაუზებულია <xliff:g id="NUMBER">%d</xliff:g> ტაიმერი"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"შეეხეთ, რათა ნახოთ თქვენი ტაიმერები"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ტაიმერი"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"მომდევნო ტაიმერი: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"მაღვიძარები არ არის"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"მაღვიძ. არ არის"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"მომავალი მაღვიძარები არ არის"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"არასწორი დრო <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>-ზე მაღვიძარა არ არის"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"დაგეგმილი მაღვიძარა არ არის"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"ლეიბლი მითითებული არ არის"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"მაღვიძარას არ აქვს ეს ლეიბლი"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"წამზომი უკვე გაშვებულია"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"წამზომი გაშვებული არ არის"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"წამზომის გადაყენება ვერ მოხდება, რადგანაც გაშვებულია"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"წამზომი გაჩერდა"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"წამზომი დაპაუზებულია"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"წამზომის გადაყენება"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"წამზომზე ციკლი აღნიშნულია"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"წამზომი ჩაირთო"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"მაღვიძარა ამ დროს დაგეგმილი არ არის"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g>-ზე მაღვიძარა გაუქმებულია"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"მაღვიძარა დაყენებულია <xliff:g id="ALARM_TIME">%s</xliff:g>-ზე"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"ტაიმერი დაყენებული არ არის"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"ტაიმერი წაშლილია"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"ტაიმერი უკვე გაშვებულია"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"თქვენი მოთხოვნის დასრულება ვერ მოხერხდა, ხელმისაწვდომია რამდენიმე ტაიმერი"</string>
-    <string name="timer_started" msgid="6715582052946641641">"ტაიმერი დაწყებულია"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"ტაიმერები არ არის"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"არსებობს ერთზე მეტი ტაიმერი"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"ტაიმერი ამოიშალა."</string>
     <string name="timer_created" msgid="4381027137335885547">"ტაიმერი შექმნილია"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"ტაიმერის არასწორი ხანგრძლივობა"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"ტაიმერი ჩამოყრილია"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"ტაიმერის ჩამოყრა ვერ მოხერხდება, რადგანაც ის ჯერ კიდევ გაშვებულია. ჩამოსაყრელად შეაჩერეთ ტაიმერი."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"ტაიმერი უკვე შეჩერდა"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"ტაიმერი წაშლილია"</string>
+    <string name="timer_started" msgid="6715582052946641641">"ტაიმერი დაწყებულია"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"ტაიმერის არასწორი ხანგრძლივობა"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"ქალაქი არჩეული არ არის"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"მითითებული ქალაქი ხელმისაწვდომი არ არის"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"ეს ქალაქი უკვე დამატებულია"</string>
diff --git a/res/values-kk-rKZ/array.xml b/res/values-kk-rKZ/array.xml
index 97be64e..360157c 100644
--- a/res/values-kk-rKZ/array.xml
+++ b/res/values-kk-rKZ/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"Ф<xliff:g id="SEPARATOR">=</xliff:g>Форталеза"</item>
     <item msgid="5801558418916235541">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гранд-Тёрк"</item>
     <item msgid="2103759276235503048">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гренада"</item>
-    <item msgid="1490069759176391533">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемала"</item>
+    <item msgid="6216160110733510854">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемала қаласы"</item>
     <item msgid="525959305652046261">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гайана"</item>
     <item msgid="7565596629973190931">"Г<xliff:g id="SEPARATOR">=</xliff:g>Галифакс"</item>
     <item msgid="3811169155065582644">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гавана"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"Т<xliff:g id="SEPARATOR">=</xliff:g>Торонто"</item>
     <item msgid="1506838283840737263">"В<xliff:g id="SEPARATOR">=</xliff:g>Ванкувер"</item>
     <item msgid="8935386104773857399">"В<xliff:g id="SEPARATOR">=</xliff:g>Виннипег"</item>
-    <item msgid="1132634022412399582">"О<xliff:g id="SEPARATOR">=</xliff:g>Оңтүстік Полюс"</item>
+    <item msgid="498429228419399474">"О<xliff:g id="SEPARATOR">=</xliff:g>Оңтүстік Полюс<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"Л<xliff:g id="SEPARATOR">=</xliff:g>Лонгйир"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Алматы"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Амман"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"Г<xliff:g id="SEPARATOR">=</xliff:g>Газа"</item>
     <item msgid="2359068282340162319">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хеброн"</item>
     <item msgid="6223396610551759129">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хошимин"</item>
-    <item msgid="4731022818651322736">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гонконг"</item>
+    <item msgid="3439764751788710130">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гонконг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"Ы<xliff:g id="SEPARATOR">=</xliff:g>Ыстамбұл"</item>
     <item msgid="758800913783999425">"Д<xliff:g id="SEPARATOR">=</xliff:g>Джакарта"</item>
     <item msgid="8956406398692698126">"И<xliff:g id="SEPARATOR">=</xliff:g>Иерусалим"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"М<xliff:g id="SEPARATOR">=</xliff:g>Манила"</item>
     <item msgid="6033964325069060422">"М<xliff:g id="SEPARATOR">=</xliff:g>Мускат"</item>
     <item msgid="6077458941399984780">"П<xliff:g id="SEPARATOR">=</xliff:g>Пномпень"</item>
-    <item msgid="935474308903572975">"П<xliff:g id="SEPARATOR">=</xliff:g>Пхеньян"</item>
+    <item msgid="1245515372520913197">"П<xliff:g id="SEPARATOR">=</xliff:g>Пхеньян<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"К<xliff:g id="SEPARATOR">=</xliff:g>Катар"</item>
     <item msgid="1667243110545095146">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рангун"</item>
     <item msgid="4460370766685855731">"Э<xliff:g id="SEPARATOR">=</xliff:g>Эр-Рияд"</item>
     <item msgid="4229224905931739201">"С<xliff:g id="SEPARATOR">=</xliff:g>Сайгон"</item>
     <item msgid="8705359848250215620">"С<xliff:g id="SEPARATOR">=</xliff:g>Сеул"</item>
-    <item msgid="583367295371395814">"Ш<xliff:g id="SEPARATOR">=</xliff:g>Шанхай"</item>
+    <item msgid="3814881931186962624">"Ш<xliff:g id="SEPARATOR">=</xliff:g>Шанхай<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"С<xliff:g id="SEPARATOR">=</xliff:g>Сингапур"</item>
-    <item msgid="1972491729911039207">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тайбэй"</item>
+    <item msgid="8982451946156859368">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тайбэй<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тегеран"</item>
     <item msgid="8629402941285674273">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тель-Авив"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Токио"</item>
+    <item msgid="76330681636547168">"Т<xliff:g id="SEPARATOR">=</xliff:g>Токио<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"У<xliff:g id="SEPARATOR">=</xliff:g>Улан-Батор"</item>
     <item msgid="2028626988021468640">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бермуда"</item>
     <item msgid="4527109966513690429">"К<xliff:g id="SEPARATOR">=</xliff:g>Канар"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рено"</item>
     <item msgid="9155068631060038769">"Б<xliff:g id="SEPARATOR">=</xliff:g>Блэк-Рок-Сити"</item>
     <item msgid="8498761319928979900">"Д<xliff:g id="SEPARATOR">=</xliff:g>Доха"</item>
-    <item msgid="8307897251088048641">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бейжің"</item>
+    <item msgid="5327010922199714808">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бейжің<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"М<xliff:g id="SEPARATOR">=</xliff:g>Мумбаи"</item>
     <item msgid="6668274273067049125">"Д<xliff:g id="SEPARATOR">=</xliff:g>Дели"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Осака"</item>
+    <item msgid="7199039603593847813">"О<xliff:g id="SEPARATOR">=</xliff:g>Осака<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"Л<xliff:g id="SEPARATOR">=</xliff:g>Лахор"</item>
     <item msgid="1448378291805481500">"С<xliff:g id="SEPARATOR">=</xliff:g>Сана"</item>
     <item msgid="5233119846682408301">"Б<xliff:g id="SEPARATOR">=</xliff:g>Барселона"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"К<xliff:g id="SEPARATOR">=</xliff:g>Кембридж"</item>
     <item msgid="759409010285366934">"К<xliff:g id="SEPARATOR">=</xliff:g>Киркленд"</item>
     <item msgid="6308007059287569663">"М<xliff:g id="SEPARATOR">=</xliff:g>Мэдисон"</item>
-    <item msgid="6971636434858330021">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гуанчжоу"</item>
+    <item msgid="2077617905582224600">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гуанчжоу<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хайдарабад"</item>
     <item msgid="3032295682584784261">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рестон"</item>
     <item msgid="7722837296297332268">"Б<xliff:g id="SEPARATOR">=</xliff:g>Белу-Оризонти"</item>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 3964d48..aca0664 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Сағатты көрсету"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Сағатты жасыру"</string>
     <string name="label" msgid="162189613902857319">"Белгі"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Қосулы"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Өшірулі"</string>
     <string name="default_label" msgid="5590025289805630372">"Дабыл"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Дабыл орнату"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Діріл"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Қайталау"</string>
     <string name="alert" msgid="6506982899651975645">"Дабылдың қоңырау әуені"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Реттелетін қоңырау әуені"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Таймер мерзімі бітті"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Үнсіз"</string>
     <string name="ringtone" msgid="9110746249688559579">"Қоңырау әуені"</string>
     <string name="time" msgid="8067216534232296518">"Уақыт"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Ертең"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> дейін кейінге қалдыру"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Келе жатқан дабыл"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Өткізіп алған дабыл жойылды"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Бір минуттан азырақ қалды"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> қалды"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> қалды"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> қалды"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Бір минуттан азырақ қалды"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> қалды"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"қалды"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"қалды"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Дабыл қазірден бастап 1 минуттан аз уақыт өткен соң беріледі."</item>
     <item msgid="6002066367368421848">"Дабыл қазірден бастап <xliff:g id="DAYS">%1$s</xliff:g> өткен соң беріледі."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">минуттар</item>
       <item quantity="one">минут</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Дыбыс деңгейін біртіндеп арттыру"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Өшірулі"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> секунд"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"секундтар"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Дыбысын автоматты өшіру"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> минут</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Қайтару"</string>
     <string name="delete" msgid="5732434972457000541">"Жою"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Дабылдың дыбыс деңгейі"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Үнсіз"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Үнсіз"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Белгісіз"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Дабылды кейінге қалдыру немесе одан бас тарту."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (кейінге қалдырылған)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Дабыл <xliff:g id="TIME">%s</xliff:g> уақытына орнатылған. Бас тарту үшін түртіңіз."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Қоңырау әуені жүктелуде…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"«Сағат» қолданбасында орнатылған таймерлер үшін дыбысты ойнату қызметі."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Дабыл орнату"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Дабыл"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Таймер"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Cағат"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Атауы бойынша сұрыптау"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Таңдалған қалалар"</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_start_button" msgid="8373422516681242270">"Бастау"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Айналым"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Бөлісу"</string>
     <string name="hours_label" msgid="3393478155635368097">"с"</string>
     <string name="minutes_label" msgid="3568098128251438588">"м"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Менің уақытым – <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Аралық уақыттары:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>-айналым"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"№ <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"№ <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> сағат</item>
       <item quantity="one">1 сағат</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 минут қосу"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 мин. қосу"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Тоқтату"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Дайын"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Барлық таймерлерді тоқтату"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Қалпына келтіру"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Бас тарту"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Таймерден бас тартылды"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Уақыт аяқталды"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> таймердің мерзімі өтті"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Таймер"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Ең көбі 4 таймер"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Кідірту"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Барлық таймерлерді ысыру"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Сіз өте жылдамсыз."</item>
     <item msgid="6332879039890727169">"Еңбегіңіздің жемістеріне қуаныңыз."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Қалалар"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Cағат"</string>
     <string name="clock_style" msgid="2265011060429742344">"Стиль"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Күнді және уақытты өзгерту"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Аналогтық"</item>
     <item msgid="8483930821046925592">"Сандық"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> құсбелгі қойылды"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> құсбелгі алынды"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Маршалл аралдары"</item>
     <item msgid="4196408495909011020">"Мидуэй аралы"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Джакарта"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Дабылдар"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Хабарландыруды орындайтын секундомер қызметі."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Тоқтатылды"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Таймер хабарландыруларынан әрекеттерді өңдейді."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Секундөлшегіш хабарландыруларынан әрекеттерді өңдейді."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Кідіртілген"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Қабылдамау үшін оңға жанаңыз"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Кейінге қалдыру үшін солға жанаңыз"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Кідірту үшін солға, ал өшіру үшін оңға сырғытыңыз"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Таймерлер"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Таймердің әуені"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Таймер тоқтатылды"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> таймер тоқтатылды"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Таймер кідіртілді"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> таймер кідіртілді"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Таймерлерді көру үшін түртіңіз"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> таймер"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Келесі таймер: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Дабылдар жоқ"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Дабылдар орнатылмаған"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"КЕЛЕ ЖАТҚАН ДАБЫЛДАР ЖОҚ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"с:мм a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"к:мм"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, сағ: мм а"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, к: мм"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Жарамсыз уақыт: <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> уақытында дабыл жоқ"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Жоспарланған дабылдар жоқ"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Ешбір белгі көрсетілмеген"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Ешбір дабылда белгі жоқ"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Секундомер істеп тұр"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Секундомер істеп тұрған жоқ"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Секунд өлшегішті ысыру мүмкін емес, өйткені ол іске қосылған"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Секунд өлшегіш тоқтатылды"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Секундомер кідіртілді"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Секунд өлшегішті ысыру"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Секунд өлшегіш келесі аралыққа өтті"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Секунд өлшегіш іске қосылды"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Осы уақытқа ешқандай дабыл жоспарланбаған"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> дабылы өшірілді"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Дабыл <xliff:g id="ALARM_TIME">%s</xliff:g> уақытына орнатылған"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Таймер орнатылмаған"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Таймер жойылды"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Таймер істеп тұр"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Сұрауды аяқтау мүмкін емес, бірнеше таймер тұр"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Таймер қосылды"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Ешбір таймер жоқ"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Бірден артық таймер бар"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Таймер жойылды."</string>
     <string name="timer_created" msgid="4381027137335885547">"Таймер жасалды"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Таймер ұзақтығы дұрыс емес"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Таймер ысырылды"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Таймерді ысыру мүмкін емес, өйткені ол әлі жұмыс істеп тұр. Ысыру үшін таймерді тоқтатыңыз."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Таймер тоқтап қалған"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Таймер жойылды"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Таймер қосылды"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Таймер ұзақтығы дұрыс емес"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Қала таңдалмаған"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Сіз көрсеткен қала қолжетімді емес"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Бұл қала бұрыннан қосылған"</string>
diff --git a/res/values-km-rKH/array.xml b/res/values-km-rKH/array.xml
index c05b796..1d8bd86 100644
--- a/res/values-km-rKH/array.xml
+++ b/res/values-km-rKH/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហ្វតាល់លេសា"</item>
     <item msgid="5801558418916235541">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហ្គ្រេនទួក"</item>
     <item msgid="2103759276235503048">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហ្គ្រើណាដ"</item>
-    <item msgid="1490069759176391533">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហ្គាតេម៉ាឡា"</item>
+    <item msgid="6216160110733510854">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហ្គាតេម៉ាឡា"</item>
     <item msgid="525959305652046261">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហ្គុយ៉ាណា"</item>
     <item msgid="7565596629973190931">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហាលីហ្វាក់"</item>
     <item msgid="3811169155065582644">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហាវ៉ាណា"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ត<xliff:g id="SEPARATOR">=</xliff:g>តូរ៉ន់តូ"</item>
     <item msgid="1506838283840737263">"វ<xliff:g id="SEPARATOR">=</xliff:g>វ៉ានខូវើ"</item>
     <item msgid="8935386104773857399">"វ<xliff:g id="SEPARATOR">=</xliff:g>វីនីផេក"</item>
-    <item msgid="1132634022412399582">"ប<xliff:g id="SEPARATOR">=</xliff:g>ប៉ូលខាងត្បូង"</item>
+    <item msgid="498429228419399474">"ប<xliff:g id="SEPARATOR">=</xliff:g>ប៉ូលខាងត្បូង<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ឡ<xliff:g id="SEPARATOR">=</xliff:g>ឡុងយាប្យេន"</item>
     <item msgid="3784788073896028355">"អ<xliff:g id="SEPARATOR">=</xliff:g>អាល់ម៉ាទី"</item>
     <item msgid="7895695236056852523">"អ<xliff:g id="SEPARATOR">=</xliff:g>អាម៉ាន"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ក<xliff:g id="SEPARATOR">=</xliff:g>កាហ្សា"</item>
     <item msgid="2359068282340162319">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហេប្រន"</item>
     <item msgid="6223396610551759129">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហូជីមីញ"</item>
-    <item msgid="4731022818651322736">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហុងកុង"</item>
+    <item msgid="3439764751788710130">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហុងកុង<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"អ<xliff:g id="SEPARATOR">=</xliff:g>អ៊ីស្តង់ប៊ុល"</item>
     <item msgid="758800913783999425">"ហ<xliff:g id="SEPARATOR">=</xliff:g>ហ្សាការតា"</item>
     <item msgid="8956406398692698126">"យ<xliff:g id="SEPARATOR">=</xliff:g>យេរូសាឡឹម"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"ម<xliff:g id="SEPARATOR">=</xliff:g>ម៉ានីល"</item>
     <item msgid="6033964325069060422">"ម<xliff:g id="SEPARATOR">=</xliff:g>ម៉ាស្កាត"</item>
     <item msgid="6077458941399984780">"ភ<xliff:g id="SEPARATOR">=</xliff:g>ភ្នំពេញ"</item>
-    <item msgid="935474308903572975">"ព<xliff:g id="SEPARATOR">=</xliff:g>ព្យុងយ៉ាង"</item>
+    <item msgid="1245515372520913197">"ព<xliff:g id="SEPARATOR">=</xliff:g>ព្យុងយ៉ាង<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"ក<xliff:g id="SEPARATOR">=</xliff:g>កាតា"</item>
     <item msgid="1667243110545095146">"រ<xliff:g id="SEPARATOR">=</xliff:g>រ៉ង់ហ្គូន"</item>
     <item msgid="4460370766685855731">"រ<xliff:g id="SEPARATOR">=</xliff:g>រីយ៉ាដ"</item>
     <item msgid="4229224905931739201">"ស<xliff:g id="SEPARATOR">=</xliff:g>សៃហ្គន"</item>
     <item msgid="8705359848250215620">"ស<xliff:g id="SEPARATOR">=</xliff:g>សេអ៊ូល"</item>
-    <item msgid="583367295371395814">"ស<xliff:g id="SEPARATOR">=</xliff:g>សៀងហៃ"</item>
+    <item msgid="3814881931186962624">"ស<xliff:g id="SEPARATOR">=</xliff:g>សៀងហៃ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"ស<xliff:g id="SEPARATOR">=</xliff:g>សិង្ហបុរី"</item>
-    <item msgid="1972491729911039207">"ត<xliff:g id="SEPARATOR">=</xliff:g>តៃប៉ិ"</item>
+    <item msgid="8982451946156859368">"ត<xliff:g id="SEPARATOR">=</xliff:g>តៃប៉ិ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"ត<xliff:g id="SEPARATOR">=</xliff:g>តេហេរ៉ង់"</item>
     <item msgid="8629402941285674273">"ត<xliff:g id="SEPARATOR">=</xliff:g>តែលអាវី"</item>
-    <item msgid="8499164674454654525">"ត<xliff:g id="SEPARATOR">=</xliff:g>តូក្យូ"</item>
+    <item msgid="76330681636547168">"ត<xliff:g id="SEPARATOR">=</xliff:g>តូក្យូ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"អ<xliff:g id="SEPARATOR">=</xliff:g>អ៊ូឡង់បាទ័រ"</item>
     <item msgid="2028626988021468640">"ប<xliff:g id="SEPARATOR">=</xliff:g>ប៊ឺមុយដា"</item>
     <item msgid="4527109966513690429">"ក<xliff:g id="SEPARATOR">=</xliff:g>កាណារី"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"រ<xliff:g id="SEPARATOR">=</xliff:g>រីណូ"</item>
     <item msgid="9155068631060038769">"ទ<xliff:g id="SEPARATOR">=</xliff:g>ទីក្រុងប្លេករ៉ុក"</item>
     <item msgid="8498761319928979900">"ដ<xliff:g id="SEPARATOR">=</xliff:g>ដូហា"</item>
-    <item msgid="8307897251088048641">"ប<xliff:g id="SEPARATOR">=</xliff:g>ប៉េកាំង"</item>
+    <item msgid="5327010922199714808">"ប<xliff:g id="SEPARATOR">=</xliff:g>ប៉េកាំង<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"ម<xliff:g id="SEPARATOR">=</xliff:g>ម៉ុមបៃ"</item>
     <item msgid="6668274273067049125">"ដ<xliff:g id="SEPARATOR">=</xliff:g>ដេលី"</item>
-    <item msgid="2933410189478233292">"អ<xliff:g id="SEPARATOR">=</xliff:g>អូសាកា"</item>
+    <item msgid="7199039603593847813">"អ<xliff:g id="SEPARATOR">=</xliff:g>អូសាកា<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ឡ<xliff:g id="SEPARATOR">=</xliff:g>ឡាហ័រ"</item>
     <item msgid="1448378291805481500">"ស<xliff:g id="SEPARATOR">=</xliff:g>សាណាអា"</item>
     <item msgid="5233119846682408301">"ប<xliff:g id="SEPARATOR">=</xliff:g>បាសេឡូណា"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"ខ<xliff:g id="SEPARATOR">=</xliff:g>ខេមប្រីដ"</item>
     <item msgid="759409010285366934">"ឃ<xliff:g id="SEPARATOR">=</xliff:g>ឃើកឡែន"</item>
     <item msgid="6308007059287569663">"ម<xliff:g id="SEPARATOR">=</xliff:g>ម៉ាឌីសុន"</item>
-    <item msgid="6971636434858330021">"ក<xliff:g id="SEPARATOR">=</xliff:g>ក្វាងចូវ"</item>
+    <item msgid="2077617905582224600">"ក<xliff:g id="SEPARATOR">=</xliff:g>ក្វាងចូវ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"អ<xliff:g id="SEPARATOR">=</xliff:g>អ៊ីឌើរ៉ាបាដ"</item>
     <item msgid="3032295682584784261">"រ<xliff:g id="SEPARATOR">=</xliff:g>រីស្តូន"</item>
     <item msgid="7722837296297332268">"ប<xliff:g id="SEPARATOR">=</xliff:g>បេឡូរីហ្សូនធ៍"</item>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 1434d7d..6e162a2 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"បង្ហាញ​នាឡិកា"</string>
     <string name="hide_clock" msgid="3217727306480505694">"លាក់​នាឡិកា"</string>
     <string name="label" msgid="162189613902857319">"ស្លាក"</string>
+    <string name="on_switch" msgid="2297966258029227449">"បើក"</string>
+    <string name="off_switch" msgid="3381070073851148013">"បិទ"</string>
     <string name="default_label" msgid="5590025289805630372">"សំឡេង​រោទ៍"</string>
     <string name="set_alarm" msgid="9148359866152726808">"កំណត់​សំឡេង​រោទ៍"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"ញ័រ"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"ធ្វើ​ម្ដងទៀត"</string>
     <string name="alert" msgid="6506982899651975645">"សំឡេង​រោទ៍"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"សំឡេងរោទិ៍ផ្ទាល់ខ្លួន"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"កម្មវិធីកំណត់ពេលបានផុតកំណត់"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"ស្ងាត់"</string>
     <string name="ringtone" msgid="9110746249688559579">"សំឡេង​រោទ៍"</string>
     <string name="time" msgid="8067216534232296518">"ពេលវេលា"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"ថ្ងៃស្អែក"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"ផ្អាក​រហូតដល់ <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"ការ​ជូនដំណឹង​ដែល​នឹង​កើត​ឡើង"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"ការ​ខកខាន​ជូនដំណឹង​របស់​​អ្នក​ត្រូវ​បាន​លុប"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"នៅសល់​តិច​ជាង​មួយ​នាទី"</item>
-    <item msgid="83197792732433351">"នៅសល់ <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"នៅសល់ <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"នៅសល់ <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"នៅសល់​តិច​ជាង​មួយ​នាទី"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"នៅសល់ <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"នៅសល់"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"នៅសល់"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"បាន​កំណត់​សំឡេង​រោទ៍​តិច​ជាង​១​នាទី គិត​ចាប់ពី​ឥឡូវ។"</item>
     <item msgid="6002066367368421848">"បាន​កំណត់​សំឡេង​រោទ៍​ក្នុង​រយៈពេល <xliff:g id="DAYS">%1$s</xliff:g> ទៀត។"</item>
@@ -101,6 +104,10 @@
       <item quantity="other">នាទី</item>
       <item quantity="one">នាទី</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"បង្កើនសំឡេងសន្សឹមៗ"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"បិទ"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> វិនាទី"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"វិនាទី"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"បិទ​សំឡេង​បន្ទាប់ពី"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> នាទី</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"ត្រឡប់​ទៅ​ដើម"</string>
     <string name="delete" msgid="5732434972457000541">"លុប"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"កម្រិត​សំឡេង​រោទ៍"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"ស្ងាត់"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"ស្ងាត់"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"មិនស្គាល់"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"ផ្អាក ឬ​បោះបង់​សំឡេង​រោទ៍។"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (បាន​ផ្អាក)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"បាន​កំណត់​សំឡេង​រោទ៍​ក្នុង​រយៈពេល <xliff:g id="TIME">%s</xliff:g> ទៀត។  ប៉ះ​ដើម្បី​បោះបង់។"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"កំពុង​ផ្ទុក​សំឡេង​រោទ៍…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"បាន​កំណត់​សេវាកម្ម​បន្លឺ​សំឡេង​រោទ៍​នៅ​ក្នុង​នាឡិកា។"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"កំណត់​សំឡេង​រោទ៍"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"ការ​ជូនដំណឹង"</string>
     <string name="menu_timer" msgid="6459070074762877114">"កម្មវិធី​កំណត់​ពេល"</string>
     <string name="menu_clock" msgid="5612760670606829805">"នាឡិកា"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"តម្រៀប​តាម​ឈ្មោះ"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"ទីក្រុង​បាន​ជ្រើស"</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_start_button" msgid="8373422516681242270">"ចាប់ផ្ដើម​"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"ជាន់​គ្នា"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"ចែករំលែក​"</string>
     <string name="hours_label" msgid="3393478155635368097">"ម៉ោង"</string>
     <string name="minutes_label" msgid="3568098128251438588">"នាទី"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"ពេលវេលា​របស់​ខ្ញុំ​គឺ <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"រយៈពេល​ជាន់​គ្នា៖"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"ជាន់​គ្នា <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ម៉ោង</item>
       <item quantity="one">1 ម៉ោង</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"បន្ថែម ១ នាទី"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"បន្ថែម ១​នាទី"</string>
     <string name="timer_stop" msgid="3361154678667736722">"ឈប់"</string>
-    <string name="timer_done" msgid="2375990511982914051">"រួចរាល់"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"បញ្ឈប់កម្មវិធីកំណត់ពេលទាំងអស់"</string>
     <string name="timer_reset" msgid="7848424809190171640">"កំណត់​ឡើងវិញ"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"បោះ​បង់​"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"លុបចោល​​​កម្មវិធី​កំណត់ពេលវេលា"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"ដល់​ម៉ោង"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"កម្មវិធីកំណត់ពេល <xliff:g id="NUM_TIMERS">%d</xliff:g> បានផុតកំណត់"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"កម្មវិធី​កំណត់​ពេល"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"ច្រើន​បំផុត​កម្មវិធី​កំណត់​ម៉ោង ៤"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"ផ្អាក"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"កំណត់ការកំណត់ពេលទាំងអស់ឡើងវិញ"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"អ្នក​កំពុង​ស្ថិត​ក្នុង​ល្បឿន​ដ៏​អស្ចារ្យ។"</item>
     <item msgid="6332879039890727169">"រីករាយ​ជាមួយ​លទ្ធផល​ការងារ​របស់​អ្នក។"</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"ទីក្រុង"</string>
     <string name="clock_settings" msgid="8317286807280600391">"នាឡិកា"</string>
     <string name="clock_style" msgid="2265011060429742344">"រចនាប័ទ្ម"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"ប្តូរកាលបរិច្ឆេទ និងម៉ោង"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"អាណាឡូក"</item>
     <item msgid="8483930821046925592">"ឌីជីថល"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":០០"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":៣០"</string>
+    <string name="city_checked" msgid="616847871968019">"បានធីក <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"បានដោះការធីក <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"កោះម៉ាសាល"</item>
     <item msgid="4196408495909011020">"កោះ​មីតវ៉េ"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"ហ្សាការតា"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"សំឡេង​រោទ៍"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"សេវាកម្ម​នាឡិកា​បញ្ឈប់​ដើម្បី​ដំណើរការ​ការ​ជូនដំណឹង។"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"បាន​ឈប់"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"ដំណើរការសកម្មភាពពីការជូនដំណឹងកម្មវិធីកំណត់ពេល"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"ដំណើរការសកម្មភាពពីការជូនដំណឹងម៉ោងបញ្ឈប់"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"បានផ្អាក"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"អូស​ទៅ​ស្ដាំ​ដើម្បី​បដិសេធ"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"អូស​ទៅ​ឆ្វេង​ដើម្បី​ផ្អាក"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"អូសទៅឆ្វេងដើម្បីផ្អាក ឬទៅស្តាំដើម្បីបញ្ឈប់"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"កម្មវិធីកំណត់ពេល"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"សំឡេងរោទិ៍កម្មវិធីកំណត់ពេល"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"កម្មវិធី​កំណត់​ពេល​បាន​ឈប់"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> កម្មវិធី​កំណត់​ពេល​បាន​ឈប់"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"បានផ្អាកកម្មវិធីកំណត់ពេល"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"បានផ្អាកកម្មវិធីកំណត់ពេល <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"ប៉ះ​ដើម្បី​មើល​កម្មវិធី​កំណត់​ពេល​របស់​អ្នក"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> កម្មវិធី​កំណត់​ពេល"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"កម្មវិធី​កំណត់​ពេល​បន្ទាប់៖ <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"គ្មាន​ការ​ជូនដំណឹង"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"មិនមានសំឡេងរោទ៍"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"គ្មាន​ការ​ជូនដំណឹង​ដែល​នឹង​កើត​ឡើង"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"ម៉ោងមិនត្រឹមត្រូវ <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"គ្មានម៉ោងរោទិ៍នៅ <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"គ្មានម៉ោងរោទិ៍បានកំណត់ទេ"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"គ្មានការបញ្ជាក់ស្លាកទេ"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"គ្មានម៉ោងរោទិ៍ដែលមានស្លាកទេ"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"នាឡិកាបញ្ឈប់កំពុងដំណើរហើយ"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"នាឡិកាបញ្ឈប់មិនដំណើរការទេ"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"មិនអាចកំណត់នាឡិកាបញ្ឈប់ឡើងវិញបានទេព្រោះវាកំពុងដំណើរការ"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"បានបញ្ឈប់នាឡិកាបញ្ឈប់"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"បានផ្អាកនាឡិកាបញ្ឈប់"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"កំណត់នាឡិកាបញ្ឈប់ឡើងវិញ"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"បានកំណត់ជុំនាឡិកាបញ្ឈប់"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"បានចាប់ផ្តើមនាឡិកាបញ្ឈប់"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"គ្មានការកំណត់ម៉ោងរោទិ៍សម្រាប់ពេលនេះទេ"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"បានបដិសេធម៉ោងរោទិ៍ <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"ម៉ោងរោទ៍ត្រូវបានកំណត់នៅ <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"គ្មានការកំណត់កម្មវិធីកំណត់ពេលទេ"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"បានលុបកម្មវិធីកំណត់ពេល"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"កម្មវិធីកំណត់ពេលកំពុងដំណើរការហើយ"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"មិនអាចបញ្ចប់សំណើរបស់អ្នកបានទេ ព្រោះមានកម្មវិធីកំណត់ម៉ោងច្រើន"</string>
-    <string name="timer_started" msgid="6715582052946641641">"​​ចាប់ផ្ដើមកម្មវិធីកំណត់ពេល"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"គ្មានកម្មវិធីកំណត់ពេលទេ"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"មានកម្មវិធីកំណត់ពេលច្រើនជាងមួយ"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"កម្មវិធីកំណត់ពេលត្រូវបានយកចេញ"</string>
     <string name="timer_created" msgid="4381027137335885547">"បានបង្កើតឧបករណ៍កំណត់ពេល"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"រយៈពេលសម្រាប់ឧបករណ៍កំណត់ពេលមិនត្រឹមត្រូវ"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"កំណត់កម្មវិធីកំណត់ពេលឡើងវិញ"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"មិនអាចកំណត់កម្មវិធីកំណត់ពេលឡើងវិញបានទេ វាកំពុងដំណើរការនៅឡើយ។ សូមបញ្ឈប់កម្មវិធីកំណត់ពេលដើម្បីកំណត់ឡើងវិញ។"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"កម្មវិធីកំណត់ពេលបានឈប់ហើយ"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"បានលុបកម្មវិធីកំណត់ពេល"</string>
+    <string name="timer_started" msgid="6715582052946641641">"​​ចាប់ផ្ដើមកម្មវិធីកំណត់ពេល"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"រយៈពេលសម្រាប់ឧបករណ៍កំណត់ពេលមិនត្រឹមត្រូវ"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"មិនបានជ្រើសទីក្រុងទេ"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"ទីក្រុងដែលអ្នកបានបញ្ជាក់មិនមានទេ"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"បានបន្ថែមទីក្រុងនោះរួចហើយ"</string>
diff --git a/res/values-kn-rIN/array.xml b/res/values-kn-rIN/array.xml
index 0497892..f3fb828 100644
--- a/res/values-kn-rIN/array.xml
+++ b/res/values-kn-rIN/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>ಫೋರ್ಟಲೀಜಾ"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>ಗ್ರ್ಯಾಂಡ್ ಟರ್ಕ್"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>ಗ್ರೆನಡಾ"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>ಗ್ವಾಟೆಮಾಲಾ"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>ಗ್ವಾಟೆಮಾಲಾ ನಗರ"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>ಗಯಾನ"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>ಹ್ಯಾಲಿಫ್ಯಾಕ್ಸ್"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>ಹವಾನಾ"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>ಟೊರೊಂಟೊ"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>ವ್ಯಾಂಕೋವರ್"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>ವಿನ್ನಿಪೆಗ್"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>ದಕ್ಷಿಣ ಧ್ರುವ"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>ದಕ್ಷಿಣ ಧ್ರುವ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>ಲಾಂಗ್ಇಯರ್‌ಬೈನ್"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>ಅಲ್ಮಾಟಿ"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>ಅಮ್ಮಾನ್"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>ಗಾಜಾ"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>ಹೆಬ್ರಾನ್"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>ಹೊ ಚಿ ಮಿನ್ಹ್"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>ಹಾಂಗ್ ಕಾಂಗ್"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>ಹಾಂಗ್ ಕಾಂಗ್<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>ಇಸ್ತಾನ್‌ಬುಲ್"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>ಜಕಾರ್ತಾ"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>ಜೆರುಸಲೆಮ್"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>ಮನಿಲಾ"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>ಮಸ್ಕತ್"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>ನೋಮ್ ಪೆನ್"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>ಪೋಂಗ್‌ಯಾಂಗ್"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>ಪೋಂಗ್‌ಯಾಂಗ್<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>ಕತಾರ್"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>ರಂಗೂನ್"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>ರಿಯಾದ್"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>ಸೈಗಾನ್"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>ಸಿಯೋಲ್"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>ಶಾಂಘೈ"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>ಶಾಂಘೈ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>ಸಿಂಗಪುರ್"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>ಟೈಪೆ"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>ಟೈಪೆ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>ತೆಹ್ರಾನ್"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>ಟೆಲ್ ಅವಿವ್"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>ಟೋಕಿಯೊ"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>ಟೋಕಿಯೊ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>ಉಲಾನ್‌ಬಾತರ್"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>ಬರ್ಮುಡಾ"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>ಕ್ಯಾನರಿ"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>ರೆನೋ"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>ಬ್ಲಾಕ್ ರಾಕ್ ಸಿಟಿ"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>ದೋಹಾ"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>ಬೀಜಿಂಗ್"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>ಬೀಜಿಂಗ್<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>ಮುಂಬೈ"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>ದೆಹಲಿ"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>ಒಸಾಕಾ"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>ಒಸಾಕಾ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>ಲಾಹೋರ್"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>ಸನಾ"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>ಬಾರ್ಸಿಲೋನಾ"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>ಕೇಂಬ್ರಿಡ್ಜ್"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>ಕಿರ್ಕ್‌ಲ್ಯಾಂಡ್"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>ಮ್ಯಾಡಿಸನ್"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>ಗುವಾಂಗ್ಝೌ"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>ಗುವಾಂಗ್ಝೌ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>ಹೈದರಾಬಾದ್"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>ರೆಸ್ಟಾನ್"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>ಬೆಲೊ ಹೊರಿಜೊಂಟೆ"</item>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index a3d1bc2..065d484 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"ಗಡಿಯಾರ ತೋರಿಸು"</string>
     <string name="hide_clock" msgid="3217727306480505694">"ಗಡಿಯಾರವನ್ನು ಮರೆಮಾಡಿ"</string>
     <string name="label" msgid="162189613902857319">"ಲೇಬಲ್"</string>
+    <string name="on_switch" msgid="2297966258029227449">"ಆನ್"</string>
+    <string name="off_switch" msgid="3381070073851148013">"ಆಫ್"</string>
     <string name="default_label" msgid="5590025289805630372">"ಅಲಾರಮ್"</string>
     <string name="set_alarm" msgid="9148359866152726808">"ಅಲಾರಮ್ ಹೊಂದಿಸಿ"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"ವೈಬ್ರೇಟ್‌‌"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"ಪುನರಾವರ್ತನೆ"</string>
     <string name="alert" msgid="6506982899651975645">"ಅಲಾರಂ ರಿಂಗ್‌ಟೋನ್"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"ಕಸ್ಟಮ್ ರಿಂಗ್‌ಟೋನ್"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"ಟೈಮರ್ ಅವಧಿ ಮೀರಿದೆ"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"ನಿಶ್ಯಬ್ಧ"</string>
     <string name="ringtone" msgid="9110746249688559579">"ರಿಂಗ್‌ಟೋನ್‌"</string>
     <string name="time" msgid="8067216534232296518">"ಸಮಯ"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"ನಾಳೆ"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> ವರೆಗೆ ಸ್ನೂಜಿಂಗ್ ಆಗುತ್ತದೆ"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"ಮುಂಬರುವ ಅಲಾರಂ"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"ನಿಮ್ಮ ತಪ್ಪಿದ ಅಲಾರಮ್ ಅನ್ನು ಅಳಿಸಲಾಗಿದೆ"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"ಒಂದಕ್ಕಿಂತ ಕಡಿಮೆ ನಿಮಿಷ ಬಾಕಿಯಿದೆ."</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> ಉಳಿದಿದೆ"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> ಉಳಿದಿದೆ"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ಉಳಿದಿದೆ"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"ಒಂದು ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ ಉಳಿದಿದೆ"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ಉಳಿದಿದೆ"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"ಉಳಿದಿದೆ"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"ಉಳಿದಿದೆ"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"ಈಗಿನಿಂದ 1 ನಿಮಿಷಕ್ಕೂ ಕಡಿಮೆ ಅವಧಿಗೆ ಅಲಾರಂ ಹೊಂದಿಸಲಾಗಿದೆ."</item>
     <item msgid="6002066367368421848">"ಈಗಿನಿಂದ <xliff:g id="DAYS">%1$s</xliff:g> ಅಲಾರಂ ಹೊಂದಿಸಲಾಗಿದೆ."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">ನಿಮಿಷಗಳು</item>
       <item quantity="other">ನಿಮಿಷಗಳು</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"ಕ್ರಮೇಣವಾಗಿ ವಾಲ್ಯೂಮ್ ಹೆಚ್ಚಿಸಿ"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"ಆಫ್"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> ಸೆಕೆಂಡುಗಳು"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"ಸೆಕೆಂಡುಗಳು"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"ಇಷ್ಟೊತ್ತಿನ ಮೇಲೆ ಮೌನವಾಗು"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> ನಿಮಿಷಗಳು</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"ತಿರುಗಿಸು"</string>
     <string name="delete" msgid="5732434972457000541">"ಅಳಿಸು"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"ಅಲಾರಂ ವಾಲ್ಯೂಮ್"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"ಶಾಂತ"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"ನಿಶ್ಯಬ್ಧ"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"ಅಪರಿಚಿತ"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"ಅಲಾರಂ ಸ್ನೂಜ್ ಮಾಡು ಅಥವಾ ವಜಾಗೊಳಿಸು."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (ಸ್ನೂಜ್ ಆಗಿದೆ)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"<xliff:g id="TIME">%s</xliff:g> ಗೆ ಅಲಾರಮ್ ಹೊಂದಿಸಲಾಗಿದೆ. ರದ್ದುಗೊಳಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"ರಿಂಗ್‌ಟೋನ್ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"ಗಡಿಯಾರದ ಒಳಗೆ ಟೈಮರ್‌ಗಳ ಹೊಂದಿಕೆಗಾಗಿ ಧ್ವನಿ ಪ್ಲೇಬ್ಯಾಕ್ ಸೇವೆ."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"ಅಲಾರಮ್ ಹೊಂದಿಸಿ"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"ಅಲಾರಮ್"</string>
     <string name="menu_timer" msgid="6459070074762877114">"ಟೈಮರ್"</string>
     <string name="menu_clock" msgid="5612760670606829805">"ಗಡಿಯಾರ"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"ಹೆಸರಿನ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"ಆಯ್ದ ನಗರಗಳು"</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_start_button" msgid="8373422516681242270">"ಪ್ರಾರಂಭಿಸು"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"ಲ್ಯಾಪ್"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"ಹಂಚಿಕೊಳ್ಳಿ"</string>
     <string name="hours_label" msgid="3393478155635368097">"ಗ"</string>
     <string name="minutes_label" msgid="3568098128251438588">"ನಿ"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"ನನ್ನ ಸಮಯ <xliff:g id="TIME">%s</xliff:g> ಆಗಿದೆ"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"ಲ್ಯಾಪ್ ಸಮಯಗಳು:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"ಲ್ಯಾಪ್ <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> ಗಂಟೆಗಳು</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ಗಂಟೆಗಳು</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 ನಿಮಿಷ ಸೇರಿಸು"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 ನಿಮಿಷ ಸೇರಿಸು"</string>
     <string name="timer_stop" msgid="3361154678667736722">"ನಿಲ್ಲಿಸು"</string>
-    <string name="timer_done" msgid="2375990511982914051">"ಮುಗಿದಿದೆ"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"ಎಲ್ಲಾ ಟೈಮರ್‌ಗಳನ್ನು ನಿಲ್ಲಿಸಿ"</string>
     <string name="timer_reset" msgid="7848424809190171640">"ಮರುಹೊಂದಿಸಿ"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"ರದ್ದುಮಾಡು"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"ಟೈಮರ್ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"ಸಮಯ ಮುಗಿದಿದೆ"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ಟೈಮರ್‌ಗಳ ಅವಧಿ ಮೀರಿದೆ"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"ಟೈಮರ್"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"ಗರಿಷ್ಠ 4 ಟೈಮರ್‌‌ಗಳು"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"ವಿರಾಮ"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"ಎಲ್ಲಾ ಟೈಮರ್ ಮರುಹೊಂದಿಸಿ"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"ನೀವು ಸ್ವಲ್ಪ ಹೆಚ್ಚಿನ ವೇಗಿ."</item>
     <item msgid="6332879039890727169">"ನಿಮ್ಮ ಪರಿಶ್ರಮದ ಪ್ರತಿಫಲವನ್ನು ಆನಂದಿಸಿ."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"ನಗರಗಳು"</string>
     <string name="clock_settings" msgid="8317286807280600391">"ಗಡಿಯಾರ"</string>
     <string name="clock_style" msgid="2265011060429742344">"ಶೈಲಿ"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"ದಿನಾಂಕ ಮತ್ತು ಸಮಯವನ್ನು ಬದಲಾಯಿಸಿ"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"ಅನಲಾಗ್‌"</item>
     <item msgid="8483930821046925592">"ಡಿಜಿಟಲ್"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ಪರಿಶೀಲಿಸಲಾಗಿದೆ"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> ಪರಿಶೀಲನೆ ರದ್ದುಮಾಡಲಾಗಿದೆ"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"ಮಾರ್ಷಲ್ ದ್ವೀಪಗಳು"</item>
     <item msgid="4196408495909011020">"ಮಿಡ್‌ವೇ ಐಲ್ಯಾಂಡ್‌"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"ಜಕಾರ್ತಾ"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"ಅಲಾರಾಂ‌ಗಳು"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಚಾಲನೆ ಮಾಡಲು ಸ್ಟಾಪ್‌ವಾಚ್ ಸೇವೆ."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"ನಿಲ್ಲಿಸಲಾಗಿದೆ"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"ಟೈಮರ್‌ ಅಧಿಸೂಚನೆಗಳಿಂದ ಪ್ರಕ್ರಿಯೆಗಳ ಕ್ರಮಗಳು."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"ಸ್ಟಾಪ್‌ವಾಚ್ ಅಧಿಸೂಚನೆಗಳಿಂದ ಪ್ರಕ್ರಿಯೆಗಳ ಕ್ರಮಗಳು."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"ವಜಾಗೊಳಿಸಲು ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"ಸ್ನೂಜ್ ಮಾಡಲು ಎಡಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"ಸ್ನೂಜ್ ಮಾಡಲು ಎಡಕ್ಕೆ ಅಥವಾ ವಜಾಗೊಳಿಸಲು ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"ಟೈಮರ್‌ಗಳು"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"ಟೈಮರ್ ರಿಂಗ್‌ಟೋನ್"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"ಟೈಮರ್ ನಿಂತಿದೆ"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> ಟೈಮರ್‌ಗಳು ನಿಂತಿವೆ"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"ಟೈಮರ್ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> ಟೈಮರ್ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"ನಿಮ್ಮ ಟೈಮರ್‌ಗಳನ್ನು ನೋಡಲು ಸ್ಪರ್ಶಿಸಿ"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ಟೈಮರ್‌ಗಳು"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"ಮುಂದಿನ ಟೈಮರ್: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"ಯಾವುದೇ ಅಲಾರಮ್‌ಗಳಿಲ್ಲ"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"ಅಲಾ. ಹೊಂದಿಸಿಲ್ಲ"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ಮುಂಬರುವ ಯಾವುದೇ ಅಲಾರಮ್‌ಗಳಿಲ್ಲ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"ಅಮಾನ್ಯ ಸಮಯ <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g> ಸಮಯಕ್ಕೆ ಯಾವುದೇ ಅಲಾರಮ್ ಇಲ್ಲ:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"ಯಾವುದೇ ನಿಗದಿಪಡಿಸಿದ ಅಲಾರಮ್‌ಗಳಿಲ್ಲ"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"ಯಾವುದೇ ಲೇಬಲ್ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿಲ್ಲ"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"ಯಾವುದೇ ಅಲಾರಮ್‌ಗಳು ಲೇಬಲ್ ಹೊಂದಿಲ್ಲ"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"ಸ್ಟಾಪ್‌ವಾಚ್ ಈಗಾಗಲೇ ರನ್ ಆಗುತ್ತಿದೆ"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"ಸ್ಟಾಪ್‌ವಾಚ್ ರನ್ ಆಗುತ್ತಿಲ್ಲ"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"ಸ್ಟಾಪ್‌ವಾಚ್ ರನ್ ಆಗುತ್ತಿರುವ ಕಾರಣ ಅದನ್ನು ಮರುಹೊಂದಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"ಸ್ಟಾಪ್‌ವಾಚ್ ನಿಲ್ಲಿಸಲಾಗಿದೆ"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"ಸ್ಟಾಪ್‌ವಾಚ್ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"ಸ್ಟಾಪ್‌ವಾಚ್ ಮರುಹೊಂದಿಸಿ"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"ಸ್ಟಾಪ್‌ವಾಚ್ ಸ್ವೀಕರಿಸಲಾಗಿದೆ"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"ಸ್ಟಾಪ್‌ವಾಚ್ ಪ್ರಾರಂಭಿಸಲಾಗಿದೆ"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"ಈ ಸಮಯಕ್ಕೆ ಯಾವುದೇ ಅಲಾರಮ್ ನಿಗದಿಪಡಿಸಲಾಗಿಲ್ಲ"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> ಅಲಾರಮ್ ವಜಾಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g> ಗಂಟೆಗೆ ಅಲಾರಮ್ ಹೊಂದಿಸಲಾಗಿದೆ"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"ಯಾವುದೇ ಟೈಮರ್ ಹೊಂದಿಸಲಾಗಿಲ್ಲ"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"ಟೈಮರ್ ಅಳಿಸಲಾಗಿದೆ"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"ಟೈಮರ್ ಈಗಾಗಲೇ ಚಾಲನೆಯಲ್ಲಿದೆ"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"ನಿಮ್ಮ ವಿನಂತಿಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಅನೇಕ ಟೈಮರ್‌ಗಳು ಲಭ್ಯ"</string>
-    <string name="timer_started" msgid="6715582052946641641">"ಟೈಮರ್‌ ಪ್ರಾರಂಭಿಸಲಾಗಿದೆ"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"ಯಾವುದೇ ಟೈಮರ್‌ಗಳು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ಟೈಮರ್ ಅಸ್ತಿತ್ವದಲ್ಲಿವೆ"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"ಟೈಮರ್ ತೆಗೆದುಹಾಕಲಾಗಿದೆ."</string>
     <string name="timer_created" msgid="4381027137335885547">"ಟೈಮರ್ ರಚಿಸಲಾಗಿದೆ"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"ಅಮಾನ್ಯ ಟೈಮರ್ ಉದ್ದ"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"ಟೈಮರ್ ಮರುಹೊಂದಿಸಲಾಗಿದೆ"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"ಟೈಮರ್ ಇನ್ನೂ ಚಾಲನೆಯಲ್ಲಿರುವ ಕಾರಣದಿಂದ ಅದನ್ನು ಮರುಹೊಂದಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಮರುಹೊಂದಿಸಲು ಟೈಮರ್ ನಿಲ್ಲಿಸಿ."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"ಟೈಮರ್ ಈಗಾಗಲೇ ನಿಲ್ಲಿಸಲಾಗಿದೆ"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"ಟೈಮರ್ ಅಳಿಸಲಾಗಿದೆ"</string>
+    <string name="timer_started" msgid="6715582052946641641">"ಟೈಮರ್‌ ಪ್ರಾರಂಭಿಸಲಾಗಿದೆ"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"ಅಮಾನ್ಯ ಟೈಮರ್ ಉದ್ದ"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"ಯಾವುದೇ ನಗರ ಆಯ್ಕೆಮಾಡಲಾಗಿಲ್ಲ"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"ನೀವು ಸೂಚಿಸಿದ ನಗರ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"ಆ ನಗರವನ್ನು ಈಗಾಗಲೇ ಸೇರಿಸಲಾಗಿದೆ"</string>
diff --git a/res/values-ko/array.xml b/res/values-ko/array.xml
index a0c72f2..d1687ec 100644
--- a/res/values-ko/array.xml
+++ b/res/values-ko/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ㅍ<xliff:g id="SEPARATOR">=</xliff:g>포르탈레자"</item>
     <item msgid="5801558418916235541">"ㄱ<xliff:g id="SEPARATOR">=</xliff:g>그랜드터크"</item>
     <item msgid="2103759276235503048">"ㄱ<xliff:g id="SEPARATOR">=</xliff:g>그라나다"</item>
-    <item msgid="1490069759176391533">"ㄱ<xliff:g id="SEPARATOR">=</xliff:g>과테말라"</item>
+    <item msgid="6216160110733510854">"ㄱ<xliff:g id="SEPARATOR">=</xliff:g>과테말라시티"</item>
     <item msgid="525959305652046261">"ㄱ<xliff:g id="SEPARATOR">=</xliff:g>가이아나"</item>
     <item msgid="7565596629973190931">"ㅎ<xliff:g id="SEPARATOR">=</xliff:g>핼리팩스"</item>
     <item msgid="3811169155065582644">"ㅇ<xliff:g id="SEPARATOR">=</xliff:g>아바나"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ㅌ<xliff:g id="SEPARATOR">=</xliff:g>토론토"</item>
     <item msgid="1506838283840737263">"ㅂ<xliff:g id="SEPARATOR">=</xliff:g>밴쿠버"</item>
     <item msgid="8935386104773857399">"ㅇ<xliff:g id="SEPARATOR">=</xliff:g>위니펙"</item>
-    <item msgid="1132634022412399582">"ㄴ<xliff:g id="SEPARATOR">=</xliff:g>남극"</item>
+    <item msgid="498429228419399474">"ㄴ<xliff:g id="SEPARATOR">=</xliff:g>남극<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ㄹ<xliff:g id="SEPARATOR">=</xliff:g>롱위에아르뷔엔"</item>
     <item msgid="3784788073896028355">"ㅇ<xliff:g id="SEPARATOR">=</xliff:g>알마티"</item>
     <item msgid="7895695236056852523">"ㅇ<xliff:g id="SEPARATOR">=</xliff:g>암만"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ㄱ<xliff:g id="SEPARATOR">=</xliff:g>가자"</item>
     <item msgid="2359068282340162319">"ㅎ<xliff:g id="SEPARATOR">=</xliff:g>헤브론"</item>
     <item msgid="6223396610551759129">"ㅎ<xliff:g id="SEPARATOR">=</xliff:g>호치민"</item>
-    <item msgid="4731022818651322736">"ㅎ<xliff:g id="SEPARATOR">=</xliff:g>홍콩"</item>
+    <item msgid="3439764751788710130">"ㅎ<xliff:g id="SEPARATOR">=</xliff:g>홍콩<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"ㅇ<xliff:g id="SEPARATOR">=</xliff:g>이스탄불"</item>
     <item msgid="758800913783999425">"ㅈ<xliff:g id="SEPARATOR">=</xliff:g>자카르타"</item>
     <item msgid="8956406398692698126">"ㅇ<xliff:g id="SEPARATOR">=</xliff:g>예루살렘"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"ㅁ<xliff:g id="SEPARATOR">=</xliff:g>마닐라"</item>
     <item msgid="6033964325069060422">"ㅁ<xliff:g id="SEPARATOR">=</xliff:g>무스카트"</item>
     <item msgid="6077458941399984780">"ㅍ<xliff:g id="SEPARATOR">=</xliff:g>프놈펜"</item>
-    <item msgid="935474308903572975">"ㅍ<xliff:g id="SEPARATOR">=</xliff:g>평양"</item>
+    <item msgid="1245515372520913197">"ㅍ<xliff:g id="SEPARATOR">=</xliff:g>평양<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"ㅋ<xliff:g id="SEPARATOR">=</xliff:g>카타르"</item>
     <item msgid="1667243110545095146">"ㄹ<xliff:g id="SEPARATOR">=</xliff:g>랑군"</item>
     <item msgid="4460370766685855731">"ㄹ<xliff:g id="SEPARATOR">=</xliff:g>리야드"</item>
     <item msgid="4229224905931739201">"ㅅ<xliff:g id="SEPARATOR">=</xliff:g>사이공"</item>
     <item msgid="8705359848250215620">"ㅅ<xliff:g id="SEPARATOR">=</xliff:g>서울"</item>
-    <item msgid="583367295371395814">"ㅅ<xliff:g id="SEPARATOR">=</xliff:g>상하이"</item>
+    <item msgid="3814881931186962624">"ㅅ<xliff:g id="SEPARATOR">=</xliff:g>상하이<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"ㅅ<xliff:g id="SEPARATOR">=</xliff:g>싱가포르"</item>
-    <item msgid="1972491729911039207">"ㅌ<xliff:g id="SEPARATOR">=</xliff:g>타이페이"</item>
+    <item msgid="8982451946156859368">"ㅌ<xliff:g id="SEPARATOR">=</xliff:g>타이페이<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"ㅌ<xliff:g id="SEPARATOR">=</xliff:g>테헤란"</item>
     <item msgid="8629402941285674273">"ㅌ<xliff:g id="SEPARATOR">=</xliff:g>텔아비브"</item>
-    <item msgid="8499164674454654525">"ㄷ<xliff:g id="SEPARATOR">=</xliff:g>도쿄"</item>
+    <item msgid="76330681636547168">"ㄷ<xliff:g id="SEPARATOR">=</xliff:g>도쿄<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"ㅇ<xliff:g id="SEPARATOR">=</xliff:g>울란바토르"</item>
     <item msgid="2028626988021468640">"ㅂ<xliff:g id="SEPARATOR">=</xliff:g>버뮤다"</item>
     <item msgid="4527109966513690429">"ㅋ<xliff:g id="SEPARATOR">=</xliff:g>카나리아"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"ㄹ<xliff:g id="SEPARATOR">=</xliff:g>리노"</item>
     <item msgid="9155068631060038769">"ㅂ<xliff:g id="SEPARATOR">=</xliff:g>블랙록시티"</item>
     <item msgid="8498761319928979900">"ㄷ<xliff:g id="SEPARATOR">=</xliff:g>도하"</item>
-    <item msgid="8307897251088048641">"ㅂ<xliff:g id="SEPARATOR">=</xliff:g>베이징"</item>
+    <item msgid="5327010922199714808">"ㅂ<xliff:g id="SEPARATOR">=</xliff:g>베이징<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"ㅁ<xliff:g id="SEPARATOR">=</xliff:g>뭄바이"</item>
     <item msgid="6668274273067049125">"ㄷ<xliff:g id="SEPARATOR">=</xliff:g>델리"</item>
-    <item msgid="2933410189478233292">"ㅇ<xliff:g id="SEPARATOR">=</xliff:g>오사카"</item>
+    <item msgid="7199039603593847813">"ㅇ<xliff:g id="SEPARATOR">=</xliff:g>오사카<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ㄹ<xliff:g id="SEPARATOR">=</xliff:g>라호르"</item>
     <item msgid="1448378291805481500">"ㅅ<xliff:g id="SEPARATOR">=</xliff:g>사나"</item>
     <item msgid="5233119846682408301">"ㅂ<xliff:g id="SEPARATOR">=</xliff:g>바르셀로나"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"ㅋ<xliff:g id="SEPARATOR">=</xliff:g>케임브리지"</item>
     <item msgid="759409010285366934">"ㅋ<xliff:g id="SEPARATOR">=</xliff:g>커클랜드"</item>
     <item msgid="6308007059287569663">"ㅁ<xliff:g id="SEPARATOR">=</xliff:g>매디슨"</item>
-    <item msgid="6971636434858330021">"ㄱ<xliff:g id="SEPARATOR">=</xliff:g>광저우"</item>
+    <item msgid="2077617905582224600">"ㄱ<xliff:g id="SEPARATOR">=</xliff:g>광저우<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"ㅎ<xliff:g id="SEPARATOR">=</xliff:g>하이데라바드"</item>
     <item msgid="3032295682584784261">"ㄹ<xliff:g id="SEPARATOR">=</xliff:g>레스턴"</item>
     <item msgid="7722837296297332268">"ㅂ<xliff:g id="SEPARATOR">=</xliff:g>벨루오리존치"</item>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 738c5ff..f7dc66f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"시계 표시"</string>
     <string name="hide_clock" msgid="3217727306480505694">"시계 숨기기"</string>
     <string name="label" msgid="162189613902857319">"라벨"</string>
+    <string name="on_switch" msgid="2297966258029227449">"사용"</string>
+    <string name="off_switch" msgid="3381070073851148013">"사용 안함"</string>
     <string name="default_label" msgid="5590025289805630372">"알람"</string>
     <string name="set_alarm" msgid="9148359866152726808">"알람 설정"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"진동"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"반복"</string>
     <string name="alert" msgid="6506982899651975645">"알람 벨소리"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"맞춤 벨소리"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"타이머 만료됨"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"무음"</string>
     <string name="ringtone" msgid="9110746249688559579">"벨소리"</string>
     <string name="time" msgid="8067216534232296518">"시간"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"내일"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g>까지 일시 중지"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"예정된 알람"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"부재중 알람이 삭제되었습니다."</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"1분 미만 남음"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> 남음"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> 남음"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> 남음"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"1분 미만 남음"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> 남음"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"남음"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"남음"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"알람 시간이 지금으로부터 1분 이내입니다."</item>
     <item msgid="6002066367368421848">"지금부터 <xliff:g id="DAYS">%1$s</xliff:g> 후로 알람이 설정됩니다."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">분</item>
       <item quantity="one">분</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"볼륨 점점 크게"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"사용 안함"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g>초"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"초"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"알람 해제 시간"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g>분</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"되돌리기"</string>
     <string name="delete" msgid="5732434972457000541">"삭제"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"알람 볼륨"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"무음"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"무음"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"알 수 없음"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"알람을 일시 중지하거나 해제합니다."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g>(알람 일시 중지됨)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"<xliff:g id="TIME">%s</xliff:g> 후로 알람이 설정되었습니다. 취소하려면 터치하세요."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"벨소리 로드 중…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"시계에서 설정한 알람에 대한 사운드 재생 서비스"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"알람 설정"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"알람"</string>
     <string name="menu_timer" msgid="6459070074762877114">"타이머"</string>
     <string name="menu_clock" msgid="5612760670606829805">"시계"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"이름순 정렬"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"선택된 도시"</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_start_button" msgid="8373422516681242270">"시작"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"일시중지"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"랩 타임"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"공유"</string>
     <string name="hours_label" msgid="3393478155635368097">"시"</string>
     <string name="minutes_label" msgid="3568098128251438588">"분"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"내 시간: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"랩 타임:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"랩 타임 <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"<xliff:g id="NUMBER">%d</xliff:g>번"</item>
-    <item msgid="316923361931627987">"<xliff:g id="NUMBER">%02d</xliff:g>번"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g>시간</item>
       <item quantity="one">1시간</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1분 추가"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1분 추가"</string>
     <string name="timer_stop" msgid="3361154678667736722">"중지"</string>
-    <string name="timer_done" msgid="2375990511982914051">"완료"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"모든 타이머 정지"</string>
     <string name="timer_reset" msgid="7848424809190171640">"초기화"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"취소"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"타이머 취소됨"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"시간이 다 되었습니다."</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g>개 타이머 만료"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"타이머"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"만들 수 있는 타이머는 최대 4개입니다."</string>
+    <string name="timer_pause" msgid="3748323712728398743">"일시중지"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"모든 타이머 재설정"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"속도광이시군요."</item>
     <item msgid="6332879039890727169">"결과를 확인하세요."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"도시"</string>
     <string name="clock_settings" msgid="8317286807280600391">"시계"</string>
     <string name="clock_style" msgid="2265011060429742344">"종류"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"날짜 및 시간 변경"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"아날로그"</item>
     <item msgid="8483930821046925592">"디지털"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> 선택됨"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> 선택 해제됨"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"마샬 제도"</item>
     <item msgid="4196408495909011020">"미드웨이 제도"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"자카르타"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"알람"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"스톱워치 서비스로 알림을 실행"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"중지됨"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"타이머 알림에서 작업 처리"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"스톱워치 알림에서 작업 처리"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"일시중지됨"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"오른쪽으로 스와이프하여 해제"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"왼쪽으로 스와이프하여 일시 중지"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"왼쪽으로 스와이프하여 일시 중지하거나 오른쪽으로 스와이프하여 해제"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"타이머"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"타이머 벨소리"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"타이머가 정지됨"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g>개의 타이머가 정지됨"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"타이머가 일시중지됨"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"타이머 <xliff:g id="NUMBER">%d</xliff:g>개 일시중지됨"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"타이머를 보려면 터치하세요."</string>
     <string name="timers_in_use" msgid="5570729467344408506">"타이머 <xliff:g id="NUMBER">%d</xliff:g>개"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"다음 타이머: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"알람 없음"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"설정된 알람 없음"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"예정된 알람 없음"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"a h:mm"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, a h:mm"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"잘못된 시간입니다. <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>에 지정된 알람 없음"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"예약된 알람 없음"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"지정된 라벨이 없습니다."</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"라벨이 포함된 알람이 없습니다."</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"스톱워치가 이미 실행 중임"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"스톱워치가 실행되고 있지 않음"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"스톱워치가 실행 중이므로 초기화할 수 없습니다."</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"스톱워치가 중지되었습니다."</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"스톱워치가 일시중지됨"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"스톱워치가 초기화되었습니다."</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"랩타임이 측정되었습니다."</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"스톱워치가 시작되었습니다."</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"이 시간에 예약된 알람 없음"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> 알람 제거됨"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"알람 설정 시간: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"설정된 타이머 없음"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"타이머 삭제됨"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"타이머가 이미 실행 중임"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"요청을 완료할 수 없습니다. 사용할 수 있는 타이머가 여러 개입니다."</string>
-    <string name="timer_started" msgid="6715582052946641641">"타이머 시작됨"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"타이머가 없음"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"타이머가 2개 이상 있습니다."</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"타이머가 삭제되었습니다."</string>
     <string name="timer_created" msgid="4381027137335885547">"타이머가 생성됨"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"타이머 기간이 잘못됨"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"타이머 재설정됨"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"타이머가 실행 중이기 때문에 재설정할 수 없습니다. 재설정하려면 타이머를 중지하세요."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"타이머가 이미 중지됨"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"타이머 삭제됨"</string>
+    <string name="timer_started" msgid="6715582052946641641">"타이머 시작됨"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"타이머 기간이 잘못됨"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"선택한 도시 없음"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"사용자가 지정한 도시는 사용할 수 없음"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"이미 추가된 도시임"</string>
diff --git a/res/values-ky-rKG/array.xml b/res/values-ky-rKG/array.xml
index 46b59e8..3b78282 100644
--- a/res/values-ky-rKG/array.xml
+++ b/res/values-ky-rKG/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"Ф<xliff:g id="SEPARATOR">=</xliff:g>Форталеза"</item>
     <item msgid="5801558418916235541">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гранд Түрк"</item>
     <item msgid="2103759276235503048">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гренада"</item>
-    <item msgid="1490069759176391533">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемала"</item>
+    <item msgid="6216160110733510854">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемала шаары"</item>
     <item msgid="525959305652046261">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гайана"</item>
     <item msgid="7565596629973190931">"Г<xliff:g id="SEPARATOR">=</xliff:g>Галифакс"</item>
     <item msgid="3811169155065582644">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гавана"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"Т<xliff:g id="SEPARATOR">=</xliff:g>Торонто"</item>
     <item msgid="1506838283840737263">"В<xliff:g id="SEPARATOR">=</xliff:g>Ванкувер"</item>
     <item msgid="8935386104773857399">"В<xliff:g id="SEPARATOR">=</xliff:g>Виннипег"</item>
-    <item msgid="1132634022412399582">"Т<xliff:g id="SEPARATOR">=</xliff:g>Түштүк уюл"</item>
+    <item msgid="498429228419399474">"Т<xliff:g id="SEPARATOR">=</xliff:g>Түштүк уюл<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"Л<xliff:g id="SEPARATOR">=</xliff:g>Лонгйир"</item>
     <item msgid="3784788073896028355">"А<xliff:g id="SEPARATOR">=</xliff:g>Алматы"</item>
     <item msgid="7895695236056852523">"А<xliff:g id="SEPARATOR">=</xliff:g>Амман"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"Г<xliff:g id="SEPARATOR">=</xliff:g>Газа"</item>
     <item msgid="2359068282340162319">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хеброн"</item>
     <item msgid="6223396610551759129">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хошимин"</item>
-    <item msgid="4731022818651322736">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гонконг"</item>
+    <item msgid="3439764751788710130">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гонконг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"С<xliff:g id="SEPARATOR">=</xliff:g>Стамбул"</item>
     <item msgid="758800913783999425">"Ж<xliff:g id="SEPARATOR">=</xliff:g>Жакарта"</item>
     <item msgid="8956406398692698126">"И<xliff:g id="SEPARATOR">=</xliff:g>Иерусалим"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"М<xliff:g id="SEPARATOR">=</xliff:g>Манила"</item>
     <item msgid="6033964325069060422">"М<xliff:g id="SEPARATOR">=</xliff:g>Мускат"</item>
     <item msgid="6077458941399984780">"П<xliff:g id="SEPARATOR">=</xliff:g>Пномпень"</item>
-    <item msgid="935474308903572975">"П<xliff:g id="SEPARATOR">=</xliff:g>Пхеньян"</item>
+    <item msgid="1245515372520913197">"П<xliff:g id="SEPARATOR">=</xliff:g>Пхеньян<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"К<xliff:g id="SEPARATOR">=</xliff:g>Катар"</item>
     <item msgid="1667243110545095146">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рангун"</item>
     <item msgid="4460370766685855731">"Э<xliff:g id="SEPARATOR">=</xliff:g>Эр-Рияд"</item>
     <item msgid="4229224905931739201">"С<xliff:g id="SEPARATOR">=</xliff:g>Сайгон"</item>
     <item msgid="8705359848250215620">"С<xliff:g id="SEPARATOR">=</xliff:g>Сеул"</item>
-    <item msgid="583367295371395814">"Ш<xliff:g id="SEPARATOR">=</xliff:g>Шанхай"</item>
+    <item msgid="3814881931186962624">"Ш<xliff:g id="SEPARATOR">=</xliff:g>Шанхай<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"С<xliff:g id="SEPARATOR">=</xliff:g>Сингапур"</item>
-    <item msgid="1972491729911039207">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тайпей"</item>
+    <item msgid="8982451946156859368">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тайпей<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тегеран"</item>
     <item msgid="8629402941285674273">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тель-Авив"</item>
-    <item msgid="8499164674454654525">"Т<xliff:g id="SEPARATOR">=</xliff:g>Токио"</item>
+    <item msgid="76330681636547168">"Т<xliff:g id="SEPARATOR">=</xliff:g>Токио<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"У<xliff:g id="SEPARATOR">=</xliff:g>Улан-Батор"</item>
     <item msgid="2028626988021468640">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бермуд аралдары"</item>
     <item msgid="4527109966513690429">"К<xliff:g id="SEPARATOR">=</xliff:g>Канар"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рено"</item>
     <item msgid="9155068631060038769">"Б<xliff:g id="SEPARATOR">=</xliff:g>Блэк-Рок-Сити"</item>
     <item msgid="8498761319928979900">"Д<xliff:g id="SEPARATOR">=</xliff:g>Доха"</item>
-    <item msgid="8307897251088048641">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бээжин"</item>
+    <item msgid="5327010922199714808">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бээжин<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"М<xliff:g id="SEPARATOR">=</xliff:g>Мумбай"</item>
     <item msgid="6668274273067049125">"Д<xliff:g id="SEPARATOR">=</xliff:g>Дели"</item>
-    <item msgid="2933410189478233292">"О<xliff:g id="SEPARATOR">=</xliff:g>Осака"</item>
+    <item msgid="7199039603593847813">"О<xliff:g id="SEPARATOR">=</xliff:g>Осака<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"Л<xliff:g id="SEPARATOR">=</xliff:g>Лахор"</item>
     <item msgid="1448378291805481500">"С<xliff:g id="SEPARATOR">=</xliff:g>Сана"</item>
     <item msgid="5233119846682408301">"Б<xliff:g id="SEPARATOR">=</xliff:g>Барселона"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"К<xliff:g id="SEPARATOR">=</xliff:g>Кембридж"</item>
     <item msgid="759409010285366934">"К<xliff:g id="SEPARATOR">=</xliff:g>Киркланд"</item>
     <item msgid="6308007059287569663">"М<xliff:g id="SEPARATOR">=</xliff:g>Мэдисон"</item>
-    <item msgid="6971636434858330021">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гуанчжоу"</item>
+    <item msgid="2077617905582224600">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гуанчжоу<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хайдарабад"</item>
     <item msgid="3032295682584784261">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рестон"</item>
     <item msgid="7722837296297332268">"Б<xliff:g id="SEPARATOR">=</xliff:g>Белу-Оризонти"</item>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index c90f334..4dd990b 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Саат көрсөтүү"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Саатты жашыр"</string>
     <string name="label" msgid="162189613902857319">"Белгиси"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Күйүк"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Өчүк"</string>
     <string name="default_label" msgid="5590025289805630372">"Ойготкуч"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Ойготкуч коюу"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Титирет"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Кайталоо"</string>
     <string name="alert" msgid="6506982899651975645">"Ойготкучтун шыңгыры"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Ыңгайлаштырылган рингтон"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Таймердин мөөнөтү бүттү"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Үнсүз"</string>
     <string name="ringtone" msgid="9110746249688559579">"Шыңгыр"</string>
     <string name="time" msgid="8067216534232296518">"Убакыт"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Эртең"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> чейин тындыруу"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Келээрки ойготкуч"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Көз жаздымда калган ойготкучуңуз жок кылынды"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Бир мүнөткө жетпеген убакыт калды"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> саат калды"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> мүнөт калды"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> саат <xliff:g id="MINUTES">%2$s</xliff:g> мүнөт калды"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Бир мүнөткө жетпеген убакыт калды"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> саат <xliff:g id="MINUTES">%2$s</xliff:g> мүнөт калды"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"калды"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"калды"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Ойготкуч 1 мүнөткө жетпеген убакытка коюлуп жатат."</item>
     <item msgid="6002066367368421848">"Ойготкуч <xliff:g id="DAYS">%1$s</xliff:g> күнгө коюлган."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">мүнөт</item>
       <item quantity="one">мүнөт</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Акырындык менен катуулатуу"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Өчүк"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> секунд"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"секунд"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Төмөнкүдөн кийин үнүн басып коюу"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> мүнөт</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Мурунку абалга кайтаруу"</string>
     <string name="delete" msgid="5732434972457000541">"Жок кылуу"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Ойготкучтун үнүнүн катуулугу"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Үнсүз"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Үнсүз"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Белгисиз"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Ойготкучту тындыруу же этибарга албоо."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (тындырылды)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Ойготкуч саат <xliff:g id="TIME">%s</xliff:g> коюлган. Жокко чыгаруу үчүн тийип коюңуз."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Шыңгыр жүктөлүүдө…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Сааттагы таймерлерге үн коюу кызматы."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Ойготкуч коюу"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Ойготкуч"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Таймер"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Саат"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Аталышы боюнча иргөө"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Тандалган шаарлар"</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_start_button" msgid="8373422516681242270">"Баштоо"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Жүгүртүм"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Бөлүшүү"</string>
     <string name="hours_label" msgid="3393478155635368097">"с"</string>
     <string name="minutes_label" msgid="3568098128251438588">"м"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Менин убакытым <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Жүгүртүм убакыттары:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Жүгүртүм <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"#<xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"#<xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> саат</item>
       <item quantity="one">1 саат</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 мүнөт кошуу"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 мүн кошуу"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Токтотуу"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Аткарылды"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Бардык таймрлрди токтотуу"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Баштапкы абалга келтирүү"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Жокко чыгаруу"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Таймер жокко чыгарылды"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Бүттү"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> таймердин мөөнөтү бүттү"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Таймер"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Эң көп 4 таймер"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Тындыруу"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Бардык таймерлерди баштапкы абалга келтирүү"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Чагылгандай тездик менен кыймылдайсыз го?!"</item>
     <item msgid="6332879039890727169">"Эмгегиңиздин акыбетин көрүңүз."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Шаарлар"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Саат"</string>
     <string name="clock_style" msgid="2265011060429742344">"Стиль"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Датаны &amp; убакытты өзгөртүү"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Аналог"</item>
     <item msgid="8483930821046925592">"Санариптик"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> белгиленди"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> белгиленген жок"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Маршал аралдары"</item>
     <item msgid="4196408495909011020">"Мидуэй аралы"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Жакарта"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Ойготкучтар"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Эскертмени иштетүүчү секунда өлчөгүч кызматы."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Токтотулду"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Таймер эскертмелериндеги аракеттерди иштетет."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Секундомер эскертмелериндеги аракеттерди иштетет."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Тындырылды"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Өткөрүп салуу үчүн оңго сүрүңүз"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Тындыруу үчүн солго сүрүңүз."</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Тындыруу үчүн солго же этибарга албоо үчүн оңго серпиңиз"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Таймерлер"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Таймердин рингтону"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Таймер токтотулду"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> таймер токтоду"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Таймер тындырылды"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> таймерлер тындырылды"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Таймерлериңизди көрүү үчүн тийип коюңуз"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> таймер"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Кийинки таймер: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Ойготкуч жок"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Ойготкучтар коюлган жок"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"АЛДЫДА ОЙГОТКУЧ ЖОК"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"с:мм"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"к:мм"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, с:мм"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, к:мм"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Жараксыз убакыт <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Саат <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> коюлган ойготкуч жок"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Коюлган ойготкучтар жок"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Эч энбелги көрсөтүлгөн жок"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Эч бир ойготкучта энбелги жок"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Секундомер мурунтан эле иштеп жатат"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Секундомер иштеген жок"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Секунд эсептегич иштеп жаткандыктан, аны баштапкы абалга келтирүү мүмкүн эмес"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Секунд эсептегич токтотулду"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Секунд ченегич тындырылды"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Секунд эсептегич баштапкы абалга келтирилди"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Секунд эсептегичте бир айлана кошулду"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Секунд эсептегич башталды"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Бул убакытка коюлган ойготкуч жок"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Саат <xliff:g id="ALARM_TIME">%s</xliff:g> коюлган ойготкуч өчүрүлдү"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Ойготкуч саат <xliff:g id="ALARM_TIME">%s</xliff:g> коюлган"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Коюлган таймер жок"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Таймер жок кылынды"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Таймер мурунтан эле иштеп жатат"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Өтүнүчүңүз аткарылбай койду, бир нече таймер бар"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Таймер башталды"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Таймерлер жок"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Бирден ашык таймер бар"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Таймер алынып салынды."</string>
     <string name="timer_created" msgid="4381027137335885547">"Таймер түзүлдү"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Таймердин узактыгы жараксыз"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Таймер баштапкы абалга келтирилди"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Таймер дагы эле иштеп жаткандыктан, ал баштапкы абалга келтирилбейт. Баштапкы абалга келтирүү үчүн таймерди токтотуңуз."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Таймер мурунтан эле токтогон"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Таймер жок кылынды"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Таймер башталды"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Таймердин узактыгы жараксыз"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Эч шаар тандалган жок"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Сиз көрсөткөн шаар жеткиликтүү эмес"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Мындай шаар мурунтан эле кошулган"</string>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index 2d22f32..b68e145 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -19,7 +19,7 @@
 
 <!-- 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">
+<resources>
     <dimen name="time_text_size">153dip</dimen>
     <dimen name="ampm_text_size">32dip</dimen>
     <dimen name="date_text_size">15sp</dimen>
@@ -29,7 +29,6 @@
 
     <dimen name="dialpad_font_size">24sp</dimen>
     <dimen name="dialpad_digit_padding">14dip</dimen>
-    <dimen name="timer_setup_font_size">48sp</dimen>
     <dimen name="timer_setup_delete_start_margin">24sp</dimen>
     <dimen name="timer_setup_label_size">16sp</dimen>
 
@@ -38,7 +37,6 @@
     <!-- Size of margin for circles. -->
     <dimen name="circle_margin">8dp</dimen>
     <dimen name="analog_clock_margin">70dp</dimen>
-    <dimen name="timer_circle_margin">8dp</dimen>
     <dimen name="main_clock_padding">0dp</dimen>
     <dimen name="circle_margin_top">0dp</dimen>
     <dimen name="top_text_spacing_digital">-25dp</dimen>
@@ -52,7 +50,6 @@
     <dimen name="medium_font_size">48sp</dimen>
 
     <dimen name="circle_size">190dip</dimen>
-    <dimen name="stopwatch_list_bottom_spacing">0dip</dimen>
     <dimen name="stopwatch_circle_margin_bottom">80dip</dimen>
 
     <dimen name="world_clock_margin">8dp</dimen>
diff --git a/res/values-lo-rLA/array.xml b/res/values-lo-rLA/array.xml
index f6c7334..70b83fe 100644
--- a/res/values-lo-rLA/array.xml
+++ b/res/values-lo-rLA/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>ຟໍ​ຕາ​ເຣ​ຊາ"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>ແກ​ຣນ​ເຕີກ"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>ກ​ຣີ​ນາ​ດາ"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>ກົວ​ເຕ​ມາ​ລາ"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>ເມືອງ​ກົວ​ເຕ​ມາ​ລາ"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>ກາຍອານາ"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>ຮາ​ລິ​ເຟັກ"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>ຮາ​ວາ​ນາ"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>ໂຕ​ຣອນ​ໂຕ"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>ແວນ​ຄູ​ເວີ"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>ວິນ​ນິ​ເປັກ"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>ເຊົາ​ໂປ​ເລ"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>ເຊົາ​ໂປ​ເລ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>ລອງ​ເຢຍ​ບີນ"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>ອາ​ລ​ມາ​ຕີ"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>ອຳ​ມັນ"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>ກາ​ຊ່າ"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>ຮີບ​ຣອນ"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>ໂຮ່​ຈິ​ມິນ"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>ຮ່ອງກົງ"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>ຮ່ອງກົງ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>ອິດ​ສະ​ຕານ​ບູນ"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>ຈາ​ກາຕ້າ"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>ເຢ​ຣູ​ຊາ​ເລັມ"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>ມະ​ນີ​ລາ"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>ມຸ​ສ​ກັດ"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>ພະ​ນົມ​ເປັນ"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>ພຽງ​ຢາງ"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>ພຽງ​ຢາງ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>ກາ​ຕ້າ"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>ຢ້າງ​ກຸ້ງ"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>ຣິ​ຢາດ"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>ໄຊ​ງ່ອນ"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>ໂຊລ"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>ຊຽງ​ໄຮ"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>ຊຽງ​ໄຮ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>ສິງ​ກະ​ໂປ"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>ໄທ​ເປ"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>ໄທ​ເປ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>ເຕ​ຮາ​ຣານ"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>ເທວ​ອາ​ວິບ"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>ໂຕ​ກຽວ"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>ໂຕ​ກຽວ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>ອູລານ​ບາ​ຕໍ"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>ເບີ​ມິວ​ດາ"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>ຄາ​ນາ​ຣີ"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>ເຣ​ໂນ"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>ແບ​ລັກ​ຣັອກ​ຊິ​ຕີ"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>ໂດ​ຮາ"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>ປັກ​ກິ່ງ"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>ປັກ​ກິ່ງ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>ມູມໄບ"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>ເດ​ລິ"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>ໂອ​ຊາ​ກະ"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>ໂອ​ຊາ​ກະ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>ລາ​ຮໍ"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>ຊາ​ນາ​ອາ"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>ບາ​ເຊ​ໂລ​ນາ"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>ແຄມບ​ຣິດ​ຈ໌"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>ເກີກ​ແລນ"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>ມາ​ດິ​ສັນ"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>ກວາງ​ໂຈ"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>ກວາງ​ໂຈ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>ໄຮ​ເດີ​ຣາ​ບັດ"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>ເຣັ​ສ​ຕອນ"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>ເບ​ໂຣ​ຮໍ​ຣິ​ຊອນ"</item>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index f446e17..78ea399 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"ສະແດງໂມງ"</string>
     <string name="hide_clock" msgid="3217727306480505694">"ເຊື່ອງໂມງ"</string>
     <string name="label" msgid="162189613902857319">"ປ້າຍກຳກັບ"</string>
+    <string name="on_switch" msgid="2297966258029227449">"ເປີດ"</string>
+    <string name="off_switch" msgid="3381070073851148013">"ປິດ"</string>
     <string name="default_label" msgid="5590025289805630372">"ໂມງປຸກ"</string>
     <string name="set_alarm" msgid="9148359866152726808">"ຕັ້ງໂມງປຸກ"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"ສັ່ນເຕືອນ"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"ປຸກຊ້ຳ"</string>
     <string name="alert" msgid="6506982899651975645">"ສຽງໂມງປຸກ"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"ສຽງໂທເຂົ້າແບບ​ກຳ​ນົດ​ເອງ"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"ເຄື່ອງ​ຈັບ​ເວ​ລາ​ໝົດ​ອາ​ຍຸ​ແລ້ວ"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"ປິດສຽງ"</string>
     <string name="ringtone" msgid="9110746249688559579">"ສຽງໂມງປຸກ"</string>
     <string name="time" msgid="8067216534232296518">"ເວລາ"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"ມື້ອື່ນ"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"ປິດສຽງເຕືອນຊົ່ວຄາວຈົນກວ່າຈະຮອດ <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"ໂມງປຸກຖັດໄປ"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"ການຕັ້ງໂມງປຸກທີ່ພາດໄປນັ້ນຖືກລຶບແລ້ວ"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"ເຫຼືອໜ້ອຍກວ່າ 1 ນາທີ"</item>
-    <item msgid="83197792732433351">"ຍັງເຫຼືອ <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"ຍັງເຫຼືອ <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"ຍັງເຫຼືອ <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"ຍັງເຫຼືອໜ້ອຍກວ່າ 1 ນາທີ"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"ຍັງເຫຼືອ <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"ຍັງ​ເຫຼືອ"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"ຍັງ​ເຫຼືອ"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"ໂມງປຸກຖືກຕັ້ງໄວ້ໜ້ອຍກວ່າ 1 ນາທີຫ່າງຈາກຕອນນີ້."</item>
     <item msgid="6002066367368421848">"ໂມງປຸກຕັ້ງໄວ້ <xliff:g id="DAYS">%1$s</xliff:g> ຈາກຕອນນີ້."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">ນາທີ</item>
       <item quantity="one">ນາທີ</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"ຄ່ອຍໆ​ເພີ່ມ​ລະດັບສຽງ"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"ປິດ"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> ວິນາທີ"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"ວິນາທີ"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"ປິດສຽງຫຼັງຈາກ"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> ນາ​ທີ</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"ປ່ຽນກັບ"</string>
     <string name="delete" msgid="5732434972457000541">"ລຶບ"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"ລະດັບສຽງໂມງປຸກ"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"ງຽບ"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"ປິດສຽງ"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"​ບໍ່​ຮູ້​ຈັກ"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"ປິດສຽງເຕືອນຊົ່ວຄາວ ຫຼືປິດໂມງປຸກ."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (ຖືກປິດສຽງເຕືອນຊົ່ວຄາວ)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"ໂມງປຸກຖືກຕັ້ງໄວ້ທີ່ <xliff:g id="TIME">%s</xliff:g>. ແຕະເພື່ອຍົກເລີກ."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"ກຳລັງໂຫລດສຽງປຸກ..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"ບໍລິການຫຼິ້ນສຽງສຳລັບໂມງນັບຖອຍຫຼັງ ທີ່ຕັ້ງຢູ່ໃນໂປຣແກຣມໂມງ."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"ຕັ້ງໂມງປຸກ"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"ໂມງປຸກ"</string>
     <string name="menu_timer" msgid="6459070074762877114">"ໂມງນັບຖອຍຫຼັງ"</string>
     <string name="menu_clock" msgid="5612760670606829805">"ໂມງ"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"ຮຽງຕາມຊື່"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"ເມືອງທີ່ເລືອກແລ້ວ"</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_start_button" msgid="8373422516681242270">"ເລີ່ມ"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"ຮອບ"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"ແບ່ງປັນ"</string>
     <string name="hours_label" msgid="3393478155635368097">"ຊ"</string>
     <string name="minutes_label" msgid="3568098128251438588">"ນ"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"ເວລາຂອງຂ້ອຍແມ່ນ <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"ເວລາຮອບ:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"ຮອບ <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ຊົ່ວໂມງ</item>
       <item quantity="one">1 ຊົ່ວໂມງ</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"ເພີ່ມ 1 ນາທີ"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"ເພີ່ມ 1 ນາທີ"</string>
     <string name="timer_stop" msgid="3361154678667736722">"ຢຸດ"</string>
-    <string name="timer_done" msgid="2375990511982914051">"ແລ້ວໆ"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"ຢຸດ​ທຸກ​ເວ​ລາ"</string>
     <string name="timer_reset" msgid="7848424809190171640">"ນັບໃໝ່"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"ຍົກເລີກ"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"​ຍົກ​ເລີກ​ການ​ຈັບ​ເວ​ລາ​ແລ້ວ"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"ໝົດເວລາ"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ​ໂມງ​ຈັບ​ເວ​ລາ​ໝົດ​ອາ​ຍຸ​ແລ້ວ"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"ໂມງນັບຖອຍຫລັງ"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"ໂຕ​ຈັບ​ເວ​ລາ​ສູງ​ສຸດ 4 ອັນ"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"ຢຸດຊົ່ວຄາວ"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"ຕັ້ງ​ເຄື່ອງ​ຈັບ​ເວ​ລາ​ທັງ​ໝົດ​ໃໝ່"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"ທ່ານໄວປານຜີພຸ້ນນໍ້."</item>
     <item msgid="6332879039890727169">"ຂໍໃຫ້ມີຄວາມສຸກກັບໝາກຜົນຈາກເຫື່ອແຮງຂອງທ່ານ."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"ເມືອງ"</string>
     <string name="clock_settings" msgid="8317286807280600391">"ໂມງ"</string>
     <string name="clock_style" msgid="2265011060429742344">"ຮູບແບບ"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"ປ່ຽນ​ແປງວັນ​ທີ ແລະ ເວ​ລາ"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"ໂມງເຂັມ"</item>
     <item msgid="8483930821046925592">"ດິຈິຕອນ"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ໄດ້​ຮັບ​ການໝາຍ​ຕິກ​ແລ້ວ"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> ບໍ່​ໄດ້​ໝາຍ​ຕິກ"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"ໝູ່ເກາະມາແຊວ"</item>
     <item msgid="4196408495909011020">"ເກາະມິດເວ"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"ຈາກາຕາ"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"ໂມງປຸກ"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"ບໍລິການຂອງໂມງຈັບເວລາ ເພື່ອສະແດງໃນການແຈ້ງເຕືອນ."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"ຢຸດແລ້ວ"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"ປະມວນຜົນຄຳສັ່ງຕ່າງໆ ຈາກການແຈ້ງເຕືອນຕົວຈັບເວລາ."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"ປະມວນຜົນຄຳສັ່ງຕ່າງໆ ຈາກການແຈ້ງເຕືອນໂມງຈັບເວລາ."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"ຢຸດແລ້ວ"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"​ປັດ​ໄປ​ຂວາ​ເພື່ອ​ປິດ​ໄວ້"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"​ປັດ​ໄປ​ຊ້າຍ​ເພື່ອ​ເລື່ອນ​ອອກ​ໄປ​ກ່ອນ"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"ປັດ​ໄປ​ທາງ​ຊ້າຍ​ເພື່ອ​ເລື່ອນ ຫຼື​ທາງ​ຂວາ ເພື່ອ​ປິດ​ໄວ້"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"ໂມງ​ຈັບ​ເວ​ລາ"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"ສຽງ​ເຕືອນໂມງ​ຈັບ​ເວ​ລາ"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"ຢຸດນັບຖອຍຫຼັງແລ້ວ"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> ໂມງນັບຖອຍຫຼັງຢຸດແລ້ວ"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"ເຄື່ອງ​ຈັບ​ເວ​ລາ​ຢຸດ​ແລ້ວ"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> ເຄື່ອງ​ຈັບ​ເວ​ລາ​ຢຸດ​ແລ້ວ"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"ແຕະເພື່ອເບິ່ງໂຕຈັບເວລາຂອງທ່ານ"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ໂມງນັບຖອຍຫຼັງ"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"ໂມງຈັບເວລາຄັ້ງຕໍ່ໄປ: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"ບໍ່ມີການຕັ້ງໂມງປຸກ"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"​ບໍ່​ໄດ້​ຕັ້ງ​ໂມງ​ປຸກ"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ບໍ່ມີການຕັ້ງໂມງປຸກແລ້ວ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"ຊມ:ນ​ທ a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"ວວ​ວ, ຊມ:ນ​ທ a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"ວວວ, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"ເວ​ລາ​ໃຊ້​ບໍ່​ໄດ້ <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"ບໍ່​ມີ​ໂມງ​ປຸກ​ຕັ້ງ​ໄວ້​ໃນ​ເວ​ລາ <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"ບໍ່​ມີ​ການ​ເຕືອນ​ກຳ​ນົດ​ໄວ້"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"ບໍ່​ມີ​ປ້າຍ​ໝາຍ​ລະ​ບຸ​ໄວ້"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"ບໍ່​ມີ​ໂມງ​ປຸກ​ຢູ່​ໃນ​ປ້າຍ​ໝາຍ"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"ໂມງ​ຈັບ​ເວ​ລາ​ແລ່ນ​ຢູ່​ແລ້ວ"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"ໂມງ​ຈັບ​ເວ​ລາ​ບໍ່​ແລ່ນ​ຢູ່"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"ບໍ່​ສາ​ມາດ​ຕັ້ງ​ໂມງ​ຈັບ​ເວ​ລາ​ໄດ້ ເພາະ​ວ່າ​ມັນ​ກຳ​ລັງ​ແລ່ນ"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"ໂມງ​ຈັບ​ເວ​ລາ​ຢຸດ​ແລ້ວ"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"ໂມງ​ຈັບ​ເວ​ລາ​ຢຸດ​ແລ້ວ"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"ຕັ້ງ​ໂມງ​ຈັບ​ເວ​ລາ​ຄືນ​ໃໝ່​ແລ້ວ"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"ໂມງຈັບເວລາຮອບ​ແລ້ວ"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"​ໂມງ​ຈັບ​ເວ​ລາເລີ່ມ​ຕົ້ນ​ແລ້ວ"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"ບໍ່​ມີໂມງ​ປຸກ​ກຳ​ນົດ​ເວ​ລາ​ໃຫ້ກັບ​ເວ​ລາ​ນີ້"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> ໂມງ​ປຸກ​ຖືກ​ປິດ​ໄວ້​ແລ້ວ"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"ໂມງ​ປຸກ​ຖືກ​ຕັ້ງ​ໃນ​ເວ​ລາ <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"ບໍ່​ມີການ​ຈັບ​ເວ​ລາ​ກຳ​ນົດ​ໄວ້"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"ລຶບ​ເຄື່ອງ​ຈັບ​ເວ​ລາ​ແລ້ວ"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"ເຄື່ອງ​ຈັບ​ເວ​ລາ​ແລ່ນ​ຢູ່​ແລ້ວ"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"ບໍ່​ສາ​ມາດ​ດຳ​ເນີນ​ການ​ຂໍ​ຂອ​ງ​ທ່ານ​ໃຫ້​ສຳ​ເລັດ​ໄດ້, ມີ​ການ​ຈັບ​ເວ​ລາ​ຫຼາຍ​ອັນ​ຢູ່​ໃຫ້"</string>
-    <string name="timer_started" msgid="6715582052946641641">"​ເລີ່ມ​ການ​ຈັບ​ເວ​ລາ​ແລ້ວ"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"ບໍ່​ມີ​ເຄື່ອງ​ຈັບ​ເວ​ລາ​ຢູ່"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"ມີ​ຕົວ​ຈັບ​ເວ​ລາ​ຢູ່​ຫຼາຍ​ກ່​ວາ​ໜຶ່ງ​ອັນ"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"ຕົວ​ຈັບ​ເວ​ລາ​ຖືກ​ເອົາ​ອອກ​ແລ້ວ."</string>
     <string name="timer_created" msgid="4381027137335885547">"ສ້າງ​ການ​ຕັ້ງ​ເວ​ລາ​ແລ້ວ"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"ຄວາມ​ຍາວ​ການ​ຕັ້ງ​ເວ​ລາ​ບໍ່​ຖື​ກ​ຕ້ອງ"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"ການ​ຈັດ​ເວ​ລາ​ຕັ້ງ​ຄ່າ​ຄືນ​ໃໝ່​ແລ້ວ"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"ບໍ່​ສາ​ມາ​ຕັ້ງ​ຄ່າການ​ຈັບ​ເວ​ລາ​ຄືນ​ໃໝ່​ໄດ້ ເພາະ​ວ່າ​ມັນ​ກຳ​ລັງ​ແລ່ນ​ຢູ່. ຢຸດການ​ຈັບ​ເວ​ລາ ເພື່ອ​ຕັ້ງ​ຄືນ​ໃໝ່."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"ເຄື່ອງ​ຈັບ​ເວ​ລາ​ຢຸດ​ແລ້ວ"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"ລຶບ​ເຄື່ອງ​ຈັບ​ເວ​ລາ​ແລ້ວ"</string>
+    <string name="timer_started" msgid="6715582052946641641">"​ເລີ່ມ​ການ​ຈັບ​ເວ​ລາ​ແລ້ວ"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"ຄວາມ​ຍາວ​ການ​ຕັ້ງ​ເວ​ລາ​ບໍ່​ຖື​ກ​ຕ້ອງ"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"ບໍ່​ມີ​ເມືອງ​ຖືກ​ເລືອກ​ໄວ້"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"ບໍ່​ມີ​ເມືອງ​ທີ່​ທ່ານ​ລະ​ບຸນັ້ນ​ຢູ່"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"ເພີ່ມ​ເມືອງນັ້ນ​ໃສ່​ຮຽບ​ຮ້ອຍ​ແລ້ວ"</string>
diff --git a/res/values-lt/array.xml b/res/values-lt/array.xml
index 9b834e4..0c89f00 100644
--- a/res/values-lt/array.xml
+++ b/res/values-lt/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Terkas"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Gvatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Gvatemalos miestas"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Gajana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifaksas"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Torontas"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vankuveris"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Vinipegas"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Pietų ašigalis"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Pietų ašigalis<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longjyrbienas"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almata"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amanas"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebronas"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Či Minis"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Honkongas"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Honkongas<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Stambulas"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Džakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jeruzalė"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Maskatas"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Pnom Penis"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pchenjanas"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pchenjanas<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Kataras"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Jangonas"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Rijadas"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigonas"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seulas"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Šanchajus"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Šanchajus<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapūras"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taibėjus"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taibėjus<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheranas"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Avivas"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokijas"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokijas<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulan Batoras"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Kanarų salos"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Rinas"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Miestas Juodųjų Uolų dykumoje"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Pekinas"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Pekinas<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbajus"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delis"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahoras"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sana"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barselona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Keimbridžas"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kerklandas"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madisonas"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangdžou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangdžou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Haidarabadas"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Restonas"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Orizontė"</item>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 84e818c..7c6af3a 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Rodyti laikrodį"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Slėpti laikrodį"</string>
     <string name="label" msgid="162189613902857319">"Etiketė"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Įjungta"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Išjungta"</string>
     <string name="default_label" msgid="5590025289805630372">"Signalas"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Nustatyti signalą"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibruoti"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Kartoti"</string>
     <string name="alert" msgid="6506982899651975645">"Signalo skambėjimo tonas"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Tinkintas skambėjimo tonas"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Baigėsi laikmačio galiojimas"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Begarsis"</string>
     <string name="ringtone" msgid="9110746249688559579">"Skambėjimo tonas"</string>
     <string name="time" msgid="8067216534232296518">"Laikas"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Rytoj"</string>
@@ -62,12 +65,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Snaudžiama iki <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Artimiausias signalas"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Praleistas signalas buvo ištrintas"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Liko mažiau nei minutė"</item>
-    <item msgid="83197792732433351">"Liko <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Liko <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Liko <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Liko mažiau nei minutė"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Liko <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"Liko"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"Liko"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Signalas nustatytas skambėti po mažiau nei 1 min. nuo dabar."</item>
     <item msgid="6002066367368421848">"Signalas nustatytas skambėti po <xliff:g id="DAYS">%1$s</xliff:g> nuo dabar."</item>
@@ -115,6 +118,10 @@
       <item quantity="many">minutės</item>
       <item quantity="other">minučių</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Tolygiai didinti garsumą"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Išjungta"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> sek."</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sek."</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Nutildyti po"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutė</item>
@@ -142,7 +149,8 @@
     <string name="revert" msgid="9100911171235162926">"Grąžinti"</string>
     <string name="delete" msgid="5732434972457000541">"Ištrinti"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Signalo garsumas"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Tylus"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Begarsis"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Nežinomas"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Snausti arba atmesti signalą."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (snaudė)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Signalas nustatytas skambėti <xliff:g id="TIME">%s</xliff:g>. Jei norite atšaukti, palieskite."</string>
@@ -167,8 +175,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Įkeliamas skambėjimo tonas..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Garso atkūrimo paslauga, skirta laikrodžio nustatytiems laikmačiams."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Nustatyti signalą"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Signalas"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Laikmatis"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Laikrodis"</string>
@@ -183,10 +189,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Rūšiuoti pagal pavadinimą"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Pasirinkti miestai"</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_start_button" msgid="8373422516681242270">"Pradėti"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pristabdyti"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Ratas"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Bendrinti"</string>
     <string name="hours_label" msgid="3393478155635368097">"val."</string>
     <string name="minutes_label" msgid="3568098128251438588">"min."</string>
@@ -198,10 +204,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Mano laikas yra <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Persidengiantis laikas:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g> ratas"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Nr. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Nr. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> valanda</item>
       <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> valandos</item>
@@ -227,12 +229,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Pridėti 1 minutę"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Pridėti 1 min."</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stabdyti"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Atlikta"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Sustabdyti visus laikmač."</string>
     <string name="timer_reset" msgid="7848424809190171640">"Nustatyti iš naujo"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Atšaukti"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Laikmatis atšauktas"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Laikas baigėsi"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Baig. <xliff:g id="NUM_TIMERS">%d</xliff:g> laikm. galioj. l."</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Laikmatis"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Daugiausia 4 laikmačiai"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pristabdyti"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Iš n. nust. vis. laikm."</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Pasiekėte ganėtinai didelį greitį."</item>
     <item msgid="6332879039890727169">"Mėgaukitės darbo vaisiais."</item>
@@ -249,6 +255,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Miestai"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Laikrodis"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stilius"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Pakeisti datą ir laiką"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analoginis"</item>
     <item msgid="8483930821046925592">"Skaitmeninis"</item>
@@ -263,6 +270,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"–"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> (pažymėta)"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> (nepažymėta)"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Maršalo Salos"</item>
     <item msgid="4196408495909011020">"Midvėjaus Sala"</item>
@@ -351,13 +360,17 @@
     <item msgid="5176858645450908751">"Džakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Signalai"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Chronometro paslauga, skirta pranešimui paleisti."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Sustabdyta"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Apdoroja veiksmus iš laikmačio pranešimų."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Apdoroja veiksmus iš chronometro pranešimų."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Pristabdyta"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Perbraukite į dešinę, kad atmestumėte"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Perbraukite į kairę, kad nustatytumėte snaudimą"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Perbraukite į kairę, kad nustatytumėte snaudimą, arba į dešinę, kad atsisakytumėte"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Laikmačiai"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Laikmačio skambėjimo tonas"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Laikmatis sustabdytas"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Sustabdytų laikmačių: <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Laikmatis pristabdytas"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Pristabdytų laikmačių: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Palieskite, jei norite peržiūrėti laikmačius"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"Laikmačių: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Kitas laikmatis: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -385,35 +398,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Signalų nėra"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Signalų nenust."</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NĖRA BŪSIMŲ SIGNALŲ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Netinkamas laikas <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Nėra signalo <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nėra suplanuotų signalų"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nenurodyta jokių etikečių"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Nėra jokių signalų su etikete"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Chronometras jau veikia"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Chronometras neveikia"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Negalima iš naujo nustatyti chronometro, nes jis veikia"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Chronometras sustabdytas"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Chronometras pristabdytas"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Chronometras nustatytas iš naujo"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Nustatytas chronometro etapas"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Chronometras paleistas"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Šiuo laiku nėra nesuplanuoto signalo"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> signalo atsisakyta"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Signalas nustatytas <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Laikmatis nenustatytas"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Laikmatis ištrintas"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Laikmatis jau veikia"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Nepavyko įvykdyti užklausos, galimi keli laikmačiai"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Laikmatis paleistas"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Nėra laikmačių"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Yra keli laikmačiai"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Laikmatis pašalintas."</string>
     <string name="timer_created" msgid="4381027137335885547">"Laikmatis sukurtas"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Netinkama laikmačio trukmė"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Laikmatis nustatytas iš naujo"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Negalima iš naujo nustatyti laikmačio, nes jis dar veikia. Sustabdykite laikmatį, kad nustatytumėte iš naujo."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Laikmatis jau sustabdytas"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Laikmatis ištrintas"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Laikmatis paleistas"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Netinkama laikmačio trukmė"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Nepasirinktas joks miestas"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Nurodytas miestas nepasiekiamas"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Šis miestas jau pridėtas"</string>
diff --git a/res/values-lv/array.xml b/res/values-lv/array.xml
index 3d1f93d..99d75ab 100644
--- a/res/values-lv/array.xml
+++ b/res/values-lv/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grandtkērka"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenāda"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Gvatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Gvatemala"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Gajāna"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Helifeksa"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vankūvera"</item>
     <item msgid="8935386104773857399">"V<xliff:g id="SEPARATOR">=</xliff:g>Vinipega"</item>
-    <item msgid="1132634022412399582">"D<xliff:g id="SEPARATOR">=</xliff:g>Dienvidpols"</item>
+    <item msgid="498429228419399474">"D<xliff:g id="SEPARATOR">=</xliff:g>Dienvidpols<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longjērbīene"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almati"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Ammāna"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hībrona"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Hošimina"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Honkonga"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Honkonga<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"S<xliff:g id="SEPARATOR">=</xliff:g>Stambula"</item>
     <item msgid="758800913783999425">"D<xliff:g id="SEPARATOR">=</xliff:g>Džakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jeruzaleme"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Maskata"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Pnompeņa"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Phenjana"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Phenjana<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"K<xliff:g id="SEPARATOR">=</xliff:g>Katara"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangūna"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Rijāda"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigona"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seula"</item>
-    <item msgid="583367295371395814">"Š<xliff:g id="SEPARATOR">=</xliff:g>Šanhaja"</item>
+    <item msgid="3814881931186962624">"Š<xliff:g id="SEPARATOR">=</xliff:g>Šanhaja<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapūra"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipeja"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipeja<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teherāna"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Telaviva"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokija"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokija<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulanbatora"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanāriju salas"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Rīno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Blekroka"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Pekina"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Pekina<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbaja"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Deli"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahora"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barselona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"K<xliff:g id="SEPARATOR">=</xliff:g>Kembridža"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kērklenda"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Medisona"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangžou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangžou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Haidarabada"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Restona"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Orizonte"</item>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 5deef86..eb13ed5 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Rādīt pulksteni"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Slēpt pulksteni"</string>
     <string name="label" msgid="162189613902857319">"Iezīme"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Ieslēgts"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Izslēgts"</string>
     <string name="default_label" msgid="5590025289805630372">"Signāls"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Iestatīt signālu"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrozvans"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Atkārtošana"</string>
     <string name="alert" msgid="6506982899651975645">"Modinātāja signāls"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Pielāgots zvana signāls"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Taimera laiks ir beidzies"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Klusums"</string>
     <string name="ringtone" msgid="9110746249688559579">"Zvana signāls"</string>
     <string name="time" msgid="8067216534232296518">"Laiks"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Rīt"</string>
@@ -60,12 +63,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Atlikts līdz: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Gaidāms signāls"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Jūsu nokavētais signāls ir dzēsts."</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Atlikušais laiks: mazāk par minūti"</item>
-    <item msgid="83197792732433351">"Atlikušais laiks: <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Atlikušais laiks: <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Atlikušais laiks: <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Atlikušais laiks: mazāk par minūti"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Atlikušais laiks: <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"atlikusi"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"atlikušas"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Signāls iestatīts uz tālāk norādīto laiku kopš šī brīža: mazāk nekā 1 minūte."</item>
     <item msgid="6002066367368421848">"Signāls iestatīts uz tālāk norādīto laiku kopš šī brīža: <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -108,6 +111,10 @@
       <item quantity="one">minūte</item>
       <item quantity="other">minūtes</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Pakāpeniski palielināt skaļumu"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Izslēgts"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> sekundes"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sekundes"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Izslēgt skaņu pēc:"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="zero"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minūtes</item>
@@ -134,7 +141,8 @@
     <string name="revert" msgid="9100911171235162926">"Atjaunot"</string>
     <string name="delete" msgid="5732434972457000541">"Dzēst"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Signāla skaļums"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Klusums"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Klusums"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Nezināms"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Atlieciet vai noraidiet signālu."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (atlikts)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Signāls iestatīts uz: <xliff:g id="TIME">%s</xliff:g>. Pieskarieties, lai atceltu."</string>
@@ -159,8 +167,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Notiek zvana signāla ielāde…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Skaņas atskaņošanas pakalpojums lietotnē Pulkstenis iestatītajiem taimeriem."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Iestatīt signālu"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Signāls"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Taimeris"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Pulkstenis"</string>
@@ -175,10 +181,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Kārtot pēc nosaukuma"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Atlasītās pilsētas"</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_start_button" msgid="8373422516681242270">"Sākt"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pārtraukt"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Aplis"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Kopīgot"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -190,10 +196,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Mans laiks ir: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Intervāla laiki:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. aplis"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Skaits: <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Skaits: <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="zero"><xliff:g id="NUMBER">%d</xliff:g> stundas</item>
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> stunda</item>
@@ -216,12 +218,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Pievienot 1 minūti"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Pievienot 1 minūti"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Apturēt"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Gatavs"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Apturēt visus taimerus"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Atiestatīt"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Atcelt"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Taimera iestatīšana ir atcelta"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Laiks ir beidzies!"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> taimeru termiņš beidzies"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Taimeris"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Ne vairāk kā 4 taimeri"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Apturēt"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Atiest. taimerus"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Jūs gan esat ātrs!"</item>
     <item msgid="6332879039890727169">"Baudiet sava darba augļus!"</item>
@@ -238,6 +244,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Pilsētas"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Pulkstenis"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stils"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Datuma un laika maiņa"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogais"</item>
     <item msgid="8483930821046925592">"Digitālais"</item>
@@ -252,6 +259,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"–"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Pilsēta <xliff:g id="CITY_NAME">%s</xliff:g> ir atzīmēta"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Pilsētas <xliff:g id="CITY_NAME">%s</xliff:g> atzīme ir noņemta"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Māršala Salas"</item>
     <item msgid="4196408495909011020">"Midveja sala"</item>
@@ -340,13 +349,17 @@
     <item msgid="5176858645450908751">"Džakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Signāli"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Hronometra pakalpojums paziņojuma darbībai."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Apturēts"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Apstrādā darbības no taimera paziņojumiem."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Apstrādā darbības no hronometra paziņojumiem."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Pārtraukts"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Lai nerādītu, velciet pa labi"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Lai atliktu, velciet pa kreisi"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Velciet pa kreisi, lai atliktu, vai pa labi, lai noraidītu"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Taimeri"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Taimera zvana signāls"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Taimeris ir apturēts."</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> taimeri ir apturēti."</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Taimeris apturēts"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Apturēti <xliff:g id="NUMBER">%d</xliff:g> taimeri"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Pieskarieties, lai skatītu savus taimerus."</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> taimeri"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Nākamais taimeris: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -373,35 +386,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Bez signāla"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Nav signālu"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NAV GAIDĀMU SIGNĀLU"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm priekšpusdienā"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, plkst. h:mm priekšpusdienā"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, plkst. k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Nederīgs laiks: <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Uz laiku <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> nav iestatīts neviens signāls."</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nav iestatītu signālu."</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nav norādīts neviens apzīmējums."</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Apzīmējums nav piešķirts nevienam signālam."</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Hronometrs jau darbojas."</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Hronometrs nedarbojas."</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Hronometru nevar atiestatīt, jo tas darbojas."</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Hronometra darbība pārtraukta"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Hronometra darbība pārtraukta"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Hronometrs atiestatīts"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Hronometra laiks pārklāts"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Hronometra darbība sākta"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Uz šo laiku nav iestatīts neviens signāls."</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Signāls plkst. <xliff:g id="ALARM_TIME">%s</xliff:g> atcelts"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Signāls iestatīts uz plkst. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Taimeris nav iestatīts."</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Taimeris ir izdzēsts."</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Taimeris jau darbojas."</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Nevar izpildīt jūsu pieprasījumu; ir pieejami vairāki taimeri."</string>
-    <string name="timer_started" msgid="6715582052946641641">"Taimeris ir iestatīts."</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Nav neviena taimera."</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Ir iestatīti vairāki taimeri."</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Taimeris ir noņemts."</string>
     <string name="timer_created" msgid="4381027137335885547">"Taimeris iestatīts"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Nederīgs taimera darbības ilgums"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Taimeris ir atiestatīts."</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Taimeri nevar atiestatīt, jo tas joprojām darbojas. Apturiet taimeri, lai to atiestatītu."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Taimeris jau ir apturēts."</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Taimeris ir izdzēsts."</string>
+    <string name="timer_started" msgid="6715582052946641641">"Taimeris ir iestatīts."</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Nederīgs taimera darbības ilgums"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Nav atlasīta neviena pilsēta."</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Norādītā pilsēta nav pieejama."</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Šī pilsēta jau ir pievienota."</string>
diff --git a/res/values-mk-rMK/array.xml b/res/values-mk-rMK/array.xml
index 71d1253..06cfb40 100644
--- a/res/values-mk-rMK/array.xml
+++ b/res/values-mk-rMK/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Форталеза"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Гранд Турк"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Гренада"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Гватемала"</item>
+    <item msgid="6216160110733510854">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемала"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Гвајана"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Халифакс"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Хавана"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Торонто"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Ванкувер"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Винипег"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Јужен пол"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Јужен пол<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Лонгиербјен"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Алмати"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Аман"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Газа"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Хеброн"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Хо Ши Мин"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Хонг Конг"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Хонг Конг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Истанбул"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Џакарта"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Ерусалим"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Манила"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Мускат"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Пном Пен"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Пјонгјанг"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Пјонгјанг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Катар"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Рангун"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Ријад"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Сајгон"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Сеул"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Шангај"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Шангај<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Сингапур"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Тајпеј"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Тајпеј<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Техеран"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Тел Авив"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Токио"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Токио<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Улан Батор"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Бермуда"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Канари"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Рино"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Блек Рок Сити"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Доха"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Пекинг"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Пекинг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Мумбај"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Делхи"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Осака"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Осака<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Лахор"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Санаа"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Барселона"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Кембриџ"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Киркланд"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Мадисон"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Гуангжу"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Гуангжу<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Хајдерабад"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Рестон"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Бело Хоризонте"</item>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index a5591bf..f61e9dd 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Покажи часовник"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Сокриј часовник"</string>
     <string name="label" msgid="162189613902857319">"Ознака"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Вклучено"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Исклучено"</string>
     <string name="default_label" msgid="5590025289805630372">"Аларм"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Постави аларм"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Вибрации"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Се повторува"</string>
     <string name="alert" msgid="6506982899651975645">"Мелодија за аларм"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Приспособена мелодија"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Тајмерот истече"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Тивка мелодија"</string>
     <string name="ringtone" msgid="9110746249688559579">"Мелодија"</string>
     <string name="time" msgid="8067216534232296518">"Време"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Утре"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Одложи до <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Претстоен аларм"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Вашиот пропуштен аларм е избришан"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Преостанува помалку од една минута"</item>
-    <item msgid="83197792732433351">"Преостануваат <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Преостануваат <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Преостануваат <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Преостанува помалку од една минута"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g><xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g><xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Преостануваат <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"Преостанува"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"Преостануваат"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Алармот е поставен за помалку од 1 минута од сега."</item>
     <item msgid="6002066367368421848">"Алармот е поставен за <xliff:g id="DAYS">%1$s</xliff:g> од сега."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">минута</item>
       <item quantity="other">минути</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Постепено зголемувај ја јачината на звукот"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Исклучено"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> секунди"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"секунди"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Исклучи звук по"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> минута</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Врати"</string>
     <string name="delete" msgid="5732434972457000541">"Избриши"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Јачина на звук на аларм"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"На тивко"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Безгласен режим"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Непознато"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Одложете или отфрлете аларм."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (одложен)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Аларм поставен за <xliff:g id="TIME">%s</xliff:g>. Допрете да откажете."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Вчитување мелодија…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Услуга за репродукција на звук за тајмери поставени во Часовник."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Постави аларм"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Аларм"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Тајмер"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Часовник"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Подреди по име"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Избрани градови"</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_start_button" msgid="8373422516681242270">"Започни"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Круг"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Сподели"</string>
     <string name="hours_label" msgid="3393478155635368097">"ч"</string>
     <string name="minutes_label" msgid="3568098128251438588">"м"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Моето време е <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Времиња на изминат круг:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Круг <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> час</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> часа</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Додај 1 минута"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Додај 1 мин"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Запри"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Готово"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Запри ги сите тајмери"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Ресетирај"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Откажи"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Тајмерот е откажан"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Времето истече"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> тајмери се истечени"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Тајмер"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Максимум 4 тајмери"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Паузирај"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Ресетирај ги сите тајмери"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Брзи сте како молња."</item>
     <item msgid="6332879039890727169">"Уживајте во плодовите од вашата работа."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Градови"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Часовник"</string>
     <string name="clock_style" msgid="2265011060429742344">"Стил"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Промени ги датумот и времето"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Аналоген"</item>
     <item msgid="8483930821046925592">"Дигитален"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> е избрано"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> не е избрано"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Маршалски Острови"</item>
     <item msgid="4196408495909011020">"Остров Мидвеј"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Џакарта"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Аларми"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Услуга со стоперка за активирање на известувањето."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Запрено"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Обработува дејства од известувањата на тајмерот."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Обработува дејства од известувањата на стоперката."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Паузирано"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Повлечете надесно за да отфрлите"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Повлечете налево за да одложите"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Повлечете налево за да одложите или надесно за да отфрлите"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Тајмери"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Мелодија на тајмерот"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Тајмерот е запрен"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"запрени <xliff:g id="NUMBER">%d</xliff:g> тајмери"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Тајмерот е паузиран"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> тајмери се паузирани"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Допрете за да ги видите вашите тајмери"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> тајмери"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Следен тајмер: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Нема аларми"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Нема аларм"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"НЕМА ПРЕТСТОЈНИ АЛАРМИ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"ч:мм прет."</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Неважечко време <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Нема аларм во <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Нема закажани аларми"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Не е наведена етикета"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Ниеден аларм не ја содржи етикетата"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Штоперицата веќе работи"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Штоперицата не работи"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Штоперицата работи и не може да се ресетира"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Штоперицата запре"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Стоперката е паузирана"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Штоперицата се ресетираше"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Штоперицата се преклопи"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Штоперицата се вклучи"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Нема закажано аларм во ова време"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Алармот во <xliff:g id="ALARM_TIME">%s</xliff:g> е отфрлен"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Алармот е поставен за <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Нема поставен тајмер"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Тајмерот е избришан"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Тајмерот веќе работи"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Вашето барање не може да се исполни бидејќи има повеќе достапни тајмери"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Тајмерот е вклучен"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Нема тајмери"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Има повеќе од еден тајмер"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Тајмерот е отстранет."</string>
     <string name="timer_created" msgid="4381027137335885547">"Тајмерот е создаден"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Неважечка должина на тајмер"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Тајмерот е ресетиран"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Тајмер не може да се ресетира бидејќи уште работи. Запрете го тајмерот за да го ресетирате."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Тајмер веќе запре"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Тајмерот е избришан"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Тајмерот е вклучен"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Неважечка должина на тајмер"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Нема избран град"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Градот што го зададовте не е достапен"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Тој град веќе е додаден"</string>
diff --git a/res/values-ml-rIN/array.xml b/res/values-ml-rIN/array.xml
index 9a9176c..0cc6b64 100644
--- a/res/values-ml-rIN/array.xml
+++ b/res/values-ml-rIN/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>ഫോര്‍ട്ടാലീസ"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>ഗ്രാൻഡ് ടർക്ക്"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>ഗ്രനേഡ"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>ഗ്വാട്ടിമാല"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>ഗ്വാട്ടിമാല സിറ്റി"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>ഗയാന"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>ഹാലിഫാക്സ്"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>ഹവാന"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>ടൊറന്റോ‍"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>വാൻകൂവർ"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>വിന്നിപെഗ്"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>ദക്ഷിണ ധ്രുവം"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>ദക്ഷിണ ധ്രുവം<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>ലംഗ്‍യെർബിൻ"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>അൽമാട്ടി"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>അമ്മാൻ"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>ഗാസ"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>ഹെബ്രോൻ"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>ഹോ ചി മിൻ"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>ഹോംഗ് കോംഗ്"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>ഹോംഗ് കോംഗ്<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>ഈസ്‌താൻബുൾ"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>ജക്കാർത്ത"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>ജറൂസലെം"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>മനില"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>മസ്‌കറ്റ്"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>ഫ്നോം പെൻ"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>പ്യോംഗ്‌യാംഗ്"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>പ്യോംഗ്‌യാംഗ്<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>ഖത്തർ"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>റങ്കൂൺ"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>റിയാദ്"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>സായിഗോൺ"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>സോൾ"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>ഷംഗായി"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>ഷംഗായി<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>സിംഗപ്പൂര്‍"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>തായ്പേയ്"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>തായ്പേയ്<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>ടെഹ്‌റാൻ"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>ടെൽ അവീവ്"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>ടോക്കിയോ"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>ടോക്കിയോ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>ഉലാൻബത്തർ"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>ബര്‍മുഡ"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>കാനറി"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>റെനോ"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>ബ്ലാക്ക് റോക്ക് സിറ്റി"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>ദോഹ"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>ബെയ്‌ജിംഗ്"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>ബെയ്‌ജിംഗ്<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>മുംബൈ"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>ഡൽഹി"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>ഒസാകാ"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>ഒസാകാ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>ലാഹോർ"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>സാനാ"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>ബാർസെലോണ"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>കേംബ്രിഡ്ജ്"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>കിർക്‌ലാന്റ്"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>മാഡിസൺ"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>ഗ്വാങ്‌ജോ"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>ഗ്വാങ്‌ജോ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>ഹൈദരാബാദ്"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>റെസ്‌റ്റൺ"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>ബെലോ ഹൊറിസോണ്ടെ"</item>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index ad3907e..3bbdd16 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"ക്ലോക്ക് കാണിക്കുക"</string>
     <string name="hide_clock" msgid="3217727306480505694">"ക്ലോക്ക് മറയ്‌ക്കുക"</string>
     <string name="label" msgid="162189613902857319">"ലേബൽ"</string>
+    <string name="on_switch" msgid="2297966258029227449">"ഓൺ"</string>
+    <string name="off_switch" msgid="3381070073851148013">"ഓഫ്"</string>
     <string name="default_label" msgid="5590025289805630372">"അലാറം"</string>
     <string name="set_alarm" msgid="9148359866152726808">"അലാറം സജ്ജീകരിക്കുക"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"വൈബ്രേറ്റുചെയ്യുക"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"ആവർത്തിക്കുക"</string>
     <string name="alert" msgid="6506982899651975645">"അലാറം റിംഗ്‌ടോൺ"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"കസ്റ്റം റിംഗ്ടോൺ"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"ടൈമർ കാലഹരണപ്പെട്ടു"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"നിശബ്‌ദം"</string>
     <string name="ringtone" msgid="9110746249688559579">"റിംഗ്ടോൺ"</string>
     <string name="time" msgid="8067216534232296518">"സമയം"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"നാളെ"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> വരെ സ്‌നൂസ് ചെയ്യുന്നു"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"വരാനിരിക്കുന്ന അലാറം"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"നിങ്ങൾ നഷ്‌ടപ്പെടുത്തിയ അലാറം ഇല്ലാതാക്കി"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"ഒരു മിനിറ്റിലും താഴെ ശേഷിക്കുന്നു"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> ശേഷിക്കുന്നു"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> ശേഷിക്കുന്നു"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ശേഷിക്കുന്നു"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"ഒരു മിനിറ്റിലും താഴെ ശേഷിക്കുന്നു"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ശേഷിക്കുന്നു"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"ശേഷിക്കുന്നു"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"ശേഷിക്കുന്നു"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"ഇപ്പോൾ 1 മിനിറ്റിൽ താഴെ സമയത്തിനുള്ളിൽ അടിക്കാൻ അലാറം സജ്ജമാക്കി."</item>
     <item msgid="6002066367368421848">"ഇപ്പോൾ മുതൽ <xliff:g id="DAYS">%1$s</xliff:g> ദിവസത്തേക്ക് അലാറം സജ്ജീകരിച്ചു."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">മിനിറ്റ്</item>
       <item quantity="one">മിനിറ്റ്</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"സാവധാനം വോളിയം കൂട്ടിക്കൊണ്ടുവരിക"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"ഓഫ്"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> സെക്കൻഡ്"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"സെക്കൻഡ്"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"ഇതിനുശേഷം നിശബ്‌ദമാക്കുക"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> മിനിറ്റ്</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"പഴയപടിയാക്കുക"</string>
     <string name="delete" msgid="5732434972457000541">"ഇല്ലാതാക്കുക"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"അലാറം വോളിയം"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"നിശബ്‌ദം"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"നിശബ്‌ദം"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"അജ്ഞാതം"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"സ്‌നൂസ് ചെയ്യുക അല്ലെങ്കിൽ അലാറം നിരസിക്കുക."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (സ്‌നൂസ് ചെയ്‌തു)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"<xliff:g id="TIME">%s</xliff:g> സമയത്തേക്ക് അലാറം സജ്ജീകരിച്ചു. റദ്ദാക്കുന്നതിന് സ്‌പർശിക്കുക."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"റിംഗ്‌ടോൺ ലോഡുചെയ്യുന്നു…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"ടൈമറുകൾക്കായുള്ള ശബ്‌ദ പ്ലേബാക്ക് സേവനം ക്ലോക്കിൽ സജ്ജമാക്കിയിരിക്കുന്നു."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"അലാറം സജ്ജീകരിക്കുക"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"അലാറം"</string>
     <string name="menu_timer" msgid="6459070074762877114">"ടൈമർ"</string>
     <string name="menu_clock" msgid="5612760670606829805">"ക്ലോക്ക്"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"പേര് പ്രകാരം അടുക്കുക"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"തിരഞ്ഞെടുത്ത നഗരങ്ങൾ"</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_start_button" msgid="8373422516681242270">"ആരംഭിക്കൂ"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"ലാപ്"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"പങ്കിടുക"</string>
     <string name="hours_label" msgid="3393478155635368097">"മ."</string>
     <string name="minutes_label" msgid="3568098128251438588">"മി."</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"എന്റെ സമയം <xliff:g id="TIME">%s</xliff:g> ആണ്"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"ലാപ് തവണകൾ:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"ലാപ് <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> മണിക്കൂർ</item>
       <item quantity="one">ഒരു മണിക്കൂർ</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"ഒരു മിനിറ്റ് ചേർക്കുക"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"ഒരു മിനിറ്റ് ചേർക്കുക"</string>
     <string name="timer_stop" msgid="3361154678667736722">"നിര്‍ത്തുക"</string>
-    <string name="timer_done" msgid="2375990511982914051">"പൂർത്തിയായി"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"എല്ലാ ടൈമറുകളും നിർത്തുക"</string>
     <string name="timer_reset" msgid="7848424809190171640">"പുനസജ്ജമാക്കൂ"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"റദ്ദാക്കുക"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"ടൈമർ റദ്ദാക്കി"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"സമയം കഴിഞ്ഞു"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ടൈമറുകൾ കാലഹരണപ്പെട്ടു"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"ടൈമർ"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"പരമാവധി 4 ടൈമറുകൾ"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"തൽക്കാലം നിർത്തൂ"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"എല്ലാ ടൈമറുകളും പുനഃസജ്ജമാക്കുക"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"നിങ്ങൾ വളരെ വേഗത്തിലായിരിക്കുന്നു."</item>
     <item msgid="6332879039890727169">"നിങ്ങളുടെ കഠിനാദ്ധ്വാനത്തിന്റെ ഫലങ്ങൾ ആസ്വദിക്കുക."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"നഗരങ്ങൾ"</string>
     <string name="clock_settings" msgid="8317286807280600391">"ക്ലോക്ക്"</string>
     <string name="clock_style" msgid="2265011060429742344">"സ്റ്റൈൽ"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"തീയതിയും സമയവും മാറ്റുക"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"അനലോഗ്"</item>
     <item msgid="8483930821046925592">"ഡിജിറ്റൽ"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ചെക്കുചെയ്തു"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> അൺചെക്കുചെയ്തു"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"മാര്‍ഷല്‍ ഐലന്‍ഡ്സ്"</item>
     <item msgid="4196408495909011020">"മിഡ്‌‌വേ ഐലന്റ്"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"ജക്കാര്‍ത്ത"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"അലാറങ്ങൾ"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"അറിയിപ്പ് പ്രവർത്തിപ്പിക്കുന്നതിനുള്ള സ്‌റ്റോപ്പ്‌വാച്ച് സേവനം."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"നിർത്തി"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"ടൈമർ അറിയിപ്പുകളിൽ നിന്നുള്ള പ്രവർത്തനങ്ങൾ പ്രോസസ്സുചെയ്യുന്നു."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"സ്റ്റോപ്പ്‌വാച്ച് അറിയിപ്പുകളിൽ നിന്നുള്ള പ്രവർത്തനങ്ങൾ പ്രോസസ്സുചെയ്യുന്നു."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"താല്‍ക്കാലം നിര്‍ത്തി"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"നിരസിക്കാൻ വലത്തോട്ട് സ്വൈപ്പുചെയ്യുക"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"സ്‌നൂസ് ചെയ്യാൻ ഇടത്തോട്ട് സ്വൈപ്പുചെയ്യുക"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"സ്‌നൂസ് ചെയ്യാൻ ഇടത്തോട്ടോ നിരസിക്കാൻ വലത്തോട്ടോ സ്വൈപ്പുചെയ്യുക"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"ടൈമറുകൾ"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"ടൈമർ റിംഗ്ടോൺ"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"ടൈമർ നിർത്തി"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> ടൈമറുകൾ നിർത്തി"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"ടൈമർ തൽക്കാലം നിർത്തി"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> ടൈമറുകൾ തൽക്കാലം നിർത്തി"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"നിങ്ങളുടെ ടൈമറുകൾ കാണുന്നതിന് സ്‌പർശിക്കുക"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ടൈമറുകൾ"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"അടുത്ത ടൈമർ: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"അലാറങ്ങളില്ല"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"അലാറങ്ങളൊന്നും സജ്ജീകരിച്ചിട്ടില്ല"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"വരാനിരിക്കുന്ന അലാറങ്ങളൊന്നുമില്ല"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"അസാധുവായ സമയം <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>-ന് അലാറം ഒന്നുമില്ല"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"ഷെഡ്യൂൾ ചെയ്ത അലാറമുകളൊന്നുമില്ല"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"ലേബലൊന്നും വ്യക്തമാക്കിയിട്ടില്ല"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"അലാറമുകളിലൊന്നും ഈ ലേബൽ അടങ്ങിയിട്ടില്ല"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"സ്റ്റോപ്പ്‌വാച്ച് ഇതിനകം തന്നെ പ്രവർത്തിക്കുന്നുണ്ട്"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"സ്റ്റോപ്പ്‌വാച്ച് പ്രവർത്തിക്കുന്നില്ല"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"പ്രവർത്തിച്ചുകൊണ്ടിരിക്കുന്നതിനാൽ സ്റ്റോപ്പ്‌വാച്ച് പുനഃക്രമീകരിക്കാൻ കഴിയില്ല"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"സ്റ്റോപ്പ്‌വാച്ച് നിലച്ചു"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"സ്‌റ്റോപ്പ്‌വാച്ച് തൽക്കാലം നിർത്തി"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"സ്റ്റോപ്പ്‌വാച്ച് പുനഃക്രമീകരിച്ചു"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"സ്റ്റോപ്പ്‌വാച്ച് ലാപ്പുചെയ്തു"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"സ്റ്റോപ്പ്‌വാച്ച് ആരംഭിച്ചു"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"ഈ സമയത്തേക്കായി അലാറമുകളൊന്നും ഷെഡ്യൂൾ ചെയ്തിട്ടില്ല"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> അലാറം ഡിസ്മിസ് ചെയ്തു"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g>-ന് അലാറം സജ്ജീകരിച്ചു"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"സജ്ജമാക്കിയ ടൈമറുകളൊന്നുമില്ല"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"ടൈമർ ഇല്ലാതാക്കി"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"ടൈമർ ഇതിനകം തന്നെ പ്രവർത്തിക്കുന്നു"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"അഭ്യർത്ഥന പൂർത്തിയാക്കാനാവുന്നില്ല, ഒന്നിലധികം ടൈമറുകൾ ലഭ്യം"</string>
-    <string name="timer_started" msgid="6715582052946641641">"ടൈമർ ആരംഭിച്ചു"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"ടൈമറുകളൊന്നും നിലവിലില്ല"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"ഒന്നിലധികം ടൈമർ നിലവിലുണ്ട്"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"ടൈമർ നീക്കംചെയ്തു."</string>
     <string name="timer_created" msgid="4381027137335885547">"ടൈമർ സൃഷ്ടിച്ചു"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"ടൈമർ ദൈർഘ്യം അസാധുവാണ്"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"ടൈമർ പുനഃസജ്ജമാക്കി"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"ടൈമർ ഇതിനകം തന്നെ പ്രവർത്തിക്കുന്നതിനാൽ, പുനഃസജ്ജമാക്കാൻ കഴിയില്ല. പുനഃസജ്ജമാക്കാൻ ടൈമർ നിർത്തുക."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"ടൈമർ ഇതിനകം തന്നെ നിർത്തി"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"ടൈമർ ഇല്ലാതാക്കി"</string>
+    <string name="timer_started" msgid="6715582052946641641">"ടൈമർ ആരംഭിച്ചു"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"ടൈമർ ദൈർഘ്യം അസാധുവാണ്"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"നഗരം തിരഞ്ഞെടുത്തിട്ടില്ല"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"നിങ്ങൾ വ്യക്തമാക്കിയ നഗരം ലഭ്യമല്ല"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"ആ നഗരം ഇതിനകം തന്നെ ചേർത്തിട്ടുണ്ട്"</string>
diff --git a/res/values-mn-rMN/array.xml b/res/values-mn-rMN/array.xml
index be1e170d..1b980ee 100644
--- a/res/values-mn-rMN/array.xml
+++ b/res/values-mn-rMN/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"Ф<xliff:g id="SEPARATOR">=</xliff:g>Форталеза"</item>
     <item msgid="5801558418916235541">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гранд Tурк"</item>
     <item msgid="2103759276235503048">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гренада"</item>
-    <item msgid="1490069759176391533">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемал"</item>
+    <item msgid="6216160110733510854">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемал хот"</item>
     <item msgid="525959305652046261">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гайана"</item>
     <item msgid="7565596629973190931">"Г<xliff:g id="SEPARATOR">=</xliff:g>Галифакс"</item>
     <item msgid="3811169155065582644">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гавана"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Торонто"</item>
     <item msgid="1506838283840737263">"В<xliff:g id="SEPARATOR">=</xliff:g>Ванкувер"</item>
     <item msgid="8935386104773857399">"В<xliff:g id="SEPARATOR">=</xliff:g>Виннипег"</item>
-    <item msgid="1132634022412399582">"Ө<xliff:g id="SEPARATOR">=</xliff:g>Өмнөд туйл"</item>
+    <item msgid="498429228419399474">"Ө<xliff:g id="SEPARATOR">=</xliff:g>Өмнөд туйл<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"Л<xliff:g id="SEPARATOR">=</xliff:g>Лонгеарбен"</item>
     <item msgid="3784788073896028355">"А<xliff:g id="SEPARATOR">=</xliff:g>Алмата"</item>
     <item msgid="7895695236056852523">"А<xliff:g id="SEPARATOR">=</xliff:g>Амман"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"Г<xliff:g id="SEPARATOR">=</xliff:g>Газа"</item>
     <item msgid="2359068282340162319">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хеброн"</item>
     <item msgid="6223396610551759129">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хо Ши Мин"</item>
-    <item msgid="4731022818651322736">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хонг Конг"</item>
+    <item msgid="3439764751788710130">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хонг Конг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"И<xliff:g id="SEPARATOR">=</xliff:g>Истанбул"</item>
     <item msgid="758800913783999425">"Ж<xliff:g id="SEPARATOR">=</xliff:g>Жакарта"</item>
     <item msgid="8956406398692698126">"И<xliff:g id="SEPARATOR">=</xliff:g>Иерусалим"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"М<xliff:g id="SEPARATOR">=</xliff:g>Манила"</item>
     <item msgid="6033964325069060422">"М<xliff:g id="SEPARATOR">=</xliff:g>Мускат"</item>
     <item msgid="6077458941399984780">"П<xliff:g id="SEPARATOR">=</xliff:g>Пном Пен"</item>
-    <item msgid="935474308903572975">"П<xliff:g id="SEPARATOR">=</xliff:g>Пхеньян"</item>
+    <item msgid="1245515372520913197">"П<xliff:g id="SEPARATOR">=</xliff:g>Пхеньян<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"К<xliff:g id="SEPARATOR">=</xliff:g>Катар"</item>
     <item msgid="1667243110545095146">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рангун"</item>
     <item msgid="4460370766685855731">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рияд"</item>
     <item msgid="4229224905931739201">"С<xliff:g id="SEPARATOR">=</xliff:g>Сайгон"</item>
     <item msgid="8705359848250215620">"С<xliff:g id="SEPARATOR">=</xliff:g>Сөүл"</item>
-    <item msgid="583367295371395814">"Ш<xliff:g id="SEPARATOR">=</xliff:g>Шанхай"</item>
+    <item msgid="3814881931186962624">"Ш<xliff:g id="SEPARATOR">=</xliff:g>Шанхай<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"С<xliff:g id="SEPARATOR">=</xliff:g>Сингапур"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Тайпей"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Тайпей<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Тегеран"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Тель-Авив"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Токио"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Токио<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"У<xliff:g id="SEPARATOR">=</xliff:g>Улаанбаатар"</item>
     <item msgid="2028626988021468640">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бермуд"</item>
     <item msgid="4527109966513690429">"К<xliff:g id="SEPARATOR">=</xliff:g>Канари"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рено"</item>
     <item msgid="9155068631060038769">"Б<xliff:g id="SEPARATOR">=</xliff:g>БлэкРок Сити"</item>
     <item msgid="8498761319928979900">"Д<xliff:g id="SEPARATOR">=</xliff:g>Доха"</item>
-    <item msgid="8307897251088048641">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бээжин"</item>
+    <item msgid="5327010922199714808">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бээжин<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"М<xliff:g id="SEPARATOR">=</xliff:g>Мумбай"</item>
     <item msgid="6668274273067049125">"Д<xliff:g id="SEPARATOR">=</xliff:g>Дели"</item>
-    <item msgid="2933410189478233292">"О<xliff:g id="SEPARATOR">=</xliff:g>Осака"</item>
+    <item msgid="7199039603593847813">"О<xliff:g id="SEPARATOR">=</xliff:g>Осака<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"Л<xliff:g id="SEPARATOR">=</xliff:g>Лахоре"</item>
     <item msgid="1448378291805481500">"С<xliff:g id="SEPARATOR">=</xliff:g>Санаа"</item>
     <item msgid="5233119846682408301">"Б<xliff:g id="SEPARATOR">=</xliff:g>Барселона"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"К<xliff:g id="SEPARATOR">=</xliff:g>Кембридж"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Киркленд"</item>
     <item msgid="6308007059287569663">"М<xliff:g id="SEPARATOR">=</xliff:g>Мaдисон"</item>
-    <item msgid="6971636434858330021">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гуанжоу"</item>
+    <item msgid="2077617905582224600">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гуанжоу<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хайдарабад"</item>
     <item msgid="3032295682584784261">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рестон"</item>
     <item msgid="7722837296297332268">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бело Оризонте"</item>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 0aa6362..b92e43f 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Цаг харуулах"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Цагийг нуух"</string>
     <string name="label" msgid="162189613902857319">"Шошго"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Идэвхтэй"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Идэвхгүй"</string>
     <string name="default_label" msgid="5590025289805630372">"Сэрүүлэг"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Сэрүүлэг тавих"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Чичиргээ"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Давтах"</string>
     <string name="alert" msgid="6506982899651975645">"Сэрүүлгийн ая"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Тохируулсан хонхны ая"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Цаг хэмжигчийн хугацаа дууссан"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Чимээгүй"</string>
     <string name="ringtone" msgid="9110746249688559579">"Хонхны ая"</string>
     <string name="time" msgid="8067216534232296518">"Цаг"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Маргааш"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> хүртэл хойшлуулах"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Удахгүй болох сэрүүлэг"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Таны анзаараагүй сэрүүлгийг устгав"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Минут хүрэхгүй хугацаа үлдлээ"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> үлдсэн"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> үлдсэн"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> үлдсэн"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Минут хүрэхгүй хугацаа үлдлээ"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> үлдсэн"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"үлдсэн"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"үлдсэн"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Сэрүүлгийг одоогоос 1 минутын дотор тохируулсан."</item>
     <item msgid="6002066367368421848">"Сэрүүлгийг одоогоос <xliff:g id="DAYS">%1$s</xliff:g>-т тохируулсан."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">минут</item>
       <item quantity="one">минут</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Хэмжээг аажмаар нэмэгдүүлэх"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Идэвхгүй"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> секунд"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"секунд"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Дуугүй болох"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> минут</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Буцаах"</string>
     <string name="delete" msgid="5732434972457000541">"Устгах"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Сэрүүлгийн дуу"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Чимээгүй"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Чимээгүй"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Тодорхойгүй"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Сэрүүлгийг хойшлуулах буюу алгасах."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (хойшлуулсан)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"<xliff:g id="TIME">%s</xliff:g>-т сэрүүлэг тавьсан. Цуцлахын тулд хүрнэ үү."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Хонхны аяыг ачааллаж байна…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Цаганд тохируулсан цаг хэмжигчийн дуу тоглуулах үйлчилгээ."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Сэрүүлэг тавих"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Сэрүүлэг"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Цаг хэмжигч"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Цаг"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Нэрээр эрэмбэлэх"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Сонгогдсон хотууд"</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_start_button" msgid="8373422516681242270">"Эхлэх"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Тойрог"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Хуваалцах"</string>
     <string name="hours_label" msgid="3393478155635368097">"ц"</string>
     <string name="minutes_label" msgid="3568098128251438588">"м"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Миний цаг <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Тойргийн хугацаа:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Тойрог <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> цаг</item>
       <item quantity="one">1 цаг</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 Минут нэмэх"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 мин нэмэх"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Зогсоох"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Дууссан"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Бүх цаг хэмжигчийг зогсоо"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Бүгдийг цэвэрлэх"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Цуцлах"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Цаг хэмжигчийг цуцалсан"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Цаг дууслаа"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> цаг хэмжигч хүчингүй"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Цаг хэмжигч"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"хамгийн ихдээ 4 цаг тоологч"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Түр зогсоох"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Бүх цаг хэмжигчийг шинэчлэх"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Та хурдны мангас юм аа."</item>
     <item msgid="6332879039890727169">"Хөдөлмөрийнхөө үр шимийг хүртээрэй."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Хотууд"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Цаг"</string>
     <string name="clock_style" msgid="2265011060429742344">"Загвар"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Огноо, цагийг өөрчлөх"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Aналог"</item>
     <item msgid="8483930821046925592">"Дижитал"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g>-г чагталсан"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g>-г чагтлаагүй"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Маршалын арлууд"</item>
     <item msgid="4196408495909011020">"Мидвэй арлууд"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Жакарта"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Сэрүүлэг"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Мэдэгдлийг ажиллуулахын тулд Секунд хэмжигч үйлчилгээ."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Зогсоосон"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Цаг хэмжигчийн мэдэгдлээс үйлдэл боловсруулдаг"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Секунд хэмжигчийн мэдэгдлээс үйлдэл боловсруулдаг"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Түр зогсоосон"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Хаахын тулд баруун шудрана уу"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Түр хойшлуулахын тулд зүүн шудрана уу"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Түр хойшлуулах болон хаахын тулд зүүн тийш нь шударна уу."</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Цаг хэмжигч"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Цаг хэмжигчийн хонхны ая"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Цаг хэмжигч зогссон"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> цаг хэмжигч зогссон"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Цаг хэмжигчийг түр зогсоосон"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> цаг хэмжигчийг түр зогсоосон"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Цаг хэмжигчийг харахын тулд хүрнэ үү"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> цаг хэмжигч"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Дараагийн цаг хэмжигч: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Сэрүүлэг байхгүй"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Сэрүүлэг тохируулаагүй"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"УДАХГҮЙ БОЛОХ СЭРҮҮЛЭГ БАЙХГҮЙ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"цаг:мин өглөө"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"цаг:мин"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"ӨДӨР, цаг:мин өглөө"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"ӨДӨР, цаг:мин"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Буруу цаг <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>-д тааруулсан сэрүүлэг байхгүй байна"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Хуваарьт сэрүүлэг байхгүй байна"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Тодорхой хаяг байхгүй байна"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Ямар ч сэрүүлэгт хаяг байхгүй байна"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Секунд хэмжигч аль хэдийн ажиллаж байна"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Секунд хэмжигч ажиллахгүй байна"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Секунд хэмжигч ажиллаж байгаа учир дахин эхлүүлэх боломжгүй байна"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Секунд хэмжигчийг зогсоосон"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Секунд хэмжигчийг түр зогсоосон"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Секунд хэмжигчийг дахин эхлүүлсэн"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Секунд хэмжигчийн завсарлага"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Секунд хэмжигчийг эхлүүлсэн"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Энэ цагт сэрүүлэг тавиагүй байна"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> сэрүүлгийг унртаасан"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g>-д сэрүүлэг тавьсан байна"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Цаг хэмжигч тохируулаагүй байна"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Цаг хэмжигчийг устгасан"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Цаг хэмжигч ажиллаж байна"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Таны хүсэлтийг биелүүлэх боломжгүй байна. Олон төрлийн цаг боломжтой байна"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Цаг хэмжигч эхэлсэн"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Ямар ч цаг хэмжигч алга"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Нэгээс олон цаг хэмжигч байна"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Цаг хэмжигчийг устгасан."</string>
     <string name="timer_created" msgid="4381027137335885547">"Цаг хэмжигч үүсгэсэн"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Цаг хэмжигчийн урт буруу байна"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Цаг хэмжигчийг дахин эхлүүллээ"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Цаг хэмжигч ажиллаж байгаа учраас дахин эхлүүлэх боломжгүй байна. Цаг хэмжигчийг дахин тааруулахын тулд зогсооно уу."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Цаг хэмжигч зогссон байна"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Цаг хэмжигчийг устгасан"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Цаг хэмжигч эхэлсэн"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Цаг хэмжигчийн урт буруу байна"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Хот сонгоогүй байна"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Таны сонгосон хот байхгүй байна"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Энэ хотыг аль хэдийн нэмсэн"</string>
diff --git a/res/values-mr-rIN/array.xml b/res/values-mr-rIN/array.xml
index f197d53..df42352 100644
--- a/res/values-mr-rIN/array.xml
+++ b/res/values-mr-rIN/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"फ<xliff:g id="SEPARATOR">=</xliff:g>फोर्तालेझा"</item>
     <item msgid="5801558418916235541">"ग<xliff:g id="SEPARATOR">=</xliff:g>ग्रँड तुर्क"</item>
     <item msgid="2103759276235503048">"ग<xliff:g id="SEPARATOR">=</xliff:g>ग्रे‍नेडा"</item>
-    <item msgid="1490069759176391533">"ग<xliff:g id="SEPARATOR">=</xliff:g>ग्वाटेमाला"</item>
+    <item msgid="6216160110733510854">"ग<xliff:g id="SEPARATOR">=</xliff:g>ग्वाटेमाला शहर"</item>
     <item msgid="525959305652046261">"ग<xliff:g id="SEPARATOR">=</xliff:g>गयाना"</item>
     <item msgid="7565596629973190931">"ह<xliff:g id="SEPARATOR">=</xliff:g>हॅलिफॅक्स"</item>
     <item msgid="3811169155065582644">"ह<xliff:g id="SEPARATOR">=</xliff:g>हवाना"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ट<xliff:g id="SEPARATOR">=</xliff:g>टोराँटो"</item>
     <item msgid="1506838283840737263">"व<xliff:g id="SEPARATOR">=</xliff:g>व्हँकूव्हर"</item>
     <item msgid="8935386104773857399">"व<xliff:g id="SEPARATOR">=</xliff:g>विनिपेग"</item>
-    <item msgid="1132634022412399582">"द<xliff:g id="SEPARATOR">=</xliff:g>दक्षिण ध्रुव"</item>
+    <item msgid="498429228419399474">"द<xliff:g id="SEPARATOR">=</xliff:g>दक्षिण ध्रुव<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ल<xliff:g id="SEPARATOR">=</xliff:g>लाँगइयरबीयेन"</item>
     <item msgid="3784788073896028355">"अ<xliff:g id="SEPARATOR">=</xliff:g>अल्माटी"</item>
     <item msgid="7895695236056852523">"अ<xliff:g id="SEPARATOR">=</xliff:g>अम्मान"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ग<xliff:g id="SEPARATOR">=</xliff:g>गझा"</item>
     <item msgid="2359068282340162319">"ह<xliff:g id="SEPARATOR">=</xliff:g>हेब्रॉन"</item>
     <item msgid="6223396610551759129">"ह<xliff:g id="SEPARATOR">=</xliff:g>हो चि मिन्ह"</item>
-    <item msgid="4731022818651322736">"ह<xliff:g id="SEPARATOR">=</xliff:g>हाँग काँग"</item>
+    <item msgid="3439764751788710130">"ह<xliff:g id="SEPARATOR">=</xliff:g>हाँग काँग<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"इ<xliff:g id="SEPARATOR">=</xliff:g>इस्तंबूल"</item>
     <item msgid="758800913783999425">"ज<xliff:g id="SEPARATOR">=</xliff:g>जकार्ता"</item>
     <item msgid="8956406398692698126">"ज<xliff:g id="SEPARATOR">=</xliff:g>जेरुसलेम"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"म<xliff:g id="SEPARATOR">=</xliff:g>मनिला"</item>
     <item msgid="6033964325069060422">"म<xliff:g id="SEPARATOR">=</xliff:g>मस्कत"</item>
     <item msgid="6077458941399984780">"प<xliff:g id="SEPARATOR">=</xliff:g>पनॉम पेन"</item>
-    <item msgid="935474308903572975">"प<xliff:g id="SEPARATOR">=</xliff:g>प्याँगयांग"</item>
+    <item msgid="1245515372520913197">"प<xliff:g id="SEPARATOR">=</xliff:g>प्याँगयांग<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"क<xliff:g id="SEPARATOR">=</xliff:g>कतार"</item>
     <item msgid="1667243110545095146">"र<xliff:g id="SEPARATOR">=</xliff:g>रंगून"</item>
     <item msgid="4460370766685855731">"र<xliff:g id="SEPARATOR">=</xliff:g>रियाध"</item>
     <item msgid="4229224905931739201">"स<xliff:g id="SEPARATOR">=</xliff:g>सैगॉन"</item>
     <item msgid="8705359848250215620">"स<xliff:g id="SEPARATOR">=</xliff:g>सोल"</item>
-    <item msgid="583367295371395814">"श<xliff:g id="SEPARATOR">=</xliff:g>शांघाय"</item>
+    <item msgid="3814881931186962624">"श<xliff:g id="SEPARATOR">=</xliff:g>शांघाय<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"स<xliff:g id="SEPARATOR">=</xliff:g>सिंगापूर"</item>
-    <item msgid="1972491729911039207">"त<xliff:g id="SEPARATOR">=</xliff:g>ताइपेइ"</item>
+    <item msgid="8982451946156859368">"त<xliff:g id="SEPARATOR">=</xliff:g>ताइपेइ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"त<xliff:g id="SEPARATOR">=</xliff:g>तेहरान"</item>
     <item msgid="8629402941285674273">"त<xliff:g id="SEPARATOR">=</xliff:g>तेल अवीव"</item>
-    <item msgid="8499164674454654525">"ट<xliff:g id="SEPARATOR">=</xliff:g>टोकियो"</item>
+    <item msgid="76330681636547168">"ट<xliff:g id="SEPARATOR">=</xliff:g>टोकियो<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"उ<xliff:g id="SEPARATOR">=</xliff:g>उलानबातर"</item>
     <item msgid="2028626988021468640">"ब<xliff:g id="SEPARATOR">=</xliff:g>बर्म्युडा"</item>
     <item msgid="4527109966513690429">"क<xliff:g id="SEPARATOR">=</xliff:g>कॅनरी"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"र<xliff:g id="SEPARATOR">=</xliff:g>रीनो"</item>
     <item msgid="9155068631060038769">"ब<xliff:g id="SEPARATOR">=</xliff:g>ब्लॅक रॉक सिटी"</item>
     <item msgid="8498761319928979900">"द<xliff:g id="SEPARATOR">=</xliff:g>दोहा"</item>
-    <item msgid="8307897251088048641">"ब<xliff:g id="SEPARATOR">=</xliff:g>बीजिंग"</item>
+    <item msgid="5327010922199714808">"ब<xliff:g id="SEPARATOR">=</xliff:g>बीजिंग<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"म<xliff:g id="SEPARATOR">=</xliff:g>मुंबई"</item>
     <item msgid="6668274273067049125">"द<xliff:g id="SEPARATOR">=</xliff:g>दिल्ली"</item>
-    <item msgid="2933410189478233292">"अ<xliff:g id="SEPARATOR">=</xliff:g>ओसाका"</item>
+    <item msgid="7199039603593847813">"अ<xliff:g id="SEPARATOR">=</xliff:g>ओसाका<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ल<xliff:g id="SEPARATOR">=</xliff:g>लाहोर"</item>
     <item msgid="1448378291805481500">"स<xliff:g id="SEPARATOR">=</xliff:g>साना"</item>
     <item msgid="5233119846682408301">"ब<xliff:g id="SEPARATOR">=</xliff:g>बार्सिलोना"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"क<xliff:g id="SEPARATOR">=</xliff:g>केंब्रिज"</item>
     <item msgid="759409010285366934">"क<xliff:g id="SEPARATOR">=</xliff:g>किर्कलँड"</item>
     <item msgid="6308007059287569663">"म<xliff:g id="SEPARATOR">=</xliff:g>मॅडिसन"</item>
-    <item msgid="6971636434858330021">"ग<xliff:g id="SEPARATOR">=</xliff:g>गुआन्गझोउ"</item>
+    <item msgid="2077617905582224600">"ग<xliff:g id="SEPARATOR">=</xliff:g>गुआन्गझोउ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"ह<xliff:g id="SEPARATOR">=</xliff:g>हैदराबाद"</item>
     <item msgid="3032295682584784261">"र<xliff:g id="SEPARATOR">=</xliff:g>रीस्टन"</item>
     <item msgid="7722837296297332268">"ब<xliff:g id="SEPARATOR">=</xliff:g>बेलो हॉरिझोंटे"</item>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index ca575bd..851393a 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"घड्याळ दर्शवा"</string>
     <string name="hide_clock" msgid="3217727306480505694">"घड्याळ लपवा"</string>
     <string name="label" msgid="162189613902857319">"लेबल"</string>
+    <string name="on_switch" msgid="2297966258029227449">"चालू"</string>
+    <string name="off_switch" msgid="3381070073851148013">"बंद"</string>
     <string name="default_label" msgid="5590025289805630372">"अलार्म"</string>
     <string name="set_alarm" msgid="9148359866152726808">"अलार्म सेट करा"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"कंपन"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"पुनरावृत्ती:"</string>
     <string name="alert" msgid="6506982899651975645">"अलार्म रिंगटोन"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"सानुकूल रिंगटोन"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"टायमर कालबाह्य झाला"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"मूक"</string>
     <string name="ringtone" msgid="9110746249688559579">"रिंगटोन"</string>
     <string name="time" msgid="8067216534232296518">"वेळ"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"उद्या"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> पर्यंत स्नूझ करा"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"आगामी अलार्म"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"आपला सुटलेला अलार्म हटविला गेला आहे"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"एका मिनिटापेक्षा कमी वेळ शिल्लक"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> शिल्लक"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> शिल्लक"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> शिल्लक"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"एका मिनिटापेक्षा कमी वेळ शिल्लक"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> शिल्लक"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"शिल्लक"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"शिल्लक"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"आतापासून 1 मिनिटापेक्षा कमीसाठी अलार्म सेट केला."</item>
     <item msgid="6002066367368421848">"आतापासून <xliff:g id="DAYS">%1$s</xliff:g> साठी अलार्म सेट केला."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">मिनिट</item>
       <item quantity="other">मिनिटे</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"व्हॉल्यूम हळूहळू वाढवा"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"बंद"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> सेकंद"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"सेकंद"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"नंतर शांतता"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> मिनिट</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"परत जा"</string>
     <string name="delete" msgid="5732434972457000541">"हटवा"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"अलार्म व्हॉल्यूम"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"मूक"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"मूक"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"अज्ञात"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"अलार्म स्नूझ करा किंवा डिसमिस करा."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (स्नूझ केले)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"<xliff:g id="TIME">%s</xliff:g> साठी अलार्म सेट केला. रद्द करण्यासाठी स्पर्श करा."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"रिंगटोन लोड करत आहे…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"घड्याळात सेट केलेल्या टाइमरसाठी ध्वनी प्लेबॅक सेवा"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"अलार्म सेट करा"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"अलार्म"</string>
     <string name="menu_timer" msgid="6459070074762877114">"टाइमर"</string>
     <string name="menu_clock" msgid="5612760670606829805">"घड्याळ"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"नावानुसार क्रमवारी लावा"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"निवडक शहरे"</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_start_button" msgid="8373422516681242270">"प्रारंभ करा"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"लॅप"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"सामायिक करा"</string>
     <string name="hours_label" msgid="3393478155635368097">"ता"</string>
     <string name="minutes_label" msgid="3568098128251438588">"मि"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"माझी वेळ <xliff:g id="TIME">%s</xliff:g> आहे"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"लॅप वेळा:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"लॅप <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> तास</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> तास</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 मिनिट जोडा"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 मिनिट जोडा"</string>
     <string name="timer_stop" msgid="3361154678667736722">"थांबा"</string>
-    <string name="timer_done" msgid="2375990511982914051">"पूर्ण केले"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"सर्व टायमर थांबवा"</string>
     <string name="timer_reset" msgid="7848424809190171640">"रीसेट करा"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"रद्द करा"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"टायमर रद्द केला"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"वेळ संपली"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> टायमर कालबाह्य झाले"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"टाइमर"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"जास्तीत जास्त 4 टायमर"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"विराम"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"सर्व टायमर रीसेट करा"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"आपण खरोखर वेगाचे दानव आहात."</item>
     <item msgid="6332879039890727169">"आपल्या कष्टाच्या फळांचा आनंद घ्या."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"शहरे"</string>
     <string name="clock_settings" msgid="8317286807280600391">"घड्याळ"</string>
     <string name="clock_style" msgid="2265011060429742344">"शैली"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"तारीख आणि वेळ बदला"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"अॅनालॉग"</item>
     <item msgid="8483930821046925592">"डिजिटल"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> चेक केला"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> अनचेक केला"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"मार्शल बेटे"</item>
     <item msgid="4196408495909011020">"मिडवे बेट"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"जकार्ता"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"अलार्म"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"सूचना चालविण्यासाठी स्टॉपवॉच सेवा."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"थांबले"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"टाइमर सूचनांमधील क्रियांवर प्रक्रिया करते."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"स्टॉपवॉच सूचनांमधील क्रियांवर प्रक्रिया करते."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"विराम दिला"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"डिसमिस करण्यासाठी उजवीकडे स्वाइप करा"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"स्नूझ करण्यासाठी डावीकडे स्वाइप करा"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"स्नूझ करण्‍यासाठी डावीकडे किंवा डिसमिस करण्‍यासाठी उजवीकडे स्वाइप करा"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"टायमर"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"टायमर रिंगटोन"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"टाइमर थांबले"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> टाइमर थांबले"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"टायमरला विराम दिला"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> टायमरला विराम दिला"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"आपले टाइमर पाहण्यासाठी स्पर्श करा"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> टाइमर"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"पुढील टाइमर: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"कोणतेही अलार्म नाहीत"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"कोणतेही अलार्म सेट केलेले नाहीत"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"कोणतेही आगामी अलार्म नाहीत"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"अवैध वेळ <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> चा कोणताही अलार्म नाही"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"अनुसूची केलेले अलार्म नाहीत"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"कोणतेही लेबल निर्दिष्‍ट केले नाही"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"कोणत्याही अलार्ममध्‍ये लेबल नाही"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"स्टॉपवॉच आधीपासून चालू आहे"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"स्टॉपवॉच चालू नाही"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"स्टॉपवॉच चालू असल्याने ते रीसेट केले जाऊ शकत नाही"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"स्टॉपवॉच थांबविले"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"स्टॉपवॉचला विराम दिला"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"स्टॉपवॉच रीसेट केले"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"स्टॉपवॉच लॅप केले"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"स्टॉपवॉच सुरु केले"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"या वेळेसाठी अलार्म अनुसूचित केला नाही"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> अलार्म डिसमिस केला"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g> साठी अलार्म सेट केला"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"टायमर सेट केले नाही"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"टायमर हटविला"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"टायमर आधीपासून चालू आहे"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"आपली विनंती पूर्ण करण्‍यात अक्षम, एकाधिक टायमर उपलब्‍ध आहेत"</string>
-    <string name="timer_started" msgid="6715582052946641641">"टायमर सुरू झाला"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"कोणतेही टायमर अस्तित्वात नाहीत"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"एकाधिक टायमर अस्तित्वात आहे"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"टायमर काढला गेला आहे."</string>
     <string name="timer_created" msgid="4381027137335885547">"टायमर तयार केले"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"अवैध टायमर लांबी"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"टायमर रीसेट केला"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"टायमर अद्याप चालू असल्याने तो रीसेट केला जाऊ शकत नाही. रीसेट करण्‍यासाठी टायमर थांबवा."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"टायमर आधीपासून थांबला आहे"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"टायमर हटविला"</string>
+    <string name="timer_started" msgid="6715582052946641641">"टायमर सुरू झाला"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"अवैध टायमर लांबी"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"कोणतेही शहर निवडले नाही"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"आपण निर्दिष्‍ट केलेले शहर उपलब्‍ध नाही"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"ते शहर आधीपासून जोडले गेले आहे"</string>
diff --git a/res/values-ms-rMY/array.xml b/res/values-ms-rMY/array.xml
index e340038..be83b07 100644
--- a/res/values-ms-rMY/array.xml
+++ b/res/values-ms-rMY/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"B<xliff:g id="SEPARATOR">=</xliff:g>Bandar Guatemala"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"K<xliff:g id="SEPARATOR">=</xliff:g>Kutub Selatan"</item>
+    <item msgid="498429228419399474">"K<xliff:g id="SEPARATOR">=</xliff:g>Kutub Selatan<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapura"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Tehran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 579b96a..217e2d2 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Tunjukkan jam"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Sembunyikan jam"</string>
     <string name="label" msgid="162189613902857319">"Label"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Hidup"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Mati"</string>
     <string name="default_label" msgid="5590025289805630372">"Penggera"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Tetapkan penggera"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Getar"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Ulang"</string>
     <string name="alert" msgid="6506982899651975645">"Nada Dering Penggera"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Nada Dering Tersuai"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Pemasa Tamat"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Senyap"</string>
     <string name="ringtone" msgid="9110746249688559579">"Nada dering"</string>
     <string name="time" msgid="8067216534232296518">"Masa"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Esok"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Ditunda sehingga <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Penggera akan datang"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Penggera terlepas anda telah dipadamkan"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Tinggal kurang satu minit"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> lagi"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> lagi"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> lagi"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Kurang seminit lagi"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> lagi"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"lagi"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"lagi"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Penggera ditetapkan pada kurang daripada 1 minit dari sekarang."</item>
     <item msgid="6002066367368421848">"Penggera ditetapkan pada <xliff:g id="DAYS">%1$s</xliff:g> dari sekarang."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minit</item>
       <item quantity="one">minit</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Tinggikan kelantangan beransur-ansur"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Mati"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> saat"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"saat"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Senyap selepas"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minit</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Berbalik"</string>
     <string name="delete" msgid="5732434972457000541">"Padam"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Kelantangan penggera"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Senyap"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Senyap"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Tidak diketahui"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Tunda atau tolak penggera."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (ditidurkan sekejap)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Penggera ditetapkan pada <xliff:g id="TIME">%s</xliff:g>. Sentuh untuk membatalkan."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Memuatkan nada dering..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Perkhidmatan main balik bunyi untuk pemasa ditetapkan dalam Jam."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Tetapkan penggera"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Penggera"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Pemasa"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Jam"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Isih mengikut nama"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Bandar Terpilih"</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_start_button" msgid="8373422516681242270">"Mula"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Jeda"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Pusingan"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Kongsi"</string>
     <string name="hours_label" msgid="3393478155635368097">"j"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Masa saya ialah <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Masa pusingan:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Pusingan <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> jam</item>
       <item quantity="one">1 jam</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Tambah 1 Minit"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Tambah 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Berhenti"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Selesai"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Hentikan semua pemasa"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Tetapkan semula"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Batalkan"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Pemasa dibatalkan"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Masa tamat"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> pemasa tamat tempoh"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Pemasa"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Maksimum 4 pemasa"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Jeda"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Ttpkn sml pmasa"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Anda memang pantas."</item>
     <item msgid="6332879039890727169">"Nikmati hasil usaha anda."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Bandar"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Jam"</string>
     <string name="clock_style" msgid="2265011060429742344">"Gaya"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Tukar Tarikh &amp; masa"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analog"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ditandai"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> dinyahtanda"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Kepulauan Marshall"</item>
     <item msgid="4196408495909011020">"Pulau Midway"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Penggera"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Perkhidmatan jam randik untuk menjalankan pemberitahuan."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Dihentikan"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Memproses tindakan daripada pemberitahuan pemasa."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Memproses tindakan daripada pemberitahuan jam randik."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Dijeda"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Leret ke kanan untuk mengenepikan"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Leret ke kiri untuk menunda"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Leret ke kiri untuk menunda atau ke kanan untuk mengetepikan"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Pemasa"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Nada dering pemasa"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Pemasa berhenti"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> pemasa berhenti"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Pemasa dijeda"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> pemasa dijeda"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Sentuh untuk melihat pemasa anda"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> pemasa"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Pemasa seterusnya: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Tiada Penggera"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Tiada pgera dttpkn"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"TIADA PENGGERA AKAN DATANG"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Masa tidak sah <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Tiada penggera pada <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Tiada penggera yang dijadualkan"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Tiada label dinyatakan"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Tiada penggera yang mengandungi label ini"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Jam randik sudah berjalan"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Jam randik tidak berjalan"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Jam randik tidak dapat ditetapkan semula kerana jam itu sedang berjalan"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Jam randik dihentikan"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Jam randik dijeda"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Jam randik ditetapkan semula"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Jam randik bertindih"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Jam randik dimulakan"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Tiada penggera yang dijadualkan untuk masa ini"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Penggera <xliff:g id="ALARM_TIME">%s</xliff:g> diketepikan"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Penggera ditetapkan pada <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Tiada pemasa yang ditetapkan"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Pemasa dipadamkan"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Pemasa sudah berjalan"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Tidak dapat menyelesaikan permintaan anda, berbilang pemasa tersedia"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Pemasa dimulakan"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Pemasa tidak wujud"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Lebih daripada satu pemasa wujud"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Pemasa telah dialih keluar."</string>
     <string name="timer_created" msgid="4381027137335885547">"Pemasa dibuat"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Tempoh pemasa tidak sah"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Tetapkan semula pemasa"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Pemasa tidak boleh ditetapkan semula kerana masih berjalan. Hentikan pemasa untuk menetapkan semula."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Pemasa sudah berhenti"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Pemasa dipadamkan"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Pemasa dimulakan"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Tempoh pemasa tidak sah"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Tiada bandar dipilih"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Bandar yang anda nyatakan tidak tersedia"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Bandar itu telah ditambahkan"</string>
diff --git a/res/values-my-rMM/array.xml b/res/values-my-rMM/array.xml
index ef4b15b..dcb29ca 100644
--- a/res/values-my-rMM/array.xml
+++ b/res/values-my-rMM/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>ဖော်တာလီဇာ"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>ဂရန်း တာ့ခ်"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>ဂရီနေဒါ"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>ဂွာတီမာလာ"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>ဂွာတီမာလာမြို့"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>ဂိုင်ယာနာ"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>ဟာလီဖက်စ်"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>ဟာဗားနား"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>တိုရွန်တို"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>ဗန်ကူးဗား"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>ဝင်းနီပက်"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>တောင်ဝင်ရိုးစွန်း"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>တောင်ဝင်ရိုးစွန်း<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>လောင်းန်ရီးယားဘျန်း"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>အယ်လ်မာတီ"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>အာမန်"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>ဂါဇာ"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>ဟေဗြွန်"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>ဟိုချီမင်း"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>ဟောင်ကောင်"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>ဟောင်ကောင်<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>အစ္စတန်ဘူလ်"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>ဂျကာတာ"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>ဂျေရုဆလင်"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>မနီလာ"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>မုစ်ကက်"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>ဖနွမ်းပင်"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>ပြုံယမ်း"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>ပြုံယမ်း<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>ကာတာ"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>ရန်ကုန်"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>ရိယာ့ဒ်"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>ဆိုင်ဂုံ"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>ဆိုးလ်"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>ရှန်ဟိုင်း"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>ရှန်ဟိုင်း<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>စင်္ကာပူ"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>ထိုင်ပေ"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>ထိုင်ပေ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>တီဟီရန်"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>တယ်လ်အေဗစ်"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>တိုကျို"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>တိုကျို<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>ဥလန်ဘာတာ"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>ဘာမြူဒါ"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>ကနေရီ"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>ရီနို"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>ဘလက်ခ်ရော့ခ်မြို့တော်"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>ဒိုဟာ"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>ဘေရှင်း"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>ဘေရှင်း<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>မွမ်ဘိုင်း"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>ဒေလီ"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>အိုဆာကာ"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>အိုဆာကာ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>လာဟိုး"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>ဆာနာအာ"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>ဘာစီလိုနာ"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>ကိန်းဘရစ်ချ်"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>ခရစ်ခ်လန်"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>မာဒီဆန်"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>ကွမ်ကျိုး"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>ကွမ်ကျိုး<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>ဟိုက်ဒြာဘတ်"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>ရက်စ်တန်"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>ဘဲလ်လို ဟွန်ရီဇွန်တဲ"</item>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index fd24711..16b6189 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"နာရီကို ပြရန်"</string>
     <string name="hide_clock" msgid="3217727306480505694">"နာရီကို ဝှက်ထားရန်"</string>
     <string name="label" msgid="162189613902857319">"အညွှန်း"</string>
+    <string name="on_switch" msgid="2297966258029227449">"ဖွင့်ထားသည်"</string>
+    <string name="off_switch" msgid="3381070073851148013">"ပိတ်ထားသည်"</string>
     <string name="default_label" msgid="5590025289805630372">"နှိုးစက်"</string>
     <string name="set_alarm" msgid="9148359866152726808">"နှိုးစက် သတ်မှတ်ရန်"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"တုန်ခါရန်"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"ထပ်လုပ်ရန်"</string>
     <string name="alert" msgid="6506982899651975645">"နှိုးစက် သံစဉ်"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"စိတ်ကြိုက်ဖန်တီးထားသည့် မြည်သံ"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"အချိန်တိုင်းကိရိယာ သက်တမ်းကုန်ဆုံးပါပြီ"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"အသံတိတ်ရန်"</string>
     <string name="ringtone" msgid="9110746249688559579">"သံစဉ်"</string>
     <string name="time" msgid="8067216534232296518">"အချိန်"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"နက်ဖြန်"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g>အထိ မှေးရန်"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"လာတော့မည့် နှိုးစက်"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"သင် လွတ်သွားခဲ့သည့် နှိုးစက်ကို ဖျက်လိုက်ပြီ"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"ကျန်ရှိနေသည်မှာ တစ်မိနစ်ထက် နည်း"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> ကျန်ရှိနေ"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> ကျန်ရှိနေ"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ကျန်ရှိနေ"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"ကျန်ရှိနေသည်မှာ တစ်မိနစ်ထက် နည်း"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ကျန်ရှိနေ"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"ကျန်ရှိနေသော"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"ကျန်ရှိနေသော"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"နှိုးစက် သတ်မှတ်ချိန်မှာ ယခု အချိန်မှ ၁ မိနစ်ထက် နည်းနေသည်။"</item>
     <item msgid="6002066367368421848">"ယခု အချိန်မှ စပြီး <xliff:g id="DAYS">%1$s</xliff:g> အကြာမှာ နှိုးစက် သတ်မှတ်ထားသည်။"</item>
@@ -101,6 +104,10 @@
       <item quantity="other">မိနစ်</item>
       <item quantity="one">မိနစ်</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"တဖြည်းဖြည်း အသံကို ချဲ့ယူပါ"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"ပိတ်ထား"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> စက္ကန့်"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"စက္ကန့်"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"နှိုးစက်သံကြာချိန်"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> မိနစ်</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"ပြန်လှန်"</string>
     <string name="delete" msgid="5732434972457000541">"ဖျက်ရန်"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"နှိုးစက်သံ ပမာဏ"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"အသံတိတ်ရန်"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"တိတ်ဆိတ်နေရန်"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"မသိရ"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"နှိုးစက်ကို မှေးရန် သို့မဟုတ် ပယ်ရန်။"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (မှေးထား)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"နှိုးစက်ကို<xliff:g id="TIME">%s</xliff:g> မှာ သတ်မှတ်ထားသည်။ ပယ်ဖျက်ရန် ထိပါ။"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"သံစဉ်ကို တင်နေ…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"နာရီထဲက တိုင်မားများ အတွက် အသံကို ဖွင့်ပြမည်။"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"နှိုးစက် သတ်မှတ်ရန်"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"နှိုးစက်"</string>
     <string name="menu_timer" msgid="6459070074762877114">"တိုင်မား"</string>
     <string name="menu_clock" msgid="5612760670606829805">"နာရီ"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"အမည်အလိုက် စီရန်"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"ရွေးထားသည့် မြို့များ"</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_start_button" msgid="8373422516681242270">"စတင်ရန်"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"တာတစ်ပတ်"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"မျှဝေရန်"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"ကျွန်ုပ်၏ အချိန်မှာ <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"တာ အချိန်များ:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"တာ<xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> နာရီ</item>
       <item quantity="one">၁ နာရီ</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"၁ မိနစ် ထည့်ရန်"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"၁ မိနစ် ထည့်ရန်"</string>
     <string name="timer_stop" msgid="3361154678667736722">"ရပ်တန့်ရန်"</string>
-    <string name="timer_done" msgid="2375990511982914051">"လုပ်ပြီး"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"အချိန်တိုင်းကိရိယာများအားလုံး ရပ်ရန်"</string>
     <string name="timer_reset" msgid="7848424809190171640">"ပြန်ညှိရန်"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"ထားတော့"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"တိုင်မား ဖျက်သိမ်းလိုက်ပြီ"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"တိုင်မား အလုပ်ပြီးသွားပြီ"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> အချိန်တိုင်းကိရိယာ သက်တမ်းကုန်ပါပြီ"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"တိုင်မား"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"တိုင်မား အများဆုံး ၄ ခု"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"ရပ်တန့်ရန်"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"တိုင်မား အားလုံး ပြန်ညှိရန်"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"သင်၏ အတော့်ကို နှုန်း မြန်လွန်းနေသည်။"</item>
     <item msgid="6332879039890727169">"သင် ကြိုးစားခဲ့မှု အသီးအပွင့်များကို ခံစားနိုင်ပါပြီ။"</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"မြို့များ"</string>
     <string name="clock_settings" msgid="8317286807280600391">"နာရီ"</string>
     <string name="clock_style" msgid="2265011060429742344">"ပုံစံ"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"ရက်စွဲ &amp; amp; အချိန် ပြောင်းရန်"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"လက်တံနာရီ"</item>
     <item msgid="8483930821046925592">"ဒီဂျစ်တယ်"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":၀၀"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":၃၀"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ကို ခြစ်ထားသည်"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> ခြစ်မထား"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"မာရှယ်ကျွန်းစု"</item>
     <item msgid="4196408495909011020">"မီးဒ်ဝေးကျွန်းစု"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"ဂျာကာတာ"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"နှိုးစက်များ"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"အချိန်ဖမ်းနာရီ အတွက် အကြောင်းကြားချက်များ ပြသည့် ဝန်ဆောင်မှု။"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"ရပ်ထားပြီ"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"အချိန်ကိုက်နာရီ အသိပေးချက်မှ လုပ်ဆောင်ချက်များကို လုပ်ဆောင်ပါ"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"အချိန်ရပ်နာရီ အသိပေးချက်များမှ လုပ်ဆောင်ချက်များကို လုပ်ဆောင်ပါ"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"ဆိုင်းငံ့ထား"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"ပယ်ချရန် ညာဘက်သို့ ပွတ်ဆွဲပါ"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"တစ်မှေးအိပ်ရန် ဘယ်ဘက်သို့ ပွတ်ဆွဲပါ"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"တစ်မှေးအိပ်ရန် ဘယ်ဘက်နှင့် ပယ်ချရန် ညာဘက်သို့ ပွတ်ဆွဲပါ။"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"အချိန်တိုင်းစက်များ"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"အချိန်တိုင်းကိရိယာ မြည်သည့်အသံ"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"တိုင်မား ရပ်ထားပြီ"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> တိုင်မားများ ရပ်ထားပြီ"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"တိုင်မား ရပ်တန့်ထား"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"တိုင်မား <xliff:g id="NUMBER">%d</xliff:g> ကြိမ် ရပ်တန့်ခဲ့"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"သင်၏ တိုင်မားများကို ကြည့်ရန် ထိပါ"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"တိုင်မား <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"နောက် တိုင်မား တစ်ခု: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"နှိုးစက် မရှိ"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"နှိုးစက်များ သတ်မှတ် မထား"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"လာမည့် နှိုးစက်များ မရှိပါ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE၊ h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE၊ k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"မမှန်ကန်သည့် အချိန် <xliff:g id="INVALID_HOUR">%d</xliff:g> : <xliff:g id="INVALID_MINUTES">%d</xliff:g><xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> တွင် နှိုးစက် မရှိပါ"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"စီစဉ်ထားသည့် နိုးစက်မရှိပါ"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"ခေါင်းစဉ်ခွဲအားဖော်ပြထားခြင်းမရှိပါ"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"မည်သည့် နှိုးစက်တွင်မဆို ခေါင်းစဉ်ခွဲမပါပါ"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"အချိန်မှတ်နာရီ ဖွင့်ထားပြီးဖြစ်သည်"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"အချိန်မှတ်နာရီ မဖွင့်ထားပါ"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"ချိန်ကိုက်နာရီသည်လည်နေသည့်အတွက် အစမှပြန်မချိန်နိုင်ပါ"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"ချိန်ကိုက်နာရီ ရပ်တန့်"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"စံချိန်ယူနာရီ ခေတ္တရပ်ထားသည်"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"ချိန်ကိုက်နာရီကို အစမှပြန်ချိန်ခြင်း"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"ချိန်ကိုက်နာရီ စေ့ပြီ"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"ချိန်ကိုင်နာရီအားစတင်ခဲ့"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"ဤအချိန်အတွက် နိုးစက်မစီစဉ်ထားပါ"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> နိုးစက် ဖျက်လိုက်ပြီ"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"နိုးစက်ပေးထားသော အချိန်<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"အချိန်တိုင်းစက် မသတ်မှတ်ရသေးပါ"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"အချိန်သတ်မှတ်ခြင်း ဖျက်လိုက်ပါပြီ"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"အချိန်သတ်မှတ်ခြင်း ဖွင့်ထားပြီးပါပြီ"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"သင့်တောင်းဆိုချက် မပြီးမြောက်နိုင်ပါ၊ အချိန်တိုင်းစက် များစွာ ရှိနေ၏"</string>
-    <string name="timer_started" msgid="6715582052946641641">"တိုင်မားစတင်ပါပြီ"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"တိုင်မား မရှိပါ"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"တိုင်မား တစ်ခုမက ရှိနေသည်"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"တိုင်မားကို ဖယ်ရှားခဲ့သည်။"</string>
     <string name="timer_created" msgid="4381027137335885547">"အချိန်ကိုက်ကိရိယာ ဖန်တီးလိုက်ပါပြီ"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"မမှန်ကန်သည့် အချိန်ကိုက် အလျား"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"အချိန်သတ်မှတ်ခြင်း ပြန်လည်သတ်မှတ်လိုက်ပါပြီ"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"အချိန်သတ်မှတ်ခြင်း ဖွင့်ထားသောကြောင့် ပြန်လည်သတ်မှတ်၍မရပါ။ ပြန်လည်သတ်မှတ်ရန် အချိန်သတ်မှတ်ခြင်းကို ရပ်ပါ။"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"အချိန်သတ်မှတ်ခြင်း ရပ်ထားပါပြီ"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"အချိန်သတ်မှတ်ခြင်း ဖျက်လိုက်ပါပြီ"</string>
+    <string name="timer_started" msgid="6715582052946641641">"တိုင်မားစတင်ပါပြီ"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"မမှန်ကန်သည့် အချိန်ကိုက် အလျား"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"မြို့မရွေးချယ်ထားပါ"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"သင်သတ်မှတ်သည့် မြို့တော် မရှိသေးပါ"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"၎င်းမြို့တော်ကို ပေါင်းထည့်ပြီးပါပြီ"</string>
diff --git a/res/values-nb/array.xml b/res/values-nb/array.xml
index e2f0ca6..0f0835c 100644
--- a/res/values-nb/array.xml
+++ b/res/values-nb/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala by"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havanna"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>Sydpolen"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>Sydpolen<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh-byen"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muskat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"Y<xliff:g id="SEPARATOR">=</xliff:g>Yangôn"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh-byen"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulan Bator"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 2e9be72..7cb0aeb 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Vis klokke"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Skjul klokke"</string>
     <string name="label" msgid="162189613902857319">"Etikett"</string>
+    <string name="on_switch" msgid="2297966258029227449">"På"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Av"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Sett alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrer"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Gjenta"</string>
     <string name="alert" msgid="6506982899651975645">"Ringetone for alarm"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Tilpasset ringelyd"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Tidtakeren er utgått"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Lydløs"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ringetone"</string>
     <string name="time" msgid="8067216534232296518">"Tidspunkt"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"I morgen"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Slumrer til <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Kommende alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Alarmen du gikk glipp av er slettet"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Mindre enn ett minutt igjen"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> igjen"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> igjen"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> igjen"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Mindre enn ett minutt igjen"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> igjen"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"igjen"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"igjen"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarmen ringer om mindre enn ett minutt."</item>
     <item msgid="6002066367368421848">"Alarmen ringer om <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minutter</item>
       <item quantity="one">minutt</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Gradvis øk volumet"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Av"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> sekunder"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sekunder"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Slå av etter"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutter</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Tilbakestill"</string>
     <string name="delete" msgid="5732434972457000541">"Slett"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Alarmvolum"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Stille"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Lydløs"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Ukjent"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Slumre eller slå av alarm."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (slumre)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarmen ringer <xliff:g id="TIME">%s</xliff:g>. Trykk for avbryte."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Laster inn ringetone ..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Lydavspillingstjeneste for nedtellinger som er angitt i Klokke."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Still inn alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Tidtaker"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Klokke"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sortér etter navn"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Utvalgte byer"</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_start_button" msgid="8373422516681242270">"Start"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pause"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Runde"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Del"</string>
     <string name="hours_label" msgid="3393478155635368097">"t"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Tiden min er <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Rundetider:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Runde <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> timer</item>
       <item quantity="one">1 time</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Legg til 1 minutt"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Legg til 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stopp"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Ferdig"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Stopp alle tidtakere"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Tilbakestill"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Avbryt"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Tidtakeren er avbrutt"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Tiden er ute"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> tidtakere har utløpt"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Tidtaker"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Du kan ha maksimalt fire nedtellinger"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Sett på pause"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Tilbakestill alle tidtakere"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Du er litt av et fartsmonster."</item>
     <item msgid="6332879039890727169">"Høst fruktene av arbeidet ditt."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Byer"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Klokke"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stil"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Endre dato og tid"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analog"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Det er merket av for <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Det er ikke merket av for <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshalløyene"</item>
     <item msgid="4196408495909011020">"Midwayøyene"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmer"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Stoppeklokke for å kjøre varslet."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Stoppet"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Prosesserer handlingene fra stoppeklokkevarsler."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Behandler handlingene fra stoppeklokkevarsler."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Satt på pause"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Sveip til høyre for å avvise"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Sveip til venstre for å slumre"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Sveip til venstre for å slumre eller til høyre for å avvise"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Tidtakere"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ringelyd for tidtakeren"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Nedtellingen ble stoppet"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> nedtellinger ble stoppet"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Tidtaker er satt på pause"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> tidtakere satt på pause"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Trykk for å se nedtellingene dine"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> nedtellinger"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Neste nedtelling: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Ingen alarmer"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Ingen alarmer er stilt inn"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"INGEN KOMMENDE VARSLER"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"HH:mm"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"HH:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE – HH:mm"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Ugyldig tid <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Ingen alarm kl. <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Ingen alarmer er angitt"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Ingen etikett er spesifisert"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Ingen alarmer inneholder etiketten"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stoppeklokken er allerede aktiv"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stoppeklokken er ikke aktiv"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stoppeklokken kan ikke tilbakestilles fordi den er aktiv nå"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stoppeklokken er stoppet"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stoppeklokken er satt på pause"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stoppeklokken er tilbakestilt"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stoppeklokken har lagret rundetiden"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stoppeklokken er startet"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Ingen alarm er angitt for dette tidspunktet"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarmen <xliff:g id="ALARM_TIME">%s</xliff:g> er fjernet"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarmen er angitt for <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Ingen tidtaker er angitt"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Tidtakeren er slettet"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"En tidtaker er allerede aktiv"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Kunne ikke fullføre forespørselen – flere tidtakere er tilgjengelige"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Tidtakeren er startet"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Det finnes ingen tidtakere"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Det finnes flere enn én tidtaker"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Tidtakeren er fjernet."</string>
     <string name="timer_created" msgid="4381027137335885547">"Tidtakeren er opprettet"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Ugyldig tidtakerlengde"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Tidtakeren er tilbakestilt"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Tidtakeren kan ikke tilbakestilles fordi den er aktiv. Stopp tidtakeren for å tilbakestille."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Tidtakeren er allerede stoppet"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Tidtakeren er slettet"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Tidtakeren er startet"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Ugyldig tidtakerlengde"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Ingen by er valgt"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Byen du har angitt, er ikke tilgjengelig"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Den byen er allerede lagt til"</string>
diff --git a/res/values-ne-rNP/array.xml b/res/values-ne-rNP/array.xml
index 89ec474..732e7f3 100644
--- a/res/values-ne-rNP/array.xml
+++ b/res/values-ne-rNP/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"फ <xliff:g id="SEPARATOR">=</xliff:g> फोर्टलेजा"</item>
     <item msgid="5801558418916235541">"ग <xliff:g id="SEPARATOR">=</xliff:g> ग्रान्ड टर्क"</item>
     <item msgid="2103759276235503048">"ग <xliff:g id="SEPARATOR">=</xliff:g> ग्रेनेडा"</item>
-    <item msgid="1490069759176391533">"ग <xliff:g id="SEPARATOR">=</xliff:g> ग्वाटेमालामा"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>ग्वाटेमाला सहर"</item>
     <item msgid="525959305652046261">"ग <xliff:g id="SEPARATOR">=</xliff:g> गुयाना"</item>
     <item msgid="7565596629973190931">"ह <xliff:g id="SEPARATOR">=</xliff:g> ह्यालिफ्याक्स"</item>
     <item msgid="3811169155065582644">"ह <xliff:g id="SEPARATOR">=</xliff:g> हवाना"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ट <xliff:g id="SEPARATOR">=</xliff:g> टोरन्टो"</item>
     <item msgid="1506838283840737263">"भ <xliff:g id="SEPARATOR">=</xliff:g> भ्याङ्कुभर"</item>
     <item msgid="8935386104773857399">"व <xliff:g id="SEPARATOR">=</xliff:g> विन्निपेग"</item>
-    <item msgid="1132634022412399582">"द <xliff:g id="SEPARATOR">=</xliff:g> दक्षिण ध्रुव"</item>
+    <item msgid="498429228419399474">"द <xliff:g id="SEPARATOR">=</xliff:g> दक्षिण ध्रुव<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ल <xliff:g id="SEPARATOR">=</xliff:g> लङ्गिएरबेन"</item>
     <item msgid="3784788073896028355">"अ <xliff:g id="SEPARATOR">=</xliff:g> अल्माटी"</item>
     <item msgid="7895695236056852523">"अ <xliff:g id="SEPARATOR">=</xliff:g> अम्मान"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ग <xliff:g id="SEPARATOR">=</xliff:g> गाजा"</item>
     <item msgid="2359068282340162319">"ह <xliff:g id="SEPARATOR">=</xliff:g> हेब्रोन"</item>
     <item msgid="6223396610551759129">"ह <xliff:g id="SEPARATOR">=</xliff:g> हो चि मिन्ह"</item>
-    <item msgid="4731022818651322736">"ह <xliff:g id="SEPARATOR">=</xliff:g> हङकङ"</item>
+    <item msgid="3439764751788710130">"ह <xliff:g id="SEPARATOR">=</xliff:g> हङकङ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"इ <xliff:g id="SEPARATOR">=</xliff:g> इस्तान्बुल"</item>
     <item msgid="758800913783999425">"ज <xliff:g id="SEPARATOR">=</xliff:g> जकार्ता"</item>
     <item msgid="8956406398692698126">"ज <xliff:g id="SEPARATOR">=</xliff:g> जेरुसेलम"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"म <xliff:g id="SEPARATOR">=</xliff:g> मनिला"</item>
     <item msgid="6033964325069060422">"म <xliff:g id="SEPARATOR">=</xliff:g> मस्कट"</item>
     <item msgid="6077458941399984780">"न <xliff:g id="SEPARATOR">=</xliff:g> नोम पेन"</item>
-    <item msgid="935474308903572975">"प <xliff:g id="SEPARATOR">=</xliff:g> प्योङ्याङ"</item>
+    <item msgid="1245515372520913197">"प <xliff:g id="SEPARATOR">=</xliff:g> प्योङ्याङ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"क<xliff:g id="SEPARATOR">=</xliff:g> कतार"</item>
     <item msgid="1667243110545095146">"र <xliff:g id="SEPARATOR">=</xliff:g> रङ्गुन"</item>
     <item msgid="4460370766685855731">"र <xliff:g id="SEPARATOR">=</xliff:g> रियाद"</item>
     <item msgid="4229224905931739201">"स <xliff:g id="SEPARATOR">=</xliff:g> सैगोन"</item>
     <item msgid="8705359848250215620">"स <xliff:g id="SEPARATOR">=</xliff:g> सियोल"</item>
-    <item msgid="583367295371395814">"स <xliff:g id="SEPARATOR">=</xliff:g> संघाइ"</item>
+    <item msgid="3814881931186962624">"स <xliff:g id="SEPARATOR">=</xliff:g> संघाइ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"स <xliff:g id="SEPARATOR">=</xliff:g> सिंगापुर"</item>
-    <item msgid="1972491729911039207">"त <xliff:g id="SEPARATOR">=</xliff:g> ताइपे"</item>
+    <item msgid="8982451946156859368">"त <xliff:g id="SEPARATOR">=</xliff:g> ताइपे<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"त <xliff:g id="SEPARATOR">=</xliff:g> तेहरान"</item>
     <item msgid="8629402941285674273">"त <xliff:g id="SEPARATOR">=</xliff:g> तेल अबिब"</item>
-    <item msgid="8499164674454654525">"ट <xliff:g id="SEPARATOR">=</xliff:g> टोकियो"</item>
+    <item msgid="76330681636547168">"ट <xliff:g id="SEPARATOR">=</xliff:g> टोकियो<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"उ <xliff:g id="SEPARATOR">=</xliff:g> उल्लानबाटर"</item>
     <item msgid="2028626988021468640">"ब <xliff:g id="SEPARATOR">=</xliff:g> बर्मुडा"</item>
     <item msgid="4527109966513690429">"क <xliff:g id="SEPARATOR">=</xliff:g> क्यानरी"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"र <xliff:g id="SEPARATOR">=</xliff:g> रेनो"</item>
     <item msgid="9155068631060038769">"ब <xliff:g id="SEPARATOR">=</xliff:g> ब्ल्याक रक सिटी"</item>
     <item msgid="8498761319928979900">"द <xliff:g id="SEPARATOR">=</xliff:g> दोहा"</item>
-    <item msgid="8307897251088048641">"ब <xliff:g id="SEPARATOR">=</xliff:g> बेइजिङ"</item>
+    <item msgid="5327010922199714808">"ब <xliff:g id="SEPARATOR">=</xliff:g> बेइजिङ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"म <xliff:g id="SEPARATOR">=</xliff:g> मुम्बई"</item>
     <item msgid="6668274273067049125">"द <xliff:g id="SEPARATOR">=</xliff:g> दिल्ली"</item>
-    <item msgid="2933410189478233292">"ओ <xliff:g id="SEPARATOR">=</xliff:g> ओसाका"</item>
+    <item msgid="7199039603593847813">"ओ <xliff:g id="SEPARATOR">=</xliff:g> ओसाका<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ल <xliff:g id="SEPARATOR">=</xliff:g> लाहोर"</item>
     <item msgid="1448378291805481500">"स <xliff:g id="SEPARATOR">=</xliff:g> सना"</item>
     <item msgid="5233119846682408301">"ब <xliff:g id="SEPARATOR">=</xliff:g> बार्सिलोना"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"क <xliff:g id="SEPARATOR">=</xliff:g> क्याम्ब्रिज"</item>
     <item msgid="759409010285366934">"क <xliff:g id="SEPARATOR">=</xliff:g> किर्कल्यान्ड"</item>
     <item msgid="6308007059287569663">"म <xliff:g id="SEPARATOR">=</xliff:g> म्याडिसन"</item>
-    <item msgid="6971636434858330021">"ग <xliff:g id="SEPARATOR">=</xliff:g> गुआङ्जाओ"</item>
+    <item msgid="2077617905582224600">"ग <xliff:g id="SEPARATOR">=</xliff:g> गुआङ्जाओ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"ह <xliff:g id="SEPARATOR">=</xliff:g> हैदराबाद"</item>
     <item msgid="3032295682584784261">"र <xliff:g id="SEPARATOR">=</xliff:g> रेस्टन"</item>
     <item msgid="7722837296297332268">"ब <xliff:g id="SEPARATOR">=</xliff:g> बेलो होरिजोन्ट"</item>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index c0ad05f..9b13cf4 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"घडी देखाउनुहोस्"</string>
     <string name="hide_clock" msgid="3217727306480505694">"घडी लुकाउनुहोस्"</string>
     <string name="label" msgid="162189613902857319">"लेबल"</string>
+    <string name="on_switch" msgid="2297966258029227449">"सक्रिय"</string>
+    <string name="off_switch" msgid="3381070073851148013">"निष्क्रिय"</string>
     <string name="default_label" msgid="5590025289805630372">"अलार्म"</string>
     <string name="set_alarm" msgid="9148359866152726808">"अलार्म सेट गर्नुहोस्"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"भाइब्रेट गराउनुहोस्"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"दोहोर्याउनुहोस्"</string>
     <string name="alert" msgid="6506982899651975645">"अलार्म रिङटोन"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"अनुकूलन रिङटोन"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"टाइमरको म्याद सकियो"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"मौन"</string>
     <string name="ringtone" msgid="9110746249688559579">"रिङटोन"</string>
     <string name="time" msgid="8067216534232296518">"समय"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"भोली"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> सम्म स्नुज गर्दै"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"आउने आलार्म"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"छुटेको आलार्म हटाइएको छ"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"एक मिनेटभन्दा कम बाँकी"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> बाँकी"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> बाँकी"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> बाँकी"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"एक मिनेटभन्दा कम बाँकी"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="MINUTES">%2$s</xliff:g> बाँकी"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"बाँकी"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"बाँकी"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"अहिलेबाट एक मिनेटभन्दा कम समयका लागि अलार्म सेट गरिएको छ।"</item>
     <item msgid="6002066367368421848">"अहिलेबाट <xliff:g id="DAYS">%1$s</xliff:g>का लागि अलार्म सेट गरिएको छ।"</item>
@@ -101,6 +104,10 @@
       <item quantity="other">मिनेट</item>
       <item quantity="one">मिनेट</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"बिस्तारै मात्रा  बढाउनुहोस्"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"बन्द"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> सेकेन्ड"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"सेकेन्ड"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"यस पछि मौन"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> मिनेट</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"उल्टाउनुहोस्"</string>
     <string name="delete" msgid="5732434972457000541">"मेटाउनुहोस्"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"अलार्म भोल्युम"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"मौन"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"मौन"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"अज्ञात"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"अलार्म स्नुज गर्नुहोस् वा खारेज गर्नुहोस्"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (स्नुज भयो)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"<xliff:g id="TIME">%s</xliff:g>का लागि अलार्म सेट गरियो। रद्द गर्न छुनुहोस्।"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"रिङटोन लोड गर्दै…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"घडीहरूका लागि आवाज प्लेब्याक सेवा घडीमा सेट गरियो।"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"अलार्म सेट गर्नुहोस्"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"आलार्म"</string>
     <string name="menu_timer" msgid="6459070074762877114">"घडी"</string>
     <string name="menu_clock" msgid="5612760670606829805">"घडी"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"नामबाट क्रमबद्ध गर्नुहोस्"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"छानिएका शहरहरू"</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_start_button" msgid="8373422516681242270">"सुरु गर्नुहोस्"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"ल्याप"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"साझेदारी गर्नुहोस्"</string>
     <string name="hours_label" msgid="3393478155635368097">"घण्टा"</string>
     <string name="minutes_label" msgid="3568098128251438588">"मिनेट"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"मेरो समय <xliff:g id="TIME">%s</xliff:g> हो"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"ल्याप समय:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"ल्याप <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> घण्टा</item>
       <item quantity="one">1 घण्टा</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"१ मिनेट थप्नुहोस्"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"१ मिनट थप्नुहोस्"</string>
     <string name="timer_stop" msgid="3361154678667736722">"रोक्नुहोस्"</string>
-    <string name="timer_done" msgid="2375990511982914051">"भयो"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"सबै टाइमरहरू रोक्नुहोस्"</string>
     <string name="timer_reset" msgid="7848424809190171640">"पुनःसेट गर्नुहोस्"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"रद्द गर्नुहोस्"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"टाइमर खारेज गरियो"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"समय सकियो"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> टाइमरहरूको म्याद समाप्त भयो"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"घडी"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"४ टाइमर अधिकतम"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"रोक्नुहोस्"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"सबै टाइमरहरू रिसेट गर्नुहोस्"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"तपाईँ पक्कै पनि तेजिलो डेमन हुनुहुन्छ।"</item>
     <item msgid="6332879039890727169">"तपाईँको मेहेनतको फलको आनन्द लिनुहोस्।"</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"शहरहरू"</string>
     <string name="clock_settings" msgid="8317286807280600391">"घडी"</string>
     <string name="clock_style" msgid="2265011060429742344">"शैली"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"मिति र समय परिवर्तन गर्नुहोस्"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"एनालग"</item>
     <item msgid="8483930821046925592">"डिजिटल"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":००"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":३०"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> जाँच गरियो"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> जाँच हटाइयो"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"मार्सल टापु"</item>
     <item msgid="4196408495909011020">"मिडवे टापु"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"जाकार्ता"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"सचेतकहरू"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"सूचना सञ्चालन गर्न स्टपवाच सेवा"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"रोकियो"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"टाइमर सूचनाहरूबाट कार्यहरूको प्रसोधन गर्छ।"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"स्टपवाच सूचनाहरूबाट कार्यहरूको प्रसोधन गर्छ।"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"रोकिएको छ"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"खारेज गर्नका लागि दायाँ स्वाइप गर्नुहोस्"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"स्‍नूजको लागि बायाँ स्वाइप गर्नुहोस्"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"स्‍नूजको लागि बायाँ वा खारेज गर्नका लागि दायाँ स्वाइप गर्नुहोस्"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"टाइमरहरू"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"टाइमरको रिङटोन"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"घडी रोकियो"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> घडीहरू रोकिए"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"टाइमर रोकियो"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> टाइमरहरू रोकिए"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"तपाईँको घडी हेर्न छुनुहोस्"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> घडीहरू"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"अर्को घडी: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"आलार्महरू छैनन्"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"अलार्म सेट छैन"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"कुनै अगामी आलार्महरू छैनन्"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"अमान्य समय <xliff:g id="INVALID_HOUR">%d</xliff:g> : <xliff:g id="INVALID_MINUTES">%d</xliff:g><xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g> : <xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>मा कुनै अलार्म छैन"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"कुनै तालिकाबद्ध अलार्म छैन"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"कुनै लेबल निर्दष्ट गरिएको छैन"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"कुनै अलार्ममा लेबल छैन"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"स्टपवाच पहिले नै चलिरहेको छ"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"स्टपवाच चलिरहेको छैन"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"स्टपवाच चलिरहेका कारणले रिसेट गर्न सकिँदैन"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"स्टपवाच रोकियो"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"स्टपवाच रोकिएको छ"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"स्टपवाच रिसेट गर्नुहोस्"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"स्टपवाचलाई ल्याप गरियो"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"स्टपवाच सुरु भयो"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"यस समयका लागि कुनै कार्यतालिका मिलाइएको छैन"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> अलार्म खारेज गरियो"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g>का लागि अलार्म सेट गरियो"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"कुनै घडी सेट भएको छैन"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"घडी मेटियो"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"घडी पहिले नै चलिरहेको छ"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"तपाईँको अनुरोध सम्पन्न गर्न असमर्थ, धेरै घडीहरू उपलब्ध छन्"</string>
-    <string name="timer_started" msgid="6715582052946641641">"घडी सुरु भयो"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"कुनै टाइमरहरू अवस्थित छैनन्"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"एक भन्दा बढी टाइमर अवस्थित छन्"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"टाइमर हटाइएको छ।"</string>
     <string name="timer_created" msgid="4381027137335885547">"टाइमर सिर्जना गरियो"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"अमान्य टाइमर लम्बाइ"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"घडी रिसेट गरियो"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"यो अझै चलिरहेका कारणले घडी रिसेट हुन सक्दैन। रिसेट गर्न घडी रोक्नुहोस्।"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"घडी पहिले नै रोकियो"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"घडी मेटियो"</string>
+    <string name="timer_started" msgid="6715582052946641641">"घडी सुरु भयो"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"अमान्य टाइमर लम्बाइ"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"कुनै सहर चयन गरिएको छैन"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"तपाईँले निर्दिष्ट गरेको सहर उपलब्ध छैन"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"त्यो सहर पहिले नै थप गरिएको छ"</string>
diff --git a/res/values-nl/array.xml b/res/values-nl/array.xml
index 84b92ca..89b42bb 100644
--- a/res/values-nl/array.xml
+++ b/res/values-nl/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala-stad"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"Z<xliff:g id="SEPARATOR">=</xliff:g>Zuidpool"</item>
+    <item msgid="498429228419399474">"Z<xliff:g id="SEPARATOR">=</xliff:g>Zuidpool<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Alma-Ata"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minhstad"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanboel"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jeruzalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manilla"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyad"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoel"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canarische Eilanden"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Haiderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 9fc72b1..7b1b0a0 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Klok weergeven"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Klok verbergen"</string>
     <string name="label" msgid="162189613902857319">"Label"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Aan"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Uit"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Alarm instellen"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Trillen"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Herhalen"</string>
     <string name="alert" msgid="6506982899651975645">"Beltoon voor alarm"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Aangepaste beltoon"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Timer verlopen"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Stil"</string>
     <string name="ringtone" msgid="9110746249688559579">"Beltoon"</string>
     <string name="time" msgid="8067216534232296518">"Tijd"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Morgen"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Snoozen tot <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Volgend alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Je gemiste alarm is verwijderd"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Nog minder dan een minuut"</item>
-    <item msgid="83197792732433351">"Nog <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Nog <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Nog <xliff:g id="HOURS">%1$s</xliff:g> en <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Nog minder dan een minuut"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> resterend"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"resterend"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"resterend"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarm gaat over minder dan 1 minuut af."</item>
     <item msgid="6002066367368421848">"Alarm gaat over <xliff:g id="DAYS">%1$s</xliff:g> af."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minuten</item>
       <item quantity="one">minuut</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Volume geleidelijk verhogen"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Uit"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> seconden"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"seconden"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Stil na"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuten</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Terugzetten"</string>
     <string name="delete" msgid="5732434972457000541">"Verwijderen"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Alarmvolume"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Stil"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Stil"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Onbekend"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Alarm later herhalen of uitschakelen."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (snooze aan)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm is ingesteld voor <xliff:g id="TIME">%s</xliff:g>. Raak aan om te annuleren."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Beltoon laden…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Geluidsweergaveservice voor timers ingesteld in Klok."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Alarm instellen"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Klok"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sorteren op naam"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Geselecteerde plaatsen"</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">"Resetten"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Starten"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pauze"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Ronde"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Delen"</string>
     <string name="hours_label" msgid="3393478155635368097">"u"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Mijn tijd is <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Rondetijden:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Ronde <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Nr. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Nr. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> uur</item>
       <item quantity="one">1 uur</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 minuut toevoegen"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 min. toevoegen"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stoppen"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Gereed"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Alle timers stoppen"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Resetten"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Annuleren"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Timer geannuleerd"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"De tijd is om"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> timers verlopen"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Timer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Maximaal 4 timers"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pauzeren"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Alle timers resetten"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Je bent wel erg snel."</item>
     <item msgid="6332879039890727169">"Profiteer van je inspanningen."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Plaatsen"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Klok"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stijl"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Datum en tijd wijzigen"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analoog"</item>
     <item msgid="8483930821046925592">"Digitaal"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> aangevinkt"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> niet aangevinkt"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshalleilanden"</item>
     <item msgid="4196408495909011020">"Midway Island"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmen"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Stopwatchservice die de melding beheert"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Gestopt"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Verwerkt acties van timermeldingen."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Verwerkt acties van stopwatchmeldingen."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Onderbroken"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Veeg naar rechts om te sluiten"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Veeg naar links om de snoozestand in te schakelen"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Veeg naar links om te snoozen of naar rechts om te sluiten"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Timers"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Beltoon van timer"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Timer gestopt"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> timers gestopt"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Timer gepauzeerd"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> timers gepauzeerd"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Tik om je timers te bekijken"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> timers"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Volgende timer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Geen alarmen"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Geen alarmen"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"GEEN AANKOMENDE ALARMEN"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Ongeldige tijd: <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Geen alarm om <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Geen geplande alarmen"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Geen label opgegeven"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Er zijn geen alarmen die het label bevatten"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stopwatch loopt al"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stopwatch loopt niet"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stopwatch kan niet opnieuw worden ingesteld omdat deze actief is"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stopwatch gestopt"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stopwatch onderbroken"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stopwatch opnieuw ingesteld"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Tussentijd ingesteld door stopwatch"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stopwatch gestart"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Geen alarm gepland op deze tijd"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> alarm gesloten"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm is ingesteld voor <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Geen timer ingesteld"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Timer verwijderd"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Timer loopt al"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Je verzoek kan niet worden voltooid. Er zijn meerdere timers beschikbaar."</string>
-    <string name="timer_started" msgid="6715582052946641641">"Timer gestart"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Geen timers ingesteld"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Er zijn meerdere timers ingesteld"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"De timer is verwijderd."</string>
     <string name="timer_created" msgid="4381027137335885547">"Timer gemaakt"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Ongeldige timerduur"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Timer gereset"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"De timer kan niet worden gereset omdat deze nog loopt. Stop de timer om deze te resetten."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Timer is al gestopt"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Timer verwijderd"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Timer gestart"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Ongeldige timerduur"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Geen plaats geselecteerd"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"De opgegeven plaats is niet beschikbaar"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Deze plaats is al toegevoegd"</string>
diff --git a/res/values-pa-rIN/array.xml b/res/values-pa-rIN/array.xml
index 06efa2c..5c072f4 100644
--- a/res/values-pa-rIN/array.xml
+++ b/res/values-pa-rIN/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ਫ<xliff:g id="SEPARATOR">=</xliff:g>ਫੋਰਟਾਲੈਜ਼ਾ"</item>
     <item msgid="5801558418916235541">"ਗ<xliff:g id="SEPARATOR">=</xliff:g>ਗ੍ਰਾਂਡ ਤੁਰਕ"</item>
     <item msgid="2103759276235503048">"ਗ<xliff:g id="SEPARATOR">=</xliff:g>ਗ੍ਰੇਨਾਡਾ"</item>
-    <item msgid="1490069759176391533">"ਗ<xliff:g id="SEPARATOR">=</xliff:g>ਗੁਆਟੇਮਾਲਾ"</item>
+    <item msgid="6216160110733510854">"ਗ<xliff:g id="SEPARATOR">=</xliff:g>ਗੁਆਟੇਮਾਲਾ ਸਿਟੀ"</item>
     <item msgid="525959305652046261">"ਗ<xliff:g id="SEPARATOR">=</xliff:g>ਗੁਆਨਾ"</item>
     <item msgid="7565596629973190931">"ਹ<xliff:g id="SEPARATOR">=</xliff:g>ਹੈਲੀਫੈਕਸ"</item>
     <item msgid="3811169155065582644">"ਹ<xliff:g id="SEPARATOR">=</xliff:g>ਹਵਾਨਾ"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ਟ<xliff:g id="SEPARATOR">=</xliff:g>ਟੋਰੰਟੋ"</item>
     <item msgid="1506838283840737263">"ਵ<xliff:g id="SEPARATOR">=</xliff:g>ਵੈਨਕੂਵਰ"</item>
     <item msgid="8935386104773857399">"ਵ<xliff:g id="SEPARATOR">=</xliff:g>ਵਿਨੀਪੈਗ"</item>
-    <item msgid="1132634022412399582">"ਸ<xliff:g id="SEPARATOR">=</xliff:g>ਸਾਊਥ ਪੋਲੈ"</item>
+    <item msgid="498429228419399474">"ਸ<xliff:g id="SEPARATOR">=</xliff:g>ਸਾਊਥ ਪੋਲੈ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ਲ<xliff:g id="SEPARATOR">=</xliff:g>ਲੋਂਗੀਈਅਰਬਿਆਨ"</item>
     <item msgid="3784788073896028355">"ਅ<xliff:g id="SEPARATOR">=</xliff:g>ਅਲਮੈਟੀ"</item>
     <item msgid="7895695236056852523">"ਅ<xliff:g id="SEPARATOR">=</xliff:g>ਅਮਾਨ"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ਗ<xliff:g id="SEPARATOR">=</xliff:g>ਗਾਜ਼ਾ"</item>
     <item msgid="2359068282340162319">"ਹ<xliff:g id="SEPARATOR">=</xliff:g>ਹੈਬਰੋਨ"</item>
     <item msgid="6223396610551759129">"ਹ<xliff:g id="SEPARATOR">=</xliff:g>ਹੋ ਚੀ ਮਿਨ੍ਹ"</item>
-    <item msgid="4731022818651322736">"ਹ<xliff:g id="SEPARATOR">=</xliff:g>ਹਾਂਗ ਕਾਂਗ"</item>
+    <item msgid="3439764751788710130">"ਹ<xliff:g id="SEPARATOR">=</xliff:g>ਹਾਂਗ ਕਾਂਗ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"ਇ<xliff:g id="SEPARATOR">=</xliff:g>ਇਸਤਾਨਬੁਲ"</item>
     <item msgid="758800913783999425">"ਜ<xliff:g id="SEPARATOR">=</xliff:g>ਜਕਾਰਤਾ"</item>
     <item msgid="8956406398692698126">"ਜ<xliff:g id="SEPARATOR">=</xliff:g>ਜੇਰੁਸਲੇਮ"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"ਮ<xliff:g id="SEPARATOR">=</xliff:g>ਮਨੀਲਾ"</item>
     <item msgid="6033964325069060422">"ਮ<xliff:g id="SEPARATOR">=</xliff:g>ਮਸਕਟ"</item>
     <item msgid="6077458941399984780">"ਪ<xliff:g id="SEPARATOR">=</xliff:g>ਫਨੋਮ ਪੈਨ੍ਹ"</item>
-    <item msgid="935474308903572975">"ਪ<xliff:g id="SEPARATOR">=</xliff:g>ਪਿਓਂਗਯਾਂਗ"</item>
+    <item msgid="1245515372520913197">"ਪ<xliff:g id="SEPARATOR">=</xliff:g>ਪਿਓਂਗਯਾਂਗ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"ਕ<xliff:g id="SEPARATOR">=</xliff:g>ਕਤਰ"</item>
     <item msgid="1667243110545095146">"ਰ<xliff:g id="SEPARATOR">=</xliff:g>ਰੰਗੂਨ"</item>
     <item msgid="4460370766685855731">"ਰ<xliff:g id="SEPARATOR">=</xliff:g>ਰਿਆਧ"</item>
     <item msgid="4229224905931739201">"ਸ<xliff:g id="SEPARATOR">=</xliff:g>ਸਾਈਗੋਨ"</item>
     <item msgid="8705359848250215620">"ਸ<xliff:g id="SEPARATOR">=</xliff:g>ਸਿਓਲ"</item>
-    <item msgid="583367295371395814">"ਸ<xliff:g id="SEPARATOR">=</xliff:g>ਸ਼ੰਘਾਈ"</item>
+    <item msgid="3814881931186962624">"ਸ<xliff:g id="SEPARATOR">=</xliff:g>ਸ਼ੰਘਾਈ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"ਸ<xliff:g id="SEPARATOR">=</xliff:g>ਸਿੰਗਾਪੁਰ"</item>
-    <item msgid="1972491729911039207">"ਤ<xliff:g id="SEPARATOR">=</xliff:g>ਤਾਈਪੇਈ"</item>
+    <item msgid="8982451946156859368">"ਤ<xliff:g id="SEPARATOR">=</xliff:g>ਤਾਈਪੇਈ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"ਤ<xliff:g id="SEPARATOR">=</xliff:g>ਤੇਹਰਾਨ"</item>
     <item msgid="8629402941285674273">"ਤ<xliff:g id="SEPARATOR">=</xliff:g>ਟੈਲ ਅਵੀਵ"</item>
-    <item msgid="8499164674454654525">"ਟ<xliff:g id="SEPARATOR">=</xliff:g>ਟੋਕਿਓ"</item>
+    <item msgid="76330681636547168">"ਟ<xliff:g id="SEPARATOR">=</xliff:g>ਟੋਕਿਓ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"ਉ<xliff:g id="SEPARATOR">=</xliff:g>ਉਲਾਨਬਾਤਰ"</item>
     <item msgid="2028626988021468640">"ਬ<xliff:g id="SEPARATOR">=</xliff:g>ਬਰਮੁਡਾ"</item>
     <item msgid="4527109966513690429">"ਕ<xliff:g id="SEPARATOR">=</xliff:g>ਕੈਨਰੀ"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"ਰ<xliff:g id="SEPARATOR">=</xliff:g>ਰੈਨੋ"</item>
     <item msgid="9155068631060038769">"ਬ<xliff:g id="SEPARATOR">=</xliff:g>ਬਲੈਕ ਰੌਕ ਸਿਟੀ"</item>
     <item msgid="8498761319928979900">"ਦੋ<xliff:g id="SEPARATOR">=</xliff:g>ਦੋਹਾ"</item>
-    <item msgid="8307897251088048641">"ਬ<xliff:g id="SEPARATOR">=</xliff:g>ਬੀਜਿੰਗ"</item>
+    <item msgid="5327010922199714808">"ਬ<xliff:g id="SEPARATOR">=</xliff:g>ਬੀਜਿੰਗ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"ਮ<xliff:g id="SEPARATOR">=</xliff:g>ਮੁੰਬਈ"</item>
     <item msgid="6668274273067049125">"ਦ<xliff:g id="SEPARATOR">=</xliff:g>ਦਿੱਲੀ"</item>
-    <item msgid="2933410189478233292">"ਓ<xliff:g id="SEPARATOR">=</xliff:g>ਓਸਾਕਾ"</item>
+    <item msgid="7199039603593847813">"ਓ<xliff:g id="SEPARATOR">=</xliff:g>ਓਸਾਕਾ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ਲ<xliff:g id="SEPARATOR">=</xliff:g>ਲਾਹੌਰ"</item>
     <item msgid="1448378291805481500">"ਸ<xliff:g id="SEPARATOR">=</xliff:g>ਸਾਨਾ"</item>
     <item msgid="5233119846682408301">"ਬ<xliff:g id="SEPARATOR">=</xliff:g>ਬਾਰਸੀਲੋਨਾ"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"ਕ<xliff:g id="SEPARATOR">=</xliff:g>ਕੈਂਬ੍ਰਿਜ਼"</item>
     <item msgid="759409010285366934">"ਕ<xliff:g id="SEPARATOR">=</xliff:g>ਕਿਰਕਲੈਂਡ"</item>
     <item msgid="6308007059287569663">"ਮ<xliff:g id="SEPARATOR">=</xliff:g>ਮੈਡੀਸਨ"</item>
-    <item msgid="6971636434858330021">"ਗ<xliff:g id="SEPARATOR">=</xliff:g>ਗੁਆਂਗਜ਼ੌ"</item>
+    <item msgid="2077617905582224600">"ਗ<xliff:g id="SEPARATOR">=</xliff:g>ਗੁਆਂਗਜ਼ੌ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"ਹ<xliff:g id="SEPARATOR">=</xliff:g>ਹੈਦਰਾਬਾਦ"</item>
     <item msgid="3032295682584784261">"ਰ<xliff:g id="SEPARATOR">=</xliff:g>ਰੈਸਟਨ"</item>
     <item msgid="7722837296297332268">"ਬ<xliff:g id="SEPARATOR">=</xliff:g>ਬੈਲੋ ਹੋਰੀਜ਼ੋਂਟੈ"</item>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index 6c0425d..2de443f 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"ਘੜੀ ਦਿਖਾਓ"</string>
     <string name="hide_clock" msgid="3217727306480505694">"ਘੜੀ ਲੁਕਾਓ"</string>
     <string name="label" msgid="162189613902857319">"ਲੇਬਲ"</string>
+    <string name="on_switch" msgid="2297966258029227449">"ਚਾਲੂ"</string>
+    <string name="off_switch" msgid="3381070073851148013">"ਬੰਦ"</string>
     <string name="default_label" msgid="5590025289805630372">"ਅਲਾਰਮ"</string>
     <string name="set_alarm" msgid="9148359866152726808">"ਅਲਾਰਮ ਸੈਟ ਕਰੋ"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"ਵਾਈਬ੍ਰੇਟ"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"ਦੁਹਰਾਓ"</string>
     <string name="alert" msgid="6506982899651975645">"ਅਲਾਰਮ ਰਿੰਗਟੋਨ"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"ਕਸਟਮ ਰਿੰਗਟੋਨ"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"ਟਾਈਮਰ ਦੀ ਮਿਆਦ ਪੁੱਗੀ"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"ਸਾਈਲੈਂਟ"</string>
     <string name="ringtone" msgid="9110746249688559579">"ਰਿੰਗਟੋਨ"</string>
     <string name="time" msgid="8067216534232296518">"ਸਮਾਂ"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"ਕੱਲ੍ਹ ਨੂੰ"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> ਤੱਕ ਸਨੂਜ਼ਿੰਗ"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"ਅਪਕਮਿੰਗ ਅਲਾਰਮ"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"ਤੁਹਾਡਾ ਮਿਸਡ ਅਲਾਰਮ ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"ਇੱਕ ਮਿੰਟ ਤੋਂ ਘੱਟ ਬਾਕੀ।"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> ਬਾਕੀ"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> ਬਾਕੀ"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ਬਾਕੀ"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"ਇੱਕ ਮਿੰਟ ਤੋਂ ਘੱਟ ਬਾਕੀ।"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ਬਾਕੀ"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"ਬਾਕੀ"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"ਬਾਕੀ"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"ਅਲਾਰਮ ਹੁਣ ਤੋਂ 1 ਮਿੰਟ ਤੋਂ ਘੱਟ ਲਈ ਸੈਟ ਕੀਤਾ।"</item>
     <item msgid="6002066367368421848">"ਅਲਾਰਮ ਹੁਣ ਤੋਂ <xliff:g id="DAYS">%1$s</xliff:g> ਲਈ ਸੈਟ ਕੀਤਾ।"</item>
@@ -101,6 +104,10 @@
       <item quantity="one">ਮਿੰਟ</item>
       <item quantity="other">ਮਿੰਟ</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"ਹੌਲੀ-ਹੌਲੀ ਵੌਲਯੂਮ ਵਧਾਓ"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"ਬੰਦ"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> ਸਕਿੰਟ"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"ਸਕਿੰਟ"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"ਇਸਤੋਂ ਬਾਅਦ ਸਾਈਲੈਂਸ"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> ਮਿੰਟ</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"ਵਾਪਸ ਲਿਆਓ"</string>
     <string name="delete" msgid="5732434972457000541">"ਮਿਟਾਓ"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"ਅਲਾਰਮ ਵੌਲਯੂਮ"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"ਸਾਈਲੈਂਟ"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"ਸਾਈਲੈਂਟ"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"ਅਗਿਆਤ"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"ਅਲਾਰਮ ਸਨੂਜ਼ ਕਰੋ ਜਾਂ ਬਰਖਾਸਤ ਕਰੋ।"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (ਸਨੂਜ਼ ਕੀਤਾ)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"ਅਲਾਰਮ <xliff:g id="TIME">%s</xliff:g> ਲਈ ਸੈਟ ਕੀਤਾ। ਰੱਦ ਕਰਨ ਲਈ ਛੋਹਵੋ।"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"ਰਿੰਗਟੋਨ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"ਟਾਈਮਰਾਂ ਲਈ ਅਵਾਜ਼ ਪਲੇਬੈਕ ਸੇਵਾ ਘੜੀ ਵਿੱਚ ਸੈਟ ਕੀਤੀ।"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"ਅਲਾਰਮ ਸੈਟ ਕਰੋ"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"ਅਲਾਰਮ"</string>
     <string name="menu_timer" msgid="6459070074762877114">"ਟਾਈਮਰ"</string>
     <string name="menu_clock" msgid="5612760670606829805">"ਘੜੀ"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"ਨਾਮ ਮੁਤਾਬਕ ਛਾਂਟੋ"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"ਚੁਣੇ ਗਏ ਸ਼ਹਿਰ"</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_start_button" msgid="8373422516681242270">"ਚਾਲੂ ਕਰੋ"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"ਲੈਪ"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"ਸ਼ੇਅਰ ਕਰੋ"</string>
     <string name="hours_label" msgid="3393478155635368097">"ਘੰਟਾ"</string>
     <string name="minutes_label" msgid="3568098128251438588">"ਮਿੰਟ"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"ਮੇਰਾ ਸਮਾਂ ਹੈ <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"ਲੈਪ ਸਮੇਂ:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"ਲੈਪ <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> ਘੰਟੇ</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ਘੰਟੇ</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 ਮਿੰਟ ਜੋੜੋ"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 ਮਿੰਟ ਜੋੜੋ"</string>
     <string name="timer_stop" msgid="3361154678667736722">"ਰੋਕੋ"</string>
-    <string name="timer_done" msgid="2375990511982914051">"ਹੋ ਗਿਆ"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"ਸਾਰੇ ਟਾਈਮਰ ਬੰਦ ਕਰੋ"</string>
     <string name="timer_reset" msgid="7848424809190171640">"ਰੀਸੈਟ ਕਰੋ"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"ਰੱਦ ਕਰੋ"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"ਟਾਈਮਰ ਰੱਦ ਕੀਤਾ"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"ਟਾਈਪ ਪੂਰਾ ਹੋ ਗਿਆ"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ਟਾਈਮਰਾਂ ਦੀ ਮਿਆਦ ਪੁੱਗੀ"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"ਟਾਈਮਰ"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"ਅਧਿਕਤਮ 4 ਟਾਈਮਰ"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"ਰੋਕੋ"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"ਸਾਰੇ ਟਾਈਮਰ ਰੀਸੈਟ ਕਰੋ"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"ਤੁਸੀਂ ਬਿਲਕੁਲ ਸਪੀਡ ਡੈਮਨ ਹੋ।"</item>
     <item msgid="6332879039890727169">"ਆਪਣੀ ਮਿਹਨਤ ਦੇ ਫਲ ਦਾ ਅਨੰਦ ਮਾਣੋ।"</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"ਸ਼ਹਿਰ"</string>
     <string name="clock_settings" msgid="8317286807280600391">"ਘੜੀ"</string>
     <string name="clock_style" msgid="2265011060429742344">"ਸਟਾਈਲ"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"ਤਾਰੀਖ &amp; ਸਮਾਂ ਬਦਲੋ"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"ਐਨਾਲਾਗ"</item>
     <item msgid="8483930821046925592">"ਡਿਜੀਟਲ"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ਚੁਣਿਆ"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> ਨਹੀਂ ਚੁਣਿਆ"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"ਮਾਰਸ਼ਲ ਆਈਲੈਂਡਸ"</item>
     <item msgid="4196408495909011020">"ਮਿਡਵੇ ਆਈਲੈਂਡ"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"ਜਕਾਰਤਾ"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"ਅਲਾਰਮ"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"ਸੂਚਨਾ ਚਲਾਉਣ ਲਈ ਸਟੌਪਵੌਚ ਸੇਵਾ।"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"ਰੋਕਿਆ ਗਿਆ"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"ਟਾਈਮਰ ਦੀਆਂ ਸੂਚਨਾਵਾਂ ਤੋਂ ਕਾਰਵਾਈਆਂ \'ਤੇ ਪ੍ਰਕਿਰਿਆ ਕਰਦੀ ਹੈ।"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"ਵਿਰਾਮ ਘੜੀ ਦੀਆਂ ਸੂਚਨਾਵਾਂ ਤੋਂ ਕਾਰਵਾਈਆਂ \'ਤੇ ਪ੍ਰਕਿਰਿਆ ਕਰਦੀ ਹੈ।"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"ਰੁਕਿਆ"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"ਬਰਖਾਸਤ ਕਰਨ ਲਈ ਸੱਜੇ ਪਾਸੇ ਸਵਾਈਪ ਕਰੋ"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"ਸਨੂਜ਼ ਕਰਨ ਲਈ ਖੱਬੇ ਪਾਸੇ ਸਵਾਈਪ ਕਰੋ"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"ਸਨੂਜ਼ ਕਰਨ ਲਈ ਖੱਬੇ ਸਵਾਈਪ ਕਰੋ ਜਾਂ ਬਰਖ਼ਾਸਤ ਕਰਨ ਲਈ ਸੱਜੇ ਸਵਾਈਪ ਕਰੋ"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"ਟਾਈਮਰ"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"ਟਾਈਮਰ ਰਿੰਗਟੋਨ"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"ਟਾਈਮਰ ਰੋਕਿਆ ਗਿਆ"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> ਟਾਈਮਰ ਰੋਕੇ ਗਏ"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"ਟਾਈਮਰ ਰੋਕਿਆ"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> ਟਾਈਮਰ ਰੋਕੇ ਗਏ"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"ਆਪਣੇ ਟਾਈਮਰ ਦੇਖਣ ਲਈ ਛੋਹਵੋ"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ਟਾਈਮਰ"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"ਅਗਲਾ ਟਾਈਮਰ: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"ਕੋਈ ਅਲਾਰਮ ਨਹੀਂ"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"ਕੋਈ ਅਲਾਰਮ ਸੈਟ ਨਹੀਂ ਕੀਤੇ"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ਕੋਈ ਅਪਕਮਿੰਗ ਅਲਾਰਮ ਨਹੀਂ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"ਅਪ੍ਰਮਾਣਿਕ ਸਮਾਂ <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> ਤੇ ਕੋਈ ਅਲਾਰਮ ਨਹੀਂ"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"ਕੋਈ ਨਿਯਤ ਕੀਤੇ ਅਲਾਰਮ ਨਹੀਂ"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"ਕੋਈ ਲੇਬਲ ਨਿਰਦਿਸ਼ਟ ਨਹੀਂ ਕੀਤਾ"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"ਕਿਸੇ ਅਲਾਰਮ ਵਿੱਚ ਲੇਬਲ ਨਹੀਂ ਹੈ"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"ਸਟੌਪਵੌਚ ਪਹਿਲਾਂ ਹੀ ਚੱਲ ਰਹੀ ਹੈ"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"ਸਟੌਪਵੌਚ ਨਹੀਂ ਚੱਲ ਰਹੀ ਹੈ"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"ਸਟੌਪਵੌਚ ਰੀਸੈਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਕਿਉਂਕਿ ਇਹ ਚੱਲ ਰਹੀ ਹੈ"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"ਸਟੌਪਵੌਚ ਰੋਕੀ ਗਈ"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"ਸਟੌਪਵਾਚ ਰੁਕਿਆ"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"ਸਟੌਪਵੌਚ ਰੀਸੈਟ ਕੀਤੀ"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"ਸਟੌਪਵੌਚ ਅੱਗੇ ਨਿੱਕਲ ਗਈ"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"ਸਟੌਪਵੌਚ ਚਾਲੂ ਕੀਤੀ"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"ਇਸ ਸਮੇਂ ਲਈ ਨਿਯਤ ਕੀਤਾ ਕੋਈ ਅਲਾਰਮ ਨਹੀਂ"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> ਅਲਾਰਮ ਬਰਖਾਸਤ ਕੀਤਾ"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"ਅਲਾਰਮ <xliff:g id="ALARM_TIME">%s</xliff:g> ਲਈ ਸੈਟ ਕੀਤਾ ਗਿਆ ਹੈ"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"ਕੋਈ ਟਾਈਮਰ ਸੈਟ ਨਹੀਂ ਕੀਤਾ"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"ਟਾਈਮਰ ਮਿਟਾਇਆ ਗਿਆ"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"ਟਾਈਮਰ ਪਹਿਲਾਂ ਹੀ ਚੱਲ ਰਿਹਾ ਹੈ"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"ਤੁਹਾਡੀ ਬੇਨਤੀ ਨੂੰ ਪੂਰਾ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ, ਮਲਟੀਪਲ ਟਾਈਮਰ ਉਪਲਬਧ ਹਨ"</string>
-    <string name="timer_started" msgid="6715582052946641641">"ਟਾਈਮਰ ਸ਼ੁਰੂ ਹੋਇਆ"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"ਟਾਈਮਰ ਮੌਜੂਦ ਨਹੀਂ ਹਨ"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"ਇੱਕ ਤੋਂ ਵੱਧ ਟਾਈਮਰ ਮੌਜੂਦ ਹਨ"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"ਟਾਈਮਰ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।"</string>
     <string name="timer_created" msgid="4381027137335885547">"ਟਾਈਮਰ ਬਣਾਇਆ"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"ਅਪ੍ਰਮਾਣਿਕ ਟਾਈਮਰ ਲੰਮਾਈ"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"ਟਾਈਮਰ ਰੀਸੈਟ ਕੀਤਾ"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"ਟਾਈਮਰ ਰੀਸੈਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਕਿਉਂਕਿ ਇਹ ਹੁਣ ਵੀ ਚੱਲ ਰਿਹਾ ਹੈ। ਰੀਸੈਟ ਕਰਨ ਲਈ ਟਾਈਮਰ ਰੋਕੋ।"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"ਟਾਈਮਰ ਪਹਿਲਾਂ ਹੀ ਰੋਕਿਆ ਗਿਆ"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"ਟਾਈਮਰ ਮਿਟਾਇਆ ਗਿਆ"</string>
+    <string name="timer_started" msgid="6715582052946641641">"ਟਾਈਮਰ ਸ਼ੁਰੂ ਹੋਇਆ"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"ਅਪ੍ਰਮਾਣਿਕ ਟਾਈਮਰ ਲੰਮਾਈ"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"ਕੋਈ ਸ਼ਹਿਰ ਨਹੀਂ ਚੁਣਿਆ ਗਿਆ"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਨਿਰਦਿਸ਼ਟ ਕੀਤਾ ਸ਼ਹਿਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"ਉਹ ਸ਼ਹਿਰ ਪਹਿਲਾਂ ਹੀ ਜੋੜਿਆ ਗਿਆ ਹੈ"</string>
diff --git a/res/values-pl/array.xml b/res/values-pl/array.xml
index e12565c..46bfcf5 100644
--- a/res/values-pl/array.xml
+++ b/res/values-pl/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Gwatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Gwatemala"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Gujana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Hawana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"B<xliff:g id="SEPARATOR">=</xliff:g>Biegun południowy"</item>
+    <item msgid="498429228419399474">"B<xliff:g id="SEPARATOR">=</xliff:g>Biegun południowy<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Ałmaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"S<xliff:g id="SEPARATOR">=</xliff:g>Stambuł"</item>
     <item msgid="758800913783999425">"D<xliff:g id="SEPARATOR">=</xliff:g>Dżakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerozolima"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muskat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"K<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangun"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Rijad"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Sajgon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Szanghaj"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Szanghaj<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Tajpej"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Tajpej<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Awiw"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ułan Bator"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermudy"</item>
     <item msgid="4527109966513690429">"W<xliff:g id="SEPARATOR">=</xliff:g>Wyspy Kanaryjskie"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Pekin"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Pekin<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"B<xliff:g id="SEPARATOR">=</xliff:g>Bombaj"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahaur"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanton"</item>
+    <item msgid="2077617905582224600">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanton<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hajdarabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index d9df069..945fd1c 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Pokaż zegar"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Ukryj zegar"</string>
     <string name="label" msgid="162189613902857319">"Etykieta"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Wł."</string>
+    <string name="off_switch" msgid="3381070073851148013">"Wył."</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Ustaw alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Wibracje"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Powtarzanie"</string>
     <string name="alert" msgid="6506982899651975645">"Dźwięk alarmu"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Dzwonek niestandardowy"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Minutnik wygasł"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Cichy"</string>
     <string name="ringtone" msgid="9110746249688559579">"Dzwonek"</string>
     <string name="time" msgid="8067216534232296518">"Godzina"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Jutro"</string>
@@ -62,12 +65,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Drzemka do <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Nadchodzący alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Zignorowany przez Ciebie alarm został usunięty"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Jeszcze niecała minuta"</item>
-    <item msgid="83197792732433351">"Jeszcze <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Jeszcze <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Jeszcze <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Jeszcze niecała minuta"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Jeszcze <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"pozostała"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"pozostało"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarm włączy się za mniej niż 1 minutę"</item>
     <item msgid="6002066367368421848">"Alarm włączy się za <xliff:g id="DAYS">%1$s</xliff:g>"</item>
@@ -115,6 +118,10 @@
       <item quantity="other">minuty</item>
       <item quantity="one">minuta</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Stopniowo zwiększaj głośność"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Wył."</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> s"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"s"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Wycisz za"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="few"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuty</item>
@@ -142,7 +149,8 @@
     <string name="revert" msgid="9100911171235162926">"Przywróć"</string>
     <string name="delete" msgid="5732434972457000541">"Usuń"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Głośność alarmu"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Cichy"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Cichy"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Nieznany"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Włącz drzemkę lub anuluj alarm."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (drzemka)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm ustawiony na <xliff:g id="TIME">%s</xliff:g>. Dotknij, aby anulować."</string>
@@ -167,8 +175,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Wczytywanie dzwonka…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Usługa odtwarzania dźwięku minutników ustawionych w zegarze."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Ustaw alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Minutnik"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Zegar"</string>
@@ -183,10 +189,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sortuj według nazwy"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Wybrane miasta"</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_start_button" msgid="8373422516681242270">"Start"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Wstrzymaj"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Okrążenie"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Udostępnij"</string>
     <string name="hours_label" msgid="3393478155635368097">"g"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -198,10 +204,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Mój czas to <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Czasy okrążeń:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Okrążenie <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"<xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"<xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> godziny</item>
       <item quantity="many"><xliff:g id="NUMBER">%d</xliff:g> godzin</item>
@@ -227,12 +229,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Dodaj 1 minutę"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Dodaj 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stop"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Gotowe"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Zatrzymaj wszystkie minutniki"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Resetuj"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Anuluj"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Minutnik anulowany"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Czas minął"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Minutniki, których czas upłynął: <xliff:g id="NUM_TIMERS">%d</xliff:g>"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Minutnik"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"maksymalnie cztery minutniki"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Wstrzymaj"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Resetuj wszystko"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Niezły z Ciebie demon prędkości."</item>
     <item msgid="6332879039890727169">"Ciesz się owocami pracy."</item>
@@ -249,6 +255,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Miasta"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Zegar"</string>
     <string name="clock_style" msgid="2265011060429742344">"Wygląd"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Zmień datę i godzinę"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogowy"</item>
     <item msgid="8483930821046925592">"Cyfrowy"</item>
@@ -263,6 +270,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> zaznaczono"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> niezaznaczono"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Wyspy Marshalla"</item>
     <item msgid="4196408495909011020">"Midway"</item>
@@ -351,13 +360,17 @@
     <item msgid="5176858645450908751">"Dżakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmy"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Usługa stopera odpowiedzialna za powiadamianie."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Zatrzymano"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Przetwarza działania z powiadomień minutnika."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Przetwarza działania z powiadomień stopera."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Wstrzymano"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Przesuń w prawo, by zamknąć"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Przesuń w lewo, by uśpić"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Przesuń w lewo, by odłożyć, lub w prawo, by zamknąć"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Minutniki"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Dzwonek minutnika"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Minutnik zatrzymany"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> zatrzymane minutniki"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Minutnik wstrzymany"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Minutniki (<xliff:g id="NUMBER">%d</xliff:g>) wstrzymane"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Kliknij, by zobaczyć minutniki"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> minutniki"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Następny minutnik: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -385,35 +398,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Brak alarmów"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Brak alarmów"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"BRAK NADCHODZĄCYCH ALARMÓW"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Nieprawidłowa godzina <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Brak alarmu o <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Brak zaplanowanych alarmów"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nie określono etykiety"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Brak alarmów zawierających etykietę"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stoper jest już uruchomiony"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stoper nie jest uruchomiony"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Nie można zresetować stopera, bo jest uruchomiony"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stoper został zatrzymany"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stoper został wstrzymany"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stoper został zresetowany"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stoper zapisał czas pośredni"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stoper został uruchomiony"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Na tę godzinę nie ma żadnego alarmu"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarm na <xliff:g id="ALARM_TIME">%s</xliff:g> został zamknięty"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm jest ustawiony na <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Minutnik nie jest ustawiony"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Minutnik został usunięty"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Minutnik jest już uruchomiony"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Nie można zrealizować żądania, bo dostępnych jest kilka stoperów"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Minutnik został uruchomiony"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Brak minutników"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Istnieje więcej niż jeden minutnik"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Minutnik został usunięty."</string>
     <string name="timer_created" msgid="4381027137335885547">"Minutnik został utworzony"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Nieprawidłowy czas w minutniku"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Minutnik został zresetowany"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Nie można zresetować minutnika, bo wciąż jest uruchomiony. Najpierw go zatrzymaj."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Minutnik jest już zatrzymany"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Minutnik został usunięty"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Minutnik został uruchomiony"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Nieprawidłowy czas w minutniku"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Nie wybrałeś miasta"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Podane miasto jest niedostępne"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"To miasto zostało już dodane"</string>
diff --git a/res/values-pt-rPT/array.xml b/res/values-pt-rPT/array.xml
index 6c1156b..19b713b 100644
--- a/res/values-pt-rPT/array.xml
+++ b/res/values-pt-rPT/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Granada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"C<xliff:g id="SEPARATOR">=</xliff:g>Cidade da Guatemala"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guiana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>Pólo Sul"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>Pólo Sul<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amã"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hébron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istambul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jacarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalém"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Mascate"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"C<xliff:g id="SEPARATOR">=</xliff:g>Catar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangum"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riade"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigão"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"X<xliff:g id="SEPARATOR">=</xliff:g>Xangai"</item>
+    <item msgid="3814881931186962624">"X<xliff:g id="SEPARATOR">=</xliff:g>Xangai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapura"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipé"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipé<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teerão"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Telavive"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tóquio"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tóquio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermudas"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canárias"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Pequim"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Pequim<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Deli"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaca"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaca<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Saná"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"C<xliff:g id="SEPARATOR">=</xliff:g>Cantão"</item>
+    <item msgid="2077617905582224600">"C<xliff:g id="SEPARATOR">=</xliff:g>Cantão<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hiderabade"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index d79523d..1b38ab3 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Mostrar relógio"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Ocultar relógio"</string>
     <string name="label" msgid="162189613902857319">"Etiqueta"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Ativado"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Desativado"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarme"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Definir alarme"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrar"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Repetir"</string>
     <string name="alert" msgid="6506982899651975645">"Toque do Alarme"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Toque personalizado"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Temporizador expirado"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silencioso"</string>
     <string name="ringtone" msgid="9110746249688559579">"Toque"</string>
     <string name="time" msgid="8067216534232296518">"Hora"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Amanhã"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Com alarme até <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Próximo alarme"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"O alarme perdido foi eliminado"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Falta menos de um minuto"</item>
-    <item msgid="83197792732433351">"Faltam <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Faltam <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Faltam <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Menos de um minuto restante"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> restantes"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"restante"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"restantes"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarme definido para daqui a menos de 1 minuto."</item>
     <item msgid="6002066367368421848">"Alarme definido para daqui a <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minutos</item>
       <item quantity="one">minuto</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Aumentar o volume gradualmente"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Desativado"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> segundos"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"segundos"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Silenciar depois de"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutos</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Reverter"</string>
     <string name="delete" msgid="5732434972457000541">"Eliminar"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volume do alarme"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silencioso"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silencioso"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Desconhecido"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Suspender ou ignorar alarme."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (suspenso)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarme definido para a(s) <xliff:g id="TIME">%s</xliff:g>. Toque para cancelar."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"A carregar toque..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Serviço de reprodução de som para temporizadores definidos no Relógio."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Configurar alarme"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarme"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Temporizador"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Relógio"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Ordenar pelo nome"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Cidades selecionadas"</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_start_button" msgid="8373422516681242270">"Iniciar"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pausa"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Volta"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Partilhar"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"O meu tempo é <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Tempos de volta:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Volta <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"N.º <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"N.º <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> horas</item>
       <item quantity="one">1 hora</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Adicionar 1 Minuto"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Adicionar 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Parar"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Concluído"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Parar todos os temporiz."</string>
     <string name="timer_reset" msgid="7848424809190171640">"Repor"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Cancelar"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Temporizador cancelado"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Terminou o tempo"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> temporizadores expiraram"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Temporizador"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Máximo de 4 temporizadores"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Interromper"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Repor tds temp."</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"É um verdadeiro ás da velocidade."</item>
     <item msgid="6332879039890727169">"Aproveite os frutos do seu trabalho."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Cidades"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Relógio"</string>
     <string name="clock_style" msgid="2265011060429742344">"Estilo"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Alterar data e hora"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analógico"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> marcado(a)"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> desmarcado(a)"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Ilhas Marshall"</item>
     <item msgid="4196408495909011020">"Ilha de Midway"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jacarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmes"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Serviço de cronómetro para executar a notificação."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Parado"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Processa as ações das notificações do temporizador."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Processa as ações das notificações do cronómetro."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Em pausa"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Deslizar rapidamente para a direita para ignorar"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Deslizar rapidamente para a esquerda para suspender"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Deslizar rapidamente para a esquerda para suspender ou para a direita para ignorar"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Temporizadores"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Toque do temporizador"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Temporizador parado"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores parados"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Temporizador interrompido"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> temporiz. interrompidos"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Toque para ver os seus temporizadores"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> temporizadores"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Temp. seguinte: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Sem alarmes"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Sem alarm. def."</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NENHUM ALARME PRÓXIMO"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Hora inválida <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Nenhum alarme às <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nenhum alarme programado"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nenhuma etiqueta especificada"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Nenhum alarme contém a etiqueta"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"O cronómetro já está a ser executado"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"O cronómetro não está a ser executado"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Não é possível repor o cronómetro porque está em execução"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Cronómetro interrompido"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Cronómetro colocado em pausa"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Reposição do cronómetro"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Uma volta registada no cronómetro"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Cronómetro iniciado"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Nenhum alarme programado para esta hora"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarme das <xliff:g id="ALARM_TIME">%s</xliff:g> ignorado"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"O alarme está definido para <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Nenhum temporizador definido"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Temporizador eliminado"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"O temporizador já está a ser executado"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Não foi possível concluir o pedido. Estão disponíveis vários temporizadores"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Temporizador iniciado"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Não existem temporizadores"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Existe mais do que um temporizador"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"O temporizador foi removido."</string>
     <string name="timer_created" msgid="4381027137335885547">"Temporizador criado"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Duração inválida do temporizador"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Temporizador reposto"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Não é possível repor o temporizador porque ainda está a ser executado. Pare-o para o repor."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"O temporizador já foi parado"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Temporizador eliminado"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Temporizador iniciado"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Duração inválida do temporizador"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Nenhuma cidade selecionada"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"A cidade especificada não está disponível"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Essa cidade já foi adicionada"</string>
diff --git a/res/values-pt/array.xml b/res/values-pt/array.xml
index 4c4d607..ad7ddfb 100644
--- a/res/values-pt/array.xml
+++ b/res/values-pt/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Granada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Cidade da Guatemala"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guiana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>Pólo Sul"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>Pólo Sul<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amã"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebrom"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istambul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jacarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalém"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Mascate"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"C<xliff:g id="SEPARATOR">=</xliff:g>Catar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riad"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"X<xliff:g id="SEPARATOR">=</xliff:g>Xangai"</item>
+    <item msgid="3814881931186962624">"X<xliff:g id="SEPARATOR">=</xliff:g>Xangai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"C<xliff:g id="SEPARATOR">=</xliff:g>Cingapura"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teerã"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tóquio"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tóquio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermudas"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canárias"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Pequim"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Pequim<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Délhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Saná"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 800674f..c29ecbe 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Mostrar relógio"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Ocultar relógio"</string>
     <string name="label" msgid="162189613902857319">"Marcador"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Ativado"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Desativado"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarme"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Definir alarme"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrar"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Repetir"</string>
     <string name="alert" msgid="6506982899651975645">"Toque do alarme"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Toque personalizado"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Timer expirado"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silencioso"</string>
     <string name="ringtone" msgid="9110746249688559579">"Toque"</string>
     <string name="time" msgid="8067216534232296518">"Horário"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Amanhã"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Em soneca até <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Alarme próximo"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Seu alarme perdido foi excluído"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Resta menos de um minuto"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> restantes"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> restantes"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> restantes"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Resta menos de um minuto"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> restantes"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"restante"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"restantes"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarme definido para menos de um minuto a partir de agora."</item>
     <item msgid="6002066367368421848">"Alarme definido para <xliff:g id="DAYS">%1$s</xliff:g> a partir de agora."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">minutes</item>
       <item quantity="other">minutos</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Aumentar gradualmente o volume"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Desativado"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> segundos"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"segundos"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Silenciar depois de"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minutos</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Reverter"</string>
     <string name="delete" msgid="5732434972457000541">"Excluir"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volume do alarme"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silencioso"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silencioso"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Desconhecido"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Soneca ou cancelar alarme"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (em modo soneca)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarme definido para as <xliff:g id="TIME">%s</xliff:g>. Toque para cancelar."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Carregando toque…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Serviço de reprodução de som para timers definidos no Relógio."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Definir alarme"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarme"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Relógio"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Classificar por nome"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Cidades selecionadas"</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_start_button" msgid="8373422516681242270">"Iniciar"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pausar"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Volta"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Compartilhar"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Meu tempo é <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Tempos de volta:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Volta <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Nº <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Nº <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> hours</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> horas</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Adicionar um minuto"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Adicionar 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Parar"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Concluído"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Parar todos os timers"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Zerar"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Cancelar"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Timer cancelado"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Tempo esgotado"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> timers expirados"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Timer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Máximo: 4 timers"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pausar"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Red. timers"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Você é o rei da velocidade."</item>
     <item msgid="6332879039890727169">"Colha os frutos de seu trabalho."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Cidades"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Relógio"</string>
     <string name="clock_style" msgid="2265011060429742344">"Estilo"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Alterar data e hora"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analógico"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Cidade marcada: <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Cidade desmarcada: <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Ilhas Marshall"</item>
     <item msgid="4196408495909011020">"Ilhas Midway"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jacarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmes"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Serviço de cronômetro para executar a notificação."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Parado"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Processa ações de notificações do timer."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Processa ações de notificações do cronômetro."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Pausado"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Deslize para a direita para dispensar"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Deslize para a esquerda para adiar"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Deslize para a esquerda para adiar ou para a direita para dispensar"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Timers"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Toque do timer"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Timer parado"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> timers parados"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Timer pausado"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> timers pausados"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Toque para ver seus timers"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> timers"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Próximo timer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Nenhum alarme"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Nenhum alarme"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NENHUM ALARME PRÓXIMO"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"HH:mm"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Hora inválida: <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Nenhum alarme às <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nenhum alarme programado"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nenhum marcador especificado"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Nenhum alarme contém o marcador"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"O cronômetro já está sendo executado"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"O cronômetro não está em execução"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Não é possível redefinir o cronômetro porque ele está sendo executado"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Cronômetro interrompido"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Cronômetro pausado"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Cronômetro redefinido"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Voltas do cronômetro"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Cronômetro iniciado"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Nenhum alarme programado para este horário"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarme <xliff:g id="ALARM_TIME">%s</xliff:g> dispensado"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"O alarme está definido para <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Nenhum timer definido"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Timer excluído"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Timer já em execução"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Não foi possível concluir a solicitação. Há vários timers disponíveis"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Timer iniciado"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Não há nenhum timer"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Existe mais de um timer"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"O timer foi removido."</string>
     <string name="timer_created" msgid="4381027137335885547">"Timer criado"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Duração do timer inválida"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Timer redefinido"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Não é possível redefinir o timer porque ele ainda está em execução. Pare o timer para redefini-lo."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Timer já parado"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Timer excluído"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Timer iniciado"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Duração do timer inválida"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Nenhuma cidade selecionada"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"A cidade especificada não está disponível"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Esta cidade já foi adicionada"</string>
diff --git a/res/values-ro/array.xml b/res/values-ro/array.xml
index 8c93252..4b69a8d 100644
--- a/res/values-ro/array.xml
+++ b/res/values-ro/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"C<xliff:g id="SEPARATOR">=</xliff:g>Ciudad de Guatemala"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"P<xliff:g id="SEPARATOR">=</xliff:g>Polul Sud"</item>
+    <item msgid="498429228419399474">"P<xliff:g id="SEPARATOR">=</xliff:g>Polul Sud<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"I<xliff:g id="SEPARATOR">=</xliff:g>Ierusalim"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Phenian"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Phenian<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"Y<xliff:g id="SEPARATOR">=</xliff:g>Yangon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riad"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulan Bator"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canare"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index aef56e8..ab45eb0 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -20,20 +20,23 @@
     <string name="alarm_list_title" msgid="7589940465292950600">"Alarme"</string>
     <string name="add_alarm" msgid="5976616107390962899">"Adăugați o alarmă"</string>
     <string name="menu_desk_clock" msgid="3241995064554071588">"Ceas de birou"</string>
-    <string name="menu_edit_alarm" msgid="7204602994918829751">"Modificați alarma"</string>
-    <string name="delete_alarm" msgid="3457780990646206817">"Ștergeți alarma"</string>
-    <string name="enable_alarm" msgid="1834599140632142536">"Porniți alarma"</string>
+    <string name="menu_edit_alarm" msgid="7204602994918829751">"Modificaţi alarma"</string>
+    <string name="delete_alarm" msgid="3457780990646206817">"Ștergeţi alarma"</string>
+    <string name="enable_alarm" msgid="1834599140632142536">"Porniţi alarma"</string>
     <string name="disable_alarm" msgid="5889378670229554109">"Opriți alarma"</string>
-    <string name="delete_alarm_confirm" msgid="6578572637340860840">"Ștergeți această alarmă?"</string>
-    <string name="show_clock" msgid="8358759982675616915">"Afișați ceasul"</string>
-    <string name="hide_clock" msgid="3217727306480505694">"Ascundeți ceasul"</string>
+    <string name="delete_alarm_confirm" msgid="6578572637340860840">"Ștergeţi această alarmă?"</string>
+    <string name="show_clock" msgid="8358759982675616915">"Afişaţi ceasul"</string>
+    <string name="hide_clock" msgid="3217727306480505694">"Ascundeţi ceasul"</string>
     <string name="label" msgid="162189613902857319">"Etichetă"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Activată"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Dezactivată"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarmă"</string>
-    <string name="set_alarm" msgid="9148359866152726808">"Setați alarma"</string>
+    <string name="set_alarm" msgid="9148359866152726808">"Setaţi alarma"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrare"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Repetă"</string>
     <string name="alert" msgid="6506982899651975645">"Ton de apel pentru alarmă"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Ton de sonerie personalizat"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Temporizatorul a expirat"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Silențios"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ton de apel"</string>
     <string name="time" msgid="8067216534232296518">"Ora"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Mâine"</string>
@@ -60,12 +63,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Se amână până la <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Alarma următoare"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Alarma ratată a fost ștearsă"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"A mai rămas mai puțin de un minut"</item>
-    <item msgid="83197792732433351">"Au mai rămas <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Au mai rămas <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Au mai rămas <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"A mai rămas mai puțin de un minut"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Timp rămas: <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"rămas"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"rămase"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarmă setată peste mai puțin de 1 minut din acest moment."</item>
     <item msgid="6002066367368421848">"Alarmă setată peste <xliff:g id="DAYS">%1$s</xliff:g> din acest moment."</item>
@@ -108,6 +111,10 @@
       <item quantity="other">de minute</item>
       <item quantity="one">minut</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Măriți volumul treptat"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Dezactivată"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> (de) secunde"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"secunde"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Dezactivare după"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="few"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minute</item>
@@ -131,13 +138,14 @@
     <item msgid="8594709368683324282">"Luni"</item>
   </string-array>
     <string name="done" msgid="6509722361933858451">"Terminat"</string>
-    <string name="revert" msgid="9100911171235162926">"Reveniți"</string>
-    <string name="delete" msgid="5732434972457000541">"Ștergeți"</string>
+    <string name="revert" msgid="9100911171235162926">"Reveniţi"</string>
+    <string name="delete" msgid="5732434972457000541">"Ștergeţi"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volum alarmă"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Silențios"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Silențios"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Necunoscut"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Amânați sau anulați alarma."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (amânat)"</string>
-    <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarmă setată pentru <xliff:g id="TIME">%s</xliff:g>. Atingeți pentru a anula."</string>
+    <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarmă setată pentru <xliff:g id="TIME">%s</xliff:g>. Atingeţi pentru a anula."</string>
     <string name="volume_button_setting_title" msgid="6937131248843413357">"Butoane de volum"</string>
     <string name="volume_button_dialog_title" msgid="8768042543750036853">"Funcții buton"</string>
   <string-array name="volume_button_setting_entries">
@@ -145,22 +153,20 @@
     <item msgid="3450979320164769576">"Închideți"</item>
     <item msgid="6302517608411378024">"Nu faceți nimic"</item>
   </string-array>
-    <string name="default_ringtone_setting_title" msgid="4549726190682964245">"Setați tonul de apel prestabilit"</string>
+    <string name="default_ringtone_setting_title" msgid="4549726190682964245">"Setaţi tonul de apel prestabilit"</string>
     <string name="alarm_button_description" msgid="740283647046258651">"Alarme"</string>
     <string name="gallery_button_description" msgid="1151743663255257668">"Galerie"</string>
     <string name="music_button_description" msgid="1626593420810117999">"Muzică"</string>
     <string name="nightmode_button_description" msgid="990894208217576381">"Luminozitate redusă"</string>
     <string name="home_button_description" msgid="3383859096809056157">"Lansator"</string>
-    <string name="desk_clock_button_description" msgid="4207371097361657274">"Afișarea ceasului"</string>
+    <string name="desk_clock_button_description" msgid="4207371097361657274">"Afişarea ceasului"</string>
     <string name="label_description" msgid="8736179296142915727">"Etichetă"</string>
     <string name="ringtone_description" msgid="7580922112921069925">"Ton de apel"</string>
     <string name="weather_fetch_failure" msgid="3425804832021006835">"Informațiile meteo nu sunt disponibile în acest moment."</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="timer_ring_service_desc" msgid="2620214305660322415">"Serviciul de redare a sunetului pentru setarea temporizatoarelor în aplicația Ceas."</string>
-    <string name="control_set_alarm" msgid="2194676418924016327">"Setați alarma"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
+    <string name="control_set_alarm" msgid="2194676418924016327">"Setaţi alarma"</string>
     <string name="menu_alarm" msgid="4772010125376647519">"Alarmă"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Temporizator"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Ceas"</string>
@@ -174,12 +180,12 @@
     <string name="menu_item_sort_by_gmt_offset" msgid="3120860422682721706">"Sortați după oră"</string>
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sortați după nume"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Orașele selectate"</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_resume_button" msgid="2569360966002022248">"Reluaţi"</string>
+    <string name="sw_reset_button" msgid="6616804728322906117">"Resetaţi"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Porniţi"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Întrerupeț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_share_button" msgid="4478648110382859382">"Distribuiţi"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
     <string name="seconds_label" msgid="124655952824003246">"s"</string>
@@ -190,10 +196,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Ora mea este <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Timpi circuit:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Circuitul <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"<xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"<xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> ore</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> de ore</item>
@@ -211,17 +213,21 @@
     </plurals>
     <string name="timer_add_timer" msgid="862733633862574752">"Adăugați un temporizator"</string>
     <string name="timer_start" msgid="6158486445614356442">"Start"</string>
-    <string name="timer_delete" msgid="8699122001991909302">"Ștergeți"</string>
+    <string name="timer_delete" msgid="8699122001991909302">"Ștergeţi"</string>
     <string name="timer_descriptive_delete" msgid="8794915342760383536">"Ștergeți <xliff:g id="NUMBER_STRING">%s</xliff:g>"</string>
     <string name="timer_plus_one" msgid="6631211310420106116">"Adăugați 1 minut"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Adăugați 1 min."</string>
     <string name="timer_stop" msgid="3361154678667736722">"Opriți"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Terminat"</string>
-    <string name="timer_reset" msgid="7848424809190171640">"Resetați"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Opriți temporizatoarele"</string>
+    <string name="timer_reset" msgid="7848424809190171640">"Resetaţi"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Anulați"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Temporizator anulat"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Timpul a expirat!"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> temporizatoare expirate"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Temporizator"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Cel mult 4 cronometre"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Întrerupeți"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Resetați-le pe toate"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Sunteți demonul vitezei."</item>
     <item msgid="6332879039890727169">"Bucurați-vă de roadele muncii dvs."</item>
@@ -238,6 +244,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Orașe"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Ceas"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stil"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Schimbați Data și ora"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogic"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -252,6 +259,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Orașul <xliff:g id="CITY_NAME">%s</xliff:g> a fost bifat"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Orașul <xliff:g id="CITY_NAME">%s</xliff:g> a fost debifat"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Insulele Marshall"</item>
     <item msgid="4196408495909011020">"Insula Midway"</item>
@@ -340,23 +349,27 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarme"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Serviciul Cronometru pentru notificări."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Oprită"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Procesează acțiunile din notificările de la temporizator."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Procesează acțiunile din notificările de la cronometru."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Întrerupt"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Glisați spre dreapta pentru a închide"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Glisați spre stânga pentru a amâna"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Glisați spre stânga pentru a amâna sau spre dreapta pentru a închide"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Temporizatoare"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ton de sonerie pentru temporizator"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Contor oprit"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Au fost oprite <xliff:g id="NUMBER">%d</xliff:g> contoare"</string>
-    <string name="all_timers_stopped_notif" msgid="278532320068394600">"Atingeți pentru a vedea contoarele"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Temporizator întrerupt"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> temporizatoare întrerupte"</string>
+    <string name="all_timers_stopped_notif" msgid="278532320068394600">"Atingeţi pentru a vedea contoarele"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> contoare"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Următorul temporizator: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
     <string name="screensaver_settings" msgid="7013450738357352801">"Setări Dream"</string>
     <string name="night_mode_title" msgid="5983813889469616299">"Modul Noapte"</string>
     <string name="night_mode_summary" msgid="1017350187324162631">"Afișaj cu luminozitate redusă (pentru camere întunecate)"</string>
-    <string name="expand_alarm" msgid="7392616528943305020">"Extindeți alarma"</string>
+    <string name="expand_alarm" msgid="7392616528943305020">"Extindeţi alarma"</string>
     <string name="collapse_alarm" msgid="3561772046433483980">"Restrângeți alarma"</string>
-    <string name="alarm_undo" msgid="5710042601177655254">"anulați"</string>
-    <string name="alarm_deleted" msgid="6131529309389084785">"Alarma a fost ștearsă"</string>
+    <string name="alarm_undo" msgid="5710042601177655254">"anulaţi"</string>
+    <string name="alarm_deleted" msgid="6131529309389084785">"Alarma a fost ştearsă"</string>
     <string name="slash" msgid="2077577763821006919">"/"</string>
     <string name="world_day_of_week_label" msgid="5911196322328341288">"/<xliff:g id="LABEL">%s</xliff:g>"</string>
     <string name="next_alarm_description" msgid="2650244835760747046">"Alarma următoare: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
@@ -367,41 +380,33 @@
       <item quantity="other">Ștergeți alarmele selectate?</item>
       <item quantity="one">Ștergeți alarma selectată?</item>
     </plurals>
-    <string name="timer_delete_confirmation" msgid="2815524107015816453">"Ștergeți acest contor?"</string>
-    <string name="city_delete_confirmation" msgid="1783441538785676299">"Eliminați acest oraș?"</string>
+    <string name="timer_delete_confirmation" msgid="2815524107015816453">"Ștergeţi acest contor?"</string>
+    <string name="city_delete_confirmation" msgid="1783441538785676299">"Eliminaţi acest oraş?"</string>
     <string name="digital_gadget" msgid="2326954556720571358">"Ceas digital"</string>
     <string name="no_alarms" msgid="6429431324842022917">"Nu sunt alarme"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Nu sunt alarme"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NU SUNT ALARME VIITOARE"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Oră nevalidă <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Nicio alarmă la <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nicio alarmă programată"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nicio etichetă specificată"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Nicio alarmă nu conține eticheta"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Cronometrul este pornit deja"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Cronometrul nu este pornit"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Cronometrul nu poate fi resetat, deoarece este în uz"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Cronometrul a fost oprit"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Cronometru întrerupt"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Cronometrul a fost resetat"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Cronometrul a înregistrat o tură"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Cronometrul a fost pornit"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Nicio alarmă programată pentru această oră"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarma de la <xliff:g id="ALARM_TIME">%s</xliff:g> a fost închisă"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarma este setată pentru <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Niciun temporizator setat"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Temporizatorul a fost șters"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Temporizatorul este pornit deja"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Solicitarea nu poate fi finalizată, deoarece sunt disponibile mai multe temporizatoare"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Temporizatorul a fost pornit"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Nu există niciun temporizator"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Există mai multe temporizatoare"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Temporizatorul a fost eliminat."</string>
     <string name="timer_created" msgid="4381027137335885547">"Temporizator creat"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Durată nevalidă pentru temporizator"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Temporizatorul a fost resetat"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Temporizatorul nu poate fi resetat, deoarece încă este pornit. Opriți temporizatorul pentru a-l reseta."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Temporizatorul este oprit deja"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Temporizatorul a fost șters"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Temporizatorul a fost pornit"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Durată nevalidă pentru temporizator"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Niciun oraș selectat"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Orașul pe care l-ați specificat nu este disponibil"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Orașul a fost adăugat deja"</string>
diff --git a/res/values-ru/array.xml b/res/values-ru/array.xml
index 620ca82..34cfcb7 100644
--- a/res/values-ru/array.xml
+++ b/res/values-ru/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"Ф<xliff:g id="SEPARATOR">=</xliff:g>Форталеза"</item>
     <item msgid="5801558418916235541">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гранд-Терк"</item>
     <item msgid="2103759276235503048">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гренада"</item>
-    <item msgid="1490069759176391533">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемала"</item>
+    <item msgid="6216160110733510854">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемала"</item>
     <item msgid="525959305652046261">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гайана"</item>
     <item msgid="7565596629973190931">"Г<xliff:g id="SEPARATOR">=</xliff:g>Галифакс"</item>
     <item msgid="3811169155065582644">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гавана"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"Т<xliff:g id="SEPARATOR">=</xliff:g>Торонто"</item>
     <item msgid="1506838283840737263">"В<xliff:g id="SEPARATOR">=</xliff:g>Ванкувер"</item>
     <item msgid="8935386104773857399">"В<xliff:g id="SEPARATOR">=</xliff:g>Виннипег"</item>
-    <item msgid="1132634022412399582">"Ю<xliff:g id="SEPARATOR">=</xliff:g>Южный полюс"</item>
+    <item msgid="498429228419399474">"Ю<xliff:g id="SEPARATOR">=</xliff:g>Южный полюс<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"Л<xliff:g id="SEPARATOR">=</xliff:g>Лонгйир"</item>
     <item msgid="3784788073896028355">"А<xliff:g id="SEPARATOR">=</xliff:g>Алма-Ата"</item>
     <item msgid="7895695236056852523">"А<xliff:g id="SEPARATOR">=</xliff:g>Амман"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"Г<xliff:g id="SEPARATOR">=</xliff:g>Газа"</item>
     <item msgid="2359068282340162319">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хеврон"</item>
     <item msgid="6223396610551759129">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хошимин"</item>
-    <item msgid="4731022818651322736">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гонконг"</item>
+    <item msgid="3439764751788710130">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гонконг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"С<xliff:g id="SEPARATOR">=</xliff:g>Стамбул"</item>
     <item msgid="758800913783999425">"Д<xliff:g id="SEPARATOR">=</xliff:g>Джакарта"</item>
     <item msgid="8956406398692698126">"И<xliff:g id="SEPARATOR">=</xliff:g>Иерусалим"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"М<xliff:g id="SEPARATOR">=</xliff:g>Манила"</item>
     <item msgid="6033964325069060422">"М<xliff:g id="SEPARATOR">=</xliff:g>Маскат"</item>
     <item msgid="6077458941399984780">"П<xliff:g id="SEPARATOR">=</xliff:g>Пномпень"</item>
-    <item msgid="935474308903572975">"П<xliff:g id="SEPARATOR">=</xliff:g>Пхеньян"</item>
+    <item msgid="1245515372520913197">"П<xliff:g id="SEPARATOR">=</xliff:g>Пхеньян<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"К<xliff:g id="SEPARATOR">=</xliff:g>Катар"</item>
     <item msgid="1667243110545095146">"Я<xliff:g id="SEPARATOR">=</xliff:g>Янгон"</item>
     <item msgid="4460370766685855731">"Э<xliff:g id="SEPARATOR">=</xliff:g>Эр-Рияд"</item>
     <item msgid="4229224905931739201">"С<xliff:g id="SEPARATOR">=</xliff:g>Сайгон"</item>
     <item msgid="8705359848250215620">"С<xliff:g id="SEPARATOR">=</xliff:g>Сеул"</item>
-    <item msgid="583367295371395814">"Ш<xliff:g id="SEPARATOR">=</xliff:g>Шанхай"</item>
+    <item msgid="3814881931186962624">"Ш<xliff:g id="SEPARATOR">=</xliff:g>Шанхай<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"С<xliff:g id="SEPARATOR">=</xliff:g>Сингапур"</item>
-    <item msgid="1972491729911039207">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тайбэй"</item>
+    <item msgid="8982451946156859368">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тайбэй<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тегеран"</item>
     <item msgid="8629402941285674273">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тель-Авив"</item>
-    <item msgid="8499164674454654525">"Т<xliff:g id="SEPARATOR">=</xliff:g>Токио"</item>
+    <item msgid="76330681636547168">"Т<xliff:g id="SEPARATOR">=</xliff:g>Токио<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"У<xliff:g id="SEPARATOR">=</xliff:g>Улан-Батор"</item>
     <item msgid="2028626988021468640">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бермудские острова"</item>
     <item msgid="4527109966513690429">"К<xliff:g id="SEPARATOR">=</xliff:g>Канарские острова"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рино"</item>
     <item msgid="9155068631060038769">"Б<xliff:g id="SEPARATOR">=</xliff:g>Блэк-Рок-Сити"</item>
     <item msgid="8498761319928979900">"Д<xliff:g id="SEPARATOR">=</xliff:g>Доха"</item>
-    <item msgid="8307897251088048641">"П<xliff:g id="SEPARATOR">=</xliff:g>Пекин"</item>
+    <item msgid="5327010922199714808">"П<xliff:g id="SEPARATOR">=</xliff:g>Пекин<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"М<xliff:g id="SEPARATOR">=</xliff:g>Мумбаи"</item>
     <item msgid="6668274273067049125">"Д<xliff:g id="SEPARATOR">=</xliff:g>Дели"</item>
-    <item msgid="2933410189478233292">"О<xliff:g id="SEPARATOR">=</xliff:g>Осака"</item>
+    <item msgid="7199039603593847813">"О<xliff:g id="SEPARATOR">=</xliff:g>Осака<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"Л<xliff:g id="SEPARATOR">=</xliff:g>Лахор"</item>
     <item msgid="1448378291805481500">"С<xliff:g id="SEPARATOR">=</xliff:g>Сана"</item>
     <item msgid="5233119846682408301">"Б<xliff:g id="SEPARATOR">=</xliff:g>Барселона"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"К<xliff:g id="SEPARATOR">=</xliff:g>Кембридж"</item>
     <item msgid="759409010285366934">"К<xliff:g id="SEPARATOR">=</xliff:g>Киркленд"</item>
     <item msgid="6308007059287569663">"М<xliff:g id="SEPARATOR">=</xliff:g>Мэдисон"</item>
-    <item msgid="6971636434858330021">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гуанчжоу"</item>
+    <item msgid="2077617905582224600">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гуанчжоу<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хайдарабад"</item>
     <item msgid="3032295682584784261">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рестон"</item>
     <item msgid="7722837296297332268">"Б<xliff:g id="SEPARATOR">=</xliff:g>Белу-Оризонти"</item>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 7080490..34e068d 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Показать часы"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Спрятать часы"</string>
     <string name="label" msgid="162189613902857319">"Описание"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Вкл."</string>
+    <string name="off_switch" msgid="3381070073851148013">"Выкл."</string>
     <string name="default_label" msgid="5590025289805630372">"Будильник"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Установить будильник"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Вибросигнал"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Повторять"</string>
     <string name="alert" msgid="6506982899651975645">"Звонок будильника"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Ваш рингтон"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Время истекло"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Без звука"</string>
     <string name="ringtone" msgid="9110746249688559579">"Рингтон"</string>
     <string name="time" msgid="8067216534232296518">"Время"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Завтра"</string>
@@ -62,12 +65,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Повтор в <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Следующий будильник"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Пропущенный будильник был удален"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Осталось: меньше минуты"</item>
-    <item msgid="83197792732433351">"Осталось: <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Осталось: <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Осталось: <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Осталось: меньше минуты"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Осталось: <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"Осталось:"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"Осталось:"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Будильник зазвонит менее чем через минуту."</item>
     <item msgid="6002066367368421848">"Будильник зазвонит через <xliff:g id="DAYS">%1$s</xliff:g>"</item>
@@ -115,6 +118,10 @@
       <item quantity="many">минут</item>
       <item quantity="other">минуты</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Постепенно увеличивать громкость"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"ВЫКЛ"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> сек."</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"сек."</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Автовыключение"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> минута</item>
@@ -142,7 +149,8 @@
     <string name="revert" msgid="9100911171235162926">"Отмена"</string>
     <string name="delete" msgid="5732434972457000541">"Удалить"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Громкость будильника"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Без звука"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Без звука"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Неизвестно"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Отложить/выключить будильник"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (отложен)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Повтор в <xliff:g id="TIME">%s</xliff:g>. Нажмите для отмены."</string>
@@ -167,8 +175,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Загрузка мелодии звонка..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Модуль воспроизведения сигналов таймера"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Установить будильник"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Будильник"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Таймер"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Часы"</string>
@@ -183,10 +189,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Сортировать по названию"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Выбранные города"</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_start_button" msgid="8373422516681242270">"Старт"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Приостановить"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Круг"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Отправить"</string>
     <string name="hours_label" msgid="3393478155635368097">"ч."</string>
     <string name="minutes_label" msgid="3568098128251438588">"м."</string>
@@ -198,10 +204,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Мое время: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Время круга"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Круг <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"<xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"<xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> час</item>
       <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> часа</item>
@@ -227,12 +229,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Добавить 1 минуту"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Добавить 1 мин."</string>
     <string name="timer_stop" msgid="3361154678667736722">"Стоп"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Готово"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Остановить все таймеры"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Сбросить"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Отмена"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Таймер удален"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Время вышло"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Завершено таймеров: <xliff:g id="NUM_TIMERS">%d</xliff:g>"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Таймер"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Можно установить не более четырех таймеров"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Приостановить"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Сбросить все"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Да вы просто Шумахер!"</item>
     <item msgid="6332879039890727169">"Вы славно потрудились!"</item>
@@ -249,6 +255,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Города"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Часы"</string>
     <string name="clock_style" msgid="2265011060429742344">"Стиль"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Изменить дату и время"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Стрелки"</item>
     <item msgid="8483930821046925592">"Цифры"</item>
@@ -263,6 +270,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"–"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g>, выбрано"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g>, выбор отменен"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Маршалловы Острова"</item>
     <item msgid="4196408495909011020">"Остров Мидуэй"</item>
@@ -351,13 +360,17 @@
     <item msgid="5176858645450908751">"Джакарта"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Будильник"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Секундомер для запуска уведомлений"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Остановлен"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Обрабатывает действия из уведомлений таймера."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Обрабатывает действия из уведомлений секундомера."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Приостановлено"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Пролистните вправо, чтобы отключить сигнал"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Пролистните влево, чтобы отложить сигнал"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Проведите влево, чтобы отложить сигнал, или вправо, чтобы отменить его"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Таймеры"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Сигнал таймера"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Таймер остановлен"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Таймеров остановлено: <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Таймер приостановлен"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Таймеры (<xliff:g id="NUMBER">%d</xliff:g>) приостановлены"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Нажмите, чтобы посмотреть таймеры"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"Таймеров: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"След.: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -385,35 +398,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Будильник отключен"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Нет будильников"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"СИГНАЛОВ НЕТ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"H:mm"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Время (<xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>) указано неверно"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"На <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> не установлено ни одного будильника"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Будильники не установлены"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Ярлык не выбран"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Нет будильников с ярлыками"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Секундомер уже запущен"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Секундомер не запущен"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Сбросить секундомер нельзя, так как он включен"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Секундомер отключен"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Секундомер приостановлен"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Секундомер сброшен"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Круг добавлен"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Секундомер включен"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"На это время не установлено ни одного будильника"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Будильник на <xliff:g id="ALARM_TIME">%s</xliff:g> отключен"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Будильник зазвонит в <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Таймер не установлен"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Таймер удален"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Таймер уже запущен"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Не удалось обработать запрос, так как таймеров несколько"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Таймер запущен"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Таймеров нет"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Доступно несколько таймеров"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Таймер удален."</string>
     <string name="timer_created" msgid="4381027137335885547">"Таймер создан"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Недопустимая длительность таймера"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Таймер сброшен"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Чтобы сбросить таймер, сначала остановите его."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Таймер уже остановлен"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Таймер удален"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Таймер запущен"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Недопустимая длительность таймера"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Город не выбран"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Не удалось найти такой город"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Такой город уже добавлен"</string>
diff --git a/res/values-si-rLK/array.xml b/res/values-si-rLK/array.xml
index 5e79bcf..e1d3ee0 100644
--- a/res/values-si-rLK/array.xml
+++ b/res/values-si-rLK/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ෆ<xliff:g id="SEPARATOR">=</xliff:g>ෆෝරටලෙසා"</item>
     <item msgid="5801558418916235541">"ග<xliff:g id="SEPARATOR">=</xliff:g>ග්රෑන්ඩ් ටර්ක්"</item>
     <item msgid="2103759276235503048">"ග<xliff:g id="SEPARATOR">=</xliff:g>ග්රෙනේඩා"</item>
-    <item msgid="1490069759176391533">"ග<xliff:g id="SEPARATOR">=</xliff:g>ගෝතමාලාව"</item>
+    <item msgid="6216160110733510854">"ග<xliff:g id="SEPARATOR">=</xliff:g>ගෝතමාලාව නගරය"</item>
     <item msgid="525959305652046261">"ග<xliff:g id="SEPARATOR">=</xliff:g>ගයනා"</item>
     <item msgid="7565596629973190931">"හ<xliff:g id="SEPARATOR">=</xliff:g>හැලිෆැක්ස්"</item>
     <item msgid="3811169155065582644">"හ<xliff:g id="SEPARATOR">=</xliff:g>හවානා"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ට<xliff:g id="SEPARATOR">=</xliff:g>ටොරොන්ටෝ"</item>
     <item msgid="1506838283840737263">"ව<xliff:g id="SEPARATOR">=</xliff:g>වැන්කුවර්"</item>
     <item msgid="8935386104773857399">"ව<xliff:g id="SEPARATOR">=</xliff:g>විනිපෙග්"</item>
-    <item msgid="1132634022412399582">"ද<xliff:g id="SEPARATOR">=</xliff:g>දක්ෂිණ ධ්‍රැවය"</item>
+    <item msgid="498429228419399474">"ද<xliff:g id="SEPARATOR">=</xliff:g>දක්ෂිණ ධ්‍රැවය<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ල<xliff:g id="SEPARATOR">=</xliff:g>ලෝන්යිඅර්යෙන්"</item>
     <item msgid="3784788073896028355">"අ<xliff:g id="SEPARATOR">=</xliff:g>ඇල්මැටි"</item>
     <item msgid="7895695236056852523">"අ<xliff:g id="SEPARATOR">=</xliff:g>අම්මාන්"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ග<xliff:g id="SEPARATOR">=</xliff:g>ගාසා"</item>
     <item msgid="2359068282340162319">"හ<xliff:g id="SEPARATOR">=</xliff:g>හෙබ්රොන්"</item>
     <item msgid="6223396610551759129">"හ<xliff:g id="SEPARATOR">=</xliff:g>හෝ චි මිං"</item>
-    <item msgid="4731022818651322736">"හ<xliff:g id="SEPARATOR">=</xliff:g>හොංකොං"</item>
+    <item msgid="3439764751788710130">"හ<xliff:g id="SEPARATOR">=</xliff:g>හොංකොං<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"ඉ<xliff:g id="SEPARATOR">=</xliff:g>ඉස්තාන්බුල්"</item>
     <item msgid="758800913783999425">"ජ<xliff:g id="SEPARATOR">=</xliff:g>ජකර්තා"</item>
     <item msgid="8956406398692698126">"ජ<xliff:g id="SEPARATOR">=</xliff:g>ජෙරුසලම්"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"ම<xliff:g id="SEPARATOR">=</xliff:g>මැනිලා"</item>
     <item msgid="6033964325069060422">"ම<xliff:g id="SEPARATOR">=</xliff:g>මස්කට්"</item>
     <item msgid="6077458941399984780">"න<xliff:g id="SEPARATOR">=</xliff:g>නොම් පෙන්"</item>
-    <item msgid="935474308903572975">"ප<xliff:g id="SEPARATOR">=</xliff:g>පියොන්යෑන්"</item>
+    <item msgid="1245515372520913197">"ප<xliff:g id="SEPARATOR">=</xliff:g>පියොන්යෑන්<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"ක<xliff:g id="SEPARATOR">=</xliff:g>කටාර්"</item>
     <item msgid="1667243110545095146">"ර<xliff:g id="SEPARATOR">=</xliff:g>රැන්ගුන්"</item>
     <item msgid="4460370766685855731">"ර<xliff:g id="SEPARATOR">=</xliff:g>රියාද්"</item>
     <item msgid="4229224905931739201">"ස<xliff:g id="SEPARATOR">=</xliff:g>සයිගොන්"</item>
     <item msgid="8705359848250215620">"ස<xliff:g id="SEPARATOR">=</xliff:g>සියොල්"</item>
-    <item msgid="583367295371395814">"ෂ<xliff:g id="SEPARATOR">=</xliff:g>ෂැංහයි"</item>
+    <item msgid="3814881931186962624">"ෂ<xliff:g id="SEPARATOR">=</xliff:g>ෂැංහයි<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"ස<xliff:g id="SEPARATOR">=</xliff:g>සිංගප්පූරුව"</item>
-    <item msgid="1972491729911039207">"ත<xliff:g id="SEPARATOR">=</xliff:g>තායිපේ"</item>
+    <item msgid="8982451946156859368">"ත<xliff:g id="SEPARATOR">=</xliff:g>තායිපේ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"ට<xliff:g id="SEPARATOR">=</xliff:g>ටෙහෙරාන්"</item>
     <item msgid="8629402941285674273">"ට<xliff:g id="SEPARATOR">=</xliff:g>ටෙල් අවිව්"</item>
-    <item msgid="8499164674454654525">"ට<xliff:g id="SEPARATOR">=</xliff:g>ටෝකියෝ"</item>
+    <item msgid="76330681636547168">"ට<xliff:g id="SEPARATOR">=</xliff:g>ටෝකියෝ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"උ<xliff:g id="SEPARATOR">=</xliff:g>උලාන්බටාර්"</item>
     <item msgid="2028626988021468640">"බ<xliff:g id="SEPARATOR">=</xliff:g>බර්මියුඩා"</item>
     <item msgid="4527109966513690429">"ක<xliff:g id="SEPARATOR">=</xliff:g>කැනරි"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"ර<xliff:g id="SEPARATOR">=</xliff:g>රෙනෝ"</item>
     <item msgid="9155068631060038769">"බ<xliff:g id="SEPARATOR">=</xliff:g>බ්ලැක් රොක් නගරය"</item>
     <item msgid="8498761319928979900">"ඩ<xliff:g id="SEPARATOR">=</xliff:g>ඩෝහා"</item>
-    <item msgid="8307897251088048641">"බ<xliff:g id="SEPARATOR">=</xliff:g>බීජිං"</item>
+    <item msgid="5327010922199714808">"බ<xliff:g id="SEPARATOR">=</xliff:g>බීජිං<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"ම<xliff:g id="SEPARATOR">=</xliff:g>මුම්බායි"</item>
     <item msgid="6668274273067049125">"ද<xliff:g id="SEPARATOR">=</xliff:g>දිල්ලි"</item>
-    <item msgid="2933410189478233292">"ඔ<xliff:g id="SEPARATOR">=</xliff:g>ඔසකා"</item>
+    <item msgid="7199039603593847813">"ඔ<xliff:g id="SEPARATOR">=</xliff:g>ඔසකා<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ල<xliff:g id="SEPARATOR">=</xliff:g>ලාහෝර්"</item>
     <item msgid="1448378291805481500">"ස<xliff:g id="SEPARATOR">=</xliff:g>සනා"</item>
     <item msgid="5233119846682408301">"බ<xliff:g id="SEPARATOR">=</xliff:g>බාසිලෝනා"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"ක<xliff:g id="SEPARATOR">=</xliff:g>කේම්බ්රිජ්"</item>
     <item msgid="759409010285366934">"ක<xliff:g id="SEPARATOR">=</xliff:g>කර්ක්ලෑන්ඩ්"</item>
     <item msgid="6308007059287569663">"ම<xliff:g id="SEPARATOR">=</xliff:g>මැඩිසන්"</item>
-    <item msgid="6971636434858330021">"ග<xliff:g id="SEPARATOR">=</xliff:g>ගුආන්සු"</item>
+    <item msgid="2077617905582224600">"ග<xliff:g id="SEPARATOR">=</xliff:g>ගුආන්සු<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"හ<xliff:g id="SEPARATOR">=</xliff:g>හයිඩ්‍රරාබාද්"</item>
     <item msgid="3032295682584784261">"ර<xliff:g id="SEPARATOR">=</xliff:g>රෙස්ටන්"</item>
     <item msgid="7722837296297332268">"බ<xliff:g id="SEPARATOR">=</xliff:g>බෙලෝ හොරිසොන්ටේ"</item>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 2784fec..b4df0e2 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"ඔරලෝසුව පෙන්වන්න"</string>
     <string name="hide_clock" msgid="3217727306480505694">"ඔරලෝසුව සඟවන්න"</string>
     <string name="label" msgid="162189613902857319">"ලේබලය"</string>
+    <string name="on_switch" msgid="2297966258029227449">"ක්‍රියාත්මකයි"</string>
+    <string name="off_switch" msgid="3381070073851148013">"ක්‍රියාවිරහිතයි"</string>
     <string name="default_label" msgid="5590025289805630372">"ඇඟවීම"</string>
     <string name="set_alarm" msgid="9148359866152726808">"ඇඟවීම සකසන්න"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"කම්පනය වීම"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"නැවත කරන්න"</string>
     <string name="alert" msgid="6506982899651975645">"ඇඟවීම් රිංග්ටෝනය"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"අභිරුචි රිගින් ටෝන්"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"ටයිමරය කල් ඉකුත් විය"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"නිහඬ"</string>
     <string name="ringtone" msgid="9110746249688559579">"රිංග්ටෝනය"</string>
     <string name="time" msgid="8067216534232296518">"කාලය"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"හෙට"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> තෙක් යළි සිහි කැඳවන්න"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"ඉදිරියට එන සීනුව"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"ඔබට අත හැරුණ සීනුව මකන ලදි"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"තවත් මිනිත්තුවකට අඩුවෙන් ඉතිරිව ඇත"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> ක් ඉතිරිව ඇත"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> ක් ඉතිරිව ඇත"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ක් ඉතිරිව ඇත"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"මිනිත්තුවකට වඩා අඩුවෙන් ඉතිරිව ඇත"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>ක් ඉතිරිව ඇත"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"ඉතිරිව ඇත"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"ඉතිරිව ඇත"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"ඇඟවීම මෙතැන් සිට ම්නිත්තු 1 කට අඩුවෙන් සකසා ඇත."</item>
     <item msgid="6002066367368421848">"ඇඟවීම දැන් සිට <xliff:g id="DAYS">%1$s</xliff:g> කින් සකසා ඇත."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">මිනිත්තු</item>
       <item quantity="other">මිනිත්තු</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"ක්‍රමයෙන් ශබ්දය ඉහළ දමන්න"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"ක්‍රියාවිරහිතයි"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"තත්පර <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"තත්පර"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"නිහඬවන්නෙ පසු"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one">මිනිත්තු <xliff:g id="FORMATTED_NUMBER">%s</xliff:g></item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"ප්‍රතිවර්තනය කරන්න"</string>
     <string name="delete" msgid="5732434972457000541">"මකන්න"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"ඇඟවීම් ශබ්දය"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"නිහඬ"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"නිහඬ"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"නොදනී"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"ඇඟවීම ඉවතලන්න හෝ යළි සිහිකැඳවන්න."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (සිහිකැඳවන ලදී)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"<xliff:g id="TIME">%s</xliff:g> ට ඇඟවීම සකසන ලදී. අවලංගු කිරීමට ස්පර්ශ කරන්න."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"රිංග්ටෝන් පුර්ණය වෙමින්…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"ඔරලෝසුවේ සකසා ඇති කාල ගණනයන් සඳහා ශබ්ද පසු ධාවනය කිරීමේ සේවාව."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"ඇඟවීම සකසන්න"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"සීනුව"</string>
     <string name="menu_timer" msgid="6459070074762877114">"කාල ගණනය"</string>
     <string name="menu_clock" msgid="5612760670606829805">"ඔරලෝසුව"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"නමින් අනුපිළිවෙලට සකසන්න"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"තෝරාගත් නගර"</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_start_button" msgid="8373422516681242270">"ආරම්භ කරන්න"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"ලැප්"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"බෙදාගන්න"</string>
     <string name="hours_label" msgid="3393478155635368097">"පැ"</string>
     <string name="minutes_label" msgid="3568098128251438588">"මි"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"මගේ වේලාව <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"ලැප් වේලාවන්:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"ලැප් <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one">පැය <xliff:g id="NUMBER">%d</xliff:g></item>
       <item quantity="other">පැය <xliff:g id="NUMBER">%d</xliff:g></item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"මිනිත්තු 1 ක් එක් කරන්න"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 මිනි එකතු කරන්න"</string>
     <string name="timer_stop" msgid="3361154678667736722">"නතර කරන්න"</string>
-    <string name="timer_done" msgid="2375990511982914051">"අවසන්"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"සියලු ටයිමර නවත්වන්න"</string>
     <string name="timer_reset" msgid="7848424809190171640">"යළි පිහිටුවන්න"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"අවලංගු කරන්න"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"කාල ගණකය අවලංගු කරන ලදී"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"වෙලාව ඉවරයි"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"ටයිමර <xliff:g id="NUM_TIMERS">%d</xliff:g> ක් කල් ඉකුත් වුණි"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"කාල ගණනය"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"උපරිම කාල ගැනීම් 4 යි"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"විරාමය"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"සියලු කාල ගණක යළි සකසන්න"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"ඔබ ඉතා වේගයෙන් යන්නෙක්."</item>
     <item msgid="6332879039890727169">"ඔබගේ උත්සාහයේ ප්‍රතිපල භුක්ති විඳින්න."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"නගර"</string>
     <string name="clock_settings" msgid="8317286807280600391">"ඔරලෝසුව"</string>
     <string name="clock_style" msgid="2265011060429742344">"විලාසය"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"දිනය සහ වේලාව වෙනස් කරන්න"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"ප්‍රතිසමය"</item>
     <item msgid="8483930821046925592">"ඩිජිටල්"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ලකුණු කරන ලදී"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> ලකුණු නොකරන ලදී"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"මාර්ෂල් දූපත්"</item>
     <item msgid="4196408495909011020">"මිඩ්වේ දූපත"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"ජකර්තා"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"අනතුරු ඇඟවීම්"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"දැනුම්දීම් ධාවනය කිරීමට කාල ඝනක සේවාවක්."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"නතර කර ඇත"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"කාල ගණක දැනුම්දීම් වෙතින් ක්‍රියා සකසයි."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"විරාම ඝටිකා දැනුම්දීම් වෙතින් ක්‍රියා සකසයි."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"විරාම කරන ලදි"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"ඉවත ලෑමට දකුණට ස්වයිප් කරන්න"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"සිහි කැඳවීමට වමට ස්වයිප් කරන්න"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"යළි සිහි කැඳවීමට වමට හෝ අස් කිරීමට දකුණට ස්වයිප් කරන්න"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"ටයිමර"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"ටයිමර රිගින් ටෝනය"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"කාල ගණනය නතර කෙරුණි"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"කාල ගැනීම් <xliff:g id="NUMBER">%d</xliff:g> නවතා ඇත"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"කාල ගණකය විරාම කරන ලදී"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"කාල ගණක <xliff:g id="NUMBER">%d</xliff:g>ක් විරාම කරන ලදී"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"ඔබගේ කාල ගණනයන් බැලීමට ස්පර්ශ කරන්න"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"කාල ගැනීම් <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"මීළඟ කාල ගණනය කිරීම: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"සීනු නැත"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"සීනු සකසා නැත"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ඉදිරියට එන සීනු නොමැත"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"වලංගු නොවන වේලාව <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> ට සීනු නොමැත"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"කාල සටහන්ගත කළ එලාම නැත"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"ලේබලයක් නිශ්චිතව දක්වා නැත"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"එලාම කිසිවක ලේබලය අඩංගු නැත"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"විරාම ඝටිකාව දැනටමත් ධාවනය වේ"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"විරාම ඝටිකාව ධාවනය නොවේ"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"විරාම ඝටිකාව ධාවනය වන නිසා එය යළි සැකසීමට නොහැකිය"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"විරාම ඝටිකාව නතර කරන ලදී"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"විරාම ඝටිකාව විරාම කරන ලදි"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"විරාම ඝටිකාව යළි සකසන ලදී"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"විරාම ඝටිකාව ලැප් කරන ලදී"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"විරාම ඝටිකාව ආරම්භ කරන ලදී"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"මෙම වේලාව සඳහා සීනුවක් නොමැත"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> එලාමය ඉවතලන ලදී"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g> ට සීනුව සකසන ලදි"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"මුහුර්තකය සකසා නැත"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"මුහුර්තකය මකන ලදී"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"මුහුර්තකය දැනටමත් ධාවනය වේ"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"ඔබගේ ඉල්ලීම සම්පූර්ණ කිරීමට නොහැකි විය, ටයිමර කිහිපයක් ඇත"</string>
-    <string name="timer_started" msgid="6715582052946641641">"මුහුර්තකය ආරම්භ කරන ලදී"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"කාල ගණක නොපවතී"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"කාල ගණක එකකට වඩා ඇත"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"කාල ගණකය ඉවත් කර ඇත."</string>
     <string name="timer_created" msgid="4381027137335885547">"ටයිමරයක් සාදන ලදි"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"වලංගු නොවන ටයිමර වේලාව"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"මුහුර්තකය යළි සකසන ලදී"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"මුහුර්තකය තවම ධාවනය වන බැවින් එය යළි සැකසීමට නොහැකිය. යළි සැකසීමට මුහුර්තකය නවත්වන්න."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"මුහුර්තකය දැනටමත් නතර කර ඇත"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"මුහුර්තකය මකන ලදී"</string>
+    <string name="timer_started" msgid="6715582052946641641">"මුහුර්තකය ආරම්භ කරන ලදී"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"වලංගු නොවන ටයිමර වේලාව"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"නගරය තෝරා නොමැත"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"ඔබ නිශ්චිතව දක්වන ලද නගරය ලබා ගත නොහැකිය"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"එම නගරය දැනටමත් එක් කර ඇත"</string>
diff --git a/res/values-sk/array.xml b/res/values-sk/array.xml
index 608204c..f3d5283 100644
--- a/res/values-sk/array.xml
+++ b/res/values-sk/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala (mesto)"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Južný pól"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Južný pól<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Alma-Ata"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Ammán"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Hočiminovo Mesto"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jeruzalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Maskat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pchjongjang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pchjongjang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangún"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Rijád"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Soul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Šanghaj"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Šanghaj<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Tchaj-pej"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Tchaj-pej<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teherán"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulanbátar"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermudy"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Kanárske ostrovy"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Dauha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Peking<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Bombaj"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Dillí"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Láhaur"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Saná"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Kanton"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Kanton<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hajdarábad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 46a7ed1..add4f04 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Zobraziť hodiny"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Skryť hodiny"</string>
     <string name="label" msgid="162189613902857319">"Štítok"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Zapnuté"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Vypnuté"</string>
     <string name="default_label" msgid="5590025289805630372">"Budík"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Nastaviť budík"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrovať"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Opakovať"</string>
     <string name="alert" msgid="6506982899651975645">"Tón zvonenia budíka"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Vlastný tón zvonenia"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Časovač vypršal"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Tichý"</string>
     <string name="ringtone" msgid="9110746249688559579">"Tón zvonenia"</string>
     <string name="time" msgid="8067216534232296518">"Čas"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Zajtra"</string>
@@ -62,12 +65,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Odložené do <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Nadchádzajúci budík"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Zmeškaný budík bol odstránený"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Beží posledná minúta"</item>
-    <item msgid="83197792732433351">"Ešte <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Ešte <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Ešte <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Zostáva menej ako minúta"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g>: <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g>: <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Zostávajúci čas: <xliff:g id="HOURS">%1$s</xliff:g> h <xliff:g id="MINUTES">%2$s</xliff:g> min"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"- zostávajúci čas"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"- zostávajúci čas"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Budík sa spustí o menej než 1 minútu"</item>
     <item msgid="6002066367368421848">"Budík sa spustí o <xliff:g id="DAYS">%1$s</xliff:g>"</item>
@@ -115,6 +118,10 @@
       <item quantity="other"> minút</item>
       <item quantity="one"> minúta</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Postupne zvýšiť hlasitosť"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Vypnuté"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> s"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"s"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Stíšiť po uplynutí"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="few"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minúty</item>
@@ -142,7 +149,8 @@
     <string name="revert" msgid="9100911171235162926">"Vrátiť"</string>
     <string name="delete" msgid="5732434972457000541">"Odstrániť"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Hlasitosť budíkov"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Tichý"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Tichý režim"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Neznáme"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Odložiť alebo zrušiť budík."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (odložené)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Budík je nastavený na <xliff:g id="TIME">%s</xliff:g>. Dotykom ho zrušíte."</string>
@@ -167,8 +175,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Prebieha načítavanie vyzváňacieho tónu..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Služba prehrávania zvuku časovačov nastavených v aplikácii Hodiny."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Nastaviť budík"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Budík"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Časovač"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Hodiny"</string>
@@ -183,10 +189,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Zoradiť podľa názvu"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Vybrané mestá"</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">"Etapa"</string>
     <string name="sw_reset_button" msgid="6616804728322906117">"Obnoviť"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Spustiť"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pozastaviť"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Etapa"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Zdieľať"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -198,10 +204,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Môj čas je <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Časy etáp:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. etapa"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Č. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Č. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> hodiny</item>
       <item quantity="many"><xliff:g id="NUMBER">%d</xliff:g> hodiny</item>
@@ -227,12 +229,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Pridať 1 minútu"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Pridať 1 min."</string>
     <string name="timer_stop" msgid="3361154678667736722">"Zastaviť"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Hotovo"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Zastaviť všetky časovače"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Obnoviť"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Zrušiť"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Časovač bol zrušený"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Čas vypršal"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Vypršané časovače: <xliff:g id="NUM_TIMERS">%d</xliff:g>"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Časovač"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"maximálne 4 časovače"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pozastaviť"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Reset. časovače"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Ste pánom rýchlosti."</item>
     <item msgid="6332879039890727169">"Užite si plody svojej práce."</item>
@@ -249,6 +255,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Mestá"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Hodiny"</string>
     <string name="clock_style" msgid="2265011060429742344">"Štýl"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Zmeniť dátum a čas"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analógové"</item>
     <item msgid="8483930821046925592">"Digitálne"</item>
@@ -263,6 +270,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Mesto <xliff:g id="CITY_NAME">%s</xliff:g> je začiarknuté"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Mesto <xliff:g id="CITY_NAME">%s</xliff:g> nie je začiarknuté"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshallove ostrovy"</item>
     <item msgid="4196408495909011020">"Midwayské ostrovy"</item>
@@ -351,13 +360,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Budíky"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Služba Stopky na spúšťanie upozornenia."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Zastavené"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Spracuje akcie z upozornení časovača."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Spracuje akcie z upozornení stopiek."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Pozastavené"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Prejdením prstom doprava budík zrušíte"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Prejdením prstom doľava budík odložíte"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Prejdením prstom doľava budík odložíte, prejdením prstom doprava ho zrušíte"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Časovače"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Tón zvonenia časovača"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Časovač sa zastavil"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Zastavené časovače (<xliff:g id="NUMBER">%d</xliff:g>)"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Časovač bol pozastavený"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Pozastavené časovače (<xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Dotykom zobrazíte časovače"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"Časovače (<xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Ďalší časovač: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -385,35 +398,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Žiadne budíky"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Budíky nenastavené"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ŽIADNE PLÁNOVANÉ BUDÍKY"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Neplatný čas <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Žiadny budík na <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Žiadne nastavené budíky"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nebol určený štítok"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Žiadny budík nemá tento štítok"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Stopky sú už spustené"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Stopky nie sú spustené"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Stopky nemôžete resetovať, pretože sú spustené"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Stopky boli zastavené"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stopky boli pozastavené"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Stopky boli resetované"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Stopky spustili ďalší časový interval"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Stopky boli spustené"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Na tento čas nie je nastavený žiadny budík"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Budík na <xliff:g id="ALARM_TIME">%s</xliff:g> bol odmietnutý"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Budík je nastavený na <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Nie je nastavený žiadny časovač"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Časovač bol odstránený"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Časovač je už spustený"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Vašu žiadosť sa nepodarilo dokončiť, pretože je k dispozícii viacero časovačov"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Časovač bol spustený"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Neexistujú žiadne časovače"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Existuje viacero časovačov"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Časovač bol odstránený."</string>
     <string name="timer_created" msgid="4381027137335885547">"Časovač bol vytvorený"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Neplatná dĺžka časovača"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Časovač bol resetovaný"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Časovač sa nedá resetovať, pretože je stále spustený. Najprv ho zastavte."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Časovač už bol zastavený"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Časovač bol odstránený"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Časovač bol spustený"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Neplatná dĺžka časovača"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Nebolo vybraté mesto"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Zadané mesto nie je k dispozícii"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Dané mesto už bolo pridané"</string>
diff --git a/res/values-sl/array.xml b/res/values-sl/array.xml
index 4553636..397d9a7 100644
--- a/res/values-sl/array.xml
+++ b/res/values-sl/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Gvatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala City"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Gvajana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"J<xliff:g id="SEPARATOR">=</xliff:g>Južni tečaj"</item>
+    <item msgid="498429228419399474">"J<xliff:g id="SEPARATOR">=</xliff:g>Južni tečaj<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Aman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Hošiminh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"C<xliff:g id="SEPARATOR">=</xliff:g>Carigrad"</item>
     <item msgid="758800913783999425">"D<xliff:g id="SEPARATOR">=</xliff:g>Džakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jeruzalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muškat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pjongjang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"K<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"Y<xliff:g id="SEPARATOR">=</xliff:g>Yangon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riad"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Sajgon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"Š<xliff:g id="SEPARATOR">=</xliff:g>Šanghaj"</item>
+    <item msgid="3814881931186962624">"Š<xliff:g id="SEPARATOR">=</xliff:g>Šanghaj<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Tajpej"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Tajpej<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulan Bator"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermudi"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanarski otoki"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Peking<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbaj"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 135c939..9c5f515 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Pokaži uro"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Skrij uro"</string>
     <string name="label" msgid="162189613902857319">"Oznaka"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Vklopljeno"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Izklopljeno"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Nastavi alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibriranje"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Ponovi"</string>
     <string name="alert" msgid="6506982899651975645">"Ton zvonjenja za alarm"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Ton zvonjenja po meri"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Časovnik je potekel"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Tiho"</string>
     <string name="ringtone" msgid="9110746249688559579">"Melodija zvonjenja"</string>
     <string name="time" msgid="8067216534232296518">"Čas"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Jutri"</string>
@@ -62,12 +65,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Dremež do <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Prihodnji alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Zamujeni alarm je izbrisan"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Še manj kot minuta"</item>
-    <item msgid="83197792732433351">"Še <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Še <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Še <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Še manj kot minuta"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Še <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"še"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"še"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarm je nastavljen na manj kot 1 minuto od zdaj."</item>
     <item msgid="6002066367368421848">"Alarm je nastavljen na <xliff:g id="DAYS">%1$s</xliff:g> od zdaj."</item>
@@ -115,6 +118,10 @@
       <item quantity="few">minute</item>
       <item quantity="other">minute</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Postopno večanje glasnosti"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Izklopljeno"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> s"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"s"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Utišanje po"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuta</item>
@@ -142,7 +149,8 @@
     <string name="revert" msgid="9100911171235162926">"Povrni"</string>
     <string name="delete" msgid="5732434972457000541">"Izbriši"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Glasnost alarma"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Tiho"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Tiho"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Neznano"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Nastavite na dremež ali prezrite alarm."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (dremež)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm je nastavljen na <xliff:g id="TIME">%s</xliff:g>. Dotaknite se, če želite preklicati."</string>
@@ -167,8 +175,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Nalaganje zvonjenja ..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Storitev predvajanja zvoka za časomere, nastavljene z Budilko."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Nastavi alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Časovnik"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Ura"</string>
@@ -183,10 +189,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Razvrsti po imenu"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Izbrani kraji"</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_start_button" msgid="8373422516681242270">"Začni"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Začasno ustavi"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Krog"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Deli z drugimi"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -198,10 +204,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Moj čas je <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Časi kroga:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. krog"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Število: <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Število: <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> ura</item>
       <item quantity="two"><xliff:g id="NUMBER">%d</xliff:g> uri</item>
@@ -227,12 +229,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Dodajanje 1 minute"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Dodaj 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Ustavi"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Dokončano"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Ustavi vse časovnike"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Ponastavi"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Prekliči"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Merilnik časa je preklican"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Čas je potekel"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Pretekli časovniki: <xliff:g id="NUM_TIMERS">%d</xliff:g>"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Časovnik"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Največ 4 časovniki"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Zaustavitev"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Ponast. časov."</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Hitri ste kot blisk."</item>
     <item msgid="6332879039890727169">"Uživajte v sadovih svojega dela."</item>
@@ -249,6 +255,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Mesta"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Ura"</string>
     <string name="clock_style" msgid="2265011060429742344">"Slog"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Spreminjanje datuma in ure"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogno"</item>
     <item msgid="8483930821046925592">"Digitalno"</item>
@@ -263,6 +270,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Kraj <xliff:g id="CITY_NAME">%s</xliff:g> je označen"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Kraj <xliff:g id="CITY_NAME">%s</xliff:g> je odznačen"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshallovi otoki"</item>
     <item msgid="4196408495909011020">"Otok Midway"</item>
@@ -351,13 +360,17 @@
     <item msgid="5176858645450908751">"Džakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmi"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Uporaba štoparice pri objavi obvestila."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Ustavljeno"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Obdela dejanja, ki izhajajo iz obvestil časovnika."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Obdela dejanja, ki izhajajo iz obvestil štoparice."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Zaustavljeno"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Povlecite v desno za opustitev"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Povlecite v levo za dremež"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Povlecite v levo za dremež ali v desno za opustitev"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Časovniki"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ton zvonjenja za časovnik"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Časovnik ustavljen"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Št. ustavljenih časovnikov: <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Časovnik je zaustavljen"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Zaustavljeni časovniki: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Dotaknite se za prikaz časovnikov"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"Št. časovnikov: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Naslednji časovnik: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -385,35 +398,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Brez opozoril"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Ni nast. alarm."</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NI PRIHAJAJOČIH OPOZORIL"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k.mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Neveljavna ura <xliff:g id="INVALID_HOUR">%d</xliff:g>.<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Ni alarmov ob <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>.<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Ni nastavljenih alarmov"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nobena oznaka ni bila določena"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Noben alarm ne vsebuje oznake"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Štoparica že teče"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Štoparica ne teče"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Štoparice ni mogoče ponastaviti, ker teče"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Štoparica je bila ustavljena"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Štoparica je zaustavljena"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Štoparica je bila ponastavljena"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"V štoparici so bili dodani krogi"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Štoparica je začela teči"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Za to uro ni nastavljenega nobenega alarma"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarm ob <xliff:g id="ALARM_TIME">%s</xliff:g> je opuščen"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm je nastavljen ob <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Ni nastavljenega časovnika"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Časovnik je izbrisan"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Časovnik že teče"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Zahteve ni mogoče dokončati, na voljo je več časovnikov"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Časovnik se je začel"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Ni časovnikov"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Obstaja več časovnikov"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Časovnik je odstranjen."</string>
     <string name="timer_created" msgid="4381027137335885547">"Časovnik je bil ustvarjen"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Neveljavna dolžina časovnika"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Časovnik je ponastavljen"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Časovnika ni mogoče ponastaviti, ker še teče. Če ga želite ponastaviti, ga ustavite."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Časovnik je že ustavljen"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Časovnik je izbrisan"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Časovnik se je začel"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Neveljavna dolžina časovnika"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Ni izbranega kraja"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Določeni kraj ni na voljo"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Ta kraj je že dodan"</string>
diff --git a/res/values-sq-rAL/array.xml b/res/values-sq-rAL/array.xml
index 74b1730..946b664 100644
--- a/res/values-sq-rAL/array.xml
+++ b/res/values-sq-rAL/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleca"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand-Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenadë"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemalë"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Qyteti i Guatemalës"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guajanë"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifaks"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havanë"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vankuver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Uinipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Poli i Jugut"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Poli i Jugut<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longierbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almati"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Aman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho-Çi-Min"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong-Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hong-Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Stamboll"</item>
     <item msgid="758800913783999425">"Xh<xliff:g id="SEPARATOR">=</xliff:g>Xhakartë"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Muskat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Pnom-Pen"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Penian"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Penian<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangun"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Rijad"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"Sh<xliff:g id="SEPARATOR">=</xliff:g>Shangai"</item>
+    <item msgid="3814881931186962624">"Sh<xliff:g id="SEPARATOR">=</xliff:g>Shangai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapor"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Tajpej"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Tajpej<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel-Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulan-Bator"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermude"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Kanarie"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Blek-Rok-Siti"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Pekin"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Pekin<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahor"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelonë"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Kembrixh"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hiderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo-Horizonte"</item>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index fa0c279..3ca6a48 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Shfaq orën"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Fshih orën"</string>
     <string name="label" msgid="162189613902857319">"Emërtimi"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Aktivizuar"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Joaktiv"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarmi"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Cakto alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Dridhja"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Përsërit"</string>
     <string name="alert" msgid="6506982899651975645">"Zilja e alarmit"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Zilja e personalizuar"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Kohëmatësi skadoi"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Në heshtje"</string>
     <string name="ringtone" msgid="9110746249688559579">"Zilja"</string>
     <string name="time" msgid="8067216534232296518">"Ora"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Nesër"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Dremit deri në <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Alarmi i ardhshëm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Alarmi i humbur u fshi"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Ka mbetur më pak se një minutë"</item>
-    <item msgid="83197792732433351">"Kanë mbetur edhe <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Kanë mbetur edhe <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Kanë mbetur edhe <xliff:g id="HOURS">%1$s</xliff:g> e <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Ka mbetur më pak se një minutë"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Kanë mbetur edhe <xliff:g id="HOURS">%1$s</xliff:g> e <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"Ka mbetur edhe"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"Kanë mbetur edhe"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarmi është vënë për më pak se 1 minutë nga momenti i tanishëm."</item>
     <item msgid="6002066367368421848">"Alarmi është vënë për <xliff:g id="DAYS">%1$s</xliff:g> nga momenti i tanishëm."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minuta</item>
       <item quantity="one">minutë</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Rrit gradualisht volumin"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Joaktiv"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> sekonda"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sekonda"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Kalo në heshtje për"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuta</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Kthehu"</string>
     <string name="delete" msgid="5732434972457000541">"Fshi"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Volumi i alarmit"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Hesht"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Në heshtje"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"E panjohur"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Dremit ose largoje alarmin."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (dremitur)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarmi u caktua për në <xliff:g id="TIME">%s</xliff:g>. Prek për ta anuluar."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Po ngarkon zilen…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Shërbimi i ridëgjimit të zërit për kohëmatësit është vënë tek ora."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Vendos alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarmi"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Kohëmatësi"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Ora"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Klasifiko sipas emrit"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Qytetet e përzgjedhura"</string>
     <string name="sw_resume_button" msgid="2569360966002022248">"Rifillo"</string>
-    <string name="sw_start_button" msgid="8373422516681242270">"Fillo"</string>
-    <string name="sw_stop_button" msgid="8322958613123274451">"Ndalo"</string>
-    <string name="sw_lap_button" msgid="6992264696039004233">"Xhiro"</string>
     <string name="sw_reset_button" msgid="6616804728322906117">"Rivendos"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Fillo"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"Xhiro"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Shpërnda"</string>
     <string name="hours_label" msgid="3393478155635368097">"o"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Koha ime është <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Kohët e xhiros:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Xhiroja <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> orë</item>
       <item quantity="one">1 orë</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Shto 1 minutë"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Shto 1 minutë"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Ndalo"</string>
-    <string name="timer_done" msgid="2375990511982914051">"U krye!"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Ndalo të gjithë kohëmatësit"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Rivendos"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Anulo"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Kohëmatësi u anulua"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Koha mbaroi"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> kohëmatës kanë skaduar"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Kohëmatësi"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Maksimumi 4 kohëmatës"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pauzë"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Rivendos të gjithë kohëmatësit"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Je mjaft i shpejtë."</item>
     <item msgid="6332879039890727169">"Shijo frytet e punës."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Qytetet"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Ora"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stili"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Ndërro datën dhe kohën"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analog"</item>
     <item msgid="8483930821046925592">"Dixhital"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> u shënua"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"U hoq shënimi nga <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Ishujt Marshall"</item>
     <item msgid="4196408495909011020">"Ishulli Miduej"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"Xhakartë"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmet"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Njoftimin do ta japë shërbimi i kronometrit."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Ndaloi"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Përpunon veprimet nga njoftimet e kohëmatësit."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Përpunon veprimet nga njoftimet e kronometrit."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"U ndërpre"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Rrëshqit djathtas për ta larguar"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Rrëshqit majtas për ta dremitur"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Rrëshqit majtas për ta shtyrë, ose djathtas për ta hequr"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Kohëmatësit"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Toni i ziles së kohëmatësit"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Kohëmatësi ndaloi"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> kohëmatës ndaluan"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Kohëmatësi u vendos në pauzë"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> kohëmatës u vendosën në pauzë"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Prek për të parë kohëmatësit"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> kohëmatës"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Kohëmatësi tjetër: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Nuk ka alarme"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Nuk është caktuar asnjë alarm"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"NUK KA ALARME TË ARDHSHME"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"<xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g> është orë e pavlefshme"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Nuk ka asnjë alarm në <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Nuk ka asnjë alarm të planifikuar"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Nuk u specifikua asnjë etiketë"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Asnjë alarm nuk e përfshin etiketën"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Kronometri është tashmë në ekzekutim"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Kronometri nuk është në ekzekutim"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Kronometri nuk mund të rivendoset sepse është në funksionim"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Kronometri u ndalua"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Kronometri u ndërpre"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Kronometri u rivendos"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Kronometri e regjistroi xhiron"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Kronometri u nis"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Nuk ka asnjë alarm të planifikuar për këtë orë"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarmi në <xliff:g id="ALARM_TIME">%s</xliff:g> u hoq"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarmi është caktuar në <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Nuk ka asnjë kohëmatës të caktuar"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Kohëmatësi u fshi"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Kohëmatësi është tashmë në ekzekutim"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Kërkesa nuk mund të realizohet, pasi ka shumë kohëmatës të disponueshëm"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Kohëmatësi filloi"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Nuk ekzistojnë kohëmatës"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Ekziston më shumë se një kohëmatës"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Kohëmatësi është hequr."</string>
     <string name="timer_created" msgid="4381027137335885547">"Kohëmatësi u krijua"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Gjatësia e kohëmatësit e pavlefshme"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Kohëmatësi u rivendos"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Kohëmatësi nuk mund të rivendoset sepse është akoma në ekzekutim. Ndaloje për ta rivendosur."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Kohëmatësi është ndaluar tashmë"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Kohëmatësi u fshi"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Kohëmatësi filloi"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Gjatësia e kohëmatësit e pavlefshme"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Nuk u zgjodh asnjë qytet"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Qyteti që specifikove nuk ekziston të bazën e të dhënave"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Ai qytet është shtuar tashmë"</string>
diff --git a/res/values-sr/array.xml b/res/values-sr/array.xml
index 0950eb2..4aff68f 100644
--- a/res/values-sr/array.xml
+++ b/res/values-sr/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Форталеза"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Гранд Турк"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Гренада"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Гватемала"</item>
+    <item msgid="6216160110733510854">"<xliff:g id="SEPARATOR">=</xliff:g>Гватемала"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Гвајана"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Халифакс"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Хавана"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Торонто"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Ванкувер"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Винипег"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Јужни пол"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Јужни пол<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Лонгјербјен"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Алмати"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Аман"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Газа"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Хеброн"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Хо Ши Мин"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Хонгконг"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Хонгконг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Истанбул"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Џакарта"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Јерусалим"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Манила"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Мускат"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Пном Пен"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Пјонгјанг"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Пјонгјанг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Катар"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Рангун"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Ријад"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Сајгон"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Сеул"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Шангај"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Шангај<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Сингапур"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Тајпеј"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Тајпеј<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Техеран"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Тел Авив"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Токио"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Токио<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Улан Батор"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Бермуди"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Канари"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Рино"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Блек Рок Сити"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Доха"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Пекинг"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Пекинг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Мумбај"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Делхи"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Осака"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Осака<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Лахор"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Сана"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Барселона"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Кембриџ"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Киркланд"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Медисон"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Гуангџоу"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Гуангџоу<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Хајдерабад"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Рестон"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Бело Хоризонте"</item>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 6c3e120..b88158f 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Прикажи сат"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Сакриј сат"</string>
     <string name="label" msgid="162189613902857319">"Ознака"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Укључено"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Искључено"</string>
     <string name="default_label" msgid="5590025289805630372">"Аларм"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Подеси аларм"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Вибрација"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Понови"</string>
     <string name="alert" msgid="6506982899651975645">"Мелодија аларма"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Прилагођена мелодија звона"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Тајмер је истекао"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Нечујно"</string>
     <string name="ringtone" msgid="9110746249688559579">"Мелодија звона"</string>
     <string name="time" msgid="8067216534232296518">"Време"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Сутра"</string>
@@ -60,12 +63,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Одлагање до <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Предстојећи аларм"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Пропуштени аларм је избрисан"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Преостало је мање од минута"</item>
-    <item msgid="83197792732433351">"Преостало је <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Преостало је <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Преостало је <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Преостало је мање од минута"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Преостало: <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"преостаје"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"преостаје"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Аларм ће се укључити за мање од 1 минута."</item>
     <item msgid="6002066367368421848">"Аларм ће се укључити за <xliff:g id="DAYS">%1$s</xliff:g>."</item>
@@ -108,6 +111,10 @@
       <item quantity="few">минута</item>
       <item quantity="other">минута</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Постепено повећај јачину звука"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Искључено"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> сек"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"секунде"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Утишај након"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> минут</item>
@@ -134,7 +141,8 @@
     <string name="revert" msgid="9100911171235162926">"Врати"</string>
     <string name="delete" msgid="5732434972457000541">"Избриши"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Јачина звука аларма"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Нечујно"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Нечујно"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Непозната"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Одложите или одбаците аларм."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (одложено)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Аларм ће се укључити за <xliff:g id="TIME">%s</xliff:g>. Додирните за отказивање."</string>
@@ -159,8 +167,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Учитава се звук звона..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Услуга пуштања звука за тајмере подешене у Сату."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Подеси аларм"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Аларм"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Тајмер"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Сат"</string>
@@ -175,10 +181,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Сортирај према имену"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Изабрани градови"</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_start_button" msgid="8373422516681242270">"Покрени"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Паузирај"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Круг"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Дели"</string>
     <string name="hours_label" msgid="3393478155635368097">"ч"</string>
     <string name="minutes_label" msgid="3568098128251438588">"м"</string>
@@ -190,10 +196,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Моје време је <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Пролазна времена:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. круг"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Бр. <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Бр. <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> сат</item>
       <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> сата</item>
@@ -216,12 +218,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Додај 1 минут"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Додај 1 мин"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Заустави"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Готово"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Заустави све тајмере"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Поново подеси"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Откажи"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Тајмер је отказан"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Време је истекло"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Истеклих тајмера: <xliff:g id="NUM_TIMERS">%d</xliff:g>"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Тајмер"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Дозвољено је највише 4 тајмера"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Паузирај"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Рес. све тајм."</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Брзи сте као муња."</item>
     <item msgid="6332879039890727169">"Уживајте у плодовима свог рада."</item>
@@ -238,6 +244,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Градови"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Сат"</string>
     <string name="clock_style" msgid="2265011060429742344">"Стил"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Промените датум и време"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Аналогни"</item>
     <item msgid="8483930821046925592">"Дигитални"</item>
@@ -252,6 +259,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Град <xliff:g id="CITY_NAME">%s</xliff:g> је означен"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Ознака за град <xliff:g id="CITY_NAME">%s</xliff:g> је уклоњена"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Маршалска острва"</item>
     <item msgid="4196408495909011020">"Острво Мидвеј"</item>
@@ -340,13 +349,17 @@
     <item msgid="5176858645450908751">"Џакарта"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Аларми"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Услуга штоперице за управљање обавештењима."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Заустављено"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Обрађује радње из обавештења тајмера."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Обрађује радње из обавештења штоперице."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Паузирано"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Превуците надесно за одбацивање"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Превуците налево за одлагање"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Превуците налево да бисте одложили или надесно да бисте одбацили"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Тајмери"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Мелодија звона тајмера"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Тајмер је заустављен"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Тајмери (<xliff:g id="NUMBER">%d</xliff:g>) су заустављени"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Тајмер је паузиран"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Паузираних тајмера: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Додирните да бисте видели тајмере"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> тајмера"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Следећи тајмер: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -373,35 +386,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Без аларма"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Нема аларма"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"НЕМА ПРЕДСТОЈЕЋИХ АЛАРМА"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Неважеће време <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Нема аларма у <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Нема заказаних аларма"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Није наведена ниједна ознака"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Ниједан аларм не садржи ознаку"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Штоперица је већ покренута"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Штоперица није покренута"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Штоперица не може да се ресетује јер је активна"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Штоперица је заустављена"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Штоперица је паузирана"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Штоперица је ресетована"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Обележено је време за круг на штоперици"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Штоперица је покренута"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Ниједан аларм није заказан за ово време"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Аларм за <xliff:g id="ALARM_TIME">%s</xliff:g> је одбачен"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Аларм је подешен за <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Ниједан тајмер није подешен"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Тајмер је избрисан"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Тајмер је већ покренут"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Није успело довршавање захтева јер је доступно више тајмера"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Тајмер је покренут"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Не постоје тајмери"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Постоји више тајмера"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Тајмер је уклоњен."</string>
     <string name="timer_created" msgid="4381027137335885547">"Тајмер је направљен"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Неважећа дужина тајмера"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Тајмер је ресетован"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Тајмер не може да се ресетује јер је још увек покренут. Зауставите тајмер да бисте га ресетовали."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Тајмер је већ заустављен"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Тајмер је избрисан"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Тајмер је покренут"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Неважећа дужина тајмера"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Ниједан град није изабран"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Град који сте навели није доступан"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Овај град је већ додат"</string>
diff --git a/res/values-sv/array.xml b/res/values-sv/array.xml
index 5d3dca2..e958e73 100644
--- a/res/values-sv/array.xml
+++ b/res/values-sv/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala City"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>Sydpolen"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>Sydpolen<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh-staden"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hongkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manilla"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muskat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Teheran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulan Bator"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanarieöarna"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Peking"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Peking<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sanaa"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 5d62cb0..66bb405 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Visa klocka"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Dölj klocka"</string>
     <string name="label" msgid="162189613902857319">"Etikett"</string>
+    <string name="on_switch" msgid="2297966258029227449">"På"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Av"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Ställ alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Vibrera"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Upprepa"</string>
     <string name="alert" msgid="6506982899651975645">"Ringsignal för alarm"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Anpassad ringsignal"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Timern har upphört"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Tyst"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ringsignal"</string>
     <string name="time" msgid="8067216534232296518">"Tid"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"I morgon"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Viloläge till <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Kommande alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Det missade alarmet har tagits bort"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Mindre än en minut kvar"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> timmar kvar"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> kvar"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> kvar"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Mindre än en minut kvar"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> och <xliff:g id="MINUTES">%2$s</xliff:g> kvar"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"kvar"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"kvar"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarmet ringer om mindre än 1 minut från och med nu."</item>
     <item msgid="6002066367368421848">"Alarmet ringer om <xliff:g id="DAYS">%1$s</xliff:g> från och med nu."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">minuter</item>
       <item quantity="one">minut</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Höj volymen gradvis"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Av"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> sekunder"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sekunder"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Alarmet upphör efter"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuter</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Tillbaka"</string>
     <string name="delete" msgid="5732434972457000541">"Ta bort"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Alarmvolym"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Tyst"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Tyst"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Okänd"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Snooza eller ta bort alarmet permanent."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (snoozat)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarmet ringer <xliff:g id="TIME">%s</xliff:g>. Tryck här om du vill avbryta."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Läser in ringsignal..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Ljuduppspelningstjänst för timer som ställts in i DeskClock."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Ställ alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Klocka"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sortera efter namn"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Valda städer"</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_start_button" msgid="8373422516681242270">"Start"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pausa"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Varv"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Dela"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Min tid är <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Varvtider:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Varv <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"Antal: <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"Antal: <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> timmar</item>
       <item quantity="one">1 timme</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Lägg till 1 minut"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Lägg till 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stopp"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Klart"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Stoppa alla timer"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Återställ"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Avbryt"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Timerinställningen avbröts"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Tiden är ute!"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> timer har löpt ut"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Timer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Högst 4 timer"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pausa"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Återställ alla"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Du är snabbheten personifierad."</item>
     <item msgid="6332879039890727169">"Njut av frukterna av ditt arbete."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Orter"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Klocka"</string>
     <string name="clock_style" msgid="2265011060429742344">"Format"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Ändra datum och tid"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analog"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> har markerats"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> har avmarkerats"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshallöarna"</item>
     <item msgid="4196408495909011020">"Midwayöarna"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Larm"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Stoppurstjänst som kör meddelandet."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Stoppad"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Bearbetar åtgärder från timeraviseringar."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Bearbetar åtgärder från stoppursaviseringar."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Pausat"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Stäng av alarmet genom att dra åt höger"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Snooza genom att dra åt vänster"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Dra åt vänster för att snooza eller höger för att stänga av"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Timer"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ringsignal för timer"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Timern stannade"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> timer stannade"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Timern har pausats"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> timer har pausats"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Visa timer genom att trycka"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> timer"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Nästa timer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Inga alarm"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Inga alarm"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"INGA KOMMANDE ALARM"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Ogiltig tid: <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Inget alarm den här tiden: <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Inga inställda alarm"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Ingen etikett har angetts"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Inga alarm innehåller den här etiketten"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Tidtagaruret har redan startats"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Tidtagaruret har inte startats"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Tidtagaruret kan inte återställas eftersom det används"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Tidtagaruret har stoppats"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Stoppuret har pausats"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Tidtagaruret har återställts"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Tidtagaruret har gått ett varv"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Tidtagaruret har startat"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Det finns inga alarm den här tiden"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Alarmet som var inställt på <xliff:g id="ALARM_TIME">%s</xliff:g> har ignorerats"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarmet ringer <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Ingen timer har ställts in"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Timern har raderats"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Timern har redan startats"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Det gick inte att slutföra begäran – flera timer är tillgängliga"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Timern har startats"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Det finns ingen timer"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Det finns fler än en timer"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Timern har tagits bort."</string>
     <string name="timer_created" msgid="4381027137335885547">"En timer har ställts in"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Ogiltig tidslängd för timer"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Timern har återställts"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Det går inte att återställa timern eftersom den är aktiv. Stoppa timern om du vill återställa den."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Timern har redan stoppats"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Timern har raderats"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Timern har startats"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Ogiltig tidslängd för timer"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Ingen stad har valts"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Staden du angav är inte tillgänglig"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Den här staden har redan lagts till"</string>
diff --git a/res/values-sw/array.xml b/res/values-sw/array.xml
index 68ab7c1..de87062 100644
--- a/res/values-sw/array.xml
+++ b/res/values-sw/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala City"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Ncha ya Kusini"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Ncha ya Kusini<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Yerusalemu"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Maskat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Katari"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapuri"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Tehran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bamuda"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sanaa"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index d3a6a45..e53b828 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Onyesha saa"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Ficha saa"</string>
     <string name="label" msgid="162189613902857319">"Lebo"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Imewashwa"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Imezimwa"</string>
     <string name="default_label" msgid="5590025289805630372">"Kengele"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Weka kengele"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Mtetemo"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Rudia"</string>
     <string name="alert" msgid="6506982899651975645">"Mlio wa Kengele"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Mlio Maalum wa Simu"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Muda wa Kipima wakati Umemalizika"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Kimya"</string>
     <string name="ringtone" msgid="9110746249688559579">"Mlio wa simu"</string>
     <string name="time" msgid="8067216534232296518">"Saa"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Kesho"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Imeahirishwa hadi <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Kengele ijayo"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Kengele ambayo haikuitikiwa imefutwa"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Imesalia chini ya dakika moja"</item>
-    <item msgid="83197792732433351">"Zimesalia <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Zimesalia <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Zimesalia <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Imesalia chini ya dakika moja"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Zimesalia <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"imesalia"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"zimesalia"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Kengele imewekwa na italia baada ya chini ya dakika 1 kutoka sasa."</item>
     <item msgid="6002066367368421848">"Kengele imewekwa na italia baada ya <xliff:g id="DAYS">%1$s</xliff:g> kutoka sasa."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">dakika </item>
       <item quantity="one">dakika</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Ongeza sauti taratibu"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Imezimwa"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"Sekunde <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"sekunde"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Kimya baada ya"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other">Dakika <xliff:g id="FORMATTED_NUMBER">%s</xliff:g> </item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Rudi"</string>
     <string name="delete" msgid="5732434972457000541">"Futa"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Sauti ya kengele"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Kimya"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Kimya"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Isiyojulikana"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Ahirisha au uondoe kengele."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (imesinzia)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Kengele imewekwa na italia <xliff:g id="TIME">%s</xliff:g>. Gusa ili kughairi."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Inapakia mlio..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Huduma ya kuchezesha tena kengele iliyowekwa kwenye Saa."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Weka kengele"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Kengele"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Kipima wakati"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Saa"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Panga kwa jina"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Miji Iliyochaguliwa"</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">"Simama"</string>
-    <string name="sw_lap_button" msgid="6992264696039004233">"Mzunguko"</string>
     <string name="sw_reset_button" msgid="6616804728322906117">"Weka upya"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Anza"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Sitisha"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Mzunguko"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Shiriki"</string>
     <string name="hours_label" msgid="3393478155635368097">"s"</string>
     <string name="minutes_label" msgid="3568098128251438588">"d"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Muda wangu ni <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Muda wa mzunguko:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Mzunguko <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other">Saa <xliff:g id="NUMBER">%d</xliff:g></item>
       <item quantity="one">Saa 1</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Ongeza Dakika 1"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Ongeza dakika 1"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Simama"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Imekamilika"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Komesha vipima muda vyote"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Weka upya"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Ghairi"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Kipima muda kimeghairiwa"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Muda umekwisha"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Muda wa vipima muda <xliff:g id="NUM_TIMERS">%d</xliff:g> umekwisha"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Kipima wakati"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Kiwango cha juu cha vipima muda 4"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Sitisha"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Weka upya vipima wakati vyote"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Una kasi ya ajabu."</item>
     <item msgid="6332879039890727169">"Furahia matunda ya kazi yako."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Miji"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Saa"</string>
     <string name="clock_style" msgid="2265011060429742344">"Mtindo"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Badilisha Tarehe na wakati"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analogi"</item>
     <item msgid="8483930821046925592">"Dijito"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> imeteuliwa"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> imeondolewa uteuzi"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Visiwa vya Marshall"</item>
     <item msgid="4196408495909011020">"Kisiwa cha Midway"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Kengele"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Huduma ya saa ya kusitisha kuendesha arifa."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Imekomeshwa"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Huchakata vitendo kutoka arifa za kipima muda."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Huchakata vitendo kutoka arifa za saa ya kupima muda."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Imesitishwa"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Telezesha kidole kulia ili uondoe"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Telezesha kidole kushoto ili uahirishe"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Telezesha kidole kushoto ili uhairishe au kulia ili uondoe"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Vipima muda"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Mlio wa kipima muda"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Kipima wakati kimesimamishwa"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Vipima wakati <xliff:g id="NUMBER">%d</xliff:g> vilivyosimamishwa"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Kipima wakati kimesitishwa"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Vipima wakati <xliff:g id="NUMBER">%d</xliff:g> vimesitishwa"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Gusa ili kuona vipima wakati vyako"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"Vipima wakati <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Kipima wakati Kifuatacho: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Hakuna Kengele Zilizowekwa"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Hakuna kengele zilizowekwa"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"HAKUNA KENGELE ZIJAZO"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Wakati usio sahihi <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Hakuna kengele ya saa <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Hakuna kengele zilizoratibiwa"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Hakuna lebo iliyobainishwa"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Hakuna kengele zilizo na lebo hii"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Saa ya kupima muda tayari inatumika"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Saa ya kupima muda haitumiki"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Kipima muda hakiwezi kuwekwa upya kwa sababu kinatumika"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Kipima muda kimesimamishwa"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Saa ya kupima muda imesitishwa"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Muda wa kipima muda umewekwa upya"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Kipima muda kimekamilisha muda wa mzunguko"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Kipima muda kimeanzishwa"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Hakuna kengele iliyoratibiwa wakati huu"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Kengele ya <xliff:g id="ALARM_TIME">%s</xliff:g> imeondolewa"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Kengele imewekwa ya saa <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Hakuna kipima muda"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Kipima muda kimefutwa"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Kipima muda tayari kinatumika"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Tumeshindwa kukamilisha ombi lako, kuna vipimaji vingi vya wakati"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Kipima muda kimeanzishwa"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Hakuna vipima muda"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Kuna zaidi ya kipima muda kimoja"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Kipima muda kimeondolewa."</string>
     <string name="timer_created" msgid="4381027137335885547">"Kipimaji muda kimewekwa"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Urefu usio sahihi wa kipimaji muda"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Kipima muda kimewekwa upya"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Kipima muda hakiwezi kuwekwa upya kwa sababu bado kinatumika. Simamisha kipima muda ili kukiweka upya."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Kipima muda tayari kimesimamishwa"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Kipima muda kimefutwa"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Kipima muda kimeanzishwa"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Urefu usio sahihi wa kipimaji muda"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Hujachagua jiji"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Jiji ulilobainisha halipo"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Jiji hilo limeongezwa tayari"</string>
diff --git a/res/values-sw360dp-land/dimens.xml b/res/values-sw360dp-land/dimens.xml
index 151caa0..0275592 100644
--- a/res/values-sw360dp-land/dimens.xml
+++ b/res/values-sw360dp-land/dimens.xml
@@ -20,7 +20,6 @@
   for different hardware and product builds.
 -->
 <resources>
-
   <dimen name="circle_size">232dip</dimen>
-
+  <dimen name="timer_setup_font_size">48sp</dimen>
 </resources>
diff --git a/res/values-sw360dp/dimens.xml b/res/values-sw360dp/dimens.xml
index 3f4aa13..2764fbc 100644
--- a/res/values-sw360dp/dimens.xml
+++ b/res/values-sw360dp/dimens.xml
@@ -1,4 +1,21 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 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>
     <dimen name="big_font_size">70sp</dimen>
+    <dimen name="main_clock_font_size">80sp</dimen>
+    <dimen name="timer_setup_font_size">56sp</dimen>
 </resources>
\ No newline at end of file
diff --git a/res/layout/stopwatch_spacer.xml b/res/values-sw400dp/dimens.xml
similarity index 71%
copy from res/layout/stopwatch_spacer.xml
copy to res/values-sw400dp/dimens.xml
index 31b648b..3f40d13 100644
--- a/res/layout/stopwatch_spacer.xml
+++ b/res/values-sw400dp/dimens.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!-- Copyright (C) 2015 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.
@@ -14,7 +14,6 @@
      limitations under the License.
 -->
 
-<Space
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/stopwatch_list_bottom_spacing" />
+<resources>
+    <dimen name="main_clock_font_size">88sp</dimen>
+</resources>
\ No newline at end of file
diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml
index 67cfcb5..1afda39 100644
--- a/res/values-sw600dp-land/dimens.xml
+++ b/res/values-sw600dp-land/dimens.xml
@@ -19,7 +19,7 @@
 
 <!-- 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">
+<resources>
     <dimen name="time_text_size">275dip</dimen>
     <dimen name="ampm_text_size">90dip</dimen>
     <dimen name="date_text_size">15sp</dimen>
@@ -41,10 +41,8 @@
     <dimen name="circle_margin_top">0dp</dimen>
     <dimen name="circle_margin">48dp</dimen>
     <dimen name="analog_clock_margin">48dp</dimen>
-    <dimen name="timer_circle_margin">48dp</dimen>
 
     <dimen name="circle_size">360dip</dimen>
-    <dimen name="stopwatch_list_bottom_spacing">0dip</dimen>
     <dimen name="stopwatch_circle_margin_bottom">112dip</dimen>
 
     <dimen name="world_clock_margin">48dp</dimen>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 0a56ca7..efb20fb 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -19,7 +19,7 @@
 
 <!-- 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">
+<resources>
     <dimen name="label_text_size">18sp</dimen>
     <dimen name="time_text_size">180dip</dimen>
     <dimen name="ampm_text_size">54dip</dimen>
@@ -40,6 +40,7 @@
     <dimen name="clock_side_padding">48dip</dimen>
     <dimen name="clock_side_padding_reduced">36dip</dimen>
 
+    <dimen name="main_clock_font_size">125sp</dimen>
     <dimen name="big_font_size">115sp</dimen>
     <dimen name="medium_font_size">96sp</dimen>
     <dimen name="label_font_size">18sp</dimen>
@@ -74,11 +75,10 @@
     <dimen name="circle_margin_top">48dp</dimen>
     <dimen name="circle_margin">96dp</dimen>
     <dimen name="analog_clock_margin">96dp</dimen>
-    <dimen name="timer_circle_margin">96dp</dimen>
 
     <dimen name="circle_size">400dp</dimen>
     <!-- stopwatch_list_bottom_spacing = footer_button_size + footer_button_layout_margin -->
-    <dimen name="stopwatch_list_bottom_spacing">96dip</dimen>
+    <dimen name="list_bottom_spacing">96dip</dimen>
 
      <!-- Width of the clock, for use with alarm buttons. -->
     <dimen name="alarm_alert_display_width">550dip</dimen>
@@ -87,6 +87,8 @@
     <dimen name="world_clock_analog_size">200dip</dimen>
     <dimen name="world_clock_margin">96dp</dimen>
 
+    <dimen name="min_analog_widget_size">170dp</dimen>
+
     <!-- Digital Widget settings (keyguard|home_screen) -->
     <!-- Use larger fonts -->
     <!-- Use dp on purpose to ensure consistency across multiple screen sizes -->
diff --git a/res/values-sw600dp/drawables.xml b/res/values-sw600dp/drawables.xml
new file mode 100644
index 0000000..2b6d873
--- /dev/null
+++ b/res/values-sw600dp/drawables.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <item name="ic_alarm_small" type="drawable">@drawable/ic_alarm_small_24dp</item>
+</resources>
\ No newline at end of file
diff --git a/res/values-ta-rIN/array.xml b/res/values-ta-rIN/array.xml
index 90e0ac8..379ba7d 100644
--- a/res/values-ta-rIN/array.xml
+++ b/res/values-ta-rIN/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ஃ<xliff:g id="SEPARATOR">=</xliff:g>ஃபோர்தலேசா"</item>
     <item msgid="5801558418916235541">"க<xliff:g id="SEPARATOR">=</xliff:g>கிராண்ட் துர்க்"</item>
     <item msgid="2103759276235503048">"க<xliff:g id="SEPARATOR">=</xliff:g>கிரேனடா"</item>
-    <item msgid="1490069759176391533">"க<xliff:g id="SEPARATOR">=</xliff:g>கவுதமாலா"</item>
+    <item msgid="6216160110733510854">"க<xliff:g id="SEPARATOR">=</xliff:g>கவுதமாலா நகரம்"</item>
     <item msgid="525959305652046261">"க<xliff:g id="SEPARATOR">=</xliff:g>கயானா"</item>
     <item msgid="7565596629973190931">"ஹ<xliff:g id="SEPARATOR">=</xliff:g>ஹலிஃபாக்ஸ்"</item>
     <item msgid="3811169155065582644">"ஹ<xliff:g id="SEPARATOR">=</xliff:g>ஹவானா"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ட<xliff:g id="SEPARATOR">=</xliff:g>டொரன்டோ"</item>
     <item msgid="1506838283840737263">"வ<xliff:g id="SEPARATOR">=</xliff:g>வான்கூவர்"</item>
     <item msgid="8935386104773857399">"வ<xliff:g id="SEPARATOR">=</xliff:g>வின்னிபெக்"</item>
-    <item msgid="1132634022412399582">"ச<xliff:g id="SEPARATOR">=</xliff:g>சவுத் போல்"</item>
+    <item msgid="498429228419399474">"ச<xliff:g id="SEPARATOR">=</xliff:g>சவுத் போல்<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ல<xliff:g id="SEPARATOR">=</xliff:g>லாங்யெர்பியேன்"</item>
     <item msgid="3784788073896028355">"அ<xliff:g id="SEPARATOR">=</xliff:g>அல்மாதி"</item>
     <item msgid="7895695236056852523">"அ<xliff:g id="SEPARATOR">=</xliff:g>அம்மான்"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"க<xliff:g id="SEPARATOR">=</xliff:g>காஸா"</item>
     <item msgid="2359068282340162319">"ஹ<xliff:g id="SEPARATOR">=</xliff:g>ஹெப்ரன்"</item>
     <item msgid="6223396610551759129">"ஹ<xliff:g id="SEPARATOR">=</xliff:g>ஹோ சி மின்"</item>
-    <item msgid="4731022818651322736">"ஹ<xliff:g id="SEPARATOR">=</xliff:g>ஹாங்காங்"</item>
+    <item msgid="3439764751788710130">"ஹ<xliff:g id="SEPARATOR">=</xliff:g>ஹாங்காங்<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"இ<xliff:g id="SEPARATOR">=</xliff:g>இஸ்தான்புல்"</item>
     <item msgid="758800913783999425">"ஜ<xliff:g id="SEPARATOR">=</xliff:g>ஜகார்த்தா"</item>
     <item msgid="8956406398692698126">"ஜ<xliff:g id="SEPARATOR">=</xliff:g>ஜெருசலேம்"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"ம<xliff:g id="SEPARATOR">=</xliff:g>மணிலா"</item>
     <item msgid="6033964325069060422">"ம<xliff:g id="SEPARATOR">=</xliff:g>மஸ்கட்"</item>
     <item msgid="6077458941399984780">"ஃ<xliff:g id="SEPARATOR">=</xliff:g>ஃப்னோம் பென்"</item>
-    <item msgid="935474308903572975">"ப<xliff:g id="SEPARATOR">=</xliff:g>பியொங்யாங்"</item>
+    <item msgid="1245515372520913197">"ப<xliff:g id="SEPARATOR">=</xliff:g>பியொங்யாங்<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"க<xliff:g id="SEPARATOR">=</xliff:g>கத்தார்"</item>
     <item msgid="1667243110545095146">"ர<xliff:g id="SEPARATOR">=</xliff:g>ரங்கூன்"</item>
     <item msgid="4460370766685855731">"ர<xliff:g id="SEPARATOR">=</xliff:g>ரியாத்"</item>
     <item msgid="4229224905931739201">"ச<xliff:g id="SEPARATOR">=</xliff:g>சைகோன்"</item>
     <item msgid="8705359848250215620">"ச<xliff:g id="SEPARATOR">=</xliff:g>சியோல்"</item>
-    <item msgid="583367295371395814">"ஷ<xliff:g id="SEPARATOR">=</xliff:g>ஷாங்காய்"</item>
+    <item msgid="3814881931186962624">"ஷ<xliff:g id="SEPARATOR">=</xliff:g>ஷாங்காய்<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"ச<xliff:g id="SEPARATOR">=</xliff:g>சிங்கப்பூர்"</item>
-    <item msgid="1972491729911039207">"த<xliff:g id="SEPARATOR">=</xliff:g>தைபே"</item>
+    <item msgid="8982451946156859368">"த<xliff:g id="SEPARATOR">=</xliff:g>தைபே<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"த<xliff:g id="SEPARATOR">=</xliff:g>தெஹ்ரான்"</item>
     <item msgid="8629402941285674273">"ட<xliff:g id="SEPARATOR">=</xliff:g>டெல் அவீவ்"</item>
-    <item msgid="8499164674454654525">"ட<xliff:g id="SEPARATOR">=</xliff:g>டோக்கியோ"</item>
+    <item msgid="76330681636547168">"ட<xliff:g id="SEPARATOR">=</xliff:g>டோக்கியோ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"உ<xliff:g id="SEPARATOR">=</xliff:g>உலான் பாட்டர்"</item>
     <item msgid="2028626988021468640">"ப<xliff:g id="SEPARATOR">=</xliff:g>பெர்முடா"</item>
     <item msgid="4527109966513690429">"க<xliff:g id="SEPARATOR">=</xliff:g>கேனரி"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"ர<xliff:g id="SEPARATOR">=</xliff:g>ரெனோ"</item>
     <item msgid="9155068631060038769">"ப<xliff:g id="SEPARATOR">=</xliff:g>பிளாக் ராக் சிட்டி"</item>
     <item msgid="8498761319928979900">"த<xliff:g id="SEPARATOR">=</xliff:g>தோஹா"</item>
-    <item msgid="8307897251088048641">"ப<xliff:g id="SEPARATOR">=</xliff:g>பெய்ஜிங்"</item>
+    <item msgid="5327010922199714808">"ப<xliff:g id="SEPARATOR">=</xliff:g>பெய்ஜிங்<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"ம<xliff:g id="SEPARATOR">=</xliff:g>மும்பை"</item>
     <item msgid="6668274273067049125">"ட<xliff:g id="SEPARATOR">=</xliff:g>டில்லி"</item>
-    <item msgid="2933410189478233292">"ஒ<xliff:g id="SEPARATOR">=</xliff:g>ஒசாகா"</item>
+    <item msgid="7199039603593847813">"ஒ<xliff:g id="SEPARATOR">=</xliff:g>ஒசாகா<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ல<xliff:g id="SEPARATOR">=</xliff:g>லாகூர்"</item>
     <item msgid="1448378291805481500">"ச<xliff:g id="SEPARATOR">=</xliff:g>சனா"</item>
     <item msgid="5233119846682408301">"ப<xliff:g id="SEPARATOR">=</xliff:g>பார்சிலோனா"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"க<xliff:g id="SEPARATOR">=</xliff:g>கேம்பிரிட்ஜ்"</item>
     <item msgid="759409010285366934">"க<xliff:g id="SEPARATOR">=</xliff:g>கிர்க்லாந்து"</item>
     <item msgid="6308007059287569663">"ம<xliff:g id="SEPARATOR">=</xliff:g>மேடிசன்"</item>
-    <item msgid="6971636434858330021">"கு<xliff:g id="SEPARATOR">=</xliff:g>குவாங்சோவ்"</item>
+    <item msgid="2077617905582224600">"க<xliff:g id="SEPARATOR">=</xliff:g>குவாங்சோவ்<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"ஹ<xliff:g id="SEPARATOR">=</xliff:g>ஹைதராபாத்"</item>
     <item msgid="3032295682584784261">"ர<xliff:g id="SEPARATOR">=</xliff:g>ரெஸ்டன்"</item>
     <item msgid="7722837296297332268">"ப<xliff:g id="SEPARATOR">=</xliff:g>பெலோ அரிசாஞ்ச்"</item>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 2628db8..c48565e 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"கடிகாரத்தைக் காட்டு"</string>
     <string name="hide_clock" msgid="3217727306480505694">"கடிகாரத்தை மறை"</string>
     <string name="label" msgid="162189613902857319">"லேபிள்"</string>
+    <string name="on_switch" msgid="2297966258029227449">"இயக்கத்தில்"</string>
+    <string name="off_switch" msgid="3381070073851148013">"முடக்கத்தில்"</string>
     <string name="default_label" msgid="5590025289805630372">"அலாரம்"</string>
     <string name="set_alarm" msgid="9148359866152726808">"அலாரத்தை அமை"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"அதிர்வு"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"மீண்டும்"</string>
     <string name="alert" msgid="6506982899651975645">"அலார ரிங்டோன்"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"தனிப்பயன் ரிங்டோன்"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"டைமர் காலாவதியானது"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"நிசப்தம்"</string>
     <string name="ringtone" msgid="9110746249688559579">"ரிங்டோன்"</string>
     <string name="time" msgid="8067216534232296518">"நேரம்"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"நாளை"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> வரை உறக்கநிலையில் வை"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"அடுத்த அலாரம்"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"உங்கள் தவறிய அலாரம் நீக்கப்பட்டது"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"ஒரு நிமிடத்திற்கும் குறைவான நேரமே மீதமுள்ளது"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> மணிநேரம் மீதமுள்ளது"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> நிமிடங்கள் மீதமுள்ளன"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> மணிநேரம் <xliff:g id="MINUTES">%2$s</xliff:g> நிமிடங்கள் மீதமுள்ளன"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"ஒரு நிமிடத்திற்கும் குறைவான நேரமே மீதமுள்ளது"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> மணிநேரம் <xliff:g id="MINUTES">%2$s</xliff:g> நிமிடங்கள் மீதமுள்ளன"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"மீதமுள்ளது"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"மீதமுள்ளன"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"இப்போதிலிருந்து 1 நிமிடத்திற்கும் குறைவான நேரத்தில் அலாரம் அமைக்கப்பட்டது."</item>
     <item msgid="6002066367368421848">"இப்போதிலிருந்து <xliff:g id="DAYS">%1$s</xliff:g> நாட்களுக்கு அலாரம் அமைக்கப்பட்டது."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">நிமிடங்கள்</item>
       <item quantity="one">நிமிடம்</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"படிப்படியாக ஒலியளவை அதிகரி"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"முடக்கத்தில்"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> வினாடிகள்"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"வினாடிகள்"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"அமைதியாக்க வெண்டியது"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> நிமிடங்கள்</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"மாற்றியமை"</string>
     <string name="delete" msgid="5732434972457000541">"நீக்கு"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"அலாரத்தின் ஒலியளவு"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"நிசப்தம்"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"நிசப்தம்"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"அறியப்படாதது"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"அலாரத்தை உறக்கநிலையில் வைக்கவும் அல்லது நிராகரிக்கவும்."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (உறக்கநிலையில் வைக்கப்பட்டது)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"<xliff:g id="TIME">%s</xliff:g> மணிக்கு அலாரம் அமைக்கப்பட்டது. ரத்துசெய்ய தொடவும்."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"ரிங்டோனை ஏற்றுகிறது…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"கடிகாரத்தில் அமைக்கப்பட்ட டைமர்களுக்கான ஒலி ப்ளேபேக் சேவை."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"அலாரத்தை அமை"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"அலாரம்"</string>
     <string name="menu_timer" msgid="6459070074762877114">"டைமர்"</string>
     <string name="menu_clock" msgid="5612760670606829805">"கடிகாரம்"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"அகர வரிசையில்"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"தேர்ந்தெடுத்த நகரங்கள்"</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_start_button" msgid="8373422516681242270">"தொடங்கு"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"தடம்"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"பகிர்"</string>
     <string name="hours_label" msgid="3393478155635368097">"ம"</string>
     <string name="minutes_label" msgid="3568098128251438588">"நி"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"எனது நேரம் <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"தட நேரங்கள்:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g> தடம்"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> மணிநேரம்</item>
       <item quantity="one">1 மணிநேரம்</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 நிமிடத்தைச் சேர்"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 நிமிடம் சேர்"</string>
     <string name="timer_stop" msgid="3361154678667736722">"நிறுத்து"</string>
-    <string name="timer_done" msgid="2375990511982914051">"முடிந்தது"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"எல்லா டைமர்களையும் நிறுத்து"</string>
     <string name="timer_reset" msgid="7848424809190171640">"மீட்டமை"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"ரத்துசெய்"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"டைமர் ரத்துசெய்யப்பட்டது"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"நேரம் முடிந்தது"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> டைமர்கள் முடிந்துவிட்டன"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"டைமர்"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"அதிகபட்சம் 4 டைமர்கள்"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"இடைநிறுத்து"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"எல்லா டைமர்களையும் மீட்டமை"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"சிறுத்தை போல் வேகமாக உள்ளீர்கள்."</item>
     <item msgid="6332879039890727169">"உங்கள் கடின உழைப்பின் பலனை அனுபவிக்கவும்."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"நகரங்கள்"</string>
     <string name="clock_settings" msgid="8317286807280600391">"கடிகாரம்"</string>
     <string name="clock_style" msgid="2265011060429742344">"வகை"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"தேதி &amp; நேரத்தை மாற்று"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"அனலாக்"</item>
     <item msgid="8483930821046925592">"டிஜிட்டல்"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> தேர்ந்தெடுக்கப்பட்டது"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> தேர்வுநீக்கப்பட்டது"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"மார்ஷல் தீவுகள்"</item>
     <item msgid="4196408495909011020">"மிட்வே தீவு"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"ஜகார்த்தா"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"அலாரங்கள்"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"அறிவிப்பை இயக்குவதற்கான நிறுத்தக்கடிகார சேவை."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"நிறுத்தப்பட்டது"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"டைமர் அறிவிப்புகள் தொடர்பான செயல்பாடுகளைச் செயலாக்கும்."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"ஸ்டாப்வாட்ச் அறிவிப்புகள் தொடர்பான செயல்பாடுகளைச் செயலாக்கும்."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"இடைநிறுத்தப்பட்டது"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"நிராகரிக்க வலதுபுறம் ஸ்வைப் செய்யவும்"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"உறக்கநிலையில் வைக்க இடதுபுறம் ஸ்வைப் செய்யவும்"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"உறக்கநிலையாக்க இடதுபுறம் அல்லது விலக்க வலதுபுறம் ஸ்வைப் செய்யவும்"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"டைமர்கள்"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"டைமர் ரிங்டோன்"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"டைமர் நிறுத்தப்பட்டது"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> டைமர்கள் நிறுத்தப்பட்டன"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"டைமர் இடைநிறுத்தப்பட்டது"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> டைமர்கள் இடைநிறுத்தப்பட்டன"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"உங்கள் டைமர்களைப் பார்க்க தொடவும்"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> டைமர்கள்"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"அடுத்த டைமர்: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"அலாரங்கள் இல்லை"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"அலாரம் இல்லை"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"அடுத்ததாக அலாரங்கள் இல்லை"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"தவறான நேரம் <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>க்கு அலாரம் எதுவுமில்லை"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"அலாரங்கள் எதுவும் அமைக்கப்படவில்லை"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"லேபிள் எதையும் குறிப்பிடவில்லை"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"இந்த லேபிளின் பெயரில் அலாரங்கள் இல்லை"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"ஸ்டாப்வாட்ச் இயங்கிக்கொண்டிருக்கிறது"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"ஸ்டாப்வாட்ச் இயங்கவில்லை"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"ஸ்டாப்வாட்ச் இயங்குவதால் அதை மீட்டமைக்க முடியாது"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"ஸ்டாப்வாட்ச் நிறுத்தப்பட்டது"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"ஸ்டாப்வாட்ச் இடைநிறுத்தப்பட்டது"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"ஸ்டாப்வாட்ச் மீட்டமைக்கப்பட்டது"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"ஸ்டாப்வாட்ச் லேப் செய்யப்பட்டது"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"ஸ்டாப்வாட்ச் தொடங்கியது"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"இந்த நேரத்திற்கு அலாரம் எதுவும் அமைக்கப்படவில்லை"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> அலாரம் விலக்கப்பட்டது"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"அலாரம் <xliff:g id="ALARM_TIME">%s</xliff:g>க்கு அமைக்கப்பட்டது"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"டைமர் எதுவும் அமைக்கப்படவில்லை"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"டைமர் நீக்கப்பட்டது"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"டைமர் இயங்கிக்கொண்டிருக்கிறது"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"பல டைமர்கள் உள்ளதால், கோரிக்கையை நிறைவேற்ற முடியவில்லை"</string>
-    <string name="timer_started" msgid="6715582052946641641">"டைமர் தொடங்கியது"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"டைமர்கள் இல்லை"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"ஒன்றுக்கும் மேற்பட்ட டைமர்கள் உள்ளன"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"டைமர் அகற்றப்பட்டது."</string>
     <string name="timer_created" msgid="4381027137335885547">"டைமர் உருவாக்கப்பட்டது"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"தவறான டைமர் நீளம்"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"டைமர் மீட்டமைக்கப்பட்டது"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"டைமர் இயங்குவதால் மீட்டமைக்க முடியாது. மீட்டமைக்க, டைமரை நிறுத்தவும்."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"டைமர் ஏற்கனவே நிறுத்தப்பட்டது"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"டைமர் நீக்கப்பட்டது"</string>
+    <string name="timer_started" msgid="6715582052946641641">"டைமர் தொடங்கியது"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"தவறான டைமர் நீளம்"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"நகரம் எதுவும் தேர்ந்தெடுக்கப்படவில்லை"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"குறிப்பிட்ட நகரம் இல்லை"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"நகரம் ஏற்கனவே சேர்க்கப்பட்டுள்ளது"</string>
diff --git a/res/values-te-rIN/array.xml b/res/values-te-rIN/array.xml
index e28baff..773f32b 100644
--- a/res/values-te-rIN/array.xml
+++ b/res/values-te-rIN/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ఫ<xliff:g id="SEPARATOR">=</xliff:g>ఫోర్టలెజా"</item>
     <item msgid="5801558418916235541">"గ<xliff:g id="SEPARATOR">=</xliff:g>గ్రాండ్ టర్క్"</item>
     <item msgid="2103759276235503048">"గ<xliff:g id="SEPARATOR">=</xliff:g>గ్రెనడా"</item>
-    <item msgid="1490069759176391533">"గ<xliff:g id="SEPARATOR">=</xliff:g>గ్వాటిమాలా"</item>
+    <item msgid="6216160110733510854">"గ<xliff:g id="SEPARATOR">=</xliff:g>గ్వాటిమాలా నగరం"</item>
     <item msgid="525959305652046261">"గ<xliff:g id="SEPARATOR">=</xliff:g>గయానా"</item>
     <item msgid="7565596629973190931">"హ<xliff:g id="SEPARATOR">=</xliff:g>హాలిఫ్యాక్స్"</item>
     <item msgid="3811169155065582644">"హ<xliff:g id="SEPARATOR">=</xliff:g>హవానా"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ట<xliff:g id="SEPARATOR">=</xliff:g>టొరంటో"</item>
     <item msgid="1506838283840737263">"వ<xliff:g id="SEPARATOR">=</xliff:g>వాంకోవర్"</item>
     <item msgid="8935386104773857399">"వ<xliff:g id="SEPARATOR">=</xliff:g>విన్నిపెగ్"</item>
-    <item msgid="1132634022412399582">"స<xliff:g id="SEPARATOR">=</xliff:g>సౌత్ పోల్"</item>
+    <item msgid="498429228419399474">"స<xliff:g id="SEPARATOR">=</xliff:g>సౌత్ పోల్<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ల<xliff:g id="SEPARATOR">=</xliff:g>లాంగ్యియర్‌బ్యెన్"</item>
     <item msgid="3784788073896028355">"ఆ<xliff:g id="SEPARATOR">=</xliff:g>ఆల్మటి"</item>
     <item msgid="7895695236056852523">"అ<xliff:g id="SEPARATOR">=</xliff:g>అమ్మన్"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"గ<xliff:g id="SEPARATOR">=</xliff:g>గాజా"</item>
     <item msgid="2359068282340162319">"హ<xliff:g id="SEPARATOR">=</xliff:g>హెబ్రాన్"</item>
     <item msgid="6223396610551759129">"హ<xliff:g id="SEPARATOR">=</xliff:g>హొ చి మిన్హ్"</item>
-    <item msgid="4731022818651322736">"హ<xliff:g id="SEPARATOR">=</xliff:g>హాంకాంగ్"</item>
+    <item msgid="3439764751788710130">"హ<xliff:g id="SEPARATOR">=</xliff:g>హాంకాంగ్<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"ఇ<xliff:g id="SEPARATOR">=</xliff:g>ఇస్తాంబుల్"</item>
     <item msgid="758800913783999425">"జ<xliff:g id="SEPARATOR">=</xliff:g>జకార్తా"</item>
     <item msgid="8956406398692698126">"జ<xliff:g id="SEPARATOR">=</xliff:g>జెరుసలేం"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"మ<xliff:g id="SEPARATOR">=</xliff:g>మనీలా"</item>
     <item msgid="6033964325069060422">"మ<xliff:g id="SEPARATOR">=</xliff:g>మస్కట్"</item>
     <item msgid="6077458941399984780">"ప<xliff:g id="SEPARATOR">=</xliff:g>ప్నోమ్ పెన్హ్"</item>
-    <item msgid="935474308903572975">"ప<xliff:g id="SEPARATOR">=</xliff:g>ప్యాంగ్యాంగ్"</item>
+    <item msgid="1245515372520913197">"ప<xliff:g id="SEPARATOR">=</xliff:g>ప్యాంగ్యాంగ్<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"ఖ<xliff:g id="SEPARATOR">=</xliff:g>ఖతార్"</item>
     <item msgid="1667243110545095146">"ర<xliff:g id="SEPARATOR">=</xliff:g>రంగూన్"</item>
     <item msgid="4460370766685855731">"ర<xliff:g id="SEPARATOR">=</xliff:g>రియాద్"</item>
     <item msgid="4229224905931739201">"స<xliff:g id="SEPARATOR">=</xliff:g>సైగన్"</item>
     <item msgid="8705359848250215620">"స<xliff:g id="SEPARATOR">=</xliff:g>సియోల్"</item>
-    <item msgid="583367295371395814">"ష<xliff:g id="SEPARATOR">=</xliff:g>షాంఘై"</item>
+    <item msgid="3814881931186962624">"ష<xliff:g id="SEPARATOR">=</xliff:g>షాంఘై<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"స<xliff:g id="SEPARATOR">=</xliff:g>సింగపూర్"</item>
-    <item msgid="1972491729911039207">"త<xliff:g id="SEPARATOR">=</xliff:g>తైపై"</item>
+    <item msgid="8982451946156859368">"త<xliff:g id="SEPARATOR">=</xliff:g>తైపై<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"త<xliff:g id="SEPARATOR">=</xliff:g>తెహ్రాన్"</item>
     <item msgid="8629402941285674273">"ట<xliff:g id="SEPARATOR">=</xliff:g>టెల్ అవివ్"</item>
-    <item msgid="8499164674454654525">"ట<xliff:g id="SEPARATOR">=</xliff:g>టోక్యో"</item>
+    <item msgid="76330681636547168">"ట<xliff:g id="SEPARATOR">=</xliff:g>టోక్యో<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"య<xliff:g id="SEPARATOR">=</xliff:g>యులాన్‌బాటర్"</item>
     <item msgid="2028626988021468640">"బ<xliff:g id="SEPARATOR">=</xliff:g>బెర్ముడా"</item>
     <item msgid="4527109966513690429">"క<xliff:g id="SEPARATOR">=</xliff:g>క్యానరీ"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"ర<xliff:g id="SEPARATOR">=</xliff:g>రెనో"</item>
     <item msgid="9155068631060038769">"బ<xliff:g id="SEPARATOR">=</xliff:g>బ్లాక్ రాక్ నగరం"</item>
     <item msgid="8498761319928979900">"ద<xliff:g id="SEPARATOR">=</xliff:g>దోహా"</item>
-    <item msgid="8307897251088048641">"బ<xliff:g id="SEPARATOR">=</xliff:g>బీజింగ్"</item>
+    <item msgid="5327010922199714808">"బ<xliff:g id="SEPARATOR">=</xliff:g>బీజింగ్<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"మ<xliff:g id="SEPARATOR">=</xliff:g>ముంబై"</item>
     <item msgid="6668274273067049125">"ఢ<xliff:g id="SEPARATOR">=</xliff:g>ఢిల్లీ"</item>
-    <item msgid="2933410189478233292">"ఒ<xliff:g id="SEPARATOR">=</xliff:g>ఒసాకా"</item>
+    <item msgid="7199039603593847813">"ఒ<xliff:g id="SEPARATOR">=</xliff:g>ఒసాకా<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ల<xliff:g id="SEPARATOR">=</xliff:g>లాహోర్"</item>
     <item msgid="1448378291805481500">"స<xliff:g id="SEPARATOR">=</xliff:g>సనా"</item>
     <item msgid="5233119846682408301">"బ<xliff:g id="SEPARATOR">=</xliff:g>బార్సిలోనా"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"క<xliff:g id="SEPARATOR">=</xliff:g>కేంబ్రిడ్జ్"</item>
     <item msgid="759409010285366934">"క<xliff:g id="SEPARATOR">=</xliff:g>కిర్క్‌ల్యాండ్"</item>
     <item msgid="6308007059287569663">"మ<xliff:g id="SEPARATOR">=</xliff:g>మాడిసన్"</item>
-    <item msgid="6971636434858330021">"గ<xliff:g id="SEPARATOR">=</xliff:g>గ్వాంగ్జో"</item>
+    <item msgid="2077617905582224600">"గ<xliff:g id="SEPARATOR">=</xliff:g>గ్వాంగ్జో<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"హ<xliff:g id="SEPARATOR">=</xliff:g>హైదరాబాద్"</item>
     <item msgid="3032295682584784261">"ర<xliff:g id="SEPARATOR">=</xliff:g>రెస్టన్"</item>
     <item msgid="7722837296297332268">"బ<xliff:g id="SEPARATOR">=</xliff:g>బెలొ హారిజాంటో"</item>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index a220608..4599da0 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"గడియారాన్ని చూపు"</string>
     <string name="hide_clock" msgid="3217727306480505694">"గడియారాన్ని దాచు"</string>
     <string name="label" msgid="162189613902857319">"లేబుల్"</string>
+    <string name="on_switch" msgid="2297966258029227449">"ఆన్‌లో ఉంది"</string>
+    <string name="off_switch" msgid="3381070073851148013">"ఆఫ్‌లో ఉంది"</string>
     <string name="default_label" msgid="5590025289805630372">"అలారం"</string>
     <string name="set_alarm" msgid="9148359866152726808">"అలారం సెట్ చేయి"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"వైబ్రేట్"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"పునరావృతం చేయి"</string>
     <string name="alert" msgid="6506982899651975645">"అలారం రింగ్‌టోన్"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"అనుకూల రింగ్‌టోన్"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"టైమర్ గడువు ముగిసింది"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"నిశ్శబ్దం"</string>
     <string name="ringtone" msgid="9110746249688559579">"రింగ్‌టోన్"</string>
     <string name="time" msgid="8067216534232296518">"సమయం"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"రేపు"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> వరకు తాత్కాలికంగా ఆపివేయబడుతోంది"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"అలారం సమయం ఆసన్నం కాబోతోంది"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"మీరు ప్రతిస్పందించని అలారం తొలగించబడింది"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"నిమిషం కంటే తక్కువ సమయం ఉంది"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> మిగిలి ఉంది"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> మిగిలి ఉంది"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> మిగిలి ఉంది"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"నిమిషం కంటే తక్కువ సమయం మిగిలి ఉంది"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> మిగిలి ఉంది"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"మిగిలి ఉంది"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"మిగిలి ఉంది"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"అలారం ఇప్పటి నుండి 1 నిమిషం కంటే తక్కువ సేపటికి సెట్ చేయబడింది."</item>
     <item msgid="6002066367368421848">"అలారం ఇప్పటి నుండి <xliff:g id="DAYS">%1$s</xliff:g>కు సెట్ చేయబడింది."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">నిమిషాలు</item>
       <item quantity="one">నిమిషం</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"వాల్యూమ్‌ను క్రమంగా పెంచు"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"ఆఫ్‌లో ఉంది"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> సెకన్లు"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"సెకన్లు"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"ఇంత సమయం తర్వాత నిశ్శబ్దంగా ఉండాలి"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> నిమిషాలు</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"తిరిగి పొందు"</string>
     <string name="delete" msgid="5732434972457000541">"తొలగించు"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"అలారం వాల్యూమ్"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"నిశ్శబ్దం"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"నిశ్శబ్దం"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"తెలియనివి"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"అలారంను తాత్కాలికంగా ఆపివేయండి లేదా తీసివేయండి."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (తాత్కాలికంగా ఆపివేయబడింది)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"అలారం <xliff:g id="TIME">%s</xliff:g>కు సెట్ చేయబడింది. రద్దు చేయడానికి తాకండి."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"రింగ్‌టోన్‌ను లోడ్ చేస్తోంది…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"గడియారంలో సెట్ చేయబడిన టైమర్‌ల కోసం సౌండ్ ప్లేబ్యాక్ సేవ."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"అలారం సెట్ చేయి"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"అలారం"</string>
     <string name="menu_timer" msgid="6459070074762877114">"టైమర్"</string>
     <string name="menu_clock" msgid="5612760670606829805">"గడియారం"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"పేరు ద్వారా క్రమబద్ధీకరించు"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"ఎంచుకున్న నగరాలు"</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_start_button" msgid="8373422516681242270">"ప్రారంభించు"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"ల్యాప్"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"భాగస్వామ్యం చేయి"</string>
     <string name="hours_label" msgid="3393478155635368097">"గం"</string>
     <string name="minutes_label" msgid="3568098128251438588">"నిమి"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"నా సమయం <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"ల్యాప్ సమయాలు:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"ల్యాప్ <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> గంటలు</item>
       <item quantity="one">1 గంట</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 నిమిషాన్ని జోడించండి"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 నిమి జోడించండి"</string>
     <string name="timer_stop" msgid="3361154678667736722">"ఆపివేయి"</string>
-    <string name="timer_done" msgid="2375990511982914051">"పూర్తయింది"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"అన్ని టైమర్‌లు ఆపుతుంది"</string>
     <string name="timer_reset" msgid="7848424809190171640">"రీసెట్ చేయి"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"రద్దు చేయి"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"టైమర్ రద్దు చేయబడింది"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"సమయం ముగిసింది"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> టైమర్‌ల సమయం గడిచిపోయిం."</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"టైమర్"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"గరిష్టంగా 4 టైమర్‌లు"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"పాజ్ చేస్తుంది"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"టైమర్‌లన్నీ రీసెట్ చేస్తుంది"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"మీరు చాలా వేగంగా ఉన్నారు."</item>
     <item msgid="6332879039890727169">"మీ శ్రమ యొక్క ఫలితాలను ఆస్వాదించండి."</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"నగరాలు"</string>
     <string name="clock_settings" msgid="8317286807280600391">"గడియారం"</string>
     <string name="clock_style" msgid="2265011060429742344">"శైలి"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"తేదీ &amp; సమయం మార్చండి"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"అనలాగ్"</item>
     <item msgid="8483930821046925592">"డిజిటల్"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> ఎంచుకోబడింది"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> ఎంపిక తీసివేయబడింది"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"మార్షల్ దీవులు"</item>
     <item msgid="4196408495909011020">"మిడ్‌వే దీవి"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"జకార్తా"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"అలారాలు"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"నోటిఫికేషన్‌ను అమలు చేయడానికి స్టాప్ వాచ్ సేవ."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"ఆపివేయబడింది"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"టైమర్ నోటిఫికేషన్‌ల నుండి చర్యలను ప్రాసెస్ చేస్తుంది."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"స్టాప్‌వాచ్ నోటిఫికేషన్‌ల నుండి చర్యలను ప్రాసెస్ చేస్తుంది."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"పాజ్ చేయబడింది"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"తీసివేయడానికి కుడి వైపుకి స్వైప్ చేయండి"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"తాత్కాలికంగా ఆపివేయడానికి ఎడమ వైపుకి స్వైప్ చేయండి"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"తాత్కాలికంగా ఆపివేయడానికి ఎడమవైపుకు, తీసివేయడానికి కుడి వైపుకు స్వైప్ చేయండి"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"టైమర్‌లు"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"టైమర్ రింగ్‌టోన్"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"టైమర్ ఆపివేయబడింది"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> టైమర్‌లు ఆపివేయబడ్డాయి"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"టైమర్ పాజ్ చేయబడింది"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> టైమర్‌లు పాజ్ చేయబడ్డాయి"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"మీ టైమర్‌లను చూడటానికి తాకండి"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> టైమర్‌లు"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"తదుపరి టైమర్: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"అలారాలు లేవు"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"అలారాలను సెట్ చేయలేదు"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"సమయం ఆసన్నమయ్యే అలారాలు ఏవీ లేవు"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"<xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g> సమయం చెల్లదు"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>కి అలారం ఏదీ లేదు"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"షెడ్యూల్ చేసిన అలారాలు ఏవీ లేవు"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"లేబుల్ ఏదీ పేర్కొనలేదు"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"లేబుల్‌ను కలిగి ఉన్న అలారాలు ఏవీ లేవు"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"స్టాప్‌వాచ్ ఇప్పటికే అమలవుతోంది"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"స్టాప్‌వాచ్ అమలు కావడం లేదు"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"స్టాప్‌వాచ్ అమలవుతున్నందున రీసెట్ చేయడం సాధ్యపడదు"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"స్టాప్‌వాచ్ ఆపివేయబడింది"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"స్టాప్‌వాచ్ పాజ్ చేయబడింది"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"స్టాప్‌వాచ్ రీసెట్ చేయబడింది"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"స్టాప్‌వాచ్ ల్యాప్ చేయబడింది"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"స్టాప్‌వాచ్ ప్రారంభించబడింది"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"ఈ సమయానికి అలారం ఏదీ షెడ్యూల్ చేయబడలేదు"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> అలారాన్ని తీసివేసారు"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g>కి అలారాన్ని సెట్ చేసారు"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"టైమర్ ఏదీ సెట్ చేయలేదు"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"టైమర్‌ను తొలగించారు"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"టైమర్ ఇప్పటికే అమలవుతోంది"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"మీ అభ్యర్థనను పూర్తి చేయడం సాధ్యపడలేదు, పలు టైమర్‌లు అందుబాటులో ఉన్నాయి"</string>
-    <string name="timer_started" msgid="6715582052946641641">"టైమర్‌ను ప్రారంభించారు"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"టైమర్‌లేవీ లేవు"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"ఒకటి కంటే ఎక్కువ టైమర్‌లు ఉన్నాయి"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"టైమర్ తీసివేయబడింది."</string>
     <string name="timer_created" msgid="4381027137335885547">"టైమర్‌ను సృష్టించారు"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"టైమర్ నిడివి చెల్లదు"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"టైమర్‌ను రీసెట్ చేసారు"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"టైమర్ ఇప్పటికీ అమలవుతూనే ఉన్నందున దాన్ని రీసెట్ చేయలేరు. రీసెట్ చేయడానికి టైమర్‌ను ఆపివేయండి."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"టైమర్ ఇప్పటికే ఆపివేయబడింది"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"టైమర్‌ను తొలగించారు"</string>
+    <string name="timer_started" msgid="6715582052946641641">"టైమర్‌ను ప్రారంభించారు"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"టైమర్ నిడివి చెల్లదు"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"నగరం ఏదీ ఎంచుకోలేదు"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"మీరు పేర్కొన్న నగరం అందుబాటులో లేదు"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"ఆ నగరాన్ని ఇప్పటికే జోడించారు"</string>
diff --git a/res/values-th/array.xml b/res/values-th/array.xml
index f6af141..fac4e07 100644
--- a/res/values-th/array.xml
+++ b/res/values-th/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ฟ<xliff:g id="SEPARATOR">=</xliff:g>โฟร์ตาเลซา"</item>
     <item msgid="5801558418916235541">"ก<xliff:g id="SEPARATOR">=</xliff:g>แกรนด์เติร์ก"</item>
     <item msgid="2103759276235503048">"ก<xliff:g id="SEPARATOR">=</xliff:g>เกรเนดา"</item>
-    <item msgid="1490069759176391533">"ก<xliff:g id="SEPARATOR">=</xliff:g>กัวเตมาลา"</item>
+    <item msgid="6216160110733510854">"ก<xliff:g id="SEPARATOR">=</xliff:g>กัวเตมาลาซิตี"</item>
     <item msgid="525959305652046261">"ก<xliff:g id="SEPARATOR">=</xliff:g>กายอานา"</item>
     <item msgid="7565596629973190931">"ฮ<xliff:g id="SEPARATOR">=</xliff:g>แฮลิแฟกซ์"</item>
     <item msgid="3811169155065582644">"ฮ<xliff:g id="SEPARATOR">=</xliff:g>ฮาวานา"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ต<xliff:g id="SEPARATOR">=</xliff:g>โตรอนโต"</item>
     <item msgid="1506838283840737263">"ว<xliff:g id="SEPARATOR">=</xliff:g>แวนคูเวอร์"</item>
     <item msgid="8935386104773857399">"ว<xliff:g id="SEPARATOR">=</xliff:g>วินนิเพก"</item>
-    <item msgid="1132634022412399582">"ข<xliff:g id="SEPARATOR">=</xliff:g>ขั้วโลกใต้"</item>
+    <item msgid="498429228419399474">"ข<xliff:g id="SEPARATOR">=</xliff:g>ขั้วโลกใต้<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ล<xliff:g id="SEPARATOR">=</xliff:g>ลองเยียร์เบียน"</item>
     <item msgid="3784788073896028355">"อ<xliff:g id="SEPARATOR">=</xliff:g>อัลมาตี"</item>
     <item msgid="7895695236056852523">"อ<xliff:g id="SEPARATOR">=</xliff:g>อัมมาน"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"ก<xliff:g id="SEPARATOR">=</xliff:g>กาซา"</item>
     <item msgid="2359068282340162319">"ฮ<xliff:g id="SEPARATOR">=</xliff:g>ฮีบรอน"</item>
     <item msgid="6223396610551759129">"ฮ<xliff:g id="SEPARATOR">=</xliff:g>โฮจิมินห์"</item>
-    <item msgid="4731022818651322736">"ฮ<xliff:g id="SEPARATOR">=</xliff:g>ฮ่องกง"</item>
+    <item msgid="3439764751788710130">"ฮ<xliff:g id="SEPARATOR">=</xliff:g>ฮ่องกง<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"อ<xliff:g id="SEPARATOR">=</xliff:g>อิสตันบูล"</item>
     <item msgid="758800913783999425">"จ<xliff:g id="SEPARATOR">=</xliff:g>จาการ์ตา"</item>
     <item msgid="8956406398692698126">"ย<xliff:g id="SEPARATOR">=</xliff:g>เยรูซาเลม"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"ม<xliff:g id="SEPARATOR">=</xliff:g>มะนิลา"</item>
     <item msgid="6033964325069060422">"ม<xliff:g id="SEPARATOR">=</xliff:g>มัสกัต"</item>
     <item msgid="6077458941399984780">"พ<xliff:g id="SEPARATOR">=</xliff:g>พนมเปญ"</item>
-    <item msgid="935474308903572975">"ป<xliff:g id="SEPARATOR">=</xliff:g>เปียงยาง"</item>
+    <item msgid="1245515372520913197">"ป<xliff:g id="SEPARATOR">=</xliff:g>เปียงยาง<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"ก<xliff:g id="SEPARATOR">=</xliff:g>กาตาร์"</item>
     <item msgid="1667243110545095146">"ย<xliff:g id="SEPARATOR">=</xliff:g>ย่างกุ้ง"</item>
     <item msgid="4460370766685855731">"ร<xliff:g id="SEPARATOR">=</xliff:g>ริยาด"</item>
     <item msgid="4229224905931739201">"ซ<xliff:g id="SEPARATOR">=</xliff:g>ไซ่ง่อน"</item>
     <item msgid="8705359848250215620">"ซ<xliff:g id="SEPARATOR">=</xliff:g>โซล"</item>
-    <item msgid="583367295371395814">"ซ<xliff:g id="SEPARATOR">=</xliff:g>เซี่ยงไฮ้"</item>
+    <item msgid="3814881931186962624">"ซ<xliff:g id="SEPARATOR">=</xliff:g>เซี่ยงไฮ้<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"ส<xliff:g id="SEPARATOR">=</xliff:g>สิงคโปร์"</item>
-    <item msgid="1972491729911039207">"ท<xliff:g id="SEPARATOR">=</xliff:g>ไทเป"</item>
+    <item msgid="8982451946156859368">"ท<xliff:g id="SEPARATOR">=</xliff:g>ไทเป<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"ต<xliff:g id="SEPARATOR">=</xliff:g>เตหะราน"</item>
     <item msgid="8629402941285674273">"ท<xliff:g id="SEPARATOR">=</xliff:g>เทลอาวีฟ"</item>
-    <item msgid="8499164674454654525">"ต<xliff:g id="SEPARATOR">=</xliff:g>โตเกียว"</item>
+    <item msgid="76330681636547168">"ต<xliff:g id="SEPARATOR">=</xliff:g>โตเกียว<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"อ<xliff:g id="SEPARATOR">=</xliff:g>อูลานบาตอร์"</item>
     <item msgid="2028626988021468640">"บ<xliff:g id="SEPARATOR">=</xliff:g>เบอร์มิวดา"</item>
     <item msgid="4527109966513690429">"ค<xliff:g id="SEPARATOR">=</xliff:g>คะแนรี"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"ร<xliff:g id="SEPARATOR">=</xliff:g>รีโน"</item>
     <item msgid="9155068631060038769">"บ<xliff:g id="SEPARATOR">=</xliff:g>แบล็กร็อกซิตี"</item>
     <item msgid="8498761319928979900">"ด<xliff:g id="SEPARATOR">=</xliff:g>โดฮา"</item>
-    <item msgid="8307897251088048641">"ป<xliff:g id="SEPARATOR">=</xliff:g>ปักกิ่ง"</item>
+    <item msgid="5327010922199714808">"ป<xliff:g id="SEPARATOR">=</xliff:g>ปักกิ่ง<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"ม<xliff:g id="SEPARATOR">=</xliff:g>มุมไบ"</item>
     <item msgid="6668274273067049125">"ด<xliff:g id="SEPARATOR">=</xliff:g>เดลี"</item>
-    <item msgid="2933410189478233292">"อ<xliff:g id="SEPARATOR">=</xliff:g>โอซะกะ"</item>
+    <item msgid="7199039603593847813">"อ<xliff:g id="SEPARATOR">=</xliff:g>โอซะกะ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ล<xliff:g id="SEPARATOR">=</xliff:g>ละฮอร์"</item>
     <item msgid="1448378291805481500">"ซ<xliff:g id="SEPARATOR">=</xliff:g>ซานา"</item>
     <item msgid="5233119846682408301">"บ<xliff:g id="SEPARATOR">=</xliff:g>บาร์เซโลนา"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"ค<xliff:g id="SEPARATOR">=</xliff:g>เคมบริดจ์"</item>
     <item msgid="759409010285366934">"ค<xliff:g id="SEPARATOR">=</xliff:g>เคิร์กแลนด์"</item>
     <item msgid="6308007059287569663">"ม<xliff:g id="SEPARATOR">=</xliff:g>แมดิสัน"</item>
-    <item msgid="6971636434858330021">"ก<xliff:g id="SEPARATOR">=</xliff:g>กว่างโจว"</item>
+    <item msgid="2077617905582224600">"ก<xliff:g id="SEPARATOR">=</xliff:g>กว่างโจว<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"ฮ<xliff:g id="SEPARATOR">=</xliff:g>ไฮเดอราบาด"</item>
     <item msgid="3032295682584784261">"ร<xliff:g id="SEPARATOR">=</xliff:g>เรสตัน"</item>
     <item msgid="7722837296297332268">"บ<xliff:g id="SEPARATOR">=</xliff:g>เบโลโอรีซอนชี"</item>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 87b281b..c360f0f 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"แสดงนาฬิกา"</string>
     <string name="hide_clock" msgid="3217727306480505694">"ซ่อนนาฬิกา"</string>
     <string name="label" msgid="162189613902857319">"ป้ายกำกับ"</string>
+    <string name="on_switch" msgid="2297966258029227449">"เปิด"</string>
+    <string name="off_switch" msgid="3381070073851148013">"ปิด"</string>
     <string name="default_label" msgid="5590025289805630372">"ปลุก"</string>
     <string name="set_alarm" msgid="9148359866152726808">"ตั้งปลุก"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"สั่น"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"ตั้งซ้ำ"</string>
     <string name="alert" msgid="6506982899651975645">"เสียงเตือน"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"เสียงเรียกเข้าแบบกำหนดเอง"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"การจับเวลาสิ้นสุด"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"เงียบ"</string>
     <string name="ringtone" msgid="9110746249688559579">"เสียงเรียกเข้า"</string>
     <string name="time" msgid="8067216534232296518">"เวลา"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"พรุ่งนี้"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"ปิดเสียงเตือนชั่วคราวจนถึง <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"ตั้งปลุกครั้งต่อไป"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"ลบการปลุกที่พลาดออกไปแล้ว"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"เหลืออีกไม่ถึงหนึ่งนาที"</item>
-    <item msgid="83197792732433351">"เหลืออีก <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"เหลืออีก <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"เหลืออีก <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"เหลืออีกไม่ถึง 1 นาที"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"เหลืออีก <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"เหลืออีก"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"เหลืออีก"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"ตั้งเวลาปลุกในอีกไม่ถึง 1 นาทีต่อจากนี้"</item>
     <item msgid="6002066367368421848">"ตั้งเวลาปลุกในอีก <xliff:g id="DAYS">%1$s</xliff:g> ต่อจากนี้"</item>
@@ -101,6 +104,10 @@
       <item quantity="other">นาที</item>
       <item quantity="one">นาที</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"ค่อยๆ เพิ่มระดับเสียง"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"ปิด"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> วินาที"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"วินาที"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"ปิดเสียงหลังจาก"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> นาที</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"เปลี่ยนกลับ"</string>
     <string name="delete" msgid="5732434972457000541">"ลบ"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"ระดับเสียงปลุก"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"ปิดเสียง"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"เงียบ"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"ไม่ทราบ"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"ปิดเสียงเตือนชั่วคราวหรือปิดการปลุก"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (ปิดเสียงเตือนชั่วคราว)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"ตั้งปลุกไว้ในเวลา <xliff:g id="TIME">%s</xliff:g> แตะเพื่อยกเลิก"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"กำลังโหลดเสียงเรียกเข้า..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"บริการเล่นเสียงสำหรับตัวจับเวลาที่ตั้งไว้ในนาฬิกา"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"ตั้งปลุก"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"เตือน"</string>
     <string name="menu_timer" msgid="6459070074762877114">"ตัวจับเวลา"</string>
     <string name="menu_clock" msgid="5612760670606829805">"นาฬิกา"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"จัดเรียงตามชื่อ"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"เมืองที่เลือก"</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_start_button" msgid="8373422516681242270">"เริ่มต้น"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"หยุดชั่วคราว"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"รอบ"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"แชร์"</string>
     <string name="hours_label" msgid="3393478155635368097">"ชม."</string>
     <string name="minutes_label" msgid="3568098128251438588">"น."</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"เวลาของฉันคือ <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"เวลาสิ้นสุดรอบ:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"สิ้นสุดรอบที่ <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> ชั่วโมง</item>
       <item quantity="one">1 ชั่วโมง</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"เพิ่ม 1 นาที"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"เพิ่ม 1 นาที"</string>
     <string name="timer_stop" msgid="3361154678667736722">"หยุด"</string>
-    <string name="timer_done" msgid="2375990511982914051">"เสร็จสิ้น"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"หยุดใช้ตัวจับเวลาทั้งหมด"</string>
     <string name="timer_reset" msgid="7848424809190171640">"รีเซ็ต"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"ยกเลิก"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"ยกเลิกการตั้งเวลาแล้ว"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"หมดเวลา"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"การจับเวลา <xliff:g id="NUM_TIMERS">%d</xliff:g> ครั้งครบแล้ว"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"ตัวจับเวลา"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"มีตัวจับเวลาได้สูงสุด 4 ตัว"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"หยุดชั่วคราว"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"รีเซ็ตตัวจับเวลาทั้งหมด"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"คุณนี่เป็นพวกคลั่งไคล้ความเร็วเสียจริง"</item>
     <item msgid="6332879039890727169">"เริงรื่นกับผลสำเร็จจากความทุ่มเทของคุณ"</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"เมือง"</string>
     <string name="clock_settings" msgid="8317286807280600391">"นาฬิกา"</string>
     <string name="clock_style" msgid="2265011060429742344">"รูปแบบ"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"เปลี่ยนแปลงวันที่และเวลา"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"แอนะล็อก"</item>
     <item msgid="8483930821046925592">"ดิจิทัล"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"เลือก <xliff:g id="CITY_NAME">%s</xliff:g> แล้ว"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"ยกเลิกการเลือก <xliff:g id="CITY_NAME">%s</xliff:g> แล้ว"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"หมู่เกาะมาร์แชล"</item>
     <item msgid="4196408495909011020">"เกาะมิดเวย์"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"จาการ์ตา"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"การปลุก"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"บริการนาฬิกาจับเวลาเพื่อเรียกใช้การแจ้งเตือน"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"หยุดแล้ว"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"ดำเนินการทำงานจากการแจ้งเตือนของนาฬิกานับถอยหลัง"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"ดำเนินการทำงานจากการแจ้งเตือนของนาฬิกาจับเวลา"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"หยุดชั่วคราวแล้ว"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"กวาดไปทางขวาเพื่อปิด"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"กวาดไปทางซ้ายเพื่อปิดเสียงเตือนชั่วคราว"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"กวาดไปทางซ้ายเพื่อปิดเสียงเตือนชั่วคราวหรือไปทางขวาเพื่อปิด"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"ตัวจับเวลา"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"เสียงเรียกเข้าของตัวจับเวลา"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"หยุดนาฬิกาจับเวลาแล้ว"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"หยุดนาฬิกาจับเวลาแล้ว <xliff:g id="NUMBER">%d</xliff:g> เรือน"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"หยุดตัวจับเวลาชั่วคราวแล้ว"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"หยุด <xliff:g id="NUMBER">%d</xliff:g> ตัวจับเวลาชั่วคราว"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"แตะเพื่อดูนาฬิกาจับเวลาของคุณ"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"นาฬิกาจับเวลา <xliff:g id="NUMBER">%d</xliff:g> เรือน"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"นาฬิกาจับเวลาถัดไป: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"ไม่มีการเตือน"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"ไม่ได้ตั้งปลุก"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"ไม่มีการปลุกที่กำลังจะมาถึง"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"เวลาไม่ถูกต้อง <xliff:g id="INVALID_HOUR">%d</xliff:g>.<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"ไม่มีการปลุกที่เวลา <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"ไม่มีการตั้งปลุก"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"ไม่ได้ระบุป้ายกำกับ"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"ไม่มีการปลุกที่มีป้ายกำกับนี้"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"นาฬิกาจับเวลากำลังทำงานอยู่แล้ว"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"นาฬิกาจับเวลาไม่ได้ทำงานอยู่"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"ไม่สามารถรีเซ็ตนาฬิกาจับเวลา เพราะกำลังทำงานอยู่"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"หยุดจับเวลาแล้ว"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"นาฬิกาจับเวลาหยุดชั่วคราวแล้ว"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"รีเซ็ตนาฬิกาจับเวลาแล้ว"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"จับเวลาที่ล่วงไปแล้ว"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"เริ่มจับเวลาแล้ว"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"ไม่ได้ตั้งปลุกสำหรับเวลานี้"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"ปิดการปลุกเวลา <xliff:g id="ALARM_TIME">%s</xliff:g> แล้ว"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"ตั้งการปลุกที่เวลา <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"ไม่มีการตั้งจับเวลา"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"ลบตัวจับเวลาแล้ว"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"ตัวจับเวลากำลังทำงานอยู่แล้ว"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"ไม่สามารถดำเนินการตามคำขอได้สำเร็จ เพราะมีการจับเวลาหลายรายการ"</string>
-    <string name="timer_started" msgid="6715582052946641641">"เริ่มจับเวลาแล้ว"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"ไม่ได้จับเวลาอยู่"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"มีการจับเวลามากกว่า 1 รายการ"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"นำตัวจับเวลาออกแล้ว"</string>
     <string name="timer_created" msgid="4381027137335885547">"สร้างการจับเวลาแล้ว"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"ระยะเวลาในการจับเวลาไม่ถูกต้อง"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"รีเซ็ตตัวจับเวลาแล้ว"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"ไม่สามารถรีเซ็ตตัวจับเวลาได้เนื่องจากยังทำงานอยู่ โปรดหยุดตัวจับเวลาเพื่อรีเซ็ต"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"หยุดตัวจับเวลาไปแล้ว"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"ลบตัวจับเวลาแล้ว"</string>
+    <string name="timer_started" msgid="6715582052946641641">"เริ่มจับเวลาแล้ว"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"ระยะเวลาในการจับเวลาไม่ถูกต้อง"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"ไม่ได้เลือกเมือง"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"ไม่มีเมืองที่คุณระบุ"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"เพิ่มเมืองนั้นไว้แล้ว"</string>
diff --git a/res/values-tl/array.xml b/res/values-tl/array.xml
index bcf0ee5..54ba5da 100644
--- a/res/values-tl/array.xml
+++ b/res/values-tl/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala City"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>South Pole"</item>
+    <item msgid="498429228419399474">"S<xliff:g id="SEPARATOR">=</xliff:g>South Pole<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Maynila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Tehran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index f792b92..cd19f03 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Ipakita ang orasan"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Itago ang orasan"</string>
     <string name="label" msgid="162189613902857319">"Label"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Naka-on"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Naka-off"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Magtakda ng alarm"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"I-vibrate"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Ulitin"</string>
     <string name="alert" msgid="6506982899651975645">"Ringtone ng Alarm"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Custom na Ringtone"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Nag-expire na ang Timer"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Naka-silent"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ringtone"</string>
     <string name="time" msgid="8067216534232296518">"Oras"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Bukas"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Nag-i-snooze hanggang <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Paparating na alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Na-delete ang iyong nakaligtaang alarm"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Wala nang isang minuto ang natitira"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> ang natitira"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> ang natitira"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> ang natitira"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Wala nang isang minuto ang natitira"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> pa ang natitira"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"natitira"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"natitira"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Nakatakda ang alarm nang mas maikli sa 1 minuto mula ngayon."</item>
     <item msgid="6002066367368421848">"Nakatakda ang alarm sa <xliff:g id="DAYS">%1$s</xliff:g> mula ngayon."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">minuto</item>
       <item quantity="other">na minuto</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Dahan-dahang lakasan ang volume"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Naka-off"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> (na) segundo"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"mga segundo"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Tahimik pagkatapos ng"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> minuto</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Ibalik"</string>
     <string name="delete" msgid="5732434972457000541">"Tanggalin"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Lakas ng tunog ng alarm"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Tahimik"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Naka-silent"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Hindi alam"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"I-snooze o huwag pansinin ang alarm."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (naka-snooze)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Nakatakda ang alarm sa <xliff:g id="TIME">%s</xliff:g>. Pindutin upang kanselahin."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Nilo-load ang ringtone…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Serbisyo sa pag-playback ng tunog para sa itinakdang mga timer sa Orasan."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"I-set ang alarm"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Orasan"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Uriin ayon sa pangalan"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Mga Piniling Lungsod"</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_start_button" msgid="8373422516681242270">"Simulan"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"I-pause"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Lap"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Ibahagi"</string>
     <string name="hours_label" msgid="3393478155635368097">"o"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Ang aking oras ay <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Mga lap time:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Lap <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> oras</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> na oras</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Magdagdag ng 1 minuto"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Magdagdag ng 1 min"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Ihinto"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Tapos na"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Ihinto ang lahat ng timer"</string>
     <string name="timer_reset" msgid="7848424809190171640">"I-reset"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Kanselahin"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Kinansela ang timer"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Oras na"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> (na) timer, nag-expire"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Timer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"4 na timer ang maximum"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"I-pause"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"I-reset lahat ng timer"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Napakabilis mo naman."</item>
     <item msgid="6332879039890727169">"I-enjoy ang mga pinagsikapan mo."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Mga Lungsod"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Orasan"</string>
     <string name="clock_style" msgid="2265011060429742344">"Istilo"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Baguhin ang Petsa &amp; oras"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analog"</item>
     <item msgid="8483930821046925592">"Digital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Naka-check ang <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Walang check ang <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshall Islands"</item>
     <item msgid="4196408495909011020">"Midway Island"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Mga Alarm"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Serbisyo ng stopwatch upang patakbuhin ang notification."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Itinigil"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Pinoproseso ang mga pagkilos mula sa mga notification sa timer."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Pinoproseso ang mga pagkilos mula sa mga notification sa stopwatch."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Naka-pause"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Mag-swipe pakanan upang i-dismiss"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Mag-swipe pakaliwa upang mag-snooze"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Mag-swipe pakaliwa upang i-snooze o pakanan upang i-dismiss"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Mga Timer"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ringtone ng timer"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Huminto ang timer"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Huminto ang <xliff:g id="NUMBER">%d</xliff:g> (na) timer"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Naka-pause ang timer"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Naka-pause ang <xliff:g id="NUMBER">%d</xliff:g> timer"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Pindutin upang tingnan ang iyong mga timer"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> (na) timer"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Susunod na timer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Walang Mga Alarm"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Wala nakatakda alarm"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"WALANG PAPARATING NA ALARMA"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Di-wastong oras <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Walang alarm sa <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Walang mga naka-iskedyul na alarm"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Walang tinukoy na label"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Walang mga alarm ang may ganitong label"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Gumagana na ang stopwatch"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Hindi gumagana ang stopwatch"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Hindi maaaring i-reset ang stopwatch dahil tumatakbo ito"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Ihininto ang stopwatch"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Na-pause ang stopwatch"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Na-reset ang stopwatch"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Lumipat ng lap ang stopwatch"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Sinimulan ang stopwatch"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Walang nakaiskedyul na alarm para sa oras na ito"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Na-dismiss ang alarm na <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Nakatakda na ang alarm para sa <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Walang nakatakdang timer"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Na-delete ang timer"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Gumagana na ang timer"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Hindi makumpleto ang iyong kahilingan, available ang maraming timer"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Sinimulan ang timer"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Walang mga timer sa kasalukuyan"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"May mahigit sa isang timer sa kasalukuyan"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Naalis na ang timer."</string>
     <string name="timer_created" msgid="4381027137335885547">"Nagawa ang timer"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Hindi wastong tagal ng timer"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Ni-reset ang timer"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Hindi maaaring i-reset ang timer dahil gumagana pa ito. Ihinto ang timer upang i-reset."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Huminto na ang timer"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Na-delete ang timer"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Sinimulan ang timer"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Hindi wastong tagal ng timer"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Walang napiling lungsod"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Hindi available ang lungsod na tinukoy mo"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Naidagdag na ang lungsod na iyan"</string>
diff --git a/res/values-tr/array.xml b/res/values-tr/array.xml
index af84b90..a3b49ba 100644
--- a/res/values-tr/array.xml
+++ b/res/values-tr/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"<xliff:g id="SEPARATOR">=</xliff:g>Granada"</item>
-    <item msgid="1490069759176391533">"<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala Şehri"</item>
     <item msgid="525959305652046261">"<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"<xliff:g id="SEPARATOR">=</xliff:g>Güney Kutbu"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>Güney Kutbu<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>Almaata"</item>
     <item msgid="7895695236056852523">"<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"<xliff:g id="SEPARATOR">=</xliff:g>Gazze"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>El Halil"</item>
     <item msgid="6223396610551759129">"<xliff:g id="SEPARATOR">=</xliff:g>Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>İstanbul"</item>
     <item msgid="758800913783999425">"<xliff:g id="SEPARATOR">=</xliff:g>Cakarta"</item>
     <item msgid="8956406398692698126">"<xliff:g id="SEPARATOR">=</xliff:g>Kudüs"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"<xliff:g id="SEPARATOR">=</xliff:g>Maskat"</item>
     <item msgid="6077458941399984780">"<xliff:g id="SEPARATOR">=</xliff:g>Phnom Penh"</item>
-    <item msgid="935474308903572975">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"<xliff:g id="SEPARATOR">=</xliff:g>Katar"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>Riyad"</item>
     <item msgid="4229224905931739201">"<xliff:g id="SEPARATOR">=</xliff:g>Saygon"</item>
     <item msgid="8705359848250215620">"<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"<xliff:g id="SEPARATOR">=</xliff:g>Şangay"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>Şangay<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"<xliff:g id="SEPARATOR">=</xliff:g>Tahran"</item>
     <item msgid="8629402941285674273">"<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>Ulan Batur"</item>
     <item msgid="2028626988021468640">"<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"<xliff:g id="SEPARATOR">=</xliff:g>Black Rock City"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"<xliff:g id="SEPARATOR">=</xliff:g>Pekin"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>Pekin<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"<xliff:g id="SEPARATOR">=</xliff:g>Haydarabat"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 4a0b57c..a1312b7 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Saati göster"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Saati gizle"</string>
     <string name="label" msgid="162189613902857319">"Etiket"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Açık"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Kapalı"</string>
     <string name="default_label" msgid="5590025289805630372">"Alarm"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Alarmı ayarla"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Titreşim"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Tekrarla"</string>
     <string name="alert" msgid="6506982899651975645">"Alarm Zil Sesi"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Özel Zil Sesi"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Zamanlayıcının Süresi Doldu"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Sessiz"</string>
     <string name="ringtone" msgid="9110746249688559579">"Zil sesi"</string>
     <string name="time" msgid="8067216534232296518">"Saat"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Yarın"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Şu saate kadar ertelendi: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Yaklaşan alarm"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Kaçırılan alarmınız silindi"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Bir dakikadan az kaldı"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> kaldı"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> kaldı"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> kaldı"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Bir dakikadan az kaldı"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> kaldı"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"kaldı"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"kaldı"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Alarmın çalmasına şu andan itibaren bir dakikadan az var."</item>
     <item msgid="6002066367368421848">"Alarmın çalmasına şu andan itibaren <xliff:g id="DAYS">%1$s</xliff:g> var."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">dakika</item>
       <item quantity="one">dakika</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Ses düzeyini kademeli olarak artır"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Kapalı"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> saniye"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"saniye"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Şu süreden sonra sessiz"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> dakika</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Geri Döndür"</string>
     <string name="delete" msgid="5732434972457000541">"Sil"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Alarm ses düzeyi"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Sessiz"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Sessiz"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Bilinmiyor"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Alarmı ertele veya kapat."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (ertelendi)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Alarm <xliff:g id="TIME">%s</xliff:g> için ayarlandı. İptal etmek için dokunun."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Zil sesi yükleniyor..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Clock\'ta ayarlanmış alarmlar için ses çalma hizmeti."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Alarmı ayarla"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Alarm"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Zamanlayıcı"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Saat"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Ada göre sırala"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Seçilen Şehirler"</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_start_button" msgid="8373422516681242270">"Başlat"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Duraklat"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Tur"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Paylaş"</string>
     <string name="hours_label" msgid="3393478155635368097">"s"</string>
     <string name="minutes_label" msgid="3568098128251438588">"d"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Saatim: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Tur süreleri:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>. tur"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"<xliff:g id="NUMBER">%d</xliff:g>."</item>
-    <item msgid="316923361931627987">"<xliff:g id="NUMBER">%02d</xliff:g>."</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> saat</item>
       <item quantity="one">1 saat</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 Dakika Ekle"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 dk ekle"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Durdur"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Tamamlandı"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Tüm zamanlayıcılr durdur"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Sıfırla"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"İptal"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Zamanlayıcı iptal edildi"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Süre doldu"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> zamanlayc. süresi doldu"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Zamanlayıcı"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"En fazla 4 zamanlayıcı"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Duraklat"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Tüm zamanlayıcıları sıfırla"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Oldukça yüksek hız tutkunusunuz."</item>
     <item msgid="6332879039890727169">"Çalışmanızın meyvesini toplayabilirsiniz."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Şehirler"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Saat"</string>
     <string name="clock_style" msgid="2265011060429742344">"Stil"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Tarih ve saati değiştir"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Analog"</item>
     <item msgid="8483930821046925592">"Dijital"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> işaretlendi"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> işareti kaldırıldı"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshall Adaları"</item>
     <item msgid="4196408495909011020">"Midway Adası"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Cakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Alarmlar"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Bildirimleri çalıştırmak için kronometre hizmeti."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Durduruldu"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Zamanlayıcı bildirimlerinden gelen etkinlikleri işler."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Kronometre bildirimlerinden gelen etkinlikleri işler."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Duraklatıldı"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Kapatmak için hızlıca sağa kaydırın"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Ertelemek için hızlıca sola kaydırın"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Ertelemek için sola, kapatmak için sağa hızlıca kaydırın"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Zamanlayıcılar"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Zamanlayıcı zil sesi"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Zamanlayıcı durdu"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> zamanlayıcı durdu"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Zamanlayıcı duraklatıldı"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> zamanlayıcı duraklatıldı"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Zamanlayıcılarınızı görmek için dokunun"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> zamanlayıcı"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Sonraki zamanlayıcı: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Alarm Yok"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Alarm yok"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"YAKLAŞAN ALARM YOK"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Geçersiz saat: <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Şu saate ayarlanmış alarm yok: <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Programlanmış alarm yok"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Etiket belirtilmedi"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Etiketi içeren alarm yok"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Kronomotre zaten çalışıyor"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Kronometre çalışmıyor"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Kronometre çalışıyor olduğundan sıfırlanamaz."</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Kronometre durduruldu"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Kronometre duraklatıldı"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Kronometre sıfırlandı"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Kronometrede tur kaydedildi"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Kronometre başlatıldı"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Bu saat için alarm programlanmadı"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> alarmı kapatıldı"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Alarm <xliff:g id="ALARM_TIME">%s</xliff:g> için ayarlandı"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Zamanlayıcı ayarlanmadı"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Zamanlayıcı silindi"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Zamanlayıcı zaten çalışıyor"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"İsteğiniz tamamlanamadı. Birden fazla zamanlayıcı mevcut"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Zamanlayıcı başlatıldı"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Zamanlayıcı yok"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Birden fazla zamanlayıcı mevcut"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Zamanlayıcı kaldırıldı."</string>
     <string name="timer_created" msgid="4381027137335885547">"Zamanlayıcı oluşturuldu"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Geçersiz zamanlayıcı uzunluğu"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Zamanlayıcı sıfırlandı"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Zamanlayıcı hâlâ çalıştığından sıfırlanamaz. Sıfırlamak için zamanlayıcıyı durdurun."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Zamanlayıcı zaten durdu"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Zamanlayıcı silindi"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Zamanlayıcı başlatıldı"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Geçersiz zamanlayıcı uzunluğu"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Şehir seçilmedi"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Belirttiğiniz şehir kullanılamıyor"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Bu şehir zaten eklendi"</string>
diff --git a/res/values-uk/array.xml b/res/values-uk/array.xml
index 5ab4a5d..6ae3436 100644
--- a/res/values-uk/array.xml
+++ b/res/values-uk/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"Ф<xliff:g id="SEPARATOR">=</xliff:g>Форталеза"</item>
     <item msgid="5801558418916235541">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гранд-Терк"</item>
     <item msgid="2103759276235503048">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гренада"</item>
-    <item msgid="1490069759176391533">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемала"</item>
+    <item msgid="6216160110733510854">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гватемала (місто)"</item>
     <item msgid="525959305652046261">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гаяна"</item>
     <item msgid="7565596629973190931">"Г<xliff:g id="SEPARATOR">=</xliff:g>Галіфакс"</item>
     <item msgid="3811169155065582644">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гавана"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"Т<xliff:g id="SEPARATOR">=</xliff:g>Торонто"</item>
     <item msgid="1506838283840737263">"В<xliff:g id="SEPARATOR">=</xliff:g>Ванкувер"</item>
     <item msgid="8935386104773857399">"В<xliff:g id="SEPARATOR">=</xliff:g>Вінніпег"</item>
-    <item msgid="1132634022412399582">"П<xliff:g id="SEPARATOR">=</xliff:g>Південний полюс"</item>
+    <item msgid="498429228419399474">"П<xliff:g id="SEPARATOR">=</xliff:g>Південний полюс<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"Л<xliff:g id="SEPARATOR">=</xliff:g>Лонг’їр"</item>
     <item msgid="3784788073896028355">"А<xliff:g id="SEPARATOR">=</xliff:g>Алмати"</item>
     <item msgid="7895695236056852523">"А<xliff:g id="SEPARATOR">=</xliff:g>Амман"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"С<xliff:g id="SEPARATOR">=</xliff:g>Сектор Гази"</item>
     <item msgid="2359068282340162319">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хеврон"</item>
     <item msgid="6223396610551759129">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хо Ши Мін"</item>
-    <item msgid="4731022818651322736">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гонконг"</item>
+    <item msgid="3439764751788710130">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гонконг<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"С<xliff:g id="SEPARATOR">=</xliff:g>Стамбул"</item>
     <item msgid="758800913783999425">"Д<xliff:g id="SEPARATOR">=</xliff:g>Джакарта"</item>
     <item msgid="8956406398692698126">"Є<xliff:g id="SEPARATOR">=</xliff:g>Єрусалим"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"М<xliff:g id="SEPARATOR">=</xliff:g>Маніла"</item>
     <item msgid="6033964325069060422">"М<xliff:g id="SEPARATOR">=</xliff:g>Маскат"</item>
     <item msgid="6077458941399984780">"П<xliff:g id="SEPARATOR">=</xliff:g>Пномпень"</item>
-    <item msgid="935474308903572975">"П<xliff:g id="SEPARATOR">=</xliff:g>Пхеньян"</item>
+    <item msgid="1245515372520913197">"П<xliff:g id="SEPARATOR">=</xliff:g>Пхеньян<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"К<xliff:g id="SEPARATOR">=</xliff:g>Катар"</item>
     <item msgid="1667243110545095146">"Я<xliff:g id="SEPARATOR">=</xliff:g>Янгон"</item>
     <item msgid="4460370766685855731">"Е<xliff:g id="SEPARATOR">=</xliff:g>Ер-Ріяд"</item>
     <item msgid="4229224905931739201">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хошимін"</item>
     <item msgid="8705359848250215620">"С<xliff:g id="SEPARATOR">=</xliff:g>Сеул"</item>
-    <item msgid="583367295371395814">"Ш<xliff:g id="SEPARATOR">=</xliff:g>Шанхай"</item>
+    <item msgid="3814881931186962624">"Ш<xliff:g id="SEPARATOR">=</xliff:g>Шанхай<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"С<xliff:g id="SEPARATOR">=</xliff:g>Сінгапур"</item>
-    <item msgid="1972491729911039207">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тайбей"</item>
+    <item msgid="8982451946156859368">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тайбей<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тегеран"</item>
     <item msgid="8629402941285674273">"Т<xliff:g id="SEPARATOR">=</xliff:g>Тель-Авів"</item>
-    <item msgid="8499164674454654525">"Т<xliff:g id="SEPARATOR">=</xliff:g>Токіо"</item>
+    <item msgid="76330681636547168">"Т<xliff:g id="SEPARATOR">=</xliff:g>Токіо<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"У<xliff:g id="SEPARATOR">=</xliff:g>Улан-Батор"</item>
     <item msgid="2028626988021468640">"Б<xliff:g id="SEPARATOR">=</xliff:g>Бермудські острови"</item>
     <item msgid="4527109966513690429">"К<xliff:g id="SEPARATOR">=</xliff:g>Канарські острови"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рено"</item>
     <item msgid="9155068631060038769">"Б<xliff:g id="SEPARATOR">=</xliff:g>Блек-Рок-Сіті"</item>
     <item msgid="8498761319928979900">"Д<xliff:g id="SEPARATOR">=</xliff:g>Доха"</item>
-    <item msgid="8307897251088048641">"П<xliff:g id="SEPARATOR">=</xliff:g>Пекін"</item>
+    <item msgid="5327010922199714808">"П<xliff:g id="SEPARATOR">=</xliff:g>Пекін<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"М<xliff:g id="SEPARATOR">=</xliff:g>Мумбаї"</item>
     <item msgid="6668274273067049125">"Д<xliff:g id="SEPARATOR">=</xliff:g>Делі"</item>
-    <item msgid="2933410189478233292">"О<xliff:g id="SEPARATOR">=</xliff:g>Осака"</item>
+    <item msgid="7199039603593847813">"О<xliff:g id="SEPARATOR">=</xliff:g>Осака<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"Л<xliff:g id="SEPARATOR">=</xliff:g>Лахор"</item>
     <item msgid="1448378291805481500">"С<xliff:g id="SEPARATOR">=</xliff:g>Сана"</item>
     <item msgid="5233119846682408301">"Б<xliff:g id="SEPARATOR">=</xliff:g>Барселона"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"К<xliff:g id="SEPARATOR">=</xliff:g>Кембридж"</item>
     <item msgid="759409010285366934">"К<xliff:g id="SEPARATOR">=</xliff:g>Кіркленд"</item>
     <item msgid="6308007059287569663">"М<xliff:g id="SEPARATOR">=</xliff:g>Медісон"</item>
-    <item msgid="6971636434858330021">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гуанчжоу"</item>
+    <item msgid="2077617905582224600">"Г<xliff:g id="SEPARATOR">=</xliff:g>Гуанчжоу<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"Х<xliff:g id="SEPARATOR">=</xliff:g>Хайдерабад"</item>
     <item msgid="3032295682584784261">"Р<xliff:g id="SEPARATOR">=</xliff:g>Рестон"</item>
     <item msgid="7722837296297332268">"Б<xliff:g id="SEPARATOR">=</xliff:g>Белу-Оризонті"</item>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 4056dd1..7476d52 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Показ. годинник"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Схов. годинник"</string>
     <string name="label" msgid="162189613902857319">"Мітка"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Увімкнено"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Вимкнено"</string>
     <string name="default_label" msgid="5590025289805630372">"Будильник"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Налашт. сигнал"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Вібросигнал"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Повторити"</string>
     <string name="alert" msgid="6506982899651975645">"Звук сигналу"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Користувацький сигнал дзвінка"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Час таймера вичерпано"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Без звуку"</string>
     <string name="ringtone" msgid="9110746249688559579">"Сигнал дзвінка"</string>
     <string name="time" msgid="8067216534232296518">"Час"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Завтра"</string>
@@ -62,12 +65,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Відкласти сигнал до <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Наступний будильник"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Пропущений сигнал видалено"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Залишилося менше хвилини"</item>
-    <item msgid="83197792732433351">"Залишилося <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Залишилося <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Залишилося <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Залишилося менше хвилини"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Залишилося <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"залишилося"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"залишилося"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Будильник пролунає за менше 1 хв"</item>
     <item msgid="6002066367368421848">"Будильник пролунає за <xliff:g id="DAYS">%1$s</xliff:g>"</item>
@@ -115,6 +118,10 @@
       <item quantity="many">хвилин</item>
       <item quantity="other">хвилини</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Збільшувати гучність поступово"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Вимкнено"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> с"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"с"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Вимкнути будильник за…"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> хвилина</item>
@@ -142,7 +149,8 @@
     <string name="revert" msgid="9100911171235162926">"Відмінити"</string>
     <string name="delete" msgid="5732434972457000541">"Видалити"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Гучність будильника"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Беззвучний"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Без звуку"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Невідомий сигнал"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Періодичний сигнал або припинити дію сигналу."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (періодично)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Сигнал установлено на <xliff:g id="TIME">%s</xliff:g>. Торкніться, щоб скасувати."</string>
@@ -167,8 +175,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Завантаж. мелодії…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Служба відтворення звуків для набору таймерів у Годиннику."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Установити сигнал"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Будильник"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Таймер"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Годинник"</string>
@@ -183,10 +189,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Сортувати за назвою"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Вибрані міста"</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_start_button" msgid="8373422516681242270">"Почати"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Призупинити"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Коло"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Надіслати"</string>
     <string name="hours_label" msgid="3393478155635368097">"г"</string>
     <string name="minutes_label" msgid="3568098128251438588">"х"</string>
@@ -198,10 +204,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Мій час – <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Час кола:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Коло <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"№ <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"№ <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> година</item>
       <item quantity="few"><xliff:g id="NUMBER">%d</xliff:g> години</item>
@@ -227,12 +229,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Додати 1 хвилину"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Додати 1 хв"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Зупинити"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Готово"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Зупинити всі таймери"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Скинути"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Скасувати"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Таймер скасовано"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Час вийшов"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"Використаних таймерів: <xliff:g id="NUM_TIMERS">%d</xliff:g>"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Таймер"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Не більше 4 таймерів"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Призупинити"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Скинути таймери"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Ну ви й швидкі!"</item>
     <item msgid="6332879039890727169">"Насолоджуйтесь плодами своєї праці."</item>
@@ -249,6 +255,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Міста"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Годинник"</string>
     <string name="clock_style" msgid="2265011060429742344">"Стиль"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Змінити дату й час"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Аналоговий"</item>
     <item msgid="8483930821046925592">"Цифровий"</item>
@@ -263,6 +270,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> вибрано"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> не вибрано"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Маршаллові острови"</item>
     <item msgid="4196408495909011020">"Острів Мідвей"</item>
@@ -351,13 +360,17 @@
     <item msgid="5176858645450908751">"Джакарта"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Будильник"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Послуга \"Секундомір\" для запуску сповіщення."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Зупинено"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Обробляє дії зі сповіщень таймера."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Обробляє дії зі сповіщень секундоміра."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Призупинено"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Щоб відхилити, проведіть пальцем праворуч"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Щоб відкласти, проведіть пальцем ліворуч"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Проведіть пальцем ліворуч, щоб відкласти, або праворуч, щоб вимкнути"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Таймери"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Сигнал таймера"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Таймер зупинився"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Зупинилося таймерів: <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Таймер призупинено"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Призупинено таймерів: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Торкніться, щоб переглянути свої таймери"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"Таймерів: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Наступний за <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -385,35 +398,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Немає сигналів"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Немає сигналів"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"НЕМАЄ МАЙБУТНІХ СИГНАЛІВ"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm дп"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm дп"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Недійсний час – <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Немає будильника на <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Немає майбутніх будильників"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Укажіть мітку"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Немає будильників із такою міткою"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Секундомір уже запущено"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Секундомір не запущено"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Секундомір не можна скинути, оскільки його запущено"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Секундомір зупинено"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Секундомір призупинено"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Секундомір скинуто"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Секундомір зациклено"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Секундомір запущено"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Немає будильника на цей час"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Будильник на <xliff:g id="ALARM_TIME">%s</xliff:g> вимкнено"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Будильник установлено на <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Таймер не встановлено"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Таймер видалено"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Таймер уже запущено"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Не вдається виконати запит, оскільки налаштовано декілька таймерів"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Таймер запущено"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Немає таймерів"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Є кілька таймерів"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Таймер видалено."</string>
     <string name="timer_created" msgid="4381027137335885547">"Таймер створено"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Недійсна тривалість таймера"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Таймер скинуто"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Зупиніть таймер, щоб скинути його."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Таймер уже зупинено"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Таймер видалено"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Таймер запущено"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Недійсна тривалість таймера"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Виберіть місто"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Указане місто недоступне"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Це місто вже додано"</string>
diff --git a/res/values-ur-rPK/array.xml b/res/values-ur-rPK/array.xml
index c7eaeef..fb6d269 100644
--- a/res/values-ur-rPK/array.xml
+++ b/res/values-ur-rPK/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"ف<xliff:g id="SEPARATOR">=</xliff:g>فورٹالیزا"</item>
     <item msgid="5801558418916235541">"گ<xliff:g id="SEPARATOR">=</xliff:g>گرینڈ ٹرک"</item>
     <item msgid="2103759276235503048">"غ<xliff:g id="SEPARATOR">=</xliff:g>غرناطہ"</item>
-    <item msgid="1490069759176391533">"گ<xliff:g id="SEPARATOR">=</xliff:g>گوئٹے مالا"</item>
+    <item msgid="6216160110733510854">"گ<xliff:g id="SEPARATOR">=</xliff:g>گوئٹے مالا شہر"</item>
     <item msgid="525959305652046261">"گ<xliff:g id="SEPARATOR">=</xliff:g>گیانا"</item>
     <item msgid="7565596629973190931">"ہ<xliff:g id="SEPARATOR">=</xliff:g>ہیلیفیکس"</item>
     <item msgid="3811169155065582644">"ہ<xliff:g id="SEPARATOR">=</xliff:g>ہوانا"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"ٹ<xliff:g id="SEPARATOR">=</xliff:g>ٹورنٹو"</item>
     <item msgid="1506838283840737263">"<xliff:g id="SEPARATOR">=</xliff:g>وینکوور"</item>
     <item msgid="8935386104773857399">"<xliff:g id="SEPARATOR">=</xliff:g>ونّیپگ"</item>
-    <item msgid="1132634022412399582">"ج<xliff:g id="SEPARATOR">=</xliff:g>جنوبی قطب"</item>
+    <item msgid="498429228419399474">"ج<xliff:g id="SEPARATOR">=</xliff:g>جنوبی قطب<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"ل<xliff:g id="SEPARATOR">=</xliff:g>لانگ ائیر بین"</item>
     <item msgid="3784788073896028355">"<xliff:g id="SEPARATOR">=</xliff:g>الماٹی"</item>
     <item msgid="7895695236056852523">"ع<xliff:g id="SEPARATOR">=</xliff:g>عمان"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"غ<xliff:g id="SEPARATOR">=</xliff:g>غزّہ"</item>
     <item msgid="2359068282340162319">"<xliff:g id="SEPARATOR">=</xliff:g>الخلیل"</item>
     <item msgid="6223396610551759129">"ہ<xliff:g id="SEPARATOR">=</xliff:g>ہو چی منہ"</item>
-    <item msgid="4731022818651322736">"ہ<xliff:g id="SEPARATOR">=</xliff:g>ہانگ کانگ"</item>
+    <item msgid="3439764751788710130">"ہ<xliff:g id="SEPARATOR">=</xliff:g>ہانگ کانگ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"<xliff:g id="SEPARATOR">=</xliff:g>استنبول"</item>
     <item msgid="758800913783999425">"ج<xliff:g id="SEPARATOR">=</xliff:g>جکارتہ"</item>
     <item msgid="8956406398692698126">"ی<xliff:g id="SEPARATOR">=</xliff:g>یروشلم"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"م<xliff:g id="SEPARATOR">=</xliff:g>منیلا"</item>
     <item msgid="6033964325069060422">"م<xliff:g id="SEPARATOR">=</xliff:g>مسقط"</item>
     <item msgid="6077458941399984780">"پ<xliff:g id="SEPARATOR">=</xliff:g>پنوم پن"</item>
-    <item msgid="935474308903572975">"پ<xliff:g id="SEPARATOR">=</xliff:g>پیونگ یانگ"</item>
+    <item msgid="1245515372520913197">"پ<xliff:g id="SEPARATOR">=</xliff:g>پیونگ یانگ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"ق<xliff:g id="SEPARATOR">=</xliff:g>قطر"</item>
     <item msgid="1667243110545095146">"<xliff:g id="SEPARATOR">=</xliff:g>رنگون"</item>
     <item msgid="4460370766685855731">"<xliff:g id="SEPARATOR">=</xliff:g>ریاض"</item>
     <item msgid="4229224905931739201">"س<xliff:g id="SEPARATOR">=</xliff:g>سائگون"</item>
     <item msgid="8705359848250215620">"س<xliff:g id="SEPARATOR">=</xliff:g>سیول"</item>
-    <item msgid="583367295371395814">"ش<xliff:g id="SEPARATOR">=</xliff:g>شنگھائی"</item>
+    <item msgid="3814881931186962624">"ش<xliff:g id="SEPARATOR">=</xliff:g>شنگھائی<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"س<xliff:g id="SEPARATOR">=</xliff:g>سنگاپور"</item>
-    <item msgid="1972491729911039207">"ت<xliff:g id="SEPARATOR">=</xliff:g>تائی پے"</item>
+    <item msgid="8982451946156859368">"ت<xliff:g id="SEPARATOR">=</xliff:g>تائی پے<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"ت<xliff:g id="SEPARATOR">=</xliff:g>تہران"</item>
     <item msgid="8629402941285674273">"ت<xliff:g id="SEPARATOR">=</xliff:g>تل اویو"</item>
-    <item msgid="8499164674454654525">"ٹ<xliff:g id="SEPARATOR">=</xliff:g>ٹوکیو"</item>
+    <item msgid="76330681636547168">"ٹ<xliff:g id="SEPARATOR">=</xliff:g>ٹوکیو<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"<xliff:g id="SEPARATOR">=</xliff:g>اولانباتار"</item>
     <item msgid="2028626988021468640">"ب<xliff:g id="SEPARATOR">=</xliff:g>برمودا"</item>
     <item msgid="4527109966513690429">"ک<xliff:g id="SEPARATOR">=</xliff:g>کینیری"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"<xliff:g id="SEPARATOR">=</xliff:g>رینو"</item>
     <item msgid="9155068631060038769">"ب<xliff:g id="SEPARATOR">=</xliff:g>بلیک راک سٹی"</item>
     <item msgid="8498761319928979900">"<xliff:g id="SEPARATOR">=</xliff:g>دوحہ"</item>
-    <item msgid="8307897251088048641">"ب<xliff:g id="SEPARATOR">=</xliff:g>بیجنگ"</item>
+    <item msgid="5327010922199714808">"ب<xliff:g id="SEPARATOR">=</xliff:g>بیجنگ<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"م<xliff:g id="SEPARATOR">=</xliff:g>ممبئی"</item>
     <item msgid="6668274273067049125">"<xliff:g id="SEPARATOR">=</xliff:g>دہلی"</item>
-    <item msgid="2933410189478233292">"<xliff:g id="SEPARATOR">=</xliff:g>اوساکا"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>اوساکا<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"ل<xliff:g id="SEPARATOR">=</xliff:g>لاہور"</item>
     <item msgid="1448378291805481500">"ص<xliff:g id="SEPARATOR">=</xliff:g>صنعا"</item>
     <item msgid="5233119846682408301">"ب<xliff:g id="SEPARATOR">=</xliff:g>بارسلونا"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"ک<xliff:g id="SEPARATOR">=</xliff:g>کیمبرج"</item>
     <item msgid="759409010285366934">"ک<xliff:g id="SEPARATOR">=</xliff:g>کرک لینڈ"</item>
     <item msgid="6308007059287569663">"م<xliff:g id="SEPARATOR">=</xliff:g>میڈیسن"</item>
-    <item msgid="6971636434858330021">"گ<xliff:g id="SEPARATOR">=</xliff:g>گوانگزو"</item>
+    <item msgid="2077617905582224600">"گ<xliff:g id="SEPARATOR">=</xliff:g>گوانگزو<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"ح<xliff:g id="SEPARATOR">=</xliff:g>حیدرآباد"</item>
     <item msgid="3032295682584784261">"<xliff:g id="SEPARATOR">=</xliff:g>ریسٹن"</item>
     <item msgid="7722837296297332268">"ب<xliff:g id="SEPARATOR">=</xliff:g>بیلو ہوریزونٹے"</item>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 53cf183..eb43d0c 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"کلاک دکھائیں"</string>
     <string name="hide_clock" msgid="3217727306480505694">"کلاک چھپائیں"</string>
     <string name="label" msgid="162189613902857319">"لیبل"</string>
+    <string name="on_switch" msgid="2297966258029227449">"آن"</string>
+    <string name="off_switch" msgid="3381070073851148013">"آف"</string>
     <string name="default_label" msgid="5590025289805630372">"الارم"</string>
     <string name="set_alarm" msgid="9148359866152726808">"الارم سیٹ کریں"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"وائبریٹ"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"دہرائیں"</string>
     <string name="alert" msgid="6506982899651975645">"الارم رنگ ٹون"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"حسب ضرورت رنگ ٹون"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"ٹائمر کی معیاد ختم ہو گئی"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"خاموش"</string>
     <string name="ringtone" msgid="9110746249688559579">"رنگ ٹون"</string>
     <string name="time" msgid="8067216534232296518">"وقت"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"آئندہ کل"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> تک اسنوز کر رہا ہے"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"آئندہ الارم"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"آپ کا چھوٹا ہوا الارم حذف کر دیا گیا ہے"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"ایک منٹ سے کم باقی ہے"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> باقی"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> باقی"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> باقی"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"ایک منٹ سے کم باقی ہے"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> باقی ہیں"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"باقی ہے"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"باقی ہیں"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"الارم اب سے 1 منٹ سے کم کیلئے سیٹ کیا گیا ہے۔"</item>
     <item msgid="6002066367368421848">"الارم اب سے <xliff:g id="DAYS">%1$s</xliff:g> کیلئے سیٹ کیا گیا ہے۔"</item>
@@ -101,6 +104,10 @@
       <item quantity="other">منٹ</item>
       <item quantity="one">منٹ</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"آواز میں بتدریج اضافہ کریں"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"آف"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> سیکنڈز"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"سیکنڈز"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"خاموش بعد از"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> منٹ</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"لوٹائیں"</string>
     <string name="delete" msgid="5732434972457000541">"حذف کریں"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"الارم والیوم"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"خاموش"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"خاموش"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"نامعلوم"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"الارم کو اسنوز یا مسترد کریں۔"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (اسنوز کیا گیا)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"الارم <xliff:g id="TIME">%s</xliff:g> کیلئے سیٹ ہے۔ منسوخ کرنے کیلئے ٹچ کریں۔"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"رنگ ٹون ڈاؤن لوڈ ہو رہا ہے…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"کلاک میں سیٹ کردہ ٹائمرز کیلئے ساؤنڈ پلے بیک سروس۔"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"الارم سیٹ کریں"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"الارم"</string>
     <string name="menu_timer" msgid="6459070074762877114">"ٹائمر"</string>
     <string name="menu_clock" msgid="5612760670606829805">"گھڑی"</string>
@@ -167,10 +173,11 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"نام کے لحاظ سے ترتیب دیں"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"منتخب کردہ شہر"</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_start_button" msgid="8373422516681242270">"شروع کریں"</string>
+    <!-- no translation found for sw_pause_button (2422084453454138042) -->
+    <skip />
+    <string name="sw_lap_button" msgid="6992264696039004233">"لیپ"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"اشتراک کریں"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +189,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"میرا وقت ہے <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"لیپ اوقات:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"لیپ <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> گھنٹے</item>
       <item quantity="one">1 گھنٹہ</item>
@@ -205,12 +208,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 منٹ شامل کریں"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 منٹ شامل کریں"</string>
     <string name="timer_stop" msgid="3361154678667736722">"روکیں"</string>
-    <string name="timer_done" msgid="2375990511982914051">"ہو گیا"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"تمام ٹائمرز بند کریں"</string>
     <string name="timer_reset" msgid="7848424809190171640">"دوبارہ ترتیب دیں"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"منسوخ کریں"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"ٹائمر منسوخ ہو گیا"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"وقت ختم ہو گیا"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ٹائمرز کی میعاد ختم ہوگئی"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"ٹائمر"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"زیادہ سے زیادہ 4 ٹائمرز"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"موقوف کریں"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"تمام ٹائمرز دوبارہ ترتیب دیں"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"آپ کی رفتار بہت زیادہ ہے۔"</item>
     <item msgid="6332879039890727169">"اپنی محنت کا پھل کھائیں۔"</item>
@@ -227,6 +234,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"شہر"</string>
     <string name="clock_settings" msgid="8317286807280600391">"گھڑی"</string>
     <string name="clock_style" msgid="2265011060429742344">"طرز"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"تاریخ اور وقت تبدیل کریں"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"اینالاگ"</item>
     <item msgid="8483930821046925592">"ڈیجیٹل"</item>
@@ -241,6 +249,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">"‎:00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">"‎:30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> نشان زد ہو گیا"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> غیر نشان زد ہو گیا"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"جزائر مارشل"</item>
     <item msgid="4196408495909011020">"مڈوے آئیلینڈ"</item>
@@ -329,13 +339,17 @@
     <item msgid="5176858645450908751">"جکارتہ"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"الارمز"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"اطلاع کو چلانے کیلئے اسٹاپ واچ سروس۔"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"رک گیا"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"ٹائمر اطلاعات کے اعمال پر کاروائی کرتا ہے۔"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"اسٹاپ واچ اطلاعات کے اعمال پر کاروائی کرتا ہے۔"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"موقوف ہوگئی"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"برخاست کرنے کیلئے دائیں سوائپ کریں"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"اسنوز کرنے کیلئے بائیں سوائپ کریں"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"اسنوز کرنے کیلئے بائیں یا برخاست کرنے کیلئے دائیں سوائپ کریں"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"ٹائمرز"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"ٹائمر رنگ ٹون"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"ٹائمر رک گیا"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> ٹائمرز رک گئے"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"ٹائمر موقوف ہو گیا"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> ٹائمرز موقوف ہو گئے"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"اپنے ٹائمرز دیکھنے کیلئے ٹچ کریں"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ٹائمرز"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"اگلا ٹائمر: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +375,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"کوئی الارمز نہیں ہیں"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"الارمز سیٹ نہیں"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"کوئی آنے والے الارمز نہیں ہیں"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"‏غلط وقت <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g>‎ <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> پر کوئی الارم نہیں"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"کوئی الارم مقرر نہیں"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"کوئی لیبل مختص نہیں کیا گیا"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"کسی الارم میں لیبل شامل نہیں ہے"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"اسٹاپ واچ پہلے سے چل رہی ہے"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"اسٹاپ واچ نہیں چل رہی ہے"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"سٹاپ واچ کو دوبارہ ترتیب نہیں دیا جا سکتا کیونکہ یہ چل رہی ہے"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"سٹاپ واچ رک گئی"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"اسٹاپ واچ موقوف ہوگئی"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"سٹاپ واچ کو دوبارہ ترتیب دے دی گئی"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"سٹاپ واچ لیپ ہو گئی"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"سٹاپ واچ دوبارہ شروع ہو گئی"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"اس وقت کیلئے کوئی الارم مقرر نہیں"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> الارم برخاست ہوگیا"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"<xliff:g id="ALARM_TIME">%s</xliff:g> کیلئے الارم سیٹ ہے"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"کوئی ٹائمر سیٹ نہیں"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"ٹائمر حذف ہوگیا"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"ٹائمر پہلے سے چل رہا ہے"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"آپ کی درخواست مکمل نہیں ہو سکی، ایک سے زیادہ ٹائمرز موجود ہیں"</string>
-    <string name="timer_started" msgid="6715582052946641641">"ٹائمر شروع ہوگیا"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"کوئی ٹائمر موجود نہیں"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"ایک سے زائد ٹائمر موجود ہے"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"ٹائمر ہٹا دیا گیا ہے"</string>
     <string name="timer_created" msgid="4381027137335885547">"ٹائمر بن گیا"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"ٹائمر کی غلط لمبائی"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"ٹائمر دوبارہ ترتیب دے دیا گیا"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"ٹائمر کو دوبارہ ترتیب نہیں دیا جا سکتا کیوںکہ یہ ابھی چل رہا ہے۔ دوبارہ ترتیب دینے کیلیے ٹائمر کو روک دیں۔"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"ٹائمر پہلے ہی روک دیا گیا"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"ٹائمر حذف ہوگیا"</string>
+    <string name="timer_started" msgid="6715582052946641641">"ٹائمر شروع ہوگیا"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"ٹائمر کی غلط لمبائی"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"کوئی شہر منتخب نہیں"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"آپ کا بیان کردہ شہر دستیاب نہیں ہے"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"اس شہر کو پہلے ہی شامل کر دیا گیا ہے"</string>
diff --git a/res/values-uz-rUZ/array.xml b/res/values-uz-rUZ/array.xml
index f1fb2ef..f79bce2 100644
--- a/res/values-uz-rUZ/array.xml
+++ b/res/values-uz-rUZ/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand-Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Gvatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Gvatemala"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Gayana"</item>
     <item msgid="7565596629973190931">"G<xliff:g id="SEPARATOR">=</xliff:g>Galifaks"</item>
     <item msgid="3811169155065582644">"G<xliff:g id="SEPARATOR">=</xliff:g>Gavana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vankuver"</item>
     <item msgid="8935386104773857399">"V<xliff:g id="SEPARATOR">=</xliff:g>Vinnipeg"</item>
-    <item msgid="1132634022412399582">"J<xliff:g id="SEPARATOR">=</xliff:g>Janubiy qutb"</item>
+    <item msgid="498429228419399474">"J<xliff:g id="SEPARATOR">=</xliff:g>Janubiy qutb<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyir"</item>
     <item msgid="3784788073896028355">"O<xliff:g id="SEPARATOR">=</xliff:g>Olma-Ota"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G‘<xliff:g id="SEPARATOR">=</xliff:g>G‘azo"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Hoshimin"</item>
-    <item msgid="4731022818651322736">"G<xliff:g id="SEPARATOR">=</xliff:g>Gonkong"</item>
+    <item msgid="3439764751788710130">"G<xliff:g id="SEPARATOR">=</xliff:g>Gonkong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"Q<xliff:g id="SEPARATOR">=</xliff:g>Quddus"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Maskat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Pnompen"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>Pxenyan"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>Pxenyan<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangun"</item>
     <item msgid="4460370766685855731">"A<xliff:g id="SEPARATOR">=</xliff:g>Ar-Riyod"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Saygon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seul"</item>
-    <item msgid="583367295371395814">"Sh<xliff:g id="SEPARATOR">=</xliff:g>Shanxay"</item>
+    <item msgid="3814881931186962624">"Sh<xliff:g id="SEPARATOR">=</xliff:g>Shanxay<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapur"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>Taypey"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>Taypey<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Tehron"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel-Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokio<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulanbator"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda orollari"</item>
     <item msgid="4527109966513690429">"K<xliff:g id="SEPARATOR">=</xliff:g>Kanar orollari"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Rino"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>Blek-Rok-Siti"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"P<xliff:g id="SEPARATOR">=</xliff:g>Pekin"</item>
+    <item msgid="5327010922199714808">"P<xliff:g id="SEPARATOR">=</xliff:g>Pekin<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbay"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Dehli"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahor"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barselona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"K<xliff:g id="SEPARATOR">=</xliff:g>Kembrij"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirklend"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Medison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>Guanchjou"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>Guanchjou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Haydarobod"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belu-Orizonti"</item>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 9b6fb59..88d7415 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Soatni ko‘rsatish"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Soatni berkitish"</string>
     <string name="label" msgid="162189613902857319">"Tavsif"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Yoniq"</string>
+    <string name="off_switch" msgid="3381070073851148013">"O‘chiq"</string>
     <string name="default_label" msgid="5590025289805630372">"Uyg‘otkich"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Uyg‘otkich o‘rnatish"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Tebranish"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Takrorlash"</string>
     <string name="alert" msgid="6506982899651975645">"Uyg‘otkich ringtoni"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Boshqa rington"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Taymer vaqti tugadi"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Ovozsiz"</string>
     <string name="ringtone" msgid="9110746249688559579">"Rington"</string>
     <string name="time" msgid="8067216534232296518">"Vaqt"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Ertaga"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"<xliff:g id="TIME">%s</xliff:g> gacha kechiktirildi"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Keyingi signal"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"O‘tkazib yuborilgan uyg‘otkich o‘chirib tashlandi"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Bir daqiqadan kamroq qoldi"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> qoldi"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> qoldi"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> qoldi"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Bir daqiqadan kamroq vaqt qoldi"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g> <xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> qoldi"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"qoldi"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"qoldi"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Uyg‘otkich signali 1 daqiqa ichida chalinadi."</item>
     <item msgid="6002066367368421848">"Uyg‘otkich signali <xliff:g id="DAYS">%1$s</xliff:g>dan so‘ng chalinadi."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">daqiqa</item>
       <item quantity="one">daqiqa</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Ovozni asta-sekin ko‘tarish"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"O‘chiq"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> soniya"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"soniya"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Avtomatik o‘chirish"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> daqiqa</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Bekor qilish"</string>
     <string name="delete" msgid="5732434972457000541">"O‘chirish"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Signal ovozi"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Ovozsiz"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Ovozsiz"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Noma’lum"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Uyg‘otkichni kechiktirish yoki bekor qilish."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (kechiktirildi)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"<xliff:g id="TIME">%s</xliff:g> uchun uyg‘otkich o‘rnatildi. Bekor qilish uchun bosing."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Rington yuklanmoqda…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Soat ilovasidagi taymerlar uchun signal ijro etish xizmati."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Uyg‘otkich o‘rnatish"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Uyg‘otkich"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Taymer"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Soat"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Nomi bo‘yicha saralash"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Tanlangan shaharlar"</string>
     <string name="sw_resume_button" msgid="2569360966002022248">"Davom ettirish"</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">"Davra"</string>
     <string name="sw_reset_button" msgid="6616804728322906117">"Boshidan"</string>
+    <string name="sw_start_button" msgid="8373422516681242270">"Start"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Pauza"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Davra"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Ulashish"</string>
     <string name="hours_label" msgid="3393478155635368097">"s"</string>
     <string name="minutes_label" msgid="3568098128251438588">"d"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Mening vaqtim: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Aylanish vaqti:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"<xliff:g id="NUMBER">%d</xliff:g>-davra"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"#<xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"#<xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> soat</item>
       <item quantity="one">1 soat</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"1 daqiqa qo‘shish"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"1 daqiqa qo‘shish"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Stop"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Tayyor"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Hamma taymerni to‘xtatish"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Boshidan"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Bekor qilish"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Taymer bekor qilindi"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Vaqt tugadi"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> ta taymer vaqti tugadi"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Taymer"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Maks. 4 ta taymer o‘rnatish mumkin"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Pauza"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Nolga qaytarish"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Siz haqiqatdan ham Shumaxer ekansiz!"</item>
     <item msgid="6332879039890727169">"Siz juda yaxshi mehnat qildingiz."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Shaharlar"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Soat"</string>
     <string name="clock_style" msgid="2265011060429742344">"Soat turi"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Sana va vaqtni o‘zgartirish"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Soat mili"</item>
     <item msgid="8483930821046925592">"Raqamli"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> shahri belgilandi"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> shahri olib tashlandi"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Marshall orollari"</item>
     <item msgid="4196408495909011020">"Midvey oroli"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Signallar"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Bildirishnomalarni ishga tushirish uchun sekundomer."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"To‘xtatildi"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Taymer bildirishnomalarida harakatlarni amalga oshiradi."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Sekundomer bildirishnomalarida harakatlarni amalga oshiradi."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"To‘xtatildi"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"O‘tkazib yuborish uchun o‘ngga suring"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Kechiktirish uchun chapga suring"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Signalni kechiktirish uchun chapga, bekor qilish uchun esa o‘ngga suring"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Taymerlar"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Taymer ringtoni"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Taymer to‘xtatildi"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"To‘xtatilgan taymerlar: <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Taymer pauza qilindi"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> ta taymer pauza qilindi"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Taymerlarni ko‘rish uchun bosing"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> ta taymer"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Keyingi taymer: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Hech qanday uyg‘otkich yo‘q"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Signal o‘rnatilmagan"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"SIGNALLAR YO‘Q"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"<xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g> – vaqt noto‘g‘ri"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> uchun hech qanday signal o‘rnatilmagan"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Hech qanday signal o‘rnatilmagan"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Hech qanday tavsif qo‘shilmagan"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Hech qaysi signal tavsifi yo‘q"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Sekundomer allaqachon ishga tushgan"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Sekundomer ishlamayapti"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Sekundomerni nolga qaytarib bo‘lmaydi, chunki u hozir ishlayapti"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Sekundomer to‘xtadi"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Sekundomer to‘xtatildi"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Sekundomer nolga qaytarildi"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Sekundomer bir marta aylanib o‘tdi"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Sekundomer ishga tushdi"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Bu vaqt uchun hech qanday signal o‘rnatilmagan"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> dagi signal rad etildi"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Signal <xliff:g id="ALARM_TIME">%s</xliff:g> ga o‘rnatildi"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Hech qanday taymer o‘rnatilmagan"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Taymer o‘chirib tashlandi"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Taymer allaqachon ishga tushgan"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"So‘rovingizni bajarib bo‘lmaydi, bir nechta taymer o‘rnatilgan"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Taymer ishga tushdi"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Hech qanday taymer mavjud emas"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Birdan ortiq taymer mavjud"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Taymer o‘chirib tashlandi."</string>
     <string name="timer_created" msgid="4381027137335885547">"Taymer yaratildi"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Taymer vaqti noto‘g‘ri"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Taymer qayta o‘rnatildi"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Taymerni qayta o‘rnatib bo‘lmaydi, chunki u haliyam ishlayapti. Avval taymerni to‘xtating."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Taymer allaqachon to‘xtagan"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Taymer o‘chirib tashlandi"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Taymer ishga tushdi"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Taymer vaqti noto‘g‘ri"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Hech qanday shahar tanlamadi"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Siz aytgan shahar mavjud emas"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Bu shahar allaqachon qo‘shilgan"</string>
diff --git a/res/values-v21/dimens.xml b/res/values-v21/dimens.xml
new file mode 100644
index 0000000..f320981
--- /dev/null
+++ b/res/values-v21/dimens.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2015 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>
+    <!-- Floating action button style -->
+    <dimen name="fab_margin">16dp</dimen>
+
+  <!-- Size of margin between icon and text / title text. -->
+  <dimen name="notification_content_margin_start">0dp</dimen>
+
+</resources>
diff --git a/res/values-v21/styles.xml b/res/values-v21/styles.xml
index 6bef8d1..f9f0763 100644
--- a/res/values-v21/styles.xml
+++ b/res/values-v21/styles.xml
@@ -16,18 +16,15 @@
 
 <resources>
 
-    <style name="FabStyle">
-        <item name="android:elevation">8dip</item>
-    </style>
-
-    <style name="SettingsTheme" parent="BaseActivityTheme">
+    <style name="SettingsTheme" parent="TranslucentDecorActivityTheme">
         <item name="android:alertDialogTheme">@style/SettingsAlertDialogTheme</item>
         <item name="android:detailsElementBackground">@null</item>
-        <item name="android:windowActionBar">false</item>
-        <item name="android:windowNoTitle">true</item>
 
         <!-- Attributes from support.v7.appcompat -->
         <item name="actionBarStyle">@style/SettingsActionBarStyle</item>
+        <item name="colorControlActivated">?attr/colorAccent</item>
+        <item name="windowActionBar">true</item>
+        <item name="windowNoTitle">false</item>
     </style>
 
     <!-- Theme that will be used by PreferenceFragment (i.e. *not* AppCompat). -->
@@ -36,12 +33,20 @@
     </style>
 
     <!-- Custom notification content styles -->
+    <!-- copied TextAppearance.Material.Button -->
+    <style name="TextAppearance.StatusBar.EventContent.Action">
+        <item name="android:textSize">14sp</item>
+        <item name="android:fontFamily">sans-serif-medium</item>
+        <item name="android:textAllCaps">true</item>
+        <item name="android:textColor">@color/black_54p</item>
+    </style>
+
     <style name="TextAppearance.StatusBar.EventContent">
-        <item name="android:textSize">@dimen/notification_text_size</item>
+        <item name="android:textSize">14sp</item>
         <item name="android:textColor">@color/black_54p</item>
     </style>
     <style name="TextAppearance.StatusBar.EventContent.Title">
-        <item name="android:textSize">@dimen/notification_title_text_size</item>
+        <item name="android:textSize">16sp</item>
         <item name="android:textColor">@color/black_87p</item>
     </style>
 
@@ -71,25 +76,12 @@
         <item name="android:fontFamily">sans-serif-medium</item>
     </style>
 
-    <style name="CitiesTheme" parent="BaseActivityTheme">
-        <item name="android:fastScrollPreviewBackgroundLeft">
-            @drawable/fastscroll_preview_left
-        </item>
-        <item name="android:fastScrollPreviewBackgroundRight">
-            @drawable/fastscroll_preview_right
-        </item>
-        <item name="android:fastScrollStyle">@style/FastScrollStyle</item>
+    <style name="CitiesTheme" parent="TranslucentDecorActivityTheme">
         <item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb</item>
         <item name="android:fastScrollTrackDrawable">@drawable/fastscroll_track</item>
         <item name="actionBarStyle">@style/CitiesActionBarStyle</item>
-    </style>
-
-    <style name="FastScrollStyle" parent="android:Widget.Material.FastScroll">
-        <item name="android:minWidth">48dip</item>
-        <item name="android:minHeight">48dip</item>
-        <item name="android:padding">16dip</item>
-        <item name="android:textColor">@color/white</item>
-        <item name="android:textSize">32sp</item>
+        <item name="windowActionBar">true</item>
+        <item name="windowNoTitle">false</item>
     </style>
 
 </resources>
diff --git a/res/values-v23/styles.xml b/res/values-v23/styles.xml
index 0b7ddbd..f394ee1 100644
--- a/res/values-v23/styles.xml
+++ b/res/values-v23/styles.xml
@@ -13,11 +13,17 @@
     <style name="widget_big_thin" parent="big_thin">
         <item name="android:textSize">@dimen/widget_big_font_size</item>
         <item name="android:fontFamily">sans-serif-light</item>
+        <item name="android:shadowRadius">@dimen/digital_widget_shadow_radius</item>
+        <item name="android:shadowColor">@color/digital_widget_shadow_color</item>
+        <item name="android:shadowDy">@dimen/digital_widget_shadow_dy</item>
     </style>
 
     <style name="widget_label" parent="label">
         <item name="android:textSize">@dimen/widget_label_font_size</item>
         <item name="android:textAllCaps">true</item>
         <item name="android:letterSpacing">0.15</item>
+        <item name="android:shadowRadius">@dimen/digital_widget_shadow_radius</item>
+        <item name="android:shadowColor">@color/digital_widget_shadow_color</item>
+        <item name="android:shadowDy">@dimen/digital_widget_shadow_dy</item>
     </style>
 </resources>
\ No newline at end of file
diff --git a/res/values-vi/array.xml b/res/values-vi/array.xml
index 815151b..95690a1 100644
--- a/res/values-vi/array.xml
+++ b/res/values-vi/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Thành phố Guatemala"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>Winnipeg"</item>
-    <item msgid="1132634022412399582">"N<xliff:g id="SEPARATOR">=</xliff:g>Nam Cực"</item>
+    <item msgid="498429228419399474">"N<xliff:g id="SEPARATOR">=</xliff:g>Nam Cực<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>Hồ Chí Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>Hồng Kông"</item>
+    <item msgid="3439764751788710130">"H<xliff:g id="SEPARATOR">=</xliff:g>Hồng Kông<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>Phnôm Pênh"</item>
-    <item msgid="935474308903572975">"B<xliff:g id="SEPARATOR">=</xliff:g>Bình Nhưỡng"</item>
+    <item msgid="1245515372520913197">"B<xliff:g id="SEPARATOR">=</xliff:g>Bình Nhưỡng<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>Riyadh"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>Sài Gòn"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>Seoul"</item>
-    <item msgid="583367295371395814">"T<xliff:g id="SEPARATOR">=</xliff:g>Thượng Hải"</item>
+    <item msgid="3814881931186962624">"T<xliff:g id="SEPARATOR">=</xliff:g>Thượng Hải<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>Singapore"</item>
-    <item msgid="1972491729911039207">"Đ<xliff:g id="SEPARATOR">=</xliff:g>Đài Bắc"</item>
+    <item msgid="8982451946156859368">"Đ<xliff:g id="SEPARATOR">=</xliff:g>Đài Bắc<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>Tehran"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo"</item>
+    <item msgid="76330681636547168">"T<xliff:g id="SEPARATOR">=</xliff:g>Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>Reno"</item>
     <item msgid="9155068631060038769">"T<xliff:g id="SEPARATOR">=</xliff:g>Thành phố Black Rock"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>Bắc Kinh"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>Bắc Kinh<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka"</item>
+    <item msgid="7199039603593847813">"O<xliff:g id="SEPARATOR">=</xliff:g>Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>Madison"</item>
-    <item msgid="6971636434858330021">"Q<xliff:g id="SEPARATOR">=</xliff:g>Quảng Châu"</item>
+    <item msgid="2077617905582224600">"Q<xliff:g id="SEPARATOR">=</xliff:g>Quảng Châu<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>Belo Horizonte"</item>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 4aecc58..1ca7a0a 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Hiển thị đồng hồ"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Ẩn đồng hồ"</string>
     <string name="label" msgid="162189613902857319">"Nhãn"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Bật"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Tắt"</string>
     <string name="default_label" msgid="5590025289805630372">"Báo thức"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Đặt báo thức"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Rung"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Lặp lại"</string>
     <string name="alert" msgid="6506982899651975645">"Nhạc chuông báo thức"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Nhạc chuông tùy chỉnh"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Bộ hẹn giờ đã hết hạn"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Im lặng"</string>
     <string name="ringtone" msgid="9110746249688559579">"Nhạc chuông"</string>
     <string name="time" msgid="8067216534232296518">"Giờ"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Ngày mai"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Báo lại cho tới <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"Báo thức sắp tới"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"Báo thức bị nhỡ của bạn đã được xóa"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Còn chưa đầy một phút"</item>
-    <item msgid="83197792732433351">"Còn <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"Còn <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"Còn <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Còn chưa đầy một phút"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"Còn <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"còn lại"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"còn lại"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"Báo thức được đặt đổ chuông sau dưới 1 phút nữa tính từ bây giờ."</item>
     <item msgid="6002066367368421848">"Báo thức được đặt đổ chuông sau <xliff:g id="DAYS">%1$s</xliff:g> nữa tính từ bây giờ."</item>
@@ -101,6 +104,10 @@
       <item quantity="other">phút</item>
       <item quantity="one">phút</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Tăng dần âm lượng"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Tắt"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> giây"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"giây"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Im lặng sau"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> phút</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Hoàn nguyên"</string>
     <string name="delete" msgid="5732434972457000541">"Xóa"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Âm lượng báo thức"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Im lặng"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Im lặng"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Không xác định"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Báo lại hoặc hủy báo thức."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (báo lại)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"Báo thức được đặt đổ chuông sau <xliff:g id="TIME">%s</xliff:g> nữa. Chạm để hủy."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Đang tải nhạc chuông…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Dịch vụ phát âm thanh cho bộ hẹn giờ đã đặt trong Đồng hồ."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Đặt báo thức"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"Báo thức"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Bộ hẹn giờ"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Đồng hồ"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Sắp xếp theo tên"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Thành phố đã chọn"</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_start_button" msgid="8373422516681242270">"Bắt đầu"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Tạm dừng"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Vòng chạy"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Chia sẻ"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Thời gian của tôi là <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Số vòng chạy:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Vòng chạy <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> giờ</item>
       <item quantity="one">1 giờ</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Thêm 1 phút"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Thêm 1 phút"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Dừng"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Xong"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Dừng tất cả các bộ hẹn giờ"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Đặt lại"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Hủy"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Đã hủy bộ tính giờ"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Hết giờ"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> bộ hẹn giờ đã hết hạn"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Bộ hẹn giờ"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"Tối đa 4 bộ hẹn giờ"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Tạm dừng"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Đặt lại hẹn giờ"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Bạn đúng là con quỷ tốc độ."</item>
     <item msgid="6332879039890727169">"Tận hưởng thành quả lao động của bạn."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Thành phố"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Đồng hồ"</string>
     <string name="clock_style" msgid="2265011060429742344">"Kiểu"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Thay đổi ngày và giờ"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"Đồng hồ kim"</item>
     <item msgid="8483930821046925592">"Đồng hồ số"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"Đã chọn <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"Đã bỏ chọn <xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"Quần đảo Marshall"</item>
     <item msgid="4196408495909011020">"Đảo Midway"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Báo thức"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Dịch vụ đồng hồ bấm giờ để chạy thông báo."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Đã dừng"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Xử lý các tác vụ từ thông báo bộ hẹn giờ."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Xử lý các tác vụ từ thông báo đồng hồ bấm giờ."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Đã tạm dừng"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Vuốt sang phải để loại bỏ"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Vuốt sang trái để báo lại"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Vuốt sang trái để báo lại hoặc phải để bỏ qua"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Bộ hẹn giờ"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Nhạc chuông bộ hẹn giờ"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Đã dừng bộ hẹn giờ"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"Đã dừng <xliff:g id="NUMBER">%d</xliff:g> bộ hẹn giờ"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Đã tạm dừng hẹn giờ"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"Đã tạm dừng <xliff:g id="NUMBER">%d</xliff:g> hẹn giờ"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Chạm để xem bộ hẹn giờ của bạn"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> bộ hẹn giờ"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Bộ hẹn giờ tiếp theo: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Không có báo thức"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Ko đặt báo thức"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"KHÔNG CÓ BÁO THỨC SẮP TỚI"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Thời gian không hợp lệ <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Chưa có báo thức lúc <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Chưa có báo thức nào được lên lịch"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Không chỉ định nhãn nào"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Không có báo thức nào chứa nhãn này"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Đồng hồ bấm giờ vẫn đang chạy"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Đồng hồ bấm giờ hiện không chạy"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Không thể đặt lại đồng hồ bấm giờ do đồng hồ bấm giờ đang chạy"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Đã dừng đồng hồ bấm giờ"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Đã tạm dừng đồng hồ bấm giờ"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Đã đặt lại đồng hồ bấm giờ"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Đã chồng lên đồng hồ bấm giờ"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Đã bắt đầu đồng hồ bấm giờ"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Chưa có báo thức nào được lên lịch cho thời gian này"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"Đã loại bỏ báo thức <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"Đã đặt báo thức đổ chuông lúc <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Chưa đặt bộ hẹn giờ"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Đã xóa bộ hẹn giờ"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Bộ hẹn giờ vẫn đang chạy"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Không thể hoàn tất yêu cầu của bạn, có nhiều bộ hẹn giờ"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Đã khởi động bộ hẹn giờ"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Không có bộ hẹn giờ"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Có nhiều bộ hẹn giờ"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Bộ hẹn giờ đã bị xóa."</string>
     <string name="timer_created" msgid="4381027137335885547">"Đã tạo bộ hẹn giờ"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Thời lượng không hợp lệ trên bộ hẹn giờ"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Đã đặt lại bộ hẹn giờ"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Không thể đặt lại bộ hẹn giờ vì bộ hẹn giờ vẫn đang chạy. Dừng bộ hẹn giờ để đặt lại."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Bộ hẹn giờ đã dừng"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Đã xóa bộ hẹn giờ"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Đã khởi động bộ hẹn giờ"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Thời lượng không hợp lệ trên bộ hẹn giờ"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Chưa có thành phố nào được chọn"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Thành phố bạn chỉ định không có sẵn"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Thành phố này đã được thêm"</string>
diff --git a/res/values-zh-rCN/array.xml b/res/values-zh-rCN/array.xml
index 7d3c9ff..adb08b0 100644
--- a/res/values-zh-rCN/array.xml
+++ b/res/values-zh-rCN/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>福塔雷萨"</item>
     <item msgid="5801558418916235541">"D<xliff:g id="SEPARATOR">=</xliff:g>大特克"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>格林纳达"</item>
-    <item msgid="1490069759176391533">"W<xliff:g id="SEPARATOR">=</xliff:g>危地马拉"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>危地马拉"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>圭亚那"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>哈利法克斯"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>哈瓦那"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"D<xliff:g id="SEPARATOR">=</xliff:g>多伦多"</item>
     <item msgid="1506838283840737263">"W<xliff:g id="SEPARATOR">=</xliff:g>温哥华"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>温尼伯"</item>
-    <item msgid="1132634022412399582">"N<xliff:g id="SEPARATOR">=</xliff:g>南极"</item>
+    <item msgid="498429228419399474">"N<xliff:g id="SEPARATOR">=</xliff:g>南极<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>朗伊尔城"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>阿拉木图"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>安曼"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"J<xliff:g id="SEPARATOR">=</xliff:g>加沙"</item>
     <item msgid="2359068282340162319">"X<xliff:g id="SEPARATOR">=</xliff:g>希伯伦"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>胡志明市"</item>
-    <item msgid="4731022818651322736">"X<xliff:g id="SEPARATOR">=</xliff:g>香港"</item>
+    <item msgid="3439764751788710130">"X<xliff:g id="SEPARATOR">=</xliff:g>香港<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"Y<xliff:g id="SEPARATOR">=</xliff:g>伊斯坦布尔"</item>
     <item msgid="758800913783999425">"Y<xliff:g id="SEPARATOR">=</xliff:g>雅加达"</item>
     <item msgid="8956406398692698126">"Y<xliff:g id="SEPARATOR">=</xliff:g>耶路撒冷"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>马尼拉"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>马斯喀特"</item>
     <item msgid="6077458941399984780">"J<xliff:g id="SEPARATOR">=</xliff:g>金边"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>平壤"</item>
+    <item msgid="1245515372520913197">"P<xliff:g id="SEPARATOR">=</xliff:g>平壤<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"K<xliff:g id="SEPARATOR">=</xliff:g>卡塔尔"</item>
     <item msgid="1667243110545095146">"Y<xliff:g id="SEPARATOR">=</xliff:g>仰光"</item>
     <item msgid="4460370766685855731">"L<xliff:g id="SEPARATOR">=</xliff:g>利雅得"</item>
     <item msgid="4229224905931739201">"X<xliff:g id="SEPARATOR">=</xliff:g>西贡"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>首尔"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>上海"</item>
+    <item msgid="3814881931186962624">"S<xliff:g id="SEPARATOR">=</xliff:g>上海<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"X<xliff:g id="SEPARATOR">=</xliff:g>新加坡"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>台北"</item>
+    <item msgid="8982451946156859368">"T<xliff:g id="SEPARATOR">=</xliff:g>台北<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"D<xliff:g id="SEPARATOR">=</xliff:g>德黑兰"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>特拉维夫"</item>
-    <item msgid="8499164674454654525">"D<xliff:g id="SEPARATOR">=</xliff:g>东京"</item>
+    <item msgid="76330681636547168">"D<xliff:g id="SEPARATOR">=</xliff:g>东京<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"W<xliff:g id="SEPARATOR">=</xliff:g>乌兰巴托"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>百慕大"</item>
     <item msgid="4527109966513690429">"J<xliff:g id="SEPARATOR">=</xliff:g>加那利"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"L<xliff:g id="SEPARATOR">=</xliff:g>里诺"</item>
     <item msgid="9155068631060038769">"H<xliff:g id="SEPARATOR">=</xliff:g>黑岩城"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>多哈"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>北京"</item>
+    <item msgid="5327010922199714808">"B<xliff:g id="SEPARATOR">=</xliff:g>北京<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>孟买"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>德里"</item>
-    <item msgid="2933410189478233292">"D<xliff:g id="SEPARATOR">=</xliff:g>大阪"</item>
+    <item msgid="7199039603593847813">"D<xliff:g id="SEPARATOR">=</xliff:g>大阪<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>拉合尔"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>萨那"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>巴塞罗那"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"J<xliff:g id="SEPARATOR">=</xliff:g>剑桥"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>柯克兰"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>麦迪逊"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>广州"</item>
+    <item msgid="2077617905582224600">"G<xliff:g id="SEPARATOR">=</xliff:g>广州<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>海得拉巴"</item>
     <item msgid="3032295682584784261">"L<xliff:g id="SEPARATOR">=</xliff:g>雷斯顿"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>贝洛奥里藏特"</item>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 03c00f9..f00f207 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"显示时钟"</string>
     <string name="hide_clock" msgid="3217727306480505694">"隐藏时钟"</string>
     <string name="label" msgid="162189613902857319">"标签"</string>
+    <string name="on_switch" msgid="2297966258029227449">"开启"</string>
+    <string name="off_switch" msgid="3381070073851148013">"关闭"</string>
     <string name="default_label" msgid="5590025289805630372">"闹钟"</string>
     <string name="set_alarm" msgid="9148359866152726808">"设置闹钟"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"振动"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"重复"</string>
     <string name="alert" msgid="6506982899651975645">"闹钟铃声"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"自定义铃声"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"计时器已结束"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"静音"</string>
     <string name="ringtone" msgid="9110746249688559579">"铃声"</string>
     <string name="time" msgid="8067216534232296518">"时间"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"明天"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"闹钟已暂停,将于<xliff:g id="TIME">%s</xliff:g>再响"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"预定的闹钟"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"错过的闹钟已删除"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"还剩不到1分钟"</item>
-    <item msgid="83197792732433351">"还剩<xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"还剩<xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"还剩<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"还剩不到 1 分钟"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"还剩 <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"还剩"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"还剩"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"闹钟时间已设为不到1分钟后。"</item>
     <item msgid="6002066367368421848">"闹钟时间已设为<xliff:g id="DAYS">%1$s</xliff:g>后。"</item>
@@ -101,6 +104,10 @@
       <item quantity="other">分钟</item>
       <item quantity="one">分钟</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"逐步增大音量"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"关闭"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> 秒"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"秒"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"闹铃时长"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> 分钟</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"还原"</string>
     <string name="delete" msgid="5732434972457000541">"删除闹钟"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"闹钟音量"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"静音"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"静音"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"未知"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"暂停或关闭闹钟。"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g>(已暂停)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"闹钟时间已设为<xliff:g id="TIME">%s</xliff:g>后。触摸可取消。"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"正在加载铃声..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"用于“时钟”内设置的计时器的音效播放服务。"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"设置闹钟"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"闹钟"</string>
     <string name="menu_timer" msgid="6459070074762877114">"计时器"</string>
     <string name="menu_clock" msgid="5612760670606829805">"时钟"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"按名称排序"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"所选城市"</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_start_button" msgid="8373422516681242270">"开始"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"暂停"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"一圈"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"分享"</string>
     <string name="hours_label" msgid="3393478155635368097">"小时"</string>
     <string name="minutes_label" msgid="3568098128251438588">"分"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"我的时间:<xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"各圈时间:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"第<xliff:g id="NUMBER">%d</xliff:g>圈"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> 小时</item>
       <item quantity="one">1 小时</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"增加1分钟"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"加上1分钟"</string>
     <string name="timer_stop" msgid="3361154678667736722">"停止"</string>
-    <string name="timer_done" msgid="2375990511982914051">"完成"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"停止所有计时器"</string>
     <string name="timer_reset" msgid="7848424809190171640">"重置"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"取消"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"已取消计时器"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"时间到"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> 个计时器已到期"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"计时器"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"最多只能设置4个计时器"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"暂停"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"重置所有计时器"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"您简直就像闪电侠。"</item>
     <item msgid="6332879039890727169">"享受一下您大汗淋漓的成果吧。"</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"城市"</string>
     <string name="clock_settings" msgid="8317286807280600391">"时钟"</string>
     <string name="clock_style" msgid="2265011060429742344">"样式"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"更改日期和时间"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"指针"</item>
     <item msgid="8483930821046925592">"数字"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"已选中<xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"已取消选中<xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"马绍尔群岛"</item>
     <item msgid="4196408495909011020">"中途岛"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"雅加达"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"闹钟"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"使用秒表服务执行通知功能。"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"已停止"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"处理可通过计时器通知执行的操作。"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"处理可通过秒表通知执行的操作。"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"已暂停"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"向右滑动可关闭闹钟"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"向左滑动可暂停闹钟"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"向左滑动可暂停,向右滑动可关闭"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"计时器"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"计时器铃声"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"计时器已停止"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g>个计时器已停止"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"计时器已暂停"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> 个计时器已暂停"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"触摸可查看您的计时器"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g>个计时器"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"下一个计时器:<xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"没有闹钟"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"未设置闹钟"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"没有预定的闹钟"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"a h:mm"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEEa h:mm"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"时间无效:<xliff:g id="INVALID_AMPM">%s</xliff:g> <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"未设置 <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> 的闹钟"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"未设置任何闹钟"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"未指定任何标签"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"没有闹钟包含此标签"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"秒表已在计时"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"秒表目前未运行"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"秒表正在运行,因此无法重置"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"秒表已停止"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"秒表已暂停"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"秒表已重置"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"秒表已分圈计时"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"秒表已开始"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"未设置这个时间的闹钟"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"已关闭 <xliff:g id="ALARM_TIME">%s</xliff:g> 的闹钟"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"已设置 <xliff:g id="ALARM_TIME">%s</xliff:g> 的闹钟"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"未设置任何计时器"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"已删除计时器"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"计时器已在计时"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"有多个相符的计时器,因而无法完成您的请求"</string>
-    <string name="timer_started" msgid="6715582052946641641">"已启动计时器"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"没有任何计时器"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"有多个计时器存在"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"已移除计时器。"</string>
     <string name="timer_created" msgid="4381027137335885547">"已创建计时器"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"计时器时长无效"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"已重置计时器"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"计时器仍在计时,无法重置。停止计时器即可重置。"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"计时器之前已停止"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"已删除计时器"</string>
+    <string name="timer_started" msgid="6715582052946641641">"已启动计时器"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"计时器时长无效"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"未选择任何城市"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"数据库中没有您指定的城市"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"已添加过该城市"</string>
diff --git a/res/values-zh-rHK/array.xml b/res/values-zh-rHK/array.xml
index c19a651..108130a 100644
--- a/res/values-zh-rHK/array.xml
+++ b/res/values-zh-rHK/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"14劃<xliff:g id="SEPARATOR">=</xliff:g>福塔萊薩"</item>
     <item msgid="5801558418916235541">"3劃<xliff:g id="SEPARATOR">=</xliff:g>大特克"</item>
     <item msgid="2103759276235503048">"10劃<xliff:g id="SEPARATOR">=</xliff:g>格瑞納達"</item>
-    <item msgid="1490069759176391533">"6劃<xliff:g id="SEPARATOR">=</xliff:g>危地馬拉"</item>
+    <item msgid="6216160110733510854">"6劃<xliff:g id="SEPARATOR">=</xliff:g>危地馬拉城"</item>
     <item msgid="525959305652046261">"6劃<xliff:g id="SEPARATOR">=</xliff:g>圭亞那"</item>
     <item msgid="7565596629973190931">"9劃<xliff:g id="SEPARATOR">=</xliff:g>哈利法克斯"</item>
     <item msgid="3811169155065582644">"9劃<xliff:g id="SEPARATOR">=</xliff:g>哈瓦那"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"6劃<xliff:g id="SEPARATOR">=</xliff:g>多倫多"</item>
     <item msgid="1506838283840737263">"13劃<xliff:g id="SEPARATOR">=</xliff:g>溫哥華"</item>
     <item msgid="8935386104773857399">"13劃<xliff:g id="SEPARATOR">=</xliff:g>溫尼伯"</item>
-    <item msgid="1132634022412399582">"9劃<xliff:g id="SEPARATOR">=</xliff:g>南極"</item>
+    <item msgid="498429228419399474">"9劃<xliff:g id="SEPARATOR">=</xliff:g>南極<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"10劃<xliff:g id="SEPARATOR">=</xliff:g>朗伊爾城"</item>
     <item msgid="3784788073896028355">"8劃<xliff:g id="SEPARATOR">=</xliff:g>阿拉木圖"</item>
     <item msgid="7895695236056852523">"6劃<xliff:g id="SEPARATOR">=</xliff:g>安曼"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"5劃<xliff:g id="SEPARATOR">=</xliff:g>加沙"</item>
     <item msgid="2359068282340162319">"7劃<xliff:g id="SEPARATOR">=</xliff:g>希伯崙"</item>
     <item msgid="6223396610551759129">"9劃<xliff:g id="SEPARATOR">=</xliff:g>胡志明市"</item>
-    <item msgid="4731022818651322736">"9劃<xliff:g id="SEPARATOR">=</xliff:g>香港"</item>
+    <item msgid="3439764751788710130">"9劃<xliff:g id="SEPARATOR">=</xliff:g>香港<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"6劃<xliff:g id="SEPARATOR">=</xliff:g>伊斯坦布爾"</item>
     <item msgid="758800913783999425">"12劃<xliff:g id="SEPARATOR">=</xliff:g>雅加達"</item>
     <item msgid="8956406398692698126">"9劃<xliff:g id="SEPARATOR">=</xliff:g>耶路撒冷"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"10劃<xliff:g id="SEPARATOR">=</xliff:g>馬尼拉"</item>
     <item msgid="6033964325069060422">"10劃<xliff:g id="SEPARATOR">=</xliff:g>馬斯喀特"</item>
     <item msgid="6077458941399984780">"8劃<xliff:g id="SEPARATOR">=</xliff:g>金邊"</item>
-    <item msgid="935474308903572975">"5劃<xliff:g id="SEPARATOR">=</xliff:g>平壤"</item>
+    <item msgid="1245515372520913197">"5劃<xliff:g id="SEPARATOR">=</xliff:g>平壤<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"5劃<xliff:g id="SEPARATOR">=</xliff:g>卡塔爾"</item>
     <item msgid="1667243110545095146">"6劃<xliff:g id="SEPARATOR">=</xliff:g>仰光"</item>
     <item msgid="4460370766685855731">"7劃<xliff:g id="SEPARATOR">=</xliff:g>利雅得"</item>
     <item msgid="4229224905931739201">"9劃<xliff:g id="SEPARATOR">=</xliff:g>胡志明市"</item>
     <item msgid="8705359848250215620">"9劃<xliff:g id="SEPARATOR">=</xliff:g>首爾"</item>
-    <item msgid="583367295371395814">"3劃<xliff:g id="SEPARATOR">=</xliff:g>上海"</item>
+    <item msgid="3814881931186962624">"3劃<xliff:g id="SEPARATOR">=</xliff:g>上海<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"13劃<xliff:g id="SEPARATOR">=</xliff:g>新加坡"</item>
-    <item msgid="1972491729911039207">"5劃<xliff:g id="SEPARATOR">=</xliff:g>台北"</item>
+    <item msgid="8982451946156859368">"5劃<xliff:g id="SEPARATOR">=</xliff:g>台北<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"15劃<xliff:g id="SEPARATOR">=</xliff:g>德黑蘭"</item>
     <item msgid="8629402941285674273">"10劃<xliff:g id="SEPARATOR">=</xliff:g>特拉維夫"</item>
-    <item msgid="8499164674454654525">"8劃<xliff:g id="SEPARATOR">=</xliff:g>東京"</item>
+    <item msgid="76330681636547168">"8劃<xliff:g id="SEPARATOR">=</xliff:g>東京<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"10劃<xliff:g id="SEPARATOR">=</xliff:g>烏蘭巴托"</item>
     <item msgid="2028626988021468640">"6劃<xliff:g id="SEPARATOR">=</xliff:g>百慕達"</item>
     <item msgid="4527109966513690429">"5劃<xliff:g id="SEPARATOR">=</xliff:g>加納利"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"7劃<xliff:g id="SEPARATOR">=</xliff:g>里諾"</item>
     <item msgid="9155068631060038769">"12劃<xliff:g id="SEPARATOR">=</xliff:g>黑岩城"</item>
     <item msgid="8498761319928979900">"6劃<xliff:g id="SEPARATOR">=</xliff:g>多哈"</item>
-    <item msgid="8307897251088048641">"5劃<xliff:g id="SEPARATOR">=</xliff:g>北京"</item>
+    <item msgid="5327010922199714808">"5劃<xliff:g id="SEPARATOR">=</xliff:g>北京<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"8劃<xliff:g id="SEPARATOR">=</xliff:g>孟買"</item>
     <item msgid="6668274273067049125">"15劃<xliff:g id="SEPARATOR">=</xliff:g>德里"</item>
-    <item msgid="2933410189478233292">"3劃<xliff:g id="SEPARATOR">=</xliff:g>大阪"</item>
+    <item msgid="7199039603593847813">"3劃<xliff:g id="SEPARATOR">=</xliff:g>大阪<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"8劃<xliff:g id="SEPARATOR">=</xliff:g>拉合爾"</item>
     <item msgid="1448378291805481500">"7劃<xliff:g id="SEPARATOR">=</xliff:g>沙那"</item>
     <item msgid="5233119846682408301">"4劃<xliff:g id="SEPARATOR">=</xliff:g>巴塞隆拿"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"15劃<xliff:g id="SEPARATOR">=</xliff:g>劍橋"</item>
     <item msgid="759409010285366934">"9劃<xliff:g id="SEPARATOR">=</xliff:g>科克蘭"</item>
     <item msgid="6308007059287569663">"11劃 <xliff:g id="SEPARATOR">=</xliff:g>麥迪遜"</item>
-    <item msgid="6971636434858330021">"15劃<xliff:g id="SEPARATOR">=</xliff:g>廣州"</item>
+    <item msgid="2077617905582224600">"15劃<xliff:g id="SEPARATOR">=</xliff:g>廣州<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"10劃<xliff:g id="SEPARATOR">=</xliff:g>海得拉巴"</item>
     <item msgid="3032295682584784261">"13劃<xliff:g id="SEPARATOR">=</xliff:g>雷斯頓"</item>
     <item msgid="7722837296297332268">"9劃<xliff:g id="SEPARATOR">=</xliff:g>美景市"</item>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index c238e67..f5f77ed 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"顯示時鐘"</string>
     <string name="hide_clock" msgid="3217727306480505694">"隱藏時鐘"</string>
     <string name="label" msgid="162189613902857319">"標籤"</string>
+    <string name="on_switch" msgid="2297966258029227449">"開啟"</string>
+    <string name="off_switch" msgid="3381070073851148013">"關閉"</string>
     <string name="default_label" msgid="5590025289805630372">"鬧鐘"</string>
     <string name="set_alarm" msgid="9148359866152726808">"設定鬧鐘"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"震動"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"重複"</string>
     <string name="alert" msgid="6506982899651975645">"鬧鐘鈴聲"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"自訂鈴聲"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"計時器已逾時"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"靜音"</string>
     <string name="ringtone" msgid="9110746249688559579">"鈴聲"</string>
     <string name="time" msgid="8067216534232296518">"時間"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"明天"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"到 <xliff:g id="TIME">%s</xliff:g> 才重響"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"預定的鬧鐘"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"您錯過的鬧鐘已刪除"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"剩下不到一分鐘"</item>
-    <item msgid="83197792732433351">"剩下 <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"剩下 <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"剩下 <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"尚餘少於一分鐘"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"尚餘 <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"尚餘"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"尚餘"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"已將鬧鐘設定在不到 1 分鐘後啟動。"</item>
     <item msgid="6002066367368421848">"已將鬧鐘設定在 <xliff:g id="DAYS">%1$s</xliff:g>後啟動。"</item>
@@ -101,6 +104,10 @@
       <item quantity="other"> 分鐘</item>
       <item quantity="one">1 分鐘</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"逐步提高音量"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"關閉"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> 秒"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"秒"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"以下時間過後停止鈴聲:"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> 分鐘</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"復原"</string>
     <string name="delete" msgid="5732434972457000541">"刪除"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"鬧鐘音量"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"無聲"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"靜音"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"不明"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"稍後重響或關閉鬧鐘。"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (延遲)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"已將鬧鐘設定在 <xliff:g id="TIME">%s</xliff:g>,輕觸即可取消。"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"正在載入鈴聲..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"在「時鐘」設定的計時器音效播放服務。"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"設定鬧鐘"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"鬧鐘"</string>
     <string name="menu_timer" msgid="6459070074762877114">"計時器"</string>
     <string name="menu_clock" msgid="5612760670606829805">"時鐘"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"按名稱排序"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"選取的城市"</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_start_button" msgid="8373422516681242270">"開始"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"暫停"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"單圈"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"分享"</string>
     <string name="hours_label" msgid="3393478155635368097">"時"</string>
     <string name="minutes_label" msgid="3568098128251438588">"分"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"我的時間:<xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"單圈時間:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"第 <xliff:g id="NUMBER">%d</xliff:g> 圈"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> 小時</item>
       <item quantity="one">1 小時</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"增加 1 分鐘"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"多加 1 分鐘"</string>
     <string name="timer_stop" msgid="3361154678667736722">"停止"</string>
-    <string name="timer_done" msgid="2375990511982914051">"完成"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"停止所有倒數計時器"</string>
     <string name="timer_reset" msgid="7848424809190171640">"重設"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"取消"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"已取消計時"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"時間已到"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> 個倒數計時器逾時"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"計時器"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"最多 4 個計時器"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"暫停"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"重設所有計時器"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"您就像閃電俠。"</item>
     <item msgid="6332879039890727169">"享受辛勞的成果。"</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"城市"</string>
     <string name="clock_settings" msgid="8317286807280600391">"時鐘"</string>
     <string name="clock_style" msgid="2265011060429742344">"樣式"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"更改日期和時間"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"類比"</item>
     <item msgid="8483930821046925592">"數碼"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"已勾選<xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"未勾選<xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"馬紹爾群島"</item>
     <item msgid="4196408495909011020">"中途島"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"雅加達"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"鬧鐘"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"使用秒錶服務發出通知。"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"已停止"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"計時器通知的處理操作。"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"秒錶通知的處理操作。"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"已暫停"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"向右快速滑動可關閉鬧鐘"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"向左快速滑動可重響鬧鐘"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"向左快速滑動以重響,或向右關閉"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"倒數計時器"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"倒數計時器鈴聲"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"計時器已停止"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> 個計時器已停止"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"計時器已暫停"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> 個計時器已暫停"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"輕觸即可查看您的計時器"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> 個計時器"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"下一個計時器:<xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"沒有設定鬧鐘"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"未設定鬧鐘"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"沒有啟用中的鬧鐘"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"a h:mm"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE,a h:mm"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE,K:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"無效時間 <xliff:g id="INVALID_AMPM">%s</xliff:g> <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"沒有 <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g> 的鬧鐘"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"沒有已預設的鬧鐘"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"沒有指定標籤"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"此標籤沒有設定鬧鐘"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"秒錶已開始計時"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"秒錶尚未開始計時"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"秒錶正在運行,因此無法重設。"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"已停止秒錶"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"已暫停秒錶"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"已重設秒錶"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"秒錶已分段計時"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"已啟動秒錶"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"尚未為這個時間預設鬧鐘"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"已關閉 <xliff:g id="ALARM_TIME">%s</xliff:g> 的鬧鐘"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"鬧鐘已設定為 <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"尚未設定倒數計時器"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"已刪除倒數計時器"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"倒數計時器已開始計時"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"無法完成您的要求,已設定多個倒數計時器"</string>
-    <string name="timer_started" msgid="6715582052946641641">"已開始倒數計時器"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"沒有已設定的計時器"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"已設定超過一個計時器"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"計時器已移除。"</string>
     <string name="timer_created" msgid="4381027137335885547">"已建立倒數計時器"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"倒數計時器長度無效"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"已重設倒數計時器"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"倒數計時器仍在計時中,無法重設。停止倒數計時器即可重設。"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"倒數計時器已停止"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"已刪除倒數計時器"</string>
+    <string name="timer_started" msgid="6715582052946641641">"已開始倒數計時器"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"倒數計時器長度無效"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"尚未選取城市"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"資料庫中找不到您指定的城市"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"已新增該城市"</string>
diff --git a/res/values-zh-rTW/array.xml b/res/values-zh-rTW/array.xml
index 9f02bac..9a1119e 100644
--- a/res/values-zh-rTW/array.xml
+++ b/res/values-zh-rTW/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"14 劃<xliff:g id="SEPARATOR">=</xliff:g>福塔力沙"</item>
     <item msgid="5801558418916235541">"3 劃<xliff:g id="SEPARATOR">=</xliff:g>大特克"</item>
     <item msgid="2103759276235503048">"10 劃<xliff:g id="SEPARATOR">=</xliff:g>格瑞那達"</item>
-    <item msgid="1490069759176391533">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>瓜地馬拉"</item>
+    <item msgid="6216160110733510854">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>瓜地馬拉市"</item>
     <item msgid="525959305652046261">"16 劃<xliff:g id="SEPARATOR">=</xliff:g>蓋亞那"</item>
     <item msgid="7565596629973190931">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>哈利法克斯"</item>
     <item msgid="3811169155065582644">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>哈瓦那"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"6 劃<xliff:g id="SEPARATOR">=</xliff:g>多倫多"</item>
     <item msgid="1506838283840737263">"13 劃<xliff:g id="SEPARATOR">=</xliff:g>溫哥華"</item>
     <item msgid="8935386104773857399">"13 劃<xliff:g id="SEPARATOR">=</xliff:g>溫尼伯"</item>
-    <item msgid="1132634022412399582">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>南極"</item>
+    <item msgid="498429228419399474">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>南極<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"11 劃<xliff:g id="SEPARATOR">=</xliff:g>隆意耳拜恩"</item>
     <item msgid="3784788073896028355">"7 劃<xliff:g id="SEPARATOR">=</xliff:g>阿爾馬提"</item>
     <item msgid="7895695236056852523">"6 劃<xliff:g id="SEPARATOR">=</xliff:g>安曼"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>加薩"</item>
     <item msgid="2359068282340162319">"7 劃<xliff:g id="SEPARATOR">=</xliff:g>希伯倫"</item>
     <item msgid="6223396610551759129">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>胡志明市"</item>
-    <item msgid="4731022818651322736">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>香港"</item>
+    <item msgid="3439764751788710130">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>香港<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"6 劃<xliff:g id="SEPARATOR">=</xliff:g>伊斯坦堡"</item>
     <item msgid="758800913783999425">"12 劃<xliff:g id="SEPARATOR">=</xliff:g>雅加達"</item>
     <item msgid="8956406398692698126">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>耶路撒冷"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"10 劃<xliff:g id="SEPARATOR">=</xliff:g>馬尼拉"</item>
     <item msgid="6033964325069060422">"10 劃<xliff:g id="SEPARATOR">=</xliff:g>馬斯喀特"</item>
     <item msgid="6077458941399984780">"8 劃<xliff:g id="SEPARATOR">=</xliff:g>金邊"</item>
-    <item msgid="935474308903572975">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>平壤"</item>
+    <item msgid="1245515372520913197">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>平壤<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>卡達"</item>
     <item msgid="1667243110545095146">"6 劃<xliff:g id="SEPARATOR">=</xliff:g>仰光"</item>
     <item msgid="4460370766685855731">"7 劃<xliff:g id="SEPARATOR">=</xliff:g>利雅得"</item>
     <item msgid="4229224905931739201">"6 劃<xliff:g id="SEPARATOR">=</xliff:g>西貢"</item>
     <item msgid="8705359848250215620">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>首爾"</item>
-    <item msgid="583367295371395814">"3 劃<xliff:g id="SEPARATOR">=</xliff:g>上海"</item>
+    <item msgid="3814881931186962624">"3 劃<xliff:g id="SEPARATOR">=</xliff:g>上海<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"13 劃<xliff:g id="SEPARATOR">=</xliff:g>新加坡"</item>
-    <item msgid="1972491729911039207">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>台北"</item>
+    <item msgid="8982451946156859368">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>台北<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"15 劃<xliff:g id="SEPARATOR">=</xliff:g>德黑蘭"</item>
     <item msgid="8629402941285674273">"10 劃<xliff:g id="SEPARATOR">=</xliff:g>特拉維夫"</item>
-    <item msgid="8499164674454654525">"8 劃<xliff:g id="SEPARATOR">=</xliff:g>東京"</item>
+    <item msgid="76330681636547168">"8 劃<xliff:g id="SEPARATOR">=</xliff:g>東京<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"10 劃<xliff:g id="SEPARATOR">=</xliff:g>庫倫"</item>
     <item msgid="2028626988021468640">"6 劃<xliff:g id="SEPARATOR">=</xliff:g>百慕達"</item>
     <item msgid="4527109966513690429">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>加納利"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"13 劃<xliff:g id="SEPARATOR">=</xliff:g>雷諾"</item>
     <item msgid="9155068631060038769">"12 劃<xliff:g id="SEPARATOR">=</xliff:g>黑岩市"</item>
     <item msgid="8498761319928979900">"6 劃<xliff:g id="SEPARATOR">=</xliff:g>多哈"</item>
-    <item msgid="8307897251088048641">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>北京"</item>
+    <item msgid="5327010922199714808">"5 劃<xliff:g id="SEPARATOR">=</xliff:g>北京<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"8 劃<xliff:g id="SEPARATOR">=</xliff:g>孟買"</item>
     <item msgid="6668274273067049125">"15 劃<xliff:g id="SEPARATOR">=</xliff:g>德里"</item>
-    <item msgid="2933410189478233292">"3 劃<xliff:g id="SEPARATOR">=</xliff:g>大阪"</item>
+    <item msgid="7199039603593847813">"3 劃<xliff:g id="SEPARATOR">=</xliff:g>大阪<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"8 劃<xliff:g id="SEPARATOR">=</xliff:g>拉合爾"</item>
     <item msgid="1448378291805481500">"18 劃<xliff:g id="SEPARATOR">=</xliff:g>薩那"</item>
     <item msgid="5233119846682408301">"4 劃<xliff:g id="SEPARATOR">=</xliff:g>巴塞隆納"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"15 劃<xliff:g id="SEPARATOR">=</xliff:g>劍橋"</item>
     <item msgid="759409010285366934">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>科克蘭"</item>
     <item msgid="6308007059287569663">"11 劃<xliff:g id="SEPARATOR">=</xliff:g>麥迪遜"</item>
-    <item msgid="6971636434858330021">"15 劃<xliff:g id="SEPARATOR">=</xliff:g>廣州"</item>
+    <item msgid="2077617905582224600">"15 劃<xliff:g id="SEPARATOR">=</xliff:g>廣州<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"10 劃<xliff:g id="SEPARATOR">=</xliff:g>海得拉巴"</item>
     <item msgid="3032295682584784261">"13 劃<xliff:g id="SEPARATOR">=</xliff:g>雷斯頓"</item>
     <item msgid="7722837296297332268">"9 劃<xliff:g id="SEPARATOR">=</xliff:g>美景市"</item>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 4158b65..f8f0832 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"顯示時鐘"</string>
     <string name="hide_clock" msgid="3217727306480505694">"隱藏時鐘"</string>
     <string name="label" msgid="162189613902857319">"標籤"</string>
+    <string name="on_switch" msgid="2297966258029227449">"開啟"</string>
+    <string name="off_switch" msgid="3381070073851148013">"關閉"</string>
     <string name="default_label" msgid="5590025289805630372">"鬧鐘"</string>
     <string name="set_alarm" msgid="9148359866152726808">"設定鬧鐘"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"震動"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"重複"</string>
     <string name="alert" msgid="6506982899651975645">"鬧鐘鈴聲"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"自訂鈴聲"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"計時完畢"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"靜音"</string>
     <string name="ringtone" msgid="9110746249688559579">"鈴聲"</string>
     <string name="time" msgid="8067216534232296518">"時間"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"明天"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"延後到 <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"預定的鬧鐘"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"您錯過的鬧鐘已刪除"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"還剩下不到 1 分鐘"</item>
-    <item msgid="83197792732433351">"還剩下 <xliff:g id="HOURS">%1$s</xliff:g>"</item>
-    <item msgid="8919698220200894252">"還剩下 <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-    <item msgid="8458069283817013813">"還剩下 <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"還剩下不到 1 分鐘"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="HOURS">%1$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="REMAINING"> %3$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"還剩下 <xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g>"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"還剩下"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"還剩下"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"已將鬧鐘設定在 1 分鐘內啟動。"</item>
     <item msgid="6002066367368421848">"已將鬧鐘設定在 <xliff:g id="DAYS">%1$s</xliff:g>後啟動。"</item>
@@ -101,6 +104,10 @@
       <item quantity="other">分鐘</item>
       <item quantity="one">分鐘</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"漸漸提高音量"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"關閉"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> 秒"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"秒"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"鬧鐘鈴響持續時間:"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="other"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> 分鐘</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"復原"</string>
     <string name="delete" msgid="5732434972457000541">"刪除"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"鬧鐘音量"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"靜音"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"靜音"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"不明"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"繼續貪睡或關閉鬧鐘。"</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (貪睡)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"已將鬧鐘設定在 <xliff:g id="TIME">%s</xliff:g>,輕觸即可取消。"</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"正在載入鈴聲…"</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"「時鐘」設定的計時器音效播放服務。"</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"設定鬧鐘"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"鬧鐘"</string>
     <string name="menu_timer" msgid="6459070074762877114">"計時器"</string>
     <string name="menu_clock" msgid="5612760670606829805">"時鐘"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"依名稱排序"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"選取的城市"</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_start_button" msgid="8373422516681242270">"開始"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"暫停"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"單圈計時"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"分享"</string>
     <string name="hours_label" msgid="3393478155635368097">"時"</string>
     <string name="minutes_label" msgid="3568098128251438588">"分"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"我的時間:<xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"單圈時間:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"第 <xliff:g id="NUMBER">%d</xliff:g> 圈"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> 小時</item>
       <item quantity="one">1 小時</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"增加 1 分鐘"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"增加 1 分鐘"</string>
     <string name="timer_stop" msgid="3361154678667736722">"停止"</string>
-    <string name="timer_done" msgid="2375990511982914051">"完成"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"停止所有計時器"</string>
     <string name="timer_reset" msgid="7848424809190171640">"重設"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"取消"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"已取消計時器"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"時間到"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> 個計時器到期"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"計時器"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"最多只能建立 4 個計時器"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"暫停"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"重設所有計時器"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"您簡直就像閃電俠。"</item>
     <item msgid="6332879039890727169">"盡情享受辛勞過後的果實。"</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"城市"</string>
     <string name="clock_settings" msgid="8317286807280600391">"時鐘"</string>
     <string name="clock_style" msgid="2265011060429742344">"樣式"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"變更日期和時間"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"類比"</item>
     <item msgid="8483930821046925592">"數位"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"已勾選<xliff:g id="CITY_NAME">%s</xliff:g>"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"已取消勾選<xliff:g id="CITY_NAME">%s</xliff:g>"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"馬歇爾群島"</item>
     <item msgid="4196408495909011020">"中途島"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"雅加達"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"鬧鐘"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"使用碼表服務執行通知功能。"</string>
-    <string name="swn_stopped" msgid="783124901663086172">"已停止"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"處理計時器通知所指定的操作。"</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"處理碼錶通知所指定的操作。"</string>
+    <string name="swn_paused" msgid="6364358842808263589">"已暫停"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"向右滑動可關閉鈴響"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"向左滑動可延後鈴響"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"向左滑動可延後鈴響,向右滑動可關閉鈴響"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"計時器"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"計時器鈴聲"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"計時器已停止"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> 個計時器已停止"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"計時器已暫停"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> 個計時器已暫停"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"輕觸即可查看您的計時器"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> 個計時器"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"下一個計時器:<xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"沒有設定鬧鐘"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"未設定鬧鐘"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"沒有預定的鬧鐘"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm (a)"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE h:mm (a)"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"<xliff:g id="INVALID_AMPM">%s</xliff:g> <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> 是無效的時間"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"目前沒有鬧鐘設在 <xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"未設定鬧鐘"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"未指定任何標籤"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"沒有任何鬧鐘包含指定標籤"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"碼錶已在執行中"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"碼錶目前未啟動"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"碼錶正在執行中,因此無法重設"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"碼錶停止計時"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"已暫停碼錶"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"碼錶已重設"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"碼錶已記錄單圈時間"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"碼錶開始計時"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"目前沒有鬧鐘設在這個時間"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"已關閉 <xliff:g id="ALARM_TIME">%s</xliff:g> 的鬧鐘"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"已設定鬧鐘時間:<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"未設定計時器"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"已刪除計時器"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"計時器已在執行中"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"無法完成要求,目前有多個相符的計時器"</string>
-    <string name="timer_started" msgid="6715582052946641641">"已啟動計時器"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"沒有任何計時器"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"有多個計時器存在"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"已移除計時器。"</string>
     <string name="timer_created" msgid="4381027137335885547">"已建立計時器"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"計時器時間長度無效"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"已重設計時器"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"計時器仍在執行中,因此無法重設。停止計時器後才可重設。"</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"計時器先前已停止"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"已刪除計時器"</string>
+    <string name="timer_started" msgid="6715582052946641641">"已啟動計時器"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"計時器時間長度無效"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"未選取任何城市"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"資料庫中沒有您指定的城市"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"先前已新增該城市"</string>
diff --git a/res/values-zu/array.xml b/res/values-zu/array.xml
index 0ad29ad..e373b62 100644
--- a/res/values-zu/array.xml
+++ b/res/values-zu/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -69,7 +69,7 @@
     <item msgid="7872196528637597794">"F<xliff:g id="SEPARATOR">=</xliff:g>I-Fortaleza"</item>
     <item msgid="5801558418916235541">"G<xliff:g id="SEPARATOR">=</xliff:g>I-Grand Turk"</item>
     <item msgid="2103759276235503048">"G<xliff:g id="SEPARATOR">=</xliff:g>I-Grenada"</item>
-    <item msgid="1490069759176391533">"G<xliff:g id="SEPARATOR">=</xliff:g>I-Guatemala"</item>
+    <item msgid="6216160110733510854">"G<xliff:g id="SEPARATOR">=</xliff:g>Guatemala City"</item>
     <item msgid="525959305652046261">"G<xliff:g id="SEPARATOR">=</xliff:g>I-Guyana"</item>
     <item msgid="7565596629973190931">"H<xliff:g id="SEPARATOR">=</xliff:g>I-Halifax"</item>
     <item msgid="3811169155065582644">"H<xliff:g id="SEPARATOR">=</xliff:g>I-Havana"</item>
@@ -114,7 +114,7 @@
     <item msgid="3491199166042475853">"T<xliff:g id="SEPARATOR">=</xliff:g>I-Toronto"</item>
     <item msgid="1506838283840737263">"V<xliff:g id="SEPARATOR">=</xliff:g>I-Vancouver"</item>
     <item msgid="8935386104773857399">"W<xliff:g id="SEPARATOR">=</xliff:g>I-Winnipeg"</item>
-    <item msgid="1132634022412399582">"S<xliff:g id="SEPARATOR">=</xliff:g>I-South Pole"</item>
+    <item msgid="498429228419399474">"<xliff:g id="SEPARATOR">=</xliff:g>I-South Pole<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="4076962667198039206">"L<xliff:g id="SEPARATOR">=</xliff:g>I-Longyearbyen"</item>
     <item msgid="3784788073896028355">"A<xliff:g id="SEPARATOR">=</xliff:g>I-Almaty"</item>
     <item msgid="7895695236056852523">"A<xliff:g id="SEPARATOR">=</xliff:g>I-Amman"</item>
@@ -132,7 +132,7 @@
     <item msgid="1203379132329159260">"G<xliff:g id="SEPARATOR">=</xliff:g>I-Gaza"</item>
     <item msgid="2359068282340162319">"H<xliff:g id="SEPARATOR">=</xliff:g>I-Hebron"</item>
     <item msgid="6223396610551759129">"H<xliff:g id="SEPARATOR">=</xliff:g>I-Ho Chi Minh"</item>
-    <item msgid="4731022818651322736">"H<xliff:g id="SEPARATOR">=</xliff:g>I-Hong Kong"</item>
+    <item msgid="3439764751788710130">"<xliff:g id="SEPARATOR">=</xliff:g>I-Hong Kong<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8104778702069607166">"I<xliff:g id="SEPARATOR">=</xliff:g>I-Istanbul"</item>
     <item msgid="758800913783999425">"J<xliff:g id="SEPARATOR">=</xliff:g>I-Jakarta"</item>
     <item msgid="8956406398692698126">"J<xliff:g id="SEPARATOR">=</xliff:g>I-Jerusalem"</item>
@@ -145,18 +145,18 @@
     <item msgid="722458682107911739">"M<xliff:g id="SEPARATOR">=</xliff:g>I-Manila"</item>
     <item msgid="6033964325069060422">"M<xliff:g id="SEPARATOR">=</xliff:g>I-Muscat"</item>
     <item msgid="6077458941399984780">"P<xliff:g id="SEPARATOR">=</xliff:g>I-Phnom Penh"</item>
-    <item msgid="935474308903572975">"P<xliff:g id="SEPARATOR">=</xliff:g>I-Pyongyang"</item>
+    <item msgid="1245515372520913197">"<xliff:g id="SEPARATOR">=</xliff:g>I-Pyongyang<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5336632319992664889">"Q<xliff:g id="SEPARATOR">=</xliff:g>I-Qatar"</item>
     <item msgid="1667243110545095146">"R<xliff:g id="SEPARATOR">=</xliff:g>I-Rangoon"</item>
     <item msgid="4460370766685855731">"R<xliff:g id="SEPARATOR">=</xliff:g>I-Riyadh"</item>
     <item msgid="4229224905931739201">"S<xliff:g id="SEPARATOR">=</xliff:g>I-Saigon"</item>
     <item msgid="8705359848250215620">"S<xliff:g id="SEPARATOR">=</xliff:g>I-Seoul"</item>
-    <item msgid="583367295371395814">"S<xliff:g id="SEPARATOR">=</xliff:g>I-Shanghai"</item>
+    <item msgid="3814881931186962624">"<xliff:g id="SEPARATOR">=</xliff:g>I-Shanghai<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1422156732794771136">"S<xliff:g id="SEPARATOR">=</xliff:g>I-Singapore"</item>
-    <item msgid="1972491729911039207">"T<xliff:g id="SEPARATOR">=</xliff:g>I-Taipei"</item>
+    <item msgid="8982451946156859368">"<xliff:g id="SEPARATOR">=</xliff:g>I-Taipei<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="5563193560935461106">"T<xliff:g id="SEPARATOR">=</xliff:g>I-Caracas"</item>
     <item msgid="8629402941285674273">"T<xliff:g id="SEPARATOR">=</xliff:g>I-Tel Aviv"</item>
-    <item msgid="8499164674454654525">"T<xliff:g id="SEPARATOR">=</xliff:g>I-Tokyo"</item>
+    <item msgid="76330681636547168">"<xliff:g id="SEPARATOR">=</xliff:g>I-Tokyo<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1705804745888992744">"U<xliff:g id="SEPARATOR">=</xliff:g>I-Ulaanbaatar"</item>
     <item msgid="2028626988021468640">"B<xliff:g id="SEPARATOR">=</xliff:g>I-Bermuda"</item>
     <item msgid="4527109966513690429">"C<xliff:g id="SEPARATOR">=</xliff:g>I-Canary"</item>
@@ -273,10 +273,10 @@
     <item msgid="150299708499753555">"R<xliff:g id="SEPARATOR">=</xliff:g>I-Reno"</item>
     <item msgid="9155068631060038769">"B<xliff:g id="SEPARATOR">=</xliff:g>I-Black Rock City"</item>
     <item msgid="8498761319928979900">"D<xliff:g id="SEPARATOR">=</xliff:g>I-Doha"</item>
-    <item msgid="8307897251088048641">"B<xliff:g id="SEPARATOR">=</xliff:g>I-Beijing"</item>
+    <item msgid="5327010922199714808">"<xliff:g id="SEPARATOR">=</xliff:g>I-Beijing<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="8605970953750147428">"M<xliff:g id="SEPARATOR">=</xliff:g>I-Mumbai"</item>
     <item msgid="6668274273067049125">"D<xliff:g id="SEPARATOR">=</xliff:g>I-Delhi"</item>
-    <item msgid="2933410189478233292">"O<xliff:g id="SEPARATOR">=</xliff:g>I-Osaka"</item>
+    <item msgid="7199039603593847813">"<xliff:g id="SEPARATOR">=</xliff:g>I-Osaka<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="9011026093638055579">"L<xliff:g id="SEPARATOR">=</xliff:g>I-Lahore"</item>
     <item msgid="1448378291805481500">"S<xliff:g id="SEPARATOR">=</xliff:g>I-Sana\'a"</item>
     <item msgid="5233119846682408301">"B<xliff:g id="SEPARATOR">=</xliff:g>I-Barcelona"</item>
@@ -295,7 +295,7 @@
     <item msgid="6393177386755796069">"C<xliff:g id="SEPARATOR">=</xliff:g>I-Cambridge"</item>
     <item msgid="759409010285366934">"K<xliff:g id="SEPARATOR">=</xliff:g>I-Kirkland"</item>
     <item msgid="6308007059287569663">"M<xliff:g id="SEPARATOR">=</xliff:g>I-Madison"</item>
-    <item msgid="6971636434858330021">"G<xliff:g id="SEPARATOR">=</xliff:g>I-Guangzhou"</item>
+    <item msgid="2077617905582224600">"<xliff:g id="SEPARATOR">=</xliff:g>I-Guangzhou<xliff:g id="PHONETIC">:</xliff:g>"</item>
     <item msgid="1185109514180068650">"H<xliff:g id="SEPARATOR">=</xliff:g>I-Hyderabad"</item>
     <item msgid="3032295682584784261">"R<xliff:g id="SEPARATOR">=</xliff:g>I-Reston"</item>
     <item msgid="7722837296297332268">"B<xliff:g id="SEPARATOR">=</xliff:g>I-Belo Horizonte"</item>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 44d90df..e88bf40 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -28,12 +28,15 @@
     <string name="show_clock" msgid="8358759982675616915">"Bonisa iwashi"</string>
     <string name="hide_clock" msgid="3217727306480505694">"Fihla iwashi"</string>
     <string name="label" msgid="162189613902857319">"Ilebula"</string>
+    <string name="on_switch" msgid="2297966258029227449">"Vuliwe"</string>
+    <string name="off_switch" msgid="3381070073851148013">"Valiwe"</string>
     <string name="default_label" msgid="5590025289805630372">"I-alamu"</string>
     <string name="set_alarm" msgid="9148359866152726808">"Setha i-alamu"</string>
     <string name="alarm_vibrate" msgid="3476686921490362230">"Dlidliza"</string>
     <string name="alarm_repeat" msgid="7242985466344233206">"Phindaphinda"</string>
     <string name="alert" msgid="6506982899651975645">"Ithoni yokukhala ye-alamu"</string>
-    <string name="custom_ringtone" msgid="3477418548382111184">"Ithoni yokukhala yangokwezifiso"</string>
+    <string name="default_timer_ringtone_title" msgid="1370799536406862317">"Isibali sikhathi siphelelwe yisikhathi"</string>
+    <string name="silent_timer_ringtone_title" msgid="7588723137323327647">"Thulile"</string>
     <string name="ringtone" msgid="9110746249688559579">"Ithoni yokukhala"</string>
     <string name="time" msgid="8067216534232296518">"Isikhathi"</string>
     <string name="alarm_tomorrow" msgid="131356848787643420">"Kusasa"</string>
@@ -58,12 +61,12 @@
     <string name="alarm_alert_snooze_until" msgid="6958013659168344550">"Snuza kuze kube ngu-<xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="alarm_alert_predismiss_title" msgid="5723945586913705445">"I-Alamu ezayo"</string>
     <string name="missed_alarm_has_been_deleted" msgid="5295473204045979335">"I-Alamu yakho ekuphuthele isusiwe"</string>
-  <string-array name="timer_notifications">
-    <item msgid="7760558912503484257">"Ngaphansi kweminithi okusele"</item>
-    <item msgid="83197792732433351">"<xliff:g id="HOURS">%1$s</xliff:g> asele"</item>
-    <item msgid="8919698220200894252">"<xliff:g id="MINUTES">%2$s</xliff:g> asele"</item>
-    <item msgid="8458069283817013813">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> asele"</item>
-  </string-array>
+    <string name="timer_notifications_less_min" msgid="5481375048976427255">"Ngaphansi kweminithi okusele"</string>
+    <string name="timer_notifications_hours" msgid="1613266446037145138">"<xliff:g id="HOURS">%1$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_minutes" msgid="8543138714519498893">"<xliff:g id="MINUTES">%2$s</xliff:g><xliff:g id="REMAINING"> %3$s</xliff:g>"</string>
+    <string name="timer_notifications_hours_minutes" msgid="4301167788642025702">"<xliff:g id="HOURS">%1$s</xliff:g> <xliff:g id="MINUTES">%2$s</xliff:g> asele"</string>
+    <string name="timer_remaining_single" msgid="6782851171906765864">"asele"</string>
+    <string name="timer_remaining_multiple" msgid="6052775962092160851">"asele"</string>
   <string-array name="alarm_set">
     <item msgid="6450913786084215050">"I-alamu isethelwe iminithi elingaphansi ku-1 kusukela manje."</item>
     <item msgid="6002066367368421848">"I-alamu isethelwe <xliff:g id="DAYS">%1$s</xliff:g> ukusuka manje."</item>
@@ -101,6 +104,10 @@
       <item quantity="one">amaminithi</item>
       <item quantity="other">amaminithi</item>
     </plurals>
+    <string name="crescendo_duration_title" msgid="8606408542726189528">"Khuphula kancane kancane ivolumu"</string>
+    <string name="no_crescendo_duration" msgid="383801592865899932">"Valiwe"</string>
+    <string name="crescendo_duration" msgid="6641284876778266541">"<xliff:g id="NUMBER">%s</xliff:g> amasekhondi"</string>
+    <string name="crescendo_picker_label" msgid="7758024047003091056">"amasekhondi"</string>
     <string name="auto_silence_title" msgid="2012754009554434544">"Ukuthula ngemuva"</string>
     <plurals name="auto_silence_summary" formatted="false" msgid="6579258788774360396">
       <item quantity="one"><xliff:g id="FORMATTED_NUMBER">%s</xliff:g> amaminithi</item>
@@ -126,7 +133,8 @@
     <string name="revert" msgid="9100911171235162926">"Buyela emuva"</string>
     <string name="delete" msgid="5732434972457000541">"Susa"</string>
     <string name="alarm_volume_title" msgid="8506245173912428522">"Ivolumu ye-alamu"</string>
-    <string name="silent_alarm_summary" msgid="8605302849408279221">"Thulile"</string>
+    <string name="silent_ringtone_title" msgid="6177287302898634765">"Thulile"</string>
+    <string name="unknown_ringtone_title" msgid="6637522029614550112">"Akwaziwa"</string>
     <string name="alarm_notify_text" msgid="4891014685945904766">"Misa okwesikhashana  noma cima i-alamu."</string>
     <string name="alarm_notify_snooze_label" msgid="5404083762646377829">"<xliff:g id="LABEL">%s</xliff:g> (snuziwe)"</string>
     <string name="alarm_notify_snooze_text" msgid="4819324081410990368">"I-alamu isethelwe <xliff:g id="TIME">%s</xliff:g>. Thinta ukukhansela."</string>
@@ -151,8 +159,6 @@
     <string name="loading_ringtone" msgid="6523322777415268044">"Ilayisha iringithoni..."</string>
     <string name="timer_ring_service_desc" msgid="2620214305660322415">"Isevisi yokudlala umsindo yezikhathi ezisethwe kwiwashi."</string>
     <string name="control_set_alarm" msgid="2194676418924016327">"Setha i-alamu"</string>
-    <!-- no translation found for control_set_alarm_with_existing (3359285346655630660) -->
-    <skip />
     <string name="menu_alarm" msgid="4772010125376647519">"I-Alamu"</string>
     <string name="menu_timer" msgid="6459070074762877114">"Isikali sesikhathi"</string>
     <string name="menu_clock" msgid="5612760670606829805">"Iwashi"</string>
@@ -167,10 +173,10 @@
     <string name="menu_item_sort_by_name" msgid="1762931290495104106">"Hlunga ngegama"</string>
     <string name="selected_cities_label" msgid="3607479399424246605">"Amadolobha akhethiwe"</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_start_button" msgid="8373422516681242270">"Qala"</string>
+    <string name="sw_pause_button" msgid="2422084453454138042">"Misa okwesikhashana"</string>
+    <string name="sw_lap_button" msgid="6992264696039004233">"Ilephu"</string>
     <string name="sw_share_button" msgid="4478648110382859382">"Yabelana"</string>
     <string name="hours_label" msgid="3393478155635368097">"h"</string>
     <string name="minutes_label" msgid="3568098128251438588">"m"</string>
@@ -182,10 +188,6 @@
     <string name="sw_share_main" msgid="7703563468204234405">"Isikhathi sami ngu-<xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="sw_share_laps" msgid="614390674795945007">"Ukuhluka kwezikhathi:"</string>
     <string name="sw_notification_lap_number" msgid="3535420316052647126">"Xhapha <xliff:g id="NUMBER">%d</xliff:g>"</string>
-  <string-array name="sw_lap_number_set">
-    <item msgid="2816627565030953899">"# <xliff:g id="NUMBER">%d</xliff:g>"</item>
-    <item msgid="316923361931627987">"# <xliff:g id="NUMBER">%02d</xliff:g>"</item>
-  </string-array>
     <plurals name="Nhours_description" formatted="false" msgid="4539186407746763655">
       <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g> amahora</item>
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> amahora</item>
@@ -205,12 +207,16 @@
     <string name="timer_plus_one" msgid="6631211310420106116">"Engeza 1 imininithi"</string>
     <string name="timer_plus_1_min" msgid="8645224089494875062">"Engeza iminithi elingu-1"</string>
     <string name="timer_stop" msgid="3361154678667736722">"Misa"</string>
-    <string name="timer_done" msgid="2375990511982914051">"Kwenziwe"</string>
+    <string name="timer_stop_all" msgid="9080780442843034376">"Misa zonke izibali-sikhathi"</string>
     <string name="timer_reset" msgid="7848424809190171640">"Setha kabusha"</string>
     <string name="timer_cancel" msgid="3572868404230815644">"Khansela"</string>
+    <string name="timer_canceled" msgid="7327923392567128060">"Isikhathi sikhanseliwe"</string>
     <string name="timer_times_up" msgid="9190440395938519009">"Isikhathi siphelile"</string>
+    <string name="timer_multi_times_up" msgid="1239104626836080409">"<xliff:g id="NUM_TIMERS">%d</xliff:g> izibali-skhathi ziphelelwe isikhathi"</string>
     <string name="timer_notification_label" msgid="4933184831583137249">"Isikali sesikhathi"</string>
     <string name="timers_max_count_reached" msgid="9140022846793903813">"4 ubukhulu bezibali sikhathi"</string>
+    <string name="timer_pause" msgid="3748323712728398743">"Misa isikhashana"</string>
+    <string name="timer_reset_all" msgid="7530633132757866087">"Setha kabusha zonke izibali sikhathi"</string>
   <string-array name="sw_share_strings">
     <item msgid="842841032273927988">"Ulidimoni elisheshayo."</item>
     <item msgid="6332879039890727169">"Thokozela izithelo zomsebenzi wakho."</item>
@@ -227,6 +233,7 @@
     <string name="cities_activity_title" msgid="8552462751129256730">"Amadolobha"</string>
     <string name="clock_settings" msgid="8317286807280600391">"Iwashi"</string>
     <string name="clock_style" msgid="2265011060429742344">"Isitayela"</string>
+    <string name="open_date_settings" msgid="5915966847691221307">"Guqula idethi nesikhathi"</string>
   <string-array name="clock_style_entries">
     <item msgid="917900462224167608">"I-Analog"</item>
     <item msgid="8483930821046925592">"Idijithali"</item>
@@ -241,6 +248,8 @@
     <string name="time_picker_ampm_label" msgid="6754113715199751083">"--"</string>
     <string name="time_picker_00_label" msgid="6001006474735281911">":00"</string>
     <string name="time_picker_30_label" msgid="1027250857384838129">":30"</string>
+    <string name="city_checked" msgid="616847871968019">"<xliff:g id="CITY_NAME">%s</xliff:g> kungeniwe"</string>
+    <string name="city_unchecked" msgid="710212932781145918">"<xliff:g id="CITY_NAME">%s</xliff:g> phumile"</string>
   <string-array name="timezone_labels">
     <item msgid="5495601234086197399">"esase-Marshall Islands"</item>
     <item msgid="4196408495909011020">"esase-Midway Island"</item>
@@ -329,13 +338,17 @@
     <item msgid="5176858645450908751">"I-Jakarta"</item>
   </string-array>
     <string name="alarm_settings" msgid="2947147071388290814">"Ama-alamu"</string>
-    <string name="stopwatch_service_desc" msgid="8416624630388063996">"Isevisi yewashi lokumisa izoqalisa isaziso."</string>
-    <string name="swn_stopped" msgid="783124901663086172">"Imisiwe"</string>
+    <string name="timer_service_desc" msgid="2256002649882602433">"Icubungula izenzo kusuka kuzaziso zesibalisikhathi."</string>
+    <string name="stopwatch_service_desc" msgid="9220132827343760767">"Icubungula izenzo kusuka kuzaziso zewashi lokubala."</string>
+    <string name="swn_paused" msgid="6364358842808263589">"Kumiswe okwesikhashana"</string>
     <string name="description_direction_right" msgid="5709209043267548985">"Swayipha ngakwesokudla ukuze ucashise"</string>
     <string name="description_direction_left" msgid="7448141043674998679">"Swayipha ngakwesokunxele ukuze usnuze"</string>
     <string name="description_direction_both" msgid="1841309486023845685">"Swayiphela ngakwesokunxele ukuze usnuze noma ngakwesokudla ukuze ucashise"</string>
+    <string name="timer_settings" msgid="7955522143086154795">"Izibali sikhathi"</string>
+    <string name="timer_ringtone_title" msgid="7630214935791599619">"Ithoni yokukhala yesibali-sikhathi"</string>
     <string name="timer_stopped" msgid="2730331837832462008">"Isikhathi simisiwe"</string>
-    <string name="timers_stopped" msgid="2393640808691864520">"<xliff:g id="NUMBER">%d</xliff:g> izikhathi ezimisiwe"</string>
+    <string name="timer_paused" msgid="5941160896040771462">"Isibali sikhathi simiswe isikhashana"</string>
+    <string name="timers_stopped" msgid="3186191253226005149">"<xliff:g id="NUMBER">%d</xliff:g> izibali sikhathi ezimiswe isikhashana"</string>
     <string name="all_timers_stopped_notif" msgid="278532320068394600">"Thinta ukuze ubone izikhathi zakho"</string>
     <string name="timers_in_use" msgid="5570729467344408506">"<xliff:g id="NUMBER">%d</xliff:g> izikhathi"</string>
     <string name="next_timer_notif" msgid="6136454740115613653">"Isikhathi esilandelayo: <xliff:g id="TIME_REMAINING">%s</xliff:g>"</string>
@@ -361,35 +374,27 @@
     <string name="no_alarms" msgid="6429431324842022917">"Awekho ama-alamu"</string>
     <string name="no_alarms_set" msgid="4887558279496044764">"Awekho ama-alamu asethiwe"</string>
     <string name="no_upcoming_alarms" msgid="2889840988069436254">"AWEKHO AMA-ALAMU EZAYO"</string>
-    <string name="time_format_12_mode" msgid="1619464909892545536">"h:mm a"</string>
-    <string name="time_format_24_mode" msgid="7998512313148074539">"k:mm"</string>
-    <string name="weekday_time_format_12_mode" msgid="8648842975829470646">"EEE, h:mm a"</string>
-    <string name="weekday_time_format_24_mode" msgid="152964494051478631">"EEE, k:mm"</string>
     <string name="invalid_time" msgid="2782334750243998633">"Isikhathi esingavumelekile <xliff:g id="INVALID_HOUR">%d</xliff:g>:<xliff:g id="INVALID_MINUTES">%d</xliff:g> <xliff:g id="INVALID_AMPM">%s</xliff:g>"</string>
     <string name="no_alarm_at" msgid="8140632482969193119">"Ayikho i-alamu ngo-<xliff:g id="ALARM_TIME_HOUR">%d</xliff:g>:<xliff:g id="ALARM_TIME_MINUTES">%d</xliff:g>"</string>
     <string name="no_scheduled_alarms" msgid="2115420148192753534">"Awekho ama-alamu ashejuliwe"</string>
     <string name="no_label_specified" msgid="2008482054428460626">"Ayikho ilebula ecacisiwe"</string>
     <string name="no_alarms_with_label" msgid="6250998794542941665">"Awekho ama-alamu aqukethe ilebula"</string>
-    <string name="stopwatch_already_running" msgid="6598258908106423672">"Isitopuwashi sesivele siqalisiwe"</string>
     <string name="stopwatch_isnt_running" msgid="7147219965448204727">"Isitopuwashi asiqaliswanga"</string>
-    <string name="stopwatch_cant_be_reset_because_is_running" msgid="5713134605500796186">"Isitophuwashi asikwazi ukusethwa kabusha ngoba siyagijima"</string>
-    <string name="stopwatch_stopped" msgid="6927081018816192999">"Isitophuwashi simisiwe"</string>
+    <string name="stopwatch_paused" msgid="2187615623275408601">"Iwashi elimiswayo limiswe isikhashana"</string>
     <string name="stopwatch_reset" msgid="7585914953721021042">"Ukusetha kabusha isitophuwashi"</string>
     <string name="stopwatch_lapped" msgid="5844686448815550482">"Isitophuwashi seqiswe ilephu"</string>
     <string name="stopwatch_started" msgid="7843882246387176304">"Isitophuwashi siqalisiwe"</string>
     <string name="no_alarm_scheduled_for_this_time" msgid="4463069177414482818">"Ayikho i-alamu eshejulelwe lesi sikhathi"</string>
     <string name="alarm_is_dismissed" msgid="5509897230565826642">"<xliff:g id="ALARM_TIME">%s</xliff:g> i-alamu icashisiwe"</string>
     <string name="alarm_is_set" msgid="5503226382620011088">"I-alamu isethelwe u-<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="no_timer_set" msgid="3326365650863016606">"Asikho isibali sikhathi esisethiwe"</string>
-    <string name="timer_deleted" msgid="9110322362460029392">"Isibali sikhathi sisusiwe"</string>
-    <string name="timer_already_running" msgid="1259351124772803097">"Isibali sikhathi sesivele siqalisiwe"</string>
-    <string name="multiple_timers_available" msgid="6722110840279707462">"Ayikwazi ukuqedela isicelo sakho, izikhathi eziningi ziyatholakala"</string>
-    <string name="timer_started" msgid="6715582052946641641">"Isibali sikhathi siqalisiwe"</string>
+    <string name="no_timers_exist" msgid="7062019300048831373">"Azikho izibalizikhathi ezikhona"</string>
+    <string name="too_many_timers_exist" msgid="6339194231767431627">"Izibalizikhathi ezingaphezu kwesisodwa"</string>
+    <string name="timer_does_not_exist" msgid="4457482976523984231">"Isibalisikhathi sisusiwe."</string>
     <string name="timer_created" msgid="4381027137335885547">"Isibali sikhathi sidaliwe"</string>
-    <string name="invalid_timer_length" msgid="3104567893212932487">"Ubude besibali sikhathi obungavumelekile"</string>
     <string name="timer_was_reset" msgid="6495796785185062631">"Isibali sikhathi sisethwe kabusha"</string>
-    <string name="timer_cant_be_reset_because_its_running" msgid="7880015473706806640">"Isibali sikhathi asikwazi ukusethwa kabusha ngoba sisaqalisiwe. Misa isibali sikhathi ukuze usethe kabusha."</string>
-    <string name="timer_already_stopped" msgid="8865820275829449054">"Isibali sikhathi sesivele simisiwe"</string>
+    <string name="timer_deleted" msgid="9110322362460029392">"Isibali sikhathi sisusiwe"</string>
+    <string name="timer_started" msgid="6715582052946641641">"Isibali sikhathi siqalisiwe"</string>
+    <string name="invalid_timer_length" msgid="3104567893212932487">"Ubude besibali sikhathi obungavumelekile"</string>
     <string name="no_city_selected" msgid="1007596865203283741">"Alikho idolobha elikhethiwe"</string>
     <string name="the_city_you_specified_is_not_available" msgid="1753597460426454543">"Idolobha olicacisile alitholakali"</string>
     <string name="the_city_already_added" msgid="3799050213771793020">"Lelo dolobha selivele lingeziwe"</string>
diff --git a/res/values/animation_constants.xml b/res/values/animation_constants.xml
index 6931191..65123fe 100644
--- a/res/values/animation_constants.xml
+++ b/res/values/animation_constants.xml
@@ -15,21 +15,6 @@
   ~ limitations under the License
   -->
 <resources>
-    <!--
-    <integer name="activity_slide_left_duration">475</integer>
-    <integer name="activity_slide_right_duration">525</integer>
-    <integer name="activity_collapse_duration">125</integer>
-    <integer name="expand_cc_bcc_dur">150</integer>
-    <integer name="fadein_cc_bcc_dur">150</integer>
-
-    <integer name="dialog_animationDefaultDur">220</integer>
-    <integer name="dialog_animationShortDur">150</integer>
-    <integer name="shrink_animation_duration">350</integer>
-    <integer name="slide_animation_duration">320</integer>
-    <integer name="fade_in_animation_duration">350</integer>
-    -->
-    <integer name="fade_duration">250</integer>
-
     <!-- Swipe constants -->
     <integer name="swipe_escape_velocity">100</integer>
     <integer name="escape_animation_duration">200</integer>
diff --git a/res/values/array.xml b/res/values/array.xml
index 0cd358e..2898e15 100644
--- a/res/values/array.xml
+++ b/res/values/array.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-    Copyright (C) 2012 The Android Open Source Project
+    Copyright (C) 2015 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.
@@ -21,11 +21,16 @@
     The section header is the "index" of all the cities in the section. By default, the section
     header is the first character of the city name.
 
-    However, in some languages, cities are listed under an incorrect index.
+    Format of providing a city name:
+    <item>[index]<xliff:g id="separator">=</xliff:g>[city name]<xliff:g id="phonetic">:</xliff:g>[phonetic name]</item>
+
+    Index and phonetic name are optional.
+
+    In some languages, cities are listed under an incorrect index or sorted incorrectly within an
+    index.
 
     Should a city be listed under an incorrect index, the correct index can be manually specified
-    by adding an index to the translation string before the "=" placeholder:
-        <item>[index]<xliff:g id="separator">=</xliff:g>[city name]</item>
+    by adding an index to the translation string before the "=" placeholder.
 
         Ex. <item>A<xliff:g id="separator">=</xliff:g>Abidjan</item>
         Now Abidjan will be classified under the "A" index.
@@ -33,9 +38,12 @@
     Note that the separator "=" should NOT be localized. The index can be multi-character; it will
     consist of all specified characters before the "=" separator.
 
-    This will NOT change the sort order of the cities list. It will solve issues where a city is
-    mistakenly listed under its own index instead of being included in a section immediately
-    before or after its listing.
+    If a city is sorted incorrectly, provide a phonetic name for the city by adding
+    <xliff:g id="phonetic">:</xliff:g>[PHONETIC_NAME]. The city now will be sorted based on phonetic
+    name. The phonetic should use the alphabet that makes the most sense for the locale. For
+    example, Japanese city can use Katakana to provide phonetic name.
+
+    Providing index and/or phonetic name will change the sort order of the cities list.
     -->
 
     <string-array name="cities_names">
@@ -90,7 +98,7 @@
         <item>F<xliff:g id="separator">=</xliff:g>Fortaleza</item>
         <item>G<xliff:g id="separator">=</xliff:g>Grand Turk</item>
         <item>G<xliff:g id="separator">=</xliff:g>Grenada</item>
-        <item>G<xliff:g id="separator">=</xliff:g>Guatemala</item>
+        <item>G<xliff:g id="separator">=</xliff:g>Guatemala City</item>
         <item>G<xliff:g id="separator">=</xliff:g>Guyana</item>
         <item>H<xliff:g id="separator">=</xliff:g>Halifax</item>
         <item>H<xliff:g id="separator">=</xliff:g>Havana</item>
@@ -135,7 +143,7 @@
         <item>T<xliff:g id="separator">=</xliff:g>Toronto</item>
         <item>V<xliff:g id="separator">=</xliff:g>Vancouver</item>
         <item>W<xliff:g id="separator">=</xliff:g>Winnipeg</item>
-        <item>S<xliff:g id="separator">=</xliff:g>South Pole</item>
+        <item>S<xliff:g id="separator">=</xliff:g>South Pole<xliff:g id="phonetic">:</xliff:g></item>
         <item>L<xliff:g id="separator">=</xliff:g>Longyearbyen</item>
         <item>A<xliff:g id="separator">=</xliff:g>Almaty</item>
         <item>A<xliff:g id="separator">=</xliff:g>Amman</item>
@@ -153,7 +161,7 @@
         <item>G<xliff:g id="separator">=</xliff:g>Gaza</item>
         <item>H<xliff:g id="separator">=</xliff:g>Hebron</item>
         <item>H<xliff:g id="separator">=</xliff:g>Ho Chi Minh</item>
-        <item>H<xliff:g id="separator">=</xliff:g>Hong Kong</item>
+        <item>H<xliff:g id="separator">=</xliff:g>Hong Kong<xliff:g id="phonetic">:</xliff:g></item>
         <item>I<xliff:g id="separator">=</xliff:g>Istanbul</item>
         <item>J<xliff:g id="separator">=</xliff:g>Jakarta</item>
         <item>J<xliff:g id="separator">=</xliff:g>Jerusalem</item>
@@ -166,18 +174,18 @@
         <item>M<xliff:g id="separator">=</xliff:g>Manila</item>
         <item>M<xliff:g id="separator">=</xliff:g>Muscat</item>
         <item>P<xliff:g id="separator">=</xliff:g>Phnom Penh</item>
-        <item>P<xliff:g id="separator">=</xliff:g>Pyongyang</item>
+        <item>P<xliff:g id="separator">=</xliff:g>Pyongyang<xliff:g id="phonetic">:</xliff:g></item>
         <item>Q<xliff:g id="separator">=</xliff:g>Qatar</item>
         <item>R<xliff:g id="separator">=</xliff:g>Rangoon</item>
         <item>R<xliff:g id="separator">=</xliff:g>Riyadh</item>
         <item>S<xliff:g id="separator">=</xliff:g>Saigon</item>
         <item>S<xliff:g id="separator">=</xliff:g>Seoul</item>
-        <item>S<xliff:g id="separator">=</xliff:g>Shanghai</item>
+        <item>S<xliff:g id="separator">=</xliff:g>Shanghai<xliff:g id="phonetic">:</xliff:g></item>
         <item>S<xliff:g id="separator">=</xliff:g>Singapore</item>
-        <item>T<xliff:g id="separator">=</xliff:g>Taipei</item>
+        <item>T<xliff:g id="separator">=</xliff:g>Taipei<xliff:g id="phonetic">:</xliff:g></item>
         <item>T<xliff:g id="separator">=</xliff:g>Tehran</item>
         <item>T<xliff:g id="separator">=</xliff:g>Tel Aviv</item>
-        <item>T<xliff:g id="separator">=</xliff:g>Tokyo</item>
+        <item>T<xliff:g id="separator">=</xliff:g>Tokyo<xliff:g id="phonetic">:</xliff:g></item>
         <item>U<xliff:g id="separator">=</xliff:g>Ulaanbaatar</item>
         <item>B<xliff:g id="separator">=</xliff:g>Bermuda</item>
         <item>C<xliff:g id="separator">=</xliff:g>Canary</item>
@@ -294,10 +302,10 @@
         <item>R<xliff:g id="separator">=</xliff:g>Reno</item>
         <item>B<xliff:g id="separator">=</xliff:g>Black Rock City</item>
         <item>D<xliff:g id="separator">=</xliff:g>Doha</item>
-        <item>B<xliff:g id="separator">=</xliff:g>Beijing</item>
+        <item>B<xliff:g id="separator">=</xliff:g>Beijing<xliff:g id="phonetic">:</xliff:g></item>
         <item>M<xliff:g id="separator">=</xliff:g>Mumbai</item>
         <item>D<xliff:g id="separator">=</xliff:g>Delhi</item>
-        <item>O<xliff:g id="separator">=</xliff:g>Osaka</item>
+        <item>O<xliff:g id="separator">=</xliff:g>Osaka<xliff:g id="phonetic">:</xliff:g></item>
         <item>L<xliff:g id="separator">=</xliff:g>Lahore</item>
         <item>S<xliff:g id="separator">=</xliff:g>Sana\'a</item>
         <item>B<xliff:g id="separator">=</xliff:g>Barcelona</item>
@@ -316,7 +324,7 @@
         <item>C<xliff:g id="separator">=</xliff:g>Cambridge</item>
         <item>K<xliff:g id="separator">=</xliff:g>Kirkland</item>
         <item>M<xliff:g id="separator">=</xliff:g>Madison</item>
-        <item>G<xliff:g id="separator">=</xliff:g>Guangzhou</item>
+        <item>G<xliff:g id="separator">=</xliff:g>Guangzhou<xliff:g id="phonetic">:</xliff:g></item>
         <item>H<xliff:g id="separator">=</xliff:g>Hyderabad</item>
         <item>R<xliff:g id="separator">=</xliff:g>Reston</item>
         <item>B<xliff:g id="separator">=</xliff:g>Belo Horizonte</item>
@@ -696,7 +704,7 @@
         <item>C49</item>
         <item>C50</item>
         <item>C51</item>
-        <item>C0</item>
+        <item>C52</item>
         <item>C53</item>
         <item>C54</item>
         <item>C55</item>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 355a218..c1b5eac 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -56,4 +56,6 @@
     <color name="notification_pressed">#333333</color>
     <color name="notification_divider">#272727</color>
 
+    <!-- shadowColor for digital widget text -->
+    <color name="digital_widget_shadow_color">#DD000000</color>
 </resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index 9884671..855923d 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -1,25 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2011, 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.
-*/
+<!-- Copyright (C) 2011 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.
 -->
 
 <!-- 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">
+<resources>
     <bool name="config_requiresScreenSaver">true</bool>
     <bool name="config_dockAppEnabled">true</bool>
     <bool name="config_rotateAlarmAlert">false</bool>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 1d919b3..4184cbc 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -21,12 +21,13 @@
      for different hardware and product builds. -->
 <resources>
     <dimen name="label_text_size">14sp</dimen>
+    <dimen name="label_edittext_padding">21dp</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_top">32dip</dimen>
-    <dimen name="timer_padding_left">16dip</dimen>
+    <dimen name="timer_padding">16dp</dimen>
     <dimen name="timer_list_padding_bottom">88dip</dimen>
     <!-- 88dip + 0.5 of footer_button_size -->
     <dimen name="timer_cancel_end_margin">116dip</dimen>
@@ -52,12 +53,10 @@
     <dimen name="actionbar_title_font_size">18sp</dimen>
 
     <dimen name="footer_button_size">56dip</dimen>
-    <dimen name="footer_button_layout_margin">16dip</dimen>
 
     <dimen name="alarm_text_padding">15dp</dimen>
     <dimen name="alarm_text_font_size">16sp</dimen>
     <dimen name="alarm_min_distance">2dp</dimen>
-    <dimen name="alarm_undo_bar_horizontal_margin">8dp</dimen>
     <dimen name="circletimer_dot_size">12dip</dimen>
     <dimen name="circletimer_circle_size">4dip</dimen>
     <dimen name="circletimer_marker_size">16dip</dimen>
@@ -67,13 +66,15 @@
     <dimen name="alarm_lockscreen_pulse_radius">128dp</dimen>
     <dimen name="alarm_lockscreen_bottom_margin">40dp</dimen>
 
+    <dimen name="main_clock_font_size">70sp</dimen>
     <dimen name="big_font_size">60sp</dimen>
     <dimen name="medium_font_size">56sp</dimen>
     <dimen name="small_font_size">32sp</dimen>
     <dimen name="label_font_size">16sp</dimen>
     <!-- Use dp on purpose to ensure consistency across multiple screen sizes. -->
     <dimen name="widget_label_font_size">14dp</dimen>
-    <dimen name="main_ampm_font_size">32sp</dimen>
+    <item name="ampm_font_size_scale" type="fraction">50%</item>
+    <item name="reduced_clock_font_size_scale" type="fraction">65%</item>
     <dimen name="header_font_size">24sp</dimen>
     <dimen name="body_font_size">18sp</dimen>
     <dimen name="day_button_font_size">18sp</dimen>
@@ -106,7 +107,7 @@
     <dimen name="dialpad_font_size">36sp</dimen>
     <!--padding should be (in dip) ~ 60% dialpad_font_size -->
     <dimen name="dialpad_digit_padding">22dip</dimen>
-    <dimen name="timer_setup_font_size">56sp</dimen>
+    <dimen name="timer_setup_font_size">38sp</dimen>
     <dimen name="timer_setup_button_size">24sp</dimen>
     <!--margin should be ~ half timer_setup_font_size -->
     <dimen name="timer_setup_delete_start_margin">28sp</dimen>
@@ -119,11 +120,13 @@
     <dimen name="circle_margin_top">16dp</dimen>
     <dimen name="circle_margin">32dp</dimen>
     <dimen name="analog_clock_margin">60dp</dimen>
-    <dimen name="timer_circle_margin">32dp</dimen>
 
     <dimen name="circle_size">280dp</dimen>
-    <!-- stopwatch_list_bottom_spacing = footer_button_size + footer_button_layout_margin -->
-    <dimen name="stopwatch_list_bottom_spacing">72dip</dimen>
+    <!--
+        list_bottom_spacing = footer_button_size + footer_button_layout_margin.
+        Used by both StopwatchFragment and AlarmFragment.
+    -->
+    <dimen name="list_bottom_spacing">72dip</dimen>
 
     <dimen name="sw_padding_end">32dp</dimen>
 
@@ -133,6 +136,8 @@
     <dimen name="notification_text_size">14dp</dimen>
     <!-- Size of notification text titles (see TextAppearance.StatusBar.EventContent.Title) -->
     <dimen name="notification_title_text_size">18dp</dimen>
+    <!-- Size of margin between icon and text / title text. -->
+    <dimen name="notification_content_margin_start">8dp</dimen>
 
     <!-- Width of the clock, for use with alarm buttons. -->
     <dimen name="alarm_alert_display_width">304dip</dimen>
@@ -143,14 +148,10 @@
     <dimen name="world_clock_analog_size">100dip</dimen>
     <dimen name="world_clock_margin">32dp</dimen>
 
-    <dimen name="toast_bar_bottom_margin_in_conversation">24dip</dimen>
-
     <!-- Height of the button footers. 56 height and 16 on top and bottom. -->
     <dimen name="button_footer_height">88dip</dimen>
     <!-- Negative value of the height of the button footers, for use with lightsout. -->
     <dimen name="button_footer_height_neg">-48dip</dimen>
-    <!-- Height of space between timers. -->
-    <dimen name="timer_divider_height">24dip</dimen>
 
     <!-- Digital Widget settings (keyguard|home_screen) -->
     <!-- Clock and world clock sizes -->
@@ -163,9 +164,13 @@
     <dimen name="widget_big_time_margin_right">10dip</dimen>
     <dimen name="widget_medium_time_margin_right">5dip</dimen>
 
+    <dimen name="min_analog_widget_size">110dp</dimen>
+
     <!-- width/height of layout/digital_widget_time -->
     <dimen name="min_digital_widget_width">206dip</dimen>
+    <dimen name="min_digital_widget_resize_width">136dip</dimen>
     <dimen name="min_digital_widget_height">129dip</dimen>
+    <dimen name="min_digital_widget_resize_height">59dip</dimen>
 
     <!-- sum of scaled heights -->
     <dimen name="digital_widget_list_min_scaled_height">162dp</dimen>
@@ -175,12 +180,19 @@
     <dimen name="digital_widget_list_margin_top">20dp</dimen>
     <dimen name="digital_widget_city_margin_bottom">10dp</dimen>
 
+    <!-- shadow styles for digital widget text -->
+    <item name="digital_widget_shadow_radius" format="float" type="dimen">2.75</item>
+    <item name="digital_widget_shadow_dy" format="float" type="dimen">2.0</item>
+
     <!-- Bottom margin for the expand area -->
     <dimen name="collapse_expand_height">72dip</dimen>
 
     <!-- Divider height -->
     <dimen name="hairline_height">1dip</dimen>
 
+    <!-- Divider side padding -->
+    <dimen name="hairline_side_padding">6dp</dimen>
+
     <!-- The minimum height/width of any touch target -->
     <dimen name="touch_target_min_size">48dip</dimen>
 
@@ -190,4 +202,19 @@
     <dimen name="fastscroll_preview_padding">8dp</dimen>
     <dimen name="fastscroll_track_width">8dp</dimen>
 
+    <!-- Dimens for drawable padding on Alarms tab -->
+    <dimen name="alarm_horizontal_padding">16dp</dimen>
+
+    <!-- Dimens for icon padding on Alarms tab -->
+    <dimen name="icon_margin">4dp</dimen>
+
+    <!-- Dimens for taller rows on Alarms tab -->
+    <dimen name="tall_row_height">58dp</dimen>
+
+    <!-- Floating action button style -->
+    <dimen name="fab_margin">0dp</dimen>
+    <dimen name="fab_elevation">8dp</dimen>
+
+    <!-- Height of the bar containing the floating action button -->
+    <dimen name="fab_height">88dp</dimen>
 </resources>
diff --git a/res/values/donottranslate.xml b/res/values/donottranslate.xml
index eec8127..ce3808d 100644
--- a/res/values/donottranslate.xml
+++ b/res/values/donottranslate.xml
@@ -14,11 +14,15 @@
      limitations under the License.
 -->
 
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+<resources>
     <!-- String matching the lock screen format for displaying the date. -->
     <string name="abbrev_wday_month_day_no_year">EEEMMMMd</string>
+    <!-- Abbreviated format for describing the date. -->
+    <string name="abbrev_wday_abbrev_month_day_no_year">EEEMMMd</string>
     <!-- Format for describing the date, for accessibility. -->
     <string name="full_wday_month_day_no_year">EEEEMMMMd</string>
     <!-- Default clock style. -->
     <string name="default_clock_style">digital</string>
+    <!-- Behavior that coordinates LinearLayout and snackbar inside a CoordinatorLayout-->
+    <string name="linear_layout_with_snackbar_behavior">com.android.deskclock.widget.toast.LinearLayoutWithSnackbarBehavior</string>
 </resources>
diff --git a/res/values/donottranslate_events.xml b/res/values/donottranslate_events.xml
index 40ba2d4..3caaa00 100644
--- a/res/values/donottranslate_events.xml
+++ b/res/values/donottranslate_events.xml
@@ -22,20 +22,27 @@
 
     <!-- Action names for events describe what type of manipulation was performed. -->
     <string name="action_dismiss">Dismiss</string>
+    <string name="action_hide">Hide</string>
     <string name="action_snooze">Snooze</string>
     <string name="action_create">Create</string>
+    <string name="action_add">Add</string>
     <string name="action_delete">Delete</string>
     <string name="action_update">Update</string>
     <string name="action_start">Start</string>
     <string name="action_stop">Stop</string>
+    <string name="action_pause">Pause</string>
     <string name="action_fire">Fire</string>
     <string name="action_reset">Reset</string>
     <string name="action_show">Show</string>
     <string name="action_add_minute">Add Minute</string>
+    <string name="action_resume">Resume</string>
     <string name="action_lap">Lap</string>
 
     <!-- Label names for events describe the entity responsible for the event. -->
     <string name="label_deskclock">DeskClock</string>
     <string name="label_notification">Notification</string>
     <string name="label_intent">Intent</string>
+    <string name="label_widget">Widget</string>
+    <string name="label_hardware_button">HardwareButton</string>
+    <string name="label_reboot">Reboot</string>
 </resources>
diff --git a/res/values/drawables.xml b/res/values/drawables.xml
new file mode 100644
index 0000000..7dc82c3
--- /dev/null
+++ b/res/values/drawables.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <item name="ic_alarm_small" type="drawable">@drawable/ic_alarm_small_18dp</item>
+</resources>
\ No newline at end of file
diff --git a/res/values/ids.xml b/res/values/ids.xml
index fe91eeb..f31a5e4 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -15,5 +15,7 @@
 -->
 
 <resources>
-    <item type="id" name="numbers_key" />
+    <item name="numbers_key" type="id" />
+    <item name="request_code_ringtone" type="id" />
+    <item name="request_permission_code_external_storage" type="id" />
 </resources>
diff --git a/res/layout/stopwatch_spacer.xml b/res/values/integers.xml
similarity index 71%
copy from res/layout/stopwatch_spacer.xml
copy to res/values/integers.xml
index 31b648b..76565ba 100644
--- a/res/layout/stopwatch_spacer.xml
+++ b/res/values/integers.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!-- Copyright (C) 2015 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.
@@ -14,7 +14,6 @@
      limitations under the License.
 -->
 
-<Space
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/stopwatch_list_bottom_spacing" />
+<resources>
+    <integer name="chevron_rotate_180">180</integer>
+</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4f2814d..5f18d1d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -54,6 +54,12 @@
     <!-- Setting label on Set alarm screen: Label -->
     <string name="label">Label</string>
 
+    <!-- Content description for alarm on/off switch in On state -->
+    <string name="on_switch">On</string>
+
+    <!-- Content description for alarm on/off switch in Off state -->
+    <string name="off_switch">Off</string>
+
     <!-- Default label to display for an alarm -->
     <string name="default_label">Alarm</string>
 
@@ -70,8 +76,11 @@
     <!-- Setting labels on Set alarm screen: Select alarm ringtone  -->
     <string name="alert">Alarm Ringtone</string>
 
-    <!-- Label on expanded alarm edit view indicating the ringtone is custom. -->
-    <string name="custom_ringtone">Custom Ringtone</string>
+    <!-- Title of default ringtone played when a timer expires. -->
+    <string name="default_timer_ringtone_title">Timer Expired</string>
+
+    <!-- Title of silent ringtone played when a timer expires. -->
+    <string name="silent_timer_ringtone_title">Silent</string>
 
     <!-- Label on expanded alarm edit view. -->
     <string name="ringtone">Ringtone</string>
@@ -159,15 +168,23 @@
     --><skip />
 
     <!-- Timer notification: how long from now until timer goes off. -->
-    <string-array name="timer_notifications">
-        <item>Less than a minute remaining</item>
-        <item><xliff:g id="HOURS" example="2 hours">%1$s</xliff:g> remaining</item>
-        <item><xliff:g id="MINUTES" example="2 minutes">%2$s</xliff:g> remaining</item>
-        <item><xliff:g id="HOURS" example="2 hours">%1$s</xliff:g> <xliff:g id="MINUTES" example="2 minutes">%2$s</xliff:g> remaining</item>
-    </string-array>
+    <string name="timer_notifications_less_min">Less than a minute remaining</string>
+    <string name="timer_notifications_hours"><xliff:g id="HOURS" example="2 hours">%1$s</xliff:g><xliff:g id="REMAINING" example="remaining"> %3$s</xliff:g></string>
+    <string name="timer_notifications_minutes"><xliff:g id="MINUTES" example="2 minutes">%2$s</xliff:g><xliff:g id="REMAINING" example="remaining"> %3$s</xliff:g></string>
+    <string name="timer_notifications_hours_minutes"><xliff:g id="HOURS" example="2 hours">%1$s</xliff:g> <xliff:g id="MINUTES" example="2 minutes">%2$s</xliff:g> remaining</string>
 
-    <!-- Alarm confirmation toast: Describes how long from now until
-         alarm fires -->
+    <!--
+        Verb inflection to use for single time units remaining
+        Ex. "1 minute remaining"
+    -->
+    <string name="timer_remaining_single">remaining</string>
+    <!--
+        Verb inflection to use for multiple time units remaining
+        Ex. "2 minutes remaining"
+    -->
+    <string name="timer_remaining_multiple">remaining</string>
+
+    <!-- Alarm confirmation toast: Describes how long from now until alarm fires -->
     <string-array name="alarm_set">
         <item>Alarm set for less than 1 minute from now.</item>
         <item>Alarm set for <xliff:g id="DAYS" example="2 days">%1$s</xliff:g> from now.</item>
@@ -244,6 +261,18 @@
         <item quantity="other">minutes</item>
     </plurals>
 
+    <!-- Setting title for changing the crescendo duration. -->
+    <string name="crescendo_duration_title">Gradually increase volume</string>
+
+    <!-- Summary value for changing the crescendo duration to 0. -->
+    <string name="no_crescendo_duration">Off</string>
+
+    <!-- Summary value for changing the crescendo duration. -->
+    <string name="crescendo_duration"><xliff:g id="number" example="7">%s</xliff:g> seconds</string>
+
+    <!-- Setting label when changing the crescendo duration. -->
+    <string name="crescendo_picker_label">seconds</string>
+
     <!-- Auto silence preference title -->
     <string name="auto_silence_title">Silence after</string>
 
@@ -312,8 +341,11 @@
     <!-- Setting title for changing the alarm volume. -->
     <string name="alarm_volume_title">Alarm volume</string>
 
-    <!-- Summary for the alarm preference when silent is chosen. -->
-    <string name="silent_alarm_summary">Silent</string>
+    <!-- Title for the silent ringtone. -->
+    <string name="silent_ringtone_title">Silent</string>
+
+    <!-- Title for ringtones that cannot be located by uri. -->
+    <string name="unknown_ringtone_title">Unknown</string>
 
     <!-- Text to display in the small text of the notification -->
     <string name="alarm_notify_text">Snooze or dismiss alarm.</string>
@@ -380,9 +412,6 @@
     <!-- Label on the main screen control used to set alarm [CHAR LIMIT=30]-->
     <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"><xliff:g id="time">%s</xliff:g></string>
-
     <!--  ActionBar strings -->
     <!-- Describes the purpose of the tab button which which switches the activity to the Alarm page -->
     <string name="menu_alarm">Alarm</string>
@@ -414,17 +443,24 @@
     <!-- Label for selected cities in Cities list view -->
     <string name="selected_cities_label">Selected Cities</string>
 
-    <!-- Stop Watch strings -->
-    <!-- Describes the purpose of the button to resume running a stopwatch -->
+    <!-- Stopwatch and Timer shared strings -->
+    <!-- Describes the purpose of the button to resume running timer. [CHAR LIMIT=15] -->
     <string name="sw_resume_button">Resume</string>
+    <!--
+        Describes the purpose of the button
+            for stopwatch: return stopwatch to zero and remove the lap times.
+            for timer: return timer to originally set duration.
+        [CHAR LIMIT=15]
+    -->
+    <string name="sw_reset_button">Reset</string>
+
+    <!-- Stopwatch strings -->
     <!-- Describes the purpose of the button to begin running a stopwatch -->
     <string name="sw_start_button">Start</string>
     <!-- Describes the purpose of the button to pause a stopwatch. -->
-    <string name="sw_stop_button">Stop</string>
-    <!-- Describes the purpose of the button to record current the stopwatch value into the4 collection of lap times. -->
+    <string name="sw_pause_button">Pause</string>
+    <!-- Describes the purpose of the button to record current the stopwatch value into the collection of lap times. -->
     <string name="sw_lap_button">Lap</string>
-    <!-- Describes the purpose of the button to return the stopwatch to zero and remove the lap times. -->
-    <string name="sw_reset_button">Reset</string>
     <!-- Describes the purpose of the button to share the stopwatch value.
          Also used as title for chooser when sharing stopwatch results. -->
     <string name="sw_share_button">Share</string>
@@ -449,49 +485,6 @@
     <string name="sw_share_laps">Lap times:</string>
     <!-- Label to enumerate the number of laps in the notification the user has counted -->
     <string name="sw_notification_lap_number">Lap <xliff:g id="number">%d</xliff:g></string>
-    <!-- Formatted stopwatch time -->
-    <string-array name="stopwatch_format_set" translatable="false">
-        <item> <!-- <10 minutes - example "1 02.03" -->
-            <xliff:g id="M">%2$d</xliff:g> &#x200E;<xliff:g id="S">%3$02d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g><xliff:g id="D">%4$02d</xliff:g>
-        </item>
-        <item> <!-- <1 hour - example "12 03.04" -->
-            <xliff:g id="M">%2$02d</xliff:g> &#x200E;<xliff:g id="S">%3$02d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g><xliff:g id="D">%4$02d</xliff:g>
-        </item>
-        <item> <!-- <10 hours - example "1 02 03.04" -->
-            <xliff:g id="H">%1$d</xliff:g> &#x200E;<xliff:g id="M">%2$02d</xliff:g> &#x200E;<xliff:g id="S">%3$02d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g><xliff:g id="D">%4$02d</xliff:g>
-        </item>
-        <item> <!-- <100 hours - example "12 03 04.05" -->
-            <xliff:g id="H">%1$02d</xliff:g> &#x200E;<xliff:g id="M">%2$02d</xliff:g> &#x200E;<xliff:g id="S">%3$02d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g><xliff:g id="D">%4$02d</xliff:g>
-        </item>
-        <item> <!-- <1000 hours - example "123 04 05.06" -->
-            <xliff:g id="H">%1$03d</xliff:g> &#x200E;<xliff:g id="M">%2$02d</xliff:g> &#x200E;<xliff:g id="S">%3$02d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g><xliff:g id="D">%4$02d</xliff:g>
-        </item>
-    </string-array>
-
-    <!-- Formatted stopwatch time for laps shared using the share button -->
-    <string-array name="shared_laps_format_set" translatable="false">
-        <item> <!-- <10 minutes - example "1 02.03" -->
-            <xliff:g id="lap">%6$d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g> &#x200E;<xliff:g id="M">%2$d</xliff:g> &#x200E;<xliff:g id="S">%3$02d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g><xliff:g id="D">%4$02d</xliff:g>
-        </item>
-        <item> <!-- <1 hour - example "12 03.04" -->
-            <xliff:g id="lap">%6$d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g> &#x200E;<xliff:g id="M">%2$02d</xliff:g> &#x200E;<xliff:g id="S">%3$02d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g><xliff:g id="D">%4$02d</xliff:g>
-        </item>
-        <item> <!-- <10 hours - example "1 02 03.04" -->
-            <xliff:g id="lap">%6$d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g> &#x200E;<xliff:g id="H">%1$d</xliff:g> &#x200E;<xliff:g id="M">%2$02d</xliff:g> &#x200E;<xliff:g id="S">%3$02d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g><xliff:g id="D">%4$02d</xliff:g>
-        </item>
-        <item> <!-- <100 hours - example "12 03 04.05" -->
-            <xliff:g id="lap">%6$d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g> &#x200E;<xliff:g id="H">%1$02d</xliff:g> &#x200E;<xliff:g id="M">%2$02d</xliff:g> &#x200E;<xliff:g id="S">%3$02d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g><xliff:g id="D">%4$02d</xliff:g>
-        </item>
-        <item> <!-- <1000 hours - example "123 04 05.06" -->
-            <xliff:g id="lap">%6$d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g> &#x200E;<xliff:g id="H">%1$03d</xliff:g> &#x200E;<xliff:g id="M">%2$02d</xliff:g> &#x200E;<xliff:g id="S">%3$02d</xliff:g><xliff:g id="decimal_separator">%5$c</xliff:g><xliff:g id="D">%4$02d</xliff:g>
-        </item>
-    </string-array>
-
-    <!-- Label to enumerate the number of laps the user has counted -->
-    <string-array name="sw_lap_number_set" translatable="true">
-        <item># <xliff:g id="number">%d</xliff:g></item>
-        <item># <xliff:g id="number">%02d</xliff:g></item>
-    </string-array>
 
     <!-- Stopwatch accessibility strings -->
     <plurals name="Nhours_description">
@@ -528,18 +521,29 @@
     <string name="timer_plus_1_min">Add 1 min</string>
     <!-- Describes the purpose of the button to stop the timer. -->
     <string name="timer_stop">Stop</string>
-    <!-- Describes the purpose of the button to stop and delete the timer. -->
-    <string name="timer_done">Done</string>
+    <!-- Describes the purpose of the button to stop all currently firing timers. [CHAR LIMIT=25] -->
+    <string name="timer_stop_all">Stop all timers</string>
     <!-- Describes the purpose of the button to return the timer to it's original starting value. -->
     <string name="timer_reset">Reset</string>
     <!-- Describes the purpose of the button to discard the current dialog values. Will also close the dialog if other time's exist -->
     <string name="timer_cancel">Cancel</string>
+    <!-- Accessibility announcement when a timer is canceled. -->
+    <string name="timer_canceled">Timer canceled</string>
     <!-- Notification content shown when a timer has completed and has no more time remaining -->
     <string name="timer_times_up">Time\'s up</string>
+    <!--
+        Notification content shown when multiple timers have completed and have no more time
+        remaining. Arg is the number of timers. [CHAR LIMIT=25]
+    -->
+    <string name="timer_multi_times_up"><xliff:g id="NUM_TIMERS" example="2">%d</xliff:g> timers expired</string>
     <!-- Label associated with a notification for a Timer -->
     <string name="timer_notification_label">Timer</string>
     <!-- Toast content shown when user attempts to create a new timer when there are already 4 timers -->
     <string name="timers_max_count_reached">4 timers maximum</string>
+    <!-- Describes the purpose of the notification button to pause the timer. [CHAR LIMIT=15] -->
+    <string name="timer_pause">Pause</string>
+    <!-- Describes the purpose of the notification button to reset all running timers. [CHAR LIMIT=31] -->
+    <string name="timer_reset_all">Reset all timers</string>
 
     <!-- Jocular content that user may append when sharing the lap times -->
     <string-array name="sw_share_strings" translatable="true">
@@ -566,6 +570,9 @@
     <!-- Header for a Clock Dream Setting referring to choosing analog or digital style -->
     <string name="clock_style">Style</string>
 
+    <!-- Title for preference to change date & time -->
+    <string name="open_date_settings">Change Date \u0026 time</string>
+
     <!-- Entries listed in the ListPreference when invoking the clock style
          preference. -->
     <string-array name="clock_style_entries">
@@ -580,7 +587,7 @@
       <item>digital</item>
     </string-array>
 
-    <!-- Title for an option that will automtically show a clock representing the user's regular timezone on the main fragment whenever the user leaves their regular timezone-->
+    <!-- Title for an option that will automatically show a clock representing the user's regular timezone on the main fragment whenever the user leaves their regular timezone-->
     <string name="automatic_home_clock">Automatic home clock</string>
     <!-- Describes the functionality provided by the automatic_home_clock option -->
     <string name="automatic_home_clock_summary">While traveling in an area where the time is different, add a clock for home</string>
@@ -601,6 +608,17 @@
     <!-- add 30 as minutes to the time when pressing this button -->
     <string name="time_picker_30_label">:30</string>
 
+    <!--
+        Accessibility string read when a city checkbox is checked.
+        Ex. "Ann Arbor checked"
+    -->
+    <string name="city_checked"><xliff:g id="city_name">%s</xliff:g> checked</string>
+    <!--
+        Accessibility string read when a city checkbox is unchecked.
+        Ex. "Ann Arbor unchecked"
+    -->
+    <string name="city_unchecked"><xliff:g id="city_name">%s</xliff:g> unchecked</string>
+
     <!-- Choices for timezones, must be kept in sync with timezone_values. CHAR LIMIT=25] -->
     <string-array name="timezone_labels">
         <item>"Marshall Islands"</item>
@@ -780,13 +798,14 @@
         <item>"Asia/Jakarta"</item>
     </string-array>
 
-     <!-- Header in the preferences settings for the section pertaining to alarms -->
-     <string name="alarm_settings">Alarms</string>
-     <string name="desk_clock_help_url" translatable="false"></string>
-     <!-- Describes the running service for the stopwatch -->
-     <string name="stopwatch_service_desc">Stopwatch service to run the notification.</string>
-     <!-- Desription for the stopped stop watch -->
-     <string name="swn_stopped">Stopped</string>
+    <!-- Header in the preferences settings for the section pertaining to alarms -->
+    <string name="alarm_settings">Alarms</string>
+    <!-- Describes the service that processes actions originating from timer notifications. -->
+    <string name="timer_service_desc">Processes actions from timer notifications.</string>
+    <!-- Describes the service that processes actions originating from stopwatch notifications. -->
+    <string name="stopwatch_service_desc">Processes actions from stopwatch notifications.</string>
+    <!-- Description for the paused stop watch -->
+    <string name="swn_paused">Paused</string>
 
     <!-- Text instruction for dismiss alarm on alarm lock screen. The dismiss button will still
          be on the right even on RTL languages so please do not reverse this during
@@ -801,11 +820,19 @@
          translation. -->
     <string name="description_direction_both">Swipe left to snooze or right to dismiss</string>
 
-    <!-- Notification title when timer is stopped. -->
+    <!-- Header in the preferences settings for the section pertaining to timers. -->
+    <string name="timer_settings">Timers</string>
+    <!-- Description for timer ringtone setting. -->
+    <string name="timer_ringtone_title">Timer ringtone</string>
+
+    <!-- Description when timer is stopped. -->
     <string name="timer_stopped">Timer stopped</string>
-    <!-- Notification title when multiple timers are stopped. -->
-    <string name="timers_stopped"><xliff:g id="number" example="7">%d</xliff:g> timers stopped</string>
-    <!-- Notification text when multiple timers are stopped. -->
+
+    <!-- Notification title when timer is paused. [CHAR LIMIT=25] -->
+    <string name="timer_paused">Timer paused</string>
+    <!-- Notification title when multiple timers are paused. [CHAR LIMIT = 30] -->
+    <string name="timers_stopped"><xliff:g id="number" example="7">%d</xliff:g> timers paused</string>
+    <!-- Notification text when multiple timers are paused. -->
     <string name="all_timers_stopped_notif">Touch to see your timers</string>
     <!-- Notification title when at least one timer, of those in use, is counting down. -->
     <string name="timers_in_use"><xliff:g id="number" example="7">%d</xliff:g> timers</string>
@@ -839,7 +866,7 @@
     <!-- Displays the number of alarms selected from the list of alarms. -->
     <string name="alarms_selected"><xliff:g id="alarms">%d</xliff:g> selected</string>
 
-    <!-- message used by the talkback accessebility app to say that something was deleted -->
+    <!-- message used by the talkback accessibility app to say that something was deleted -->
     <string name="deleted_message">Deleted</string>
 
     <!-- Alarm deletion confirmation message-->
@@ -880,42 +907,6 @@
     <!-- String for no enabled alarms in timeline view [CHAR LIMIT=30] -->
     <string name="no_upcoming_alarms">NO UPCOMING ALARMS</string>
 
-    <!--
-        String that represents time format for 12-hour time.
-        h represents hour in range (1-12) with the minimum number of digits
-        mm represents minute with leading 0 in case of values < 10
-        a represents am/pm
-        Ex: h:mm a = 12:54 am, 8:05 pm
-    -->
-    <string name="time_format_12_mode">h&#58;mm a</string>
-
-    <!--
-        String that represents time format for 24-hour time.
-        k represents hour in range (0-23) with the minimum number of digits
-        mm represents minute with leading 0 in case of values < 10
-        Ex: k:mm = 13:51, 5:05
-    -->
-    <string name="time_format_24_mode">k&#58;mm</string>
-
-    <!--
-        String that represents weekday, time format for 12-hour time.
-        EEE represents weekday name in short form (ex. Mon, Tue, Wed)
-        h represents hour in range (1-12) with the minimum number of digits
-        mm represents minute with leading 0 in case of values < 10
-        a represents am/pm
-        Ex: EEE, h:mm a = Mon, 2:55 pm
-    -->
-    <string name="weekday_time_format_12_mode">EEE, h&#58;mm a</string>
-
-    <!--
-        String that represents weekday, time format for 24-hour time.
-        EEE represents weekday name in short form (ex. Mon, Tue, Wed)
-        k represents hour in range (0-23) with the minimum number of digits
-        mm represents minute with leading 0 in case of values < 10
-        Ex: EEE, k:mm = Mon, 2:55
-    -->
-    <string name="weekday_time_format_24_mode">EEE, k&#58;mm</string>
-
     <!-- String that represents that invalid time for an alarm was specified, e.g. 23:00am
      or 27:68pm.
     First %d represents hour, second %d represents minutes, %s represents am/pm,
@@ -951,29 +942,17 @@
     -->
     <string name="no_alarms_with_label">No alarms contain the label</string>
 
-    <!-- String that represents that the user has sent a voice command 'start a stopwatch' when
-    the stopwatch was already running so the command wasn't executed.
-    [CHAR LIMIT=NONE]
-    -->
-    <string name="stopwatch_already_running">Stopwatch is already running</string>
-
     <!-- String that represents that the user has sent a voice command 'stop the stopwatch' or
     'lap the stopwatch' when the stopwatch wasn't running so the command wasn't executed.
     [CHAR LIMIT=NONE]
     -->
     <string name="stopwatch_isnt_running">Stopwatch isn\'t running</string>
 
-    <!-- String that represents that the user has sent a voice command 'reset the stopwatch' or
-     when the stopwatch was running so the command wasn't executed.
-    [CHAR LIMIT=NONE]
-    -->
-    <string name="stopwatch_cant_be_reset_because_is_running">Stopwatch cannot be reset because it is running</string>
-
-    <!-- String that represents that the user has successfully sent a voice command stopping
+    <!-- String that represents that the user has successfully sent a voice command pausing
      the stopwatch.
     [CHAR LIMIT=NONE]
     -->
-    <string name="stopwatch_stopped">Stopwatch stopped</string>
+    <string name="stopwatch_paused">Stopwatch paused</string>
 
     <!-- String that represents that the user has successfully sent a voice command resetting
     the stopwatch.
@@ -1012,62 +991,50 @@
     -->
     <string name="alarm_is_set">Alarm is set for <xliff:g id="alarm_time" example="14:20">%s</xliff:g></string>
 
-    <!-- String that represents that the user attempted to send a voice action 'delete a timer'
-    when there were no timers available.
+    <!-- String that represents that the user attempted to control a timer with a voice action when
+    no timers are defined.
     [CHAR LIMIT=NONE]
     -->
-    <string name="no_timer_set">No timer set</string>
+    <string name="no_timers_exist">No timers exist</string>
 
-    <!-- String that represents that the user has successfully deleted a timer through a voice action.
+    <!-- String that represents that the user attempted to control a timer with a voice action when
+    more than one timer is defined.
     [CHAR LIMIT=NONE]
     -->
-    <string name="timer_deleted">Timer deleted</string>
+    <string name="too_many_timers_exist">More than one timer exists</string>
 
-    <!-- String that represents that the user has attempted to start a timer when a timer was
-    already running.
+    <!-- String that represents that the user attempted to control a timer with a voice action but
+    the timer could not be located.
     [CHAR LIMIT=NONE]
     -->
-    <string name="timer_already_running">Timer already running</string>
-
-    <!-- String that represents that the user has attempted to start or reset a timer when
-     there were more than 1 timer of desired state in which case it's ambiguous
-     which timer the user meant.
-    [CHAR LIMIT=NONE]
-     -->
-    <string name="multiple_timers_available">Unable to complete your request, multiple timers available</string>
-
-    <!-- String that represents that the user has successfully started a timer through a voice action.
-    [CHAR LIMIT=NONE]
-    -->
-    <string name="timer_started">Timer started</string>
+    <string name="timer_does_not_exist">The timer has been removed.</string>
 
     <!-- String that represents that the user has successfully created a timer through a voice action.
     [CHAR LIMIT=NONE]
     -->
     <string name="timer_created">Timer created</string>
 
-    <!-- String that represents that the user attempted to start a timer through a voice action
-    but specified invalid length.
-    [CHAR LIMIT=NONE]
-    -->
-    <string name="invalid_timer_length">Invalid timer length</string>
-
     <!-- String that represents that the user has successfully reset a timer through a voice action.
     [CHAR LIMIT=NONE]
     -->
     <string name="timer_was_reset">Timer reset</string>
 
-    <!-- String that represents that the user attempted to reset a timer through a voice action but
-    the timer wasn't stopped (resetting is only allowed when a timer is stopped).
+    <!-- String that represents that the user has successfully reset a timer through a voice action
+    that was marked as deleteAfterUse and was thus deleted instead.
     [CHAR LIMIT=NONE]
     -->
-    <string name="timer_cant_be_reset_because_its_running">Timer can\'t be reset because it\'s still running. Stop timer to reset.</string>
+    <string name="timer_deleted">Timer deleted</string>
 
-    <!-- String that represents that the user attempted to stop a timer through a voice action but
-    the timer was already stopped (resetting is only allowed when a timer is stopped).
+    <!-- String that represents that the user has successfully started a timer through a voice action.
     [CHAR LIMIT=NONE]
     -->
-    <string name="timer_already_stopped">Timer already stopped</string>
+    <string name="timer_started">Timer started</string>
+
+    <!-- String that represents that the user attempted to start a timer through a voice action
+    but specified invalid length.
+    [CHAR LIMIT=NONE]
+    -->
+    <string name="invalid_timer_length">Invalid timer length</string>
 
     <!-- String that represents that the user attempted to add or delete a world clock through
     a voice action
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 3a5345b..d2ccdf6 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -23,9 +23,10 @@
     </style>
 
     <style name="BaseActivityTheme" parent="Theme.AppCompat">
-        <item name="android:imageButtonStyle">@style/ImageButtonStyle</item>
+        <item name="android:windowBackground">@color/default_background</item>
 
         <item name="alertDialogTheme">@style/AlertDialogTheme</item>
+        <item name="imageButtonStyle">@style/ImageButtonStyle</item>
         <item name="colorAccent">@color/color_accent</item>
         <item name="colorPrimaryDark">@color/status_bar</item>
         <item name="colorControlActivated">@color/white</item>
@@ -62,48 +63,18 @@
         <item name="android:textSize">16sp</item>
     </style>
 
-    <style name="DeskClock" parent="@style/BaseActivityTheme">
-        <item name="android:windowActionBarOverlay">true</item>
-        <item name="android:windowBackground">@color/default_background</item>
-
-        <!-- Attributes from support.v7.appcompat -->
-        <item name="actionBarStyle">@style/DeskClockActionBarStyle</item>
-        <item name="actionBarTabStyle">@style/DeskClockTabStyle</item>
-        <item name="actionBarTabBarStyle">@style/DeskClockTabBarStyle</item>
-    </style>
-
     <style name="DeskClockTabBaseStyle" parent="Widget.AppCompat.ActionBar.TabView">
         <item name="android:paddingLeft">@dimen/actionbar_tab_padding</item>
         <item name="android:paddingRight">@dimen/actionbar_tab_padding</item>
         <item name="android:gravity">center</item>
     </style>
 
-    <style name="DeskClockTabStyle" parent="DeskClockTabBaseStyle">
-        <item name="android:background">?attr/selectableItemBackgroundBorderless</item>
-    </style>
-
-    <style name="DeskClockTabBarStyle" parent="Widget.AppCompat.ActionBar.TabBar">
-        <item name="android:dividerPadding">12dp</item>
-        <item name="android:gravity">center</item>
-        <!-- Attributes from support.v7.appcompat -->
-        <item name="showDividers">none</item>
-    </style>
-
-    <style name="DeskClockActionBarStyle" parent="Widget.AppCompat.ActionBar">
-        <item name="android:background">@null</item>
-        <item name="android:backgroundStacked">@null</item>
-        <item name="android:backgroundSplit">@null</item>
-        <!--suppress CheckTagEmptyBody Empty displayOptions to hide app title at launch. -->
-        <item name="displayOptions"></item>
-    </style>
-
-    <style name="SettingsTheme" parent="BaseActivityTheme">
+    <style name="SettingsTheme" parent="TranslucentDecorActivityTheme">
         <item name="android:detailsElementBackground">@null</item>
-        <item name="android:windowActionBar">false</item>
-        <item name="android:windowNoTitle">true</item>
-
         <!-- Attributes from support.v7.appcompat -->
         <item name="actionBarStyle">@style/SettingsActionBarStyle</item>
+        <item name="windowActionBar">true</item>
+        <item name="windowNoTitle">false</item>
     </style>
 
     <style name="SettingsActionBarStyle" parent="@style/Widget.AppCompat.Toolbar">
@@ -113,14 +84,15 @@
         <item name="displayOptions">showTitle|homeAsUp</item>
     </style>
 
-    <style name="CitiesTheme" parent="BaseActivityTheme">
+    <style name="CitiesTheme" parent="TranslucentDecorActivityTheme">
         <item name="android:fastScrollPreviewBackgroundLeft">@drawable/fastscroll_preview</item>
         <item name="android:fastScrollPreviewBackgroundRight">@drawable/fastscroll_preview</item>
         <item name="android:fastScrollTextColor">@color/white</item>
         <item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb</item>
         <item name="android:fastScrollTrackDrawable">@drawable/fastscroll_track</item>
-
         <!-- Attributes from support.v7.appcompat -->
+        <item name="windowActionBar">true</item>
+        <item name="windowNoTitle">false</item>
         <item name="actionBarStyle">@style/CitiesActionBarStyle</item>
     </style>
 
@@ -131,16 +103,15 @@
         <item name="displayOptions">homeAsUp</item>
     </style>
 
-    <!-- variants: v21 -->
-    <style name="FabStyle" />
-
     <style name="AlarmAlertFullScreenTheme" parent="TranslucentDecorActivityTheme" />
 
-    <style name="TimerAlertFullScreenTheme" parent="TranslucentDecorActivityTheme" />
+    <style name="DeskClockTheme" parent="@style/TranslucentDecorActivityTheme" />
+
+    <style name="ExpiredTimersActivityTheme" parent="TranslucentDecorActivityTheme" />
 
     <style name="ScreensaverActivityTheme" parent="Theme.AppCompat.NoActionBar" />
 
-    <style name="ImageButtonStyle" parent="android:Widget.DeviceDefault.ImageButton">
+    <style name="ImageButtonStyle" parent="Widget.AppCompat.ImageButton">
         <item name="android:background">?attr/selectableItemBackgroundBorderless</item>
     </style>
 
@@ -193,6 +164,9 @@
     <style name="widget_medium_thin">
         <item name="android:textSize">@dimen/widget_medium_font_size</item>
         <item name="android:fontFamily">sans-serif-thin</item>
+        <item name="android:shadowRadius">@dimen/digital_widget_shadow_radius</item>
+        <item name="android:shadowColor">@color/digital_widget_shadow_color</item>
+        <item name="android:shadowDy">@dimen/digital_widget_shadow_dy</item>
     </style>
 
     <style name="label">
@@ -205,6 +179,9 @@
 
     <style name="widget_label" parent="label">
         <item name="android:textSize">@dimen/widget_label_font_size</item>
+        <item name="android:shadowRadius">@dimen/digital_widget_shadow_radius</item>
+        <item name="android:shadowColor">@color/digital_widget_shadow_color</item>
+        <item name="android:shadowDy">@dimen/digital_widget_shadow_dy</item>
     </style>
 
     <style name="header">
@@ -228,6 +205,9 @@
 
     <style name="widget_big_thin" parent="big_thin">
         <item name="android:textSize">@dimen/widget_big_font_size</item>
+        <item name="android:shadowRadius">@dimen/digital_widget_shadow_radius</item>
+        <item name="android:shadowColor">@color/digital_widget_shadow_color</item>
+        <item name="android:shadowDy">@dimen/digital_widget_shadow_dy</item>
     </style>
 
     <style name="alarm_label">
@@ -306,18 +286,4 @@
         <item name="android:textColor">@color/white</item>
     </style>
 
-    <style name="ToastBarStyle">
-        <item name="android:layout_width">match_parent</item>
-        <item name="android:layout_height">48dip</item>
-        <item name="android:layout_gravity">bottom</item>
-        <item name="android:layout_marginLeft">4dip</item>
-        <item name="android:layout_marginRight">4dip</item>
-        <item name="android:orientation">horizontal</item>
-        <item name="android:gravity">center_vertical</item>
-        <item name="android:background">@drawable/panel_undo_holo</item>
-        <item name="android:visibility">gone</item>
-        <item name="android:alpha">0</item>
-        <item name="android:clickable">true</item>
-    </style>
-
 </resources>
diff --git a/res/xml/analog_appwidget.xml b/res/xml/analog_appwidget.xml
index ec46019..e6f6144 100644
--- a/res/xml/analog_appwidget.xml
+++ b/res/xml/analog_appwidget.xml
@@ -15,10 +15,11 @@
 -->
 
 <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
-    android:minWidth="110dip"
-    android:minHeight="110dip"
-    android:updatePeriodMillis="0"
-    android:previewImage="@drawable/appwidget_analog_clock_preview"
     android:initialLayout="@layout/analog_appwidget"
-    >
-</appwidget-provider>
+    android:minHeight="@dimen/min_analog_widget_size"
+    android:minResizeHeight="55dp"
+    android:minResizeWidth="55dp"
+    android:minWidth="@dimen/min_analog_widget_size"
+    android:previewImage="@drawable/appwidget_analog_clock_preview"
+    android:resizeMode="horizontal|vertical"
+    android:updatePeriodMillis="0" />
diff --git a/res/xml/digital_appwidget.xml b/res/xml/digital_appwidget.xml
index 49d87fd..da28a88 100644
--- a/res/xml/digital_appwidget.xml
+++ b/res/xml/digital_appwidget.xml
@@ -17,12 +17,10 @@
 <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
     android:minWidth="@dimen/min_digital_widget_width"
     android:minHeight="@dimen/min_digital_widget_height"
-    android:minResizeWidth="@dimen/min_digital_widget_width"
-    android:minResizeHeight="@dimen/min_digital_widget_height"
+    android:minResizeWidth="@dimen/min_digital_widget_resize_width"
+    android:minResizeHeight="@dimen/min_digital_widget_resize_height"
     android:updatePeriodMillis="0"
     android:previewImage="@drawable/appwidget_digital_clock_preview"
     android:initialLayout="@layout/digital_appwidget"
     android:resizeMode="vertical|horizontal"
-    android:widgetCategory="keyguard|home_screen"
-    >
-</appwidget-provider>
+    android:widgetCategory="keyguard|home_screen" />
diff --git a/res/xml/dream_info.xml b/res/xml/dream_info.xml
index 2add99b..57508f3 100644
--- a/res/xml/dream_info.xml
+++ b/res/xml/dream_info.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <dream xmlns:android="http://schemas.android.com/apk/res/android"
-    android:settingsActivity="com.android.deskclock.ScreensaverSettingsActivity"
+    android:settingsActivity="com.android.deskclock.settings.ScreensaverSettingsActivity"
     />
diff --git a/res/xml/settings.xml b/res/xml/settings.xml
index 88cf3cd..37b416a 100644
--- a/res/xml/settings.xml
+++ b/res/xml/settings.xml
@@ -24,17 +24,23 @@
             android:entryValues="@array/clock_style_values"
             android:defaultValue="@string/default_clock_style"
             android:dialogTitle="@string/clock_style" />
-        <CheckBoxPreference
+
+        <SwitchPreference
             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" />
+
+        <Preference
+            android:key="date_time"
+            android:title="@string/open_date_settings" />
     </PreferenceCategory>
 
     <PreferenceCategory
@@ -47,7 +53,7 @@
             android:defaultValue="10"
             android:dialogTitle="@string/auto_silence_title" />
 
-       <com.android.deskclock.SnoozeLengthDialog
+       <com.android.deskclock.settings.SnoozeLengthDialog
             android:key="snooze_duration"
             android:title="@string/snooze_duration_title"
             android:defaultValue="10"/>
@@ -56,6 +62,11 @@
             android:key="volume_setting"
             android:title="@string/alarm_volume_title" />
 
+        <com.android.deskclock.settings.CrescendoLengthDialog
+            android:key="alarm_crescendo_duration"
+            android:title="@string/crescendo_duration_title"
+            android:defaultValue="0"/>
+
         <ListPreference
             android:key="volume_button_setting"
             android:title="@string/volume_button_setting_title"
@@ -71,4 +82,18 @@
             android:entries="@array/week_start_entries"
             android:entryValues="@array/week_start_values" />
     </PreferenceCategory>
+
+    <PreferenceCategory
+        android:title="@string/timer_settings">
+        <com.android.deskclock.settings.TimerRingtonePreference
+            android:key="timer_ringtone"
+            android:title="@string/timer_ringtone_title"
+            android:ringtoneType="alarm" />
+
+        <com.android.deskclock.settings.CrescendoLengthDialog
+            android:key="timer_crescendo_duration"
+            android:title="@string/crescendo_duration_title"
+            android:defaultValue="0"/>
+    </PreferenceCategory>
+
 </PreferenceScreen>
diff --git a/src/com/android/alarmclock/AnalogAppWidgetProvider.java b/src/com/android/alarmclock/AnalogAppWidgetProvider.java
index fdcd8f3..312b75e 100644
--- a/src/com/android/alarmclock/AnalogAppWidgetProvider.java
+++ b/src/com/android/alarmclock/AnalogAppWidgetProvider.java
@@ -16,7 +16,7 @@
 
 package com.android.alarmclock;
 
-import com.android.deskclock.DeskClock;
+import com.android.deskclock.HandleDeskClockApiCalls;
 import com.android.deskclock.R;
 
 import android.app.PendingIntent;
@@ -27,29 +27,24 @@
 import android.widget.RemoteViews;
 
 /**
- * Simple widget to show analog clock.
+ * Simple widget to show an analog clock.
  */
 public class AnalogAppWidgetProvider extends BroadcastReceiver {
-    static final String TAG = "AnalogAppWidgetProvider";
-
     @Override
     public void onReceive(Context context, Intent intent) {
-        String action = intent.getAction();
-
-        if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
-            RemoteViews views = new RemoteViews(context.getPackageName(),
-                    R.layout.analog_appwidget);
-
-            views.setOnClickPendingIntent(R.id.analog_appwidget,
-                    PendingIntent.getActivity(context, 0,
-                        new Intent(context, DeskClock.class), 0));
-
-            int[] appWidgetIds = intent.getIntArrayExtra(
-                    AppWidgetManager.EXTRA_APPWIDGET_IDS);
-
-            AppWidgetManager gm = AppWidgetManager.getInstance(context);
-            gm.updateAppWidget(appWidgetIds, views);
+        if (!AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(intent.getAction())) {
+            return;
         }
-    }
-}
 
+        final String packageName = context.getPackageName();
+        final RemoteViews views = new RemoteViews(packageName, R.layout.analog_appwidget);
+
+        final Intent showClock = new Intent(HandleDeskClockApiCalls.ACTION_SHOW_CLOCK)
+                .putExtra(HandleDeskClockApiCalls.EXTRA_FROM_WIDGET, true);
+        final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, showClock, 0);
+        views.setOnClickPendingIntent(R.id.analog_appwidget, pendingIntent);
+
+        final int[] appWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
+        AppWidgetManager.getInstance(context).updateAppWidget(appWidgetIds, views);
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/alarmclock/DigitalAppWidgetProvider.java b/src/com/android/alarmclock/DigitalAppWidgetProvider.java
index 7c78d71..5b22544 100644
--- a/src/com/android/alarmclock/DigitalAppWidgetProvider.java
+++ b/src/com/android/alarmclock/DigitalAppWidgetProvider.java
@@ -26,24 +26,25 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.text.TextUtils;
 import android.text.format.DateFormat;
 import android.util.Log;
+import android.util.TypedValue;
 import android.view.View;
 import android.widget.RemoteViews;
 
-import com.android.deskclock.DeskClock;
+import com.android.deskclock.HandleDeskClockApiCalls;
 import com.android.deskclock.R;
 import com.android.deskclock.Utils;
 import com.android.deskclock.alarms.AlarmStateManager;
-import com.android.deskclock.worldclock.Cities;
-import com.android.deskclock.worldclock.CitiesActivity;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.worldclock.CitySelectionActivity;
 
-import java.text.SimpleDateFormat;
 import java.util.Locale;
 
 public class DigitalAppWidgetProvider extends AppWidgetProvider {
-    private static final String TAG = "DigitalAppWidgetProvider";
+    private static final String TAG = "DigAppWidgetProvider";
 
     /**
      * Intent to be used for checking if a world clock's date has changed. Must be every fifteen
@@ -72,7 +73,7 @@
     }
 
     @Override
-    public void onReceive(Context context, Intent intent) {
+    public void onReceive(@NonNull Context context, @NonNull Intent intent) {
         String action = intent.getAction();
         if (DigitalAppWidgetService.LOGGING) {
             Log.i(TAG, "onReceive: " + action);
@@ -94,9 +95,10 @@
                     RemoteViews widget = new RemoteViews(context.getPackageName(),
                             R.layout.digital_appwidget);
                     float ratio = WidgetUtils.getScaleRatio(context, null, appWidgetId);
-                    WidgetUtils.setTimeFormat(context, widget, 0/*no am/pm*/, R.id.the_clock);
+                    WidgetUtils.setTimeFormat(context, widget, false /* showAmPm */,
+                            R.id.the_clock);
                     WidgetUtils.setClockSize(context, widget, ratio);
-                    refreshAlarm(context, widget);
+                    refreshAlarm(context, widget, ratio);
                     appWidgetManager.partiallyUpdateAppWidget(appWidgetId, widget);
                 }
             }
@@ -104,27 +106,15 @@
                 cancelAlarmOnQuarterHour(context);
             }
             startAlarmOnQuarterHour(context);
-        } else if (isNextAlarmChangedAction(action) || Intent.ACTION_SCREEN_ON.equals(action)) {
-            // Refresh the next alarm
+        } else if (isNextAlarmChangedAction(action)
+                || Intent.ACTION_SCREEN_ON.equals(action)
+                || DataModel.ACTION_DIGITAL_WIDGET_CHANGED.equals(action)) {
             AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
             if (appWidgetManager != null) {
                 int[] appWidgetIds = appWidgetManager.getAppWidgetIds(getComponentName(context));
                 for (int appWidgetId : appWidgetIds) {
-                    RemoteViews widget = new RemoteViews(context.getPackageName(),
-                            R.layout.digital_appwidget);
-                    refreshAlarm(context, widget);
-                    appWidgetManager.partiallyUpdateAppWidget(appWidgetId, widget);
-                }
-            }
-        } else if (Cities.WORLDCLOCK_UPDATE_INTENT.equals(action)) {
-            // Refresh the world cities list
-            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
-            if (appWidgetManager != null) {
-                int[] appWidgetIds = appWidgetManager.getAppWidgetIds(getComponentName(context));
-                for (int appWidgetId : appWidgetIds) {
-                    appWidgetManager.
-                            notifyAppWidgetViewDataChanged(appWidgetId,
-                                    R.id.digital_appwidget_listview);
+                    final float ratio = WidgetUtils.getScaleRatio(context, null, appWidgetId);
+                    updateClock(context, appWidgetManager, appWidgetId, ratio);
                 }
             }
         }
@@ -175,24 +165,18 @@
         if (newOptions != null &&
                 newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY, -1)
                 != AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD) {
-            widget.setOnClickPendingIntent(R.id.digital_appwidget,
-                    PendingIntent.getActivity(context, 0, new Intent(context, DeskClock.class), 0));
+            final Intent showClock = new Intent(HandleDeskClockApiCalls.ACTION_SHOW_CLOCK)
+                    .putExtra(HandleDeskClockApiCalls.EXTRA_FROM_WIDGET, true);
+            final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, showClock, 0);
+            widget.setOnClickPendingIntent(R.id.digital_appwidget, pendingIntent);
         }
 
-        // Setup alarm text clock's format and font sizes
-        refreshAlarm(context, widget);
-        WidgetUtils.setTimeFormat(context, widget, 0/*no am/pm*/, R.id.the_clock);
+        // Setup formats and font sizes
+        refreshDate(context, widget, ratio);
+        refreshAlarm(context, widget, ratio);
+        WidgetUtils.setTimeFormat(context, widget, false /* showAmPm */, R.id.the_clock);
         WidgetUtils.setClockSize(context, widget, ratio);
 
-        // Set today's date format
-        final CharSequence dateFormat = Utils.isJBMR2OrLater()
-                ? DateFormat.getBestDateTimePattern(Locale.getDefault(),
-                        context.getString(R.string.abbrev_wday_month_day_no_year))
-                : ((SimpleDateFormat) SimpleDateFormat.getDateInstance(SimpleDateFormat.SHORT))
-                        .toPattern();
-        widget.setCharSequence(R.id.date, "setFormat12Hour", dateFormat);
-        widget.setCharSequence(R.id.date, "setFormat24Hour", dateFormat);
-
         // Set up R.id.digital_appwidget_listview to use a remote views adapter
         // That remote views adapter connects to a RemoteViewsService through intent.
         final Intent intent = new Intent(context, DigitalAppWidgetService.class);
@@ -202,9 +186,9 @@
 
         // Set up the click on any world clock to start the Cities Activity
         //TODO: Should this be in the options guard above?
+        final Intent selectCitiesIntent = new Intent(context, CitySelectionActivity.class);
         widget.setPendingIntentTemplate(R.id.digital_appwidget_listview,
-                PendingIntent.
-                        getActivity(context, 0, new Intent(context, CitiesActivity.class), 0));
+                PendingIntent.getActivity(context, 0, selectCitiesIntent, 0));
 
         // Refresh the widget
         appWidgetManager.notifyAppWidgetViewDataChanged(
@@ -212,11 +196,48 @@
         appWidgetManager.updateAppWidget(appWidgetId, widget);
     }
 
-    protected void refreshAlarm(Context context, RemoteViews widget) {
+    private void refreshDate(Context context, RemoteViews widget, float ratio) {
+        if (ratio < 1) {
+            // The time text normally has a negative bottom margin to reduce the space between the
+            // time and the date. When we scale down they overlap, so give the date a positive
+            // top padding.
+            final float padding = (1 - ratio) *
+                    -context.getResources().getDimension(R.dimen.bottom_text_spacing_digital);
+            widget.setViewPadding(R.id.date_and_alarm, 0, (int) padding, 0, 0);
+        }
+
+        // Set today's date format
+        final Locale locale = Locale.getDefault();
+        final String skeleton = context.getString(R.string.abbrev_wday_abbrev_month_day_no_year);
+        final CharSequence timeFormat = DateFormat.getBestDateTimePattern(locale, skeleton);
+        widget.setCharSequence(R.id.date, "setFormat12Hour", timeFormat);
+        widget.setCharSequence(R.id.date, "setFormat24Hour", timeFormat);
+        final float fontSize = context.getResources().getDimension(R.dimen.widget_label_font_size);
+        widget.setTextViewTextSize(R.id.date, TypedValue.COMPLEX_UNIT_PX, fontSize * ratio);
+    }
+
+    protected void refreshAlarm(Context context, RemoteViews widget, float ratio) {
         final String nextAlarm = Utils.getNextAlarm(context);
         if (!TextUtils.isEmpty(nextAlarm)) {
-            widget.setTextViewText(R.id.nextAlarm,
-                    context.getString(R.string.control_set_alarm_with_existing, nextAlarm));
+            final float fontSize =
+                    context.getResources().getDimension(R.dimen.widget_label_font_size);
+            widget.setTextViewTextSize(
+                    R.id.nextAlarm, TypedValue.COMPLEX_UNIT_PX, fontSize * ratio);
+
+            int alarmDrawableResId;
+            if (ratio < .72f) {
+                alarmDrawableResId = R.drawable.ic_alarm_small_12dp;
+            }
+            else if (ratio < .95f) {
+                alarmDrawableResId = R.drawable.ic_alarm_small_18dp;
+            }
+            else {
+                alarmDrawableResId = R.drawable.ic_alarm_small_24dp;
+            }
+            widget.setTextViewCompoundDrawablesRelative(
+                    R.id.nextAlarm, alarmDrawableResId, 0, 0, 0);
+
+            widget.setTextViewText(R.id.nextAlarm, nextAlarm);
             widget.setViewVisibility(R.id.nextAlarm, View.VISIBLE);
             if (DigitalAppWidgetService.LOGGING) {
                 Log.v(TAG, "DigitalWidget sets next alarm string to " + nextAlarm);
@@ -237,15 +258,10 @@
      */
     private void startAlarmOnQuarterHour(Context context) {
         if (context != null) {
-            long onQuarterHour = Utils.getAlarmOnQuarterHour();
-            PendingIntent quarterlyIntent = getOnQuarterHourPendingIntent(context);
-            AlarmManager alarmManager = ((AlarmManager) context
-                    .getSystemService(Context.ALARM_SERVICE));
-            if (Utils.isKitKatOrLater()) {
-                alarmManager.setExact(AlarmManager.RTC, onQuarterHour, quarterlyIntent);
-            } else {
-                alarmManager.set(AlarmManager.RTC, onQuarterHour, quarterlyIntent);
-            }
+            final long onQuarterHour = Utils.getAlarmOnQuarterHour();
+            final PendingIntent quarterlyIntent = getOnQuarterHourPendingIntent(context);
+            final AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+            am.setExact(AlarmManager.RTC, onQuarterHour, quarterlyIntent);
             if (DigitalAppWidgetService.LOGGING) {
                 Log.v(TAG, "startAlarmOnQuarterHour " + context.toString());
             }
diff --git a/src/com/android/alarmclock/DigitalAppWidgetService.java b/src/com/android/alarmclock/DigitalAppWidgetService.java
index 7b33475..fab1156 100644
--- a/src/com/android/alarmclock/DigitalAppWidgetService.java
+++ b/src/com/android/alarmclock/DigitalAppWidgetService.java
@@ -17,16 +17,24 @@
 package com.android.alarmclock;
 
 import android.content.Intent;
-import android.util.Log;
+import android.content.res.Configuration;
 import android.widget.RemoteViewsService;
 
+import com.android.deskclock.data.DataModel;
+
 public class DigitalAppWidgetService extends RemoteViewsService {
+
     public static final boolean LOGGING = false;
 
     @Override
     public RemoteViewsFactory onGetViewFactory(Intent i) {
-        return new DigitalWidgetViewsFactory(this.getApplicationContext(), i);
+        return new DigitalWidgetViewsFactory(getApplicationContext(), i);
     }
-}
 
-
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        // Orientation possibly changed, so notify the widgets.
+        sendBroadcast(new Intent(DataModel.ACTION_DIGITAL_WIDGET_CHANGED));
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/alarmclock/DigitalWidgetViewsFactory.java b/src/com/android/alarmclock/DigitalWidgetViewsFactory.java
index 4649144..e8bb776 100644
--- a/src/com/android/alarmclock/DigitalWidgetViewsFactory.java
+++ b/src/com/android/alarmclock/DigitalWidgetViewsFactory.java
@@ -16,7 +16,6 @@
 
 package com.android.alarmclock;
 
-import android.appwidget.AppWidgetManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -28,130 +27,118 @@
 import android.widget.RemoteViewsService.RemoteViewsFactory;
 
 import com.android.deskclock.R;
-import com.android.deskclock.Utils;
-import com.android.deskclock.worldclock.CityObj;
-import com.android.deskclock.worldclock.WorldClockAdapter;
+import com.android.deskclock.data.City;
+import com.android.deskclock.data.DataModel;
 
+import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.List;
 import java.util.Locale;
 import java.util.TimeZone;
 
-public class DigitalWidgetViewsFactory implements RemoteViewsFactory {
-    private static final String TAG = "DigitalWidgetViewsFactory";
+import static android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID;
+import static android.appwidget.AppWidgetManager.INVALID_APPWIDGET_ID;
+import static com.android.deskclock.Utils.enforceMainLooper;
+import static java.util.Calendar.DAY_OF_WEEK;
 
-    private Context mContext;
-    private Resources mResources;
-    private int mId = AppWidgetManager.INVALID_APPWIDGET_ID;
-    private RemoteWorldClockAdapter mAdapter;
+public class DigitalWidgetViewsFactory implements RemoteViewsFactory {
+
+    private static final String TAG = "DigWidgetViewsFactory";
+
+    private final Intent mFillInIntent = new Intent();
+
+    private final Context mContext;
+    private final Resources mResources;
+    private final float mFontSize;
+    private final float mFont24Size;
+    private final int mWidgetId;
     private float mFontScale = 1;
 
-    // An adapter to provide the view for the list of cities in the world clock.
-    private class RemoteWorldClockAdapter extends WorldClockAdapter {
-        private final float mFontSize;
-        private final float mFont24Size;
-
-        public RemoteWorldClockAdapter(Context context) {
-            super(context);
-            mClocksPerRow = context.getResources().getInteger(
-                    R.integer.appwidget_world_clocks_per_row);
-            mFontSize = context.getResources().getDimension(R.dimen.widget_medium_font_size);
-            mFont24Size = context.getResources().getDimension(R.dimen.widget_24_medium_font_size);
-        }
-
-        public RemoteViews getViewAt(int position) {
-            // There are 2 cities per item
-            int index = position * 2;
-            if (index < 0 || index >= mCitiesList.length) {
-                return null;
-            }
-
-            RemoteViews views = new RemoteViews(
-                    mContext.getPackageName(), R.layout.world_clock_remote_list_item);
-
-            // Always how the left clock
-            updateView(views, (CityObj) mCitiesList[index], R.id.left_clock,
-                    R.id.city_name_left, R.id.city_day_left);
-            // Show the right clock if any, make it invisible if there is no
-            // clock on the right
-            // to keep the left view on the left.
-            if (index + 1 < mCitiesList.length) {
-                updateView(views, (CityObj) mCitiesList[index + 1], R.id.right_clock,
-                        R.id.city_name_right, R.id.city_day_right);
-            } else {
-                hideView(views, R.id.right_clock, R.id.city_name_right,
-                        R.id.city_day_right);
-            }
-
-            // Hide last spacer if last row
-            int lastRow = ((mCitiesList.length + 1) / 2) - 1;
-            if (position == lastRow) {
-                views.setViewVisibility(R.id.city_spacer, View.GONE);
-            } else {
-                views.setViewVisibility(R.id.city_spacer, View.VISIBLE);
-            }
-
-            return views;
-        }
-
-        private void updateView(RemoteViews clock, CityObj cityObj, int clockId,
-                int labelId, int dayId) {
-            final Calendar now = Calendar.getInstance();
-            now.setTimeInMillis(System.currentTimeMillis());
-            int myDayOfWeek = now.get(Calendar.DAY_OF_WEEK);
-            CityObj cityInDb = mCitiesDb.get(cityObj.mCityId);
-            String cityTZ = (cityInDb != null) ? cityInDb.mTimeZone : cityObj.mTimeZone;
-            now.setTimeZone(TimeZone.getTimeZone(cityTZ));
-            int cityDayOfWeek = now.get(Calendar.DAY_OF_WEEK);
-
-            final int labelSize = mResources.getDimensionPixelSize(R.dimen.widget_label_font_size);
-            WidgetUtils.setTimeFormat(mContext, clock, labelSize, clockId);
-            float fontSize = mFontScale * (DateFormat.is24HourFormat(mContext)
-                    ? mFont24Size : mFontSize);
-            clock.setTextViewTextSize(clockId, TypedValue.COMPLEX_UNIT_PX, fontSize * mFontScale);
-            clock.setString(clockId, "setTimeZone", cityObj.mTimeZone);
-
-            // Home city or city not in DB , use data from the save selected cities list
-            clock.setTextViewText(labelId, Utils.getCityName(cityObj, cityInDb));
-
-            if (myDayOfWeek != cityDayOfWeek) {
-                clock.setTextViewText(dayId, mContext.getString(
-                        R.string.world_day_of_week_label, now.getDisplayName(
-                                Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault())));
-                clock.setViewVisibility(dayId, View.VISIBLE);
-            } else {
-                clock.setViewVisibility(dayId, View.GONE);
-            }
-
-            clock.setViewVisibility(clockId, View.VISIBLE);
-            clock.setViewVisibility(labelId, View.VISIBLE);
-        }
-
-        private void hideView(
-                RemoteViews clock, int clockId, int labelId, int dayId) {
-            clock.setViewVisibility(clockId, View.INVISIBLE);
-            clock.setViewVisibility(labelId, View.INVISIBLE);
-            clock.setViewVisibility(dayId, View.INVISIBLE);
-        }
-    }
+    private City mHomeCity;
+    private List<City> mCities;
+    private boolean mShowHomeClock;
 
     public DigitalWidgetViewsFactory(Context context, Intent intent) {
         mContext = context;
-        mResources = mContext.getResources();
-        mId = intent.getIntExtra(
-                AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
-        mAdapter = new RemoteWorldClockAdapter(context);
-    }
-
-    @SuppressWarnings("unused")
-    public DigitalWidgetViewsFactory() {
+        mResources = context.getResources();
+        mFontSize = mResources.getDimension(R.dimen.widget_medium_font_size);
+        mFont24Size = mResources.getDimension(R.dimen.widget_24_medium_font_size);
+        mWidgetId = intent.getIntExtra(EXTRA_APPWIDGET_ID, INVALID_APPWIDGET_ID);
     }
 
     @Override
-    public int getCount() {
-        if (WidgetUtils.showList(mContext, mId, mFontScale)) {
-            return mAdapter.getCount();
+    public void onCreate() {
+        if (DigitalAppWidgetService.LOGGING) {
+            Log.i(TAG, "DigitalWidget onCreate " + mWidgetId);
         }
-        return 0;
+    }
+
+    @Override
+    public void onDestroy() {
+        if (DigitalAppWidgetService.LOGGING) {
+            Log.i(TAG, "DigitalWidget onDestroy " + mWidgetId);
+        }
+    }
+
+    /**
+     * <p>Synchronized to ensure single-threaded reading/writing of mCities, mHomeCity and
+     * mShowHomeClock.</p>
+     *
+     * {@inheritDoc}
+     */
+    @Override
+    public synchronized int getCount() {
+        if (!WidgetUtils.showList(mContext, mWidgetId, mFontScale)) {
+            return 0;
+        }
+
+        final int homeClockCount = mShowHomeClock ? 1 : 0;
+        final int worldClockCount = mCities.size();
+        final double totalClockCount = homeClockCount + worldClockCount;
+
+        // number of clocks / 2 clocks per row
+        return (int) Math.ceil(totalClockCount / 2);
+    }
+
+    /**
+     * <p>Synchronized to ensure single-threaded reading/writing of mCities, mHomeCity and
+     * mShowHomeClock.</p>
+     *
+     * {@inheritDoc}
+     */
+    @Override
+    public synchronized RemoteViews getViewAt(int position) {
+        final int homeClockOffset = mShowHomeClock ? -1 : 0;
+        final int leftIndex = position * 2 + homeClockOffset;
+        final int rightIndex = leftIndex + 1;
+
+        final City left = leftIndex == -1 ? mHomeCity :
+                (leftIndex < mCities.size() ? mCities.get(leftIndex) : null);
+        final City right = rightIndex < mCities.size() ? mCities.get(rightIndex) : null;
+
+        final RemoteViews clock =
+                new RemoteViews(mContext.getPackageName(), R.layout.world_clock_remote_list_item);
+
+        // Show the left clock if one exists.
+        if (left != null) {
+            update(clock, left, R.id.left_clock, R.id.city_name_left, R.id.city_day_left);
+        } else {
+            hide(clock, R.id.left_clock, R.id.city_name_left, R.id.city_day_left);
+        }
+
+        // Show the right clock if one exists.
+        if (right != null) {
+            update(clock, right, R.id.right_clock, R.id.city_name_right, R.id.city_day_right);
+        } else {
+            hide(clock, R.id.right_clock, R.id.city_name_right, R.id.city_day_right);
+        }
+
+        // Hide last spacer in last row; show for all others.
+        final boolean lastRow = position == getCount() - 1;
+        clock.setViewVisibility(R.id.city_spacer, lastRow ? View.GONE : View.VISIBLE);
+
+        clock.setOnClickFillInIntent(R.id.widget_item, mFillInIntent);
+        return clock;
     }
 
     @Override
@@ -165,16 +152,6 @@
     }
 
     @Override
-    public RemoteViews getViewAt(int position) {
-        RemoteViews v = mAdapter.getViewAt(position);
-        if (v != null) {
-            Intent fillInIntent = new Intent();
-            v.setOnClickFillInIntent(R.id.widget_item, fillInIntent);
-        }
-        return v;
-    }
-
-    @Override
     public int getViewTypeCount() {
         return 1;
     }
@@ -184,27 +161,74 @@
         return true;
     }
 
+    /**
+     * <p>Synchronized to ensure single-threaded reading/writing of mCities, mHomeCity and
+     * mShowHomeClock.</p>
+     *
+     * {@inheritDoc}
+     */
     @Override
-    public void onCreate() {
-        if (DigitalAppWidgetService.LOGGING) {
-            Log.i(TAG, "DigitalWidget onCreate " + mId);
+    public synchronized void onDataSetChanged() {
+        // Fetch the data on the main Looper.
+        final RefreshRunnable refreshRunnable = new RefreshRunnable();
+        DataModel.getDataModel().run(refreshRunnable);
+
+        // Store the data in local variables.
+        mFontScale = WidgetUtils.getScaleRatio(mContext, null, mWidgetId);
+        mHomeCity = refreshRunnable.mHomeCity;
+        mCities = refreshRunnable.mCities;
+        mShowHomeClock = refreshRunnable.mShowHomeClock;
+    }
+
+    private void update(RemoteViews clock, City city, int clockId, int labelId, int dayId) {
+        WidgetUtils.setTimeFormat(mContext, clock, true /* showAmPm */, clockId);
+
+        final float fontSize = DateFormat.is24HourFormat(mContext) ? mFont24Size : mFontSize;
+        clock.setTextViewTextSize(clockId, TypedValue.COMPLEX_UNIT_PX, fontSize * mFontScale);
+        clock.setString(clockId, "setTimeZone", city.getTimeZoneId());
+        clock.setTextViewText(labelId, city.getName());
+
+        // Compute if the city week day matches the weekday of the current timezone.
+        final Calendar localCal = Calendar.getInstance(TimeZone.getDefault());
+        final Calendar cityCal = Calendar.getInstance(city.getTimeZone());
+        final boolean displayDayOfWeek = localCal.get(DAY_OF_WEEK) != cityCal.get(DAY_OF_WEEK);
+
+        // Bind the week day display.
+        if (displayDayOfWeek) {
+            final Locale locale = Locale.getDefault();
+            final String weekday = cityCal.getDisplayName(DAY_OF_WEEK, Calendar.SHORT, locale);
+            final String slashDay = mContext.getString(R.string.world_day_of_week_label, weekday);
+            clock.setTextViewText(dayId, slashDay);
+        }
+
+        clock.setViewVisibility(dayId, displayDayOfWeek ? View.VISIBLE : View.GONE);
+        clock.setViewVisibility(clockId, View.VISIBLE);
+        clock.setViewVisibility(labelId, View.VISIBLE);
+    }
+
+    private void hide(RemoteViews clock, int clockId, int labelId, int dayId) {
+        clock.setViewVisibility(dayId, View.INVISIBLE);
+        clock.setViewVisibility(clockId, View.INVISIBLE);
+        clock.setViewVisibility(labelId, View.INVISIBLE);
+    }
+
+    /**
+     * This Runnable fetches data for this factory on the main thread to ensure all DataModel reads
+     * occur on the main thread.
+     */
+    private static final class RefreshRunnable implements Runnable {
+
+        private City mHomeCity;
+        private List<City> mCities;
+        private boolean mShowHomeClock;
+
+        @Override
+        public void run() {
+            enforceMainLooper();
+
+            mHomeCity = DataModel.getDataModel().getHomeCity();
+            mCities = new ArrayList<>(DataModel.getDataModel().getSelectedCities());
+            mShowHomeClock = DataModel.getDataModel().getShowHomeClock();
         }
     }
-
-    @Override
-    public void onDataSetChanged() {
-        mAdapter.loadData(mContext);
-        mAdapter.loadCitiesDb(mContext);
-        mAdapter.updateHomeLabel(mContext);
-
-        mFontScale = WidgetUtils.getScaleRatio(mContext, null, mId);
-    }
-
-    @Override
-    public void onDestroy() {
-        if (DigitalAppWidgetService.LOGGING) {
-            Log.i(TAG, "DigitalWidget onDestroy " + mId);
-        }
-    }
-}
-
+}
\ No newline at end of file
diff --git a/src/com/android/alarmclock/WidgetUtils.java b/src/com/android/alarmclock/WidgetUtils.java
index e163294..f4ce1f8 100644
--- a/src/com/android/alarmclock/WidgetUtils.java
+++ b/src/com/android/alarmclock/WidgetUtils.java
@@ -26,6 +26,7 @@
 
 import com.android.deskclock.R;
 import com.android.deskclock.Utils;
+import com.android.deskclock.data.DataModel;
 
 public class WidgetUtils {
     static final String TAG = "WidgetUtils";
@@ -55,15 +56,25 @@
             Resources res = context.getResources();
             float density = res.getDisplayMetrics().density;
             float ratio = (density * minWidth) / res.getDimension(R.dimen.min_digital_widget_width);
-            // Check if the height could introduce a font size constraint
-            int minHeight = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
-            if (minHeight > 0 && (density * minHeight)
-                    < res.getDimension(R.dimen.min_digital_widget_height)) {
-                ratio = Math.min(ratio, getHeightScaleRatio(context, options, id));
+            ratio = Math.min(ratio, getHeightScaleRatio(context, options, id));
+            ratio *= .83f;
+
+            final SelectedCitiesRunnable selectedCitiesRunnable = new SelectedCitiesRunnable();
+            DataModel.getDataModel().run(selectedCitiesRunnable);
+            if (selectedCitiesRunnable.mAnyCitiesSelected) {
+                return (ratio > 1f) ? 1f : ratio;
             }
-            return (ratio > 1) ? 1 : ratio;
+
+            ratio = Math.min(ratio, 1.6f);
+            if (res.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
+                ratio = Math.max(ratio, .71f);
+            }
+            else {
+                ratio = Math.max(ratio, .45f);
+            }
+            return ratio;
         }
-        return 1;
+        return 1f;
     }
 
     // Calculate the scale factor of the fonts in the list of  the widget using the widget height
@@ -84,14 +95,11 @@
             }
             Resources res = context.getResources();
             float density = res.getDisplayMetrics().density;
-            // Estimate height of date text box - 1.35 roughly approximates the text box padding
-            float lblBox = 1.35f * res.getDimension(R.dimen.label_font_size);
-            // Ensure divisor for ratio is positive number
-            if (res.getDimension(R.dimen.min_digital_widget_height) - lblBox > 0) {
-                float ratio = ((density * minHeight) - lblBox)
-                        / (res.getDimension(R.dimen.min_digital_widget_height) - lblBox);
-                return (ratio > 1) ? 1 : ratio;
+            float ratio = density * minHeight / res.getDimension(R.dimen.min_digital_widget_height);
+            if (res.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
+                return ratio * 1.75f;
             }
+            return ratio;
         }
         return 1;
     }
@@ -133,18 +141,28 @@
      * Set the format of the time on the clock according to the locale
      * @param context - Context used to get user's locale and time preferences
      * @param clock - view to format
-     * @param amPmFontSize - size of am/pm label, zero size means no am/om label
+     * @param showAmPm - show am/pm label if true
      * @param clockId - id of TextClock view as defined in the clock's layout.
      */
-    public static void setTimeFormat(Context context, RemoteViews clock, int amPmFontSize,
+    public static void setTimeFormat(Context context, RemoteViews clock, boolean showAmPm,
             int clockId) {
         if (clock != null) {
             // Set the best format for 12 hours mode according to the locale
             clock.setCharSequence(clockId, "setFormat12Hour",
-                    Utils.get12ModeFormat(context, amPmFontSize));
+                    Utils.get12ModeFormat(context, showAmPm));
             // Set the best format for 24 hours mode according to the locale
             clock.setCharSequence(clockId, "setFormat24Hour", Utils.get24ModeFormat());
         }
     }
+
+    private static class SelectedCitiesRunnable implements Runnable {
+
+        private boolean mAnyCitiesSelected;
+
+        @Override
+        public void run() {
+            mAnyCitiesSelected = !DataModel.getDataModel().getSelectedCities().isEmpty();
+        }
+    }
 }
 
diff --git a/src/com/android/deskclock/AlarmClockFragment.java b/src/com/android/deskclock/AlarmClockFragment.java
index 69c6ed4..d443ba5 100644
--- a/src/com/android/deskclock/AlarmClockFragment.java
+++ b/src/com/android/deskclock/AlarmClockFragment.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 The Android Open Source Project
+ * Copyright (C) 2015 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.
@@ -16,101 +16,38 @@
 
 package com.android.deskclock;
 
-import android.Manifest;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
 import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentTransaction;
 import android.app.LoaderManager;
-import android.content.ContentResolver;
-import android.content.Context;
 import android.content.Intent;
 import android.content.Loader;
-import android.content.SharedPreferences;
-import android.content.res.Configuration;
-import android.content.res.Resources;
 import android.database.Cursor;
-import android.database.DataSetObserver;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.graphics.Typeface;
-import android.media.Ringtone;
 import android.media.RingtoneManager;
 import android.net.Uri;
-import android.os.AsyncTask;
 import android.os.Bundle;
-import android.os.Vibrator;
-import android.preference.PreferenceManager;
-import android.support.v4.view.ViewCompat;
-import android.transition.AutoTransition;
-import android.transition.Fade;
-import android.transition.Transition;
-import android.transition.TransitionManager;
-import android.transition.TransitionSet;
+import android.support.design.widget.Snackbar;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.text.format.DateFormat;
 import android.view.LayoutInflater;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewGroup.LayoutParams;
-import android.view.ViewTreeObserver;
-import android.view.animation.AccelerateDecelerateInterpolator;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.Interpolator;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.CursorAdapter;
-import android.widget.FrameLayout;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.Toast;
 
-import com.android.deskclock.alarms.AlarmStateManager;
-import com.android.deskclock.events.Events;
+import com.android.deskclock.alarms.AlarmTimeClickHandler;
+import com.android.deskclock.alarms.AlarmUpdateHandler;
+import com.android.deskclock.alarms.ScrollHandler;
+import com.android.deskclock.alarms.TimePickerCompat;
+import com.android.deskclock.alarms.dataadapter.AlarmTimeAdapter;
+import com.android.deskclock.data.DataModel;
 import com.android.deskclock.provider.Alarm;
-import com.android.deskclock.provider.AlarmInstance;
-import com.android.deskclock.provider.DaysOfWeek;
-import com.android.deskclock.widget.ActionableToastBar;
-import com.android.deskclock.widget.TextTime;
-
-import java.util.Calendar;
-import java.util.HashSet;
+import com.android.deskclock.widget.EmptyViewController;
+import com.android.deskclock.widget.toast.SnackbarManager;
+import com.android.deskclock.widget.toast.ToastManager;
 
 /**
- * AlarmClock application.
+ * A fragment that displays a list of alarm time and allows interaction with them.
  */
-public abstract class AlarmClockFragment extends DeskClockFragment implements
-        LoaderManager.LoaderCallbacks<Cursor>, View.OnTouchListener {
-    private static final float EXPAND_DECELERATION = 1f;
-    private static final float COLLAPSE_DECELERATION = 0.7f;
-
-    private static final int ANIMATION_DURATION = 300;
-    private static final int EXPAND_DURATION = 300;
-    private static final int COLLAPSE_DURATION = 250;
-
-    private static final int ROTATE_180_DEGREE = 180;
-    private static final float ALARM_ELEVATION = 8f;
-    private static final float TINTED_LEVEL = 0.09f;
-
-    private static final String KEY_EXPANDED_ID = "expandedId";
-    private static final String KEY_REPEAT_CHECKED_IDS = "repeatCheckedIds";
-    private static final String KEY_RINGTONE_TITLE_CACHE = "ringtoneTitleCache";
-    private static final String KEY_SELECTED_ALARMS = "selectedAlarms";
-    private static final String KEY_DELETED_ALARM = "deletedAlarm";
-    private static final String KEY_UNDO_SHOWING = "undoShowing";
-    private static final String KEY_PREVIOUS_DAY_MAP = "previousDayMap";
-    private static final String KEY_SELECTED_ALARM = "selectedAlarm";
-
-    private static final int REQUEST_CODE_RINGTONE = 1;
-    private static final int REQUEST_CODE_PERMISSIONS = 2;
-    private static final long INVALID_ID = -1;
-    private static final String PREF_KEY_DEFAULT_ALARM_RINGTONE_URI = "default_alarm_ringtone_uri";
-
-    // Use transitions only in API 21+
-    private static final boolean USE_TRANSITION_FRAMEWORK = Utils.isLOrLater();
+public final class AlarmClockFragment extends DeskClockFragment implements
+        LoaderManager.LoaderCallbacks<Cursor>, ScrollHandler, TimePickerCompat.OnTimeSetListener {
 
     // This extra is used when receiving an intent to create an alarm, but no alarm details
     // have been passed in, so the alarm page should start the process of creating a new alarm.
@@ -120,64 +57,24 @@
     // can not be found, and toast message will pop up that the alarm has be deleted.
     public static final String SCROLL_TO_ALARM_INTENT_EXTRA = "deskclock.scroll.to.alarm";
 
-    private FrameLayout mMainLayout;
-    private ListView mAlarmsList;
-    private AlarmItemAdapter mAdapter;
-    private View mEmptyView;
-    private View mFooterView;
+    // Views
+    private ViewGroup mMainLayout;
+    private RecyclerView mRecyclerView;
 
-    private Bundle mRingtoneTitleCache; // Key: ringtone uri, value: ringtone title
-    private ActionableToastBar mUndoBar;
-    private View mUndoFrame;
-
-    protected Alarm mSelectedAlarm;
-    protected long mScrollToAlarmId = INVALID_ID;
-
+    // Data
+    private long mScrollToAlarmId = Alarm.INVALID_ID;
     private Loader mCursorLoader = null;
 
-    // Saved states for undo
-    private Alarm mDeletedAlarm;
-    protected Alarm mAddedAlarm;
-    private boolean mUndoShowing;
+    // Controllers
+    private AlarmTimeAdapter mAlarmTimeAdapter;
+    private AlarmUpdateHandler mAlarmUpdateHandler;
+    private EmptyViewController mEmptyViewController;
+    private AlarmTimeClickHandler mAlarmTimeClickHandler;
+    private LinearLayoutManager mLayoutManager;
 
-    private Interpolator mExpandInterpolator;
-    private Interpolator mCollapseInterpolator;
-
-    private Transition mAddRemoveTransition;
-    private Transition mRepeatTransition;
-    private Transition mEmptyViewTransition;
-
-    // Abstract methods to to be overridden by for post- and pre-L implementations as necessary
-    protected abstract void setTimePickerListener();
-    protected abstract void showTimeEditDialog(Alarm alarm);
-    protected abstract void startCreatingAlarm();
-
-    protected void processTimeSet(int hourOfDay, int minute) {
-        if (mSelectedAlarm == null) {
-            // If mSelectedAlarm is null then we're creating a new alarm.
-            Alarm a = new Alarm();
-            a.alert = getDefaultRingtoneUri();
-            if (a.alert == null) {
-                a.alert = Uri.parse("content://settings/system/alarm_alert");
-            }
-            a.hour = hourOfDay;
-            a.minutes = minute;
-            a.enabled = true;
-
-            mAddedAlarm = a;
-            asyncAddAlarm(a);
-        } else {
-            mSelectedAlarm.hour = hourOfDay;
-            mSelectedAlarm.minutes = minute;
-            mSelectedAlarm.enabled = true;
-            mScrollToAlarmId = mSelectedAlarm.id;
-            asyncUpdateAlarm(mSelectedAlarm, true);
-            mSelectedAlarm = null;
-        }
-    }
-
-    public AlarmClockFragment() {
-        // Basic provider required by Fragment.java
+    @Override
+    public void processTimeSet(int hourOfDay, int minute) {
+        mAlarmTimeClickHandler.processTimeSet(hourOfDay, minute);
     }
 
     @Override
@@ -187,106 +84,23 @@
     }
 
     @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedState) {
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
         // Inflate the layout for this fragment
         final View v = inflater.inflate(R.layout.alarm_clock, container, false);
 
-        long expandedId = INVALID_ID;
-        long[] repeatCheckedIds = null;
-        long[] selectedAlarms = null;
-        Bundle previousDayMap = null;
-        if (savedState != null) {
-            expandedId = savedState.getLong(KEY_EXPANDED_ID);
-            repeatCheckedIds = savedState.getLongArray(KEY_REPEAT_CHECKED_IDS);
-            mRingtoneTitleCache = savedState.getBundle(KEY_RINGTONE_TITLE_CACHE);
-            mDeletedAlarm = savedState.getParcelable(KEY_DELETED_ALARM);
-            mUndoShowing = savedState.getBoolean(KEY_UNDO_SHOWING);
-            selectedAlarms = savedState.getLongArray(KEY_SELECTED_ALARMS);
-            previousDayMap = savedState.getBundle(KEY_PREVIOUS_DAY_MAP);
-            mSelectedAlarm = savedState.getParcelable(KEY_SELECTED_ALARM);
-        }
+        mRecyclerView = (RecyclerView) v.findViewById(R.id.alarms_recycler_view);
+        mLayoutManager = new LinearLayoutManager(getActivity());
+        mRecyclerView.setLayoutManager(mLayoutManager);
+        mMainLayout = (ViewGroup) v.findViewById(R.id.main);
+        mAlarmUpdateHandler = new AlarmUpdateHandler(getActivity(), this, mMainLayout);
+        mEmptyViewController = new EmptyViewController(mMainLayout, mRecyclerView,
+                v.findViewById(R.id.alarms_empty_view));
+        mAlarmTimeClickHandler = new AlarmTimeClickHandler(this, savedState, mAlarmUpdateHandler,
+                this);
+        mAlarmTimeAdapter = new AlarmTimeAdapter(getActivity(), savedState,
+                mAlarmTimeClickHandler, this);
+        mRecyclerView.setAdapter(mAlarmTimeAdapter);
 
-        mExpandInterpolator = new DecelerateInterpolator(EXPAND_DECELERATION);
-        mCollapseInterpolator = new DecelerateInterpolator(COLLAPSE_DECELERATION);
-
-        if (USE_TRANSITION_FRAMEWORK) {
-            mAddRemoveTransition = new AutoTransition();
-            mAddRemoveTransition.setDuration(ANIMATION_DURATION);
-
-            mRepeatTransition = new AutoTransition();
-            mRepeatTransition.setDuration(ANIMATION_DURATION / 2);
-            mRepeatTransition.setInterpolator(new AccelerateDecelerateInterpolator());
-
-            mEmptyViewTransition = new TransitionSet()
-                    .setOrdering(TransitionSet.ORDERING_SEQUENTIAL)
-                    .addTransition(new Fade(Fade.OUT))
-                    .addTransition(new Fade(Fade.IN))
-                    .setDuration(ANIMATION_DURATION);
-        }
-
-        boolean isLandscape = getResources().getConfiguration().orientation
-                == Configuration.ORIENTATION_LANDSCAPE;
-        View menuButton = v.findViewById(R.id.menu_button);
-        if (menuButton != null) {
-            if (isLandscape) {
-                menuButton.setVisibility(View.GONE);
-            } else {
-                menuButton.setVisibility(View.VISIBLE);
-                setupFakeOverflowMenuButton(menuButton);
-            }
-        }
-
-        mEmptyView = v.findViewById(R.id.alarms_empty_view);
-
-        mMainLayout = (FrameLayout) v.findViewById(R.id.main);
-        mAlarmsList = (ListView) v.findViewById(R.id.alarms_list);
-
-        mUndoBar = (ActionableToastBar) v.findViewById(R.id.undo_bar);
-        mUndoFrame = v.findViewById(R.id.undo_frame);
-        mUndoFrame.setOnTouchListener(this);
-
-        mFooterView = v.findViewById(R.id.alarms_footer_view);
-        mFooterView.setOnTouchListener(this);
-
-        mAdapter = new AlarmItemAdapter(getActivity(),
-                expandedId, repeatCheckedIds, selectedAlarms, previousDayMap, mAlarmsList);
-        mAdapter.registerDataSetObserver(new DataSetObserver() {
-
-            private int prevAdapterCount = -1;
-
-            @Override
-            public void onChanged() {
-
-                final int count = mAdapter.getCount();
-                if (mDeletedAlarm != null && prevAdapterCount > count) {
-                    showUndoBar();
-                }
-
-                if (USE_TRANSITION_FRAMEWORK &&
-                    ((count == 0 && prevAdapterCount > 0) ||  /* should fade  in */
-                    (count > 0 && prevAdapterCount == 0) /* should fade out */)) {
-                    TransitionManager.beginDelayedTransition(mMainLayout, mEmptyViewTransition);
-                }
-                mEmptyView.setVisibility(count == 0 ? View.VISIBLE : View.GONE);
-
-                // Cache this adapter's count for when the adapter changes.
-                prevAdapterCount = count;
-                super.onChanged();
-            }
-        });
-
-        if (mRingtoneTitleCache == null) {
-            mRingtoneTitleCache = new Bundle();
-        }
-
-        mAlarmsList.setAdapter(mAdapter);
-        mAlarmsList.setVerticalScrollBarEnabled(true);
-        mAlarmsList.setOnCreateContextMenuListener(this);
-
-        if (mUndoShowing) {
-            showUndoBar();
-        }
         return v;
     }
 
@@ -313,7 +127,7 @@
         } else if (intent.hasExtra(SCROLL_TO_ALARM_INTENT_EXTRA)) {
             long alarmId = intent.getLongExtra(SCROLL_TO_ALARM_INTENT_EXTRA, Alarm.INVALID_ID);
             if (alarmId != Alarm.INVALID_ID) {
-                mScrollToAlarmId = alarmId;
+                setSmoothScrollStableId(alarmId);
                 if (mCursorLoader != null && mCursorLoader.isStarted()) {
                     // We need to force a reload here to make sure we have the latest view
                     // of the data to scroll to.
@@ -324,55 +138,24 @@
             // Remove the SCROLL_TO_ALARM extra now that we've processed it.
             intent.removeExtra(SCROLL_TO_ALARM_INTENT_EXTRA);
         }
-
-        setTimePickerListener();
     }
 
-    private void hideUndoBar(boolean animate, MotionEvent event) {
-        if (mUndoBar != null) {
-            mUndoFrame.setVisibility(View.GONE);
-            if (event != null && mUndoBar.isEventInToastBar(event)) {
-                // Avoid touches inside the undo bar.
-                return;
-            }
-            mUndoBar.hide(animate);
-        }
-        mDeletedAlarm = null;
-        mUndoShowing = false;
-    }
-
-    private void showUndoBar() {
-        final Alarm deletedAlarm = mDeletedAlarm;
-        mUndoFrame.setVisibility(View.VISIBLE);
-        mUndoBar.show(new ActionableToastBar.ActionClickedListener() {
-            @Override
-            public void onActionClicked() {
-                mAddedAlarm = deletedAlarm;
-                mDeletedAlarm = null;
-                mUndoShowing = false;
-
-                asyncAddAlarm(deletedAlarm);
-            }
-        }, 0, getResources().getString(R.string.alarm_deleted), true, R.string.alarm_undo, true);
+    @Override
+    public void smoothScrollTo(int position) {
+        mLayoutManager.scrollToPositionWithOffset(position, 20);
     }
 
     @Override
     public void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
-        outState.putLong(KEY_EXPANDED_ID, mAdapter.getExpandedId());
-        outState.putLongArray(KEY_REPEAT_CHECKED_IDS, mAdapter.getRepeatArray());
-        outState.putLongArray(KEY_SELECTED_ALARMS, mAdapter.getSelectedAlarmsArray());
-        outState.putBundle(KEY_RINGTONE_TITLE_CACHE, mRingtoneTitleCache);
-        outState.putParcelable(KEY_DELETED_ALARM, mDeletedAlarm);
-        outState.putBoolean(KEY_UNDO_SHOWING, mUndoShowing);
-        outState.putBundle(KEY_PREVIOUS_DAY_MAP, mAdapter.getPreviousDaysOfWeekMap());
-        outState.putParcelable(KEY_SELECTED_ALARM, mSelectedAlarm);
+        mAlarmTimeAdapter.saveInstance(outState);
+        mAlarmTimeClickHandler.saveInstance(outState);
     }
 
     @Override
     public void onDestroy() {
         super.onDestroy();
-        ToastMaster.cancelToast();
+        ToastManager.cancelToast();
     }
 
     @Override
@@ -382,26 +165,12 @@
         // dismiss the toast bar. However, since there is no way to determine if
         // home was pressed, just dismiss any existing toast bar when restarting
         // the app.
-        hideUndoBar(false, null);
-    }
-
-    private void showLabelDialog(final Alarm alarm) {
-        final FragmentTransaction ft = getFragmentManager().beginTransaction();
-        final Fragment prev = getFragmentManager().findFragmentByTag("label_dialog");
-        if (prev != null) {
-            ft.remove(prev);
-        }
-        ft.addToBackStack(null);
-
-        // Create and show the dialog.
-        final LabelDialogFragment newFragment =
-                LabelDialogFragment.newInstance(alarm, alarm.label, getTag());
-        newFragment.show(ft, "label_dialog");
+        mAlarmUpdateHandler.hideUndoBar();
     }
 
     public void setLabel(Alarm alarm, String label) {
         alarm.label = label;
-        asyncUpdateAlarm(alarm, false);
+        mAlarmUpdateHandler.asyncUpdateAlarm(alarm, false, true);
     }
 
     @Override
@@ -411,10 +180,11 @@
 
     @Override
     public void onLoadFinished(Loader<Cursor> cursorLoader, final Cursor data) {
-        mAdapter.swapCursor(data);
-        if (mScrollToAlarmId != INVALID_ID) {
+        mEmptyViewController.setEmpty(data.getCount() == 0);
+        mAlarmTimeAdapter.swapCursor(data);
+        if (mScrollToAlarmId != Alarm.INVALID_ID) {
             scrollToAlarm(mScrollToAlarmId);
-            mScrollToAlarmId = INVALID_ID;
+            setSmoothScrollStableId(Alarm.INVALID_ID);
         }
     }
 
@@ -424,9 +194,10 @@
      * @param alarmId The alarm id to scroll to.
      */
     private void scrollToAlarm(long alarmId) {
+        final int alarmCount = mAlarmTimeAdapter.getItemCount();
         int alarmPosition = -1;
-        for (int i = 0; i < mAdapter.getCount(); i++) {
-            long id = mAdapter.getItemId(i);
+        for (int i = 0; i < alarmCount; i++) {
+            long id = mAlarmTimeAdapter.getItemId(i);
             if (id == alarmId) {
                 alarmPosition = i;
                 break;
@@ -434,1118 +205,88 @@
         }
 
         if (alarmPosition >= 0) {
-            mAdapter.setNewAlarm(alarmId);
-            mAlarmsList.smoothScrollToPositionFromTop(alarmPosition, 0);
+            mAlarmTimeAdapter.expand(alarmPosition);
         } else {
             // Trying to display a deleted alarm should only happen from a missed notification for
             // an alarm that has been marked deleted after use.
-            Context context = getActivity().getApplicationContext();
-            Toast toast = Toast.makeText(context, R.string.missed_alarm_has_been_deleted,
-                    Toast.LENGTH_LONG);
-            ToastMaster.setToast(toast);
-            toast.show();
+            SnackbarManager.show(Snackbar.make(mMainLayout, R.string
+                    .missed_alarm_has_been_deleted, Snackbar.LENGTH_LONG));
         }
     }
 
     @Override
     public void onLoaderReset(Loader<Cursor> cursorLoader) {
-        mAdapter.swapCursor(null);
-    }
-
-    private void launchRingTonePicker(Alarm alarm) {
-        mSelectedAlarm = alarm;
-        Uri oldRingtone = Alarm.NO_RINGTONE_URI.equals(alarm.alert) ? null : alarm.alert;
-        final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
-        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, oldRingtone);
-        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
-        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false);
-        startActivityForResult(intent, REQUEST_CODE_RINGTONE);
-    }
-
-    private void saveRingtoneUri(Intent intent) {
-        Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
-        if (uri == null) {
-            uri = Alarm.NO_RINGTONE_URI;
-        }
-        mSelectedAlarm.alert = uri;
-
-        // Save the last selected ringtone as the default for new alarms
-        setDefaultRingtoneUri(uri);
-
-        asyncUpdateAlarm(mSelectedAlarm, false);
-
-        // If the user chose an external ringtone and has not yet granted the permission to read
-        // external storage, ask them for that permission now.
-        if (!AlarmUtils.hasPermissionToDisplayRingtoneTitle(getActivity(), uri)) {
-            final String[] perms = {Manifest.permission.READ_EXTERNAL_STORAGE};
-            requestPermissions(perms, REQUEST_CODE_PERMISSIONS);
-        }
-    }
-
-    private Uri getDefaultRingtoneUri() {
-        final SharedPreferences sp = Utils.getDefaultSharedPreferences(getActivity());
-        final String ringtoneUriString = sp.getString(PREF_KEY_DEFAULT_ALARM_RINGTONE_URI, null);
-
-        final Uri ringtoneUri;
-        if (ringtoneUriString != null) {
-            ringtoneUri = Uri.parse(ringtoneUriString);
-        } else {
-            ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(getActivity(),
-                    RingtoneManager.TYPE_ALARM);
-        }
-
-        return ringtoneUri;
-    }
-
-    private void setDefaultRingtoneUri(Uri uri) {
-        final SharedPreferences sp = Utils.getDefaultSharedPreferences(getActivity());
-        if (uri == null) {
-            sp.edit().remove(PREF_KEY_DEFAULT_ALARM_RINGTONE_URI).apply();
-        } else {
-            sp.edit().putString(PREF_KEY_DEFAULT_ALARM_RINGTONE_URI, uri.toString()).apply();
-        }
+        mAlarmTimeAdapter.swapCursor(null);
     }
 
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (resultCode == Activity.RESULT_OK) {
-            switch (requestCode) {
-                case REQUEST_CODE_RINGTONE:
-                    saveRingtoneUri(data);
-                    break;
-                default:
-                    LogUtils.w("Unhandled request code in onActivityResult: " + requestCode);
-            }
+        if (resultCode != Activity.RESULT_OK) {
+            return;
+        }
+
+        switch (requestCode) {
+            case R.id.request_code_ringtone:
+                // Extract the selected ringtone uri.
+                Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
+                if (uri == null) {
+                    uri = Alarm.NO_RINGTONE_URI;
+                }
+
+                // Update the default ringtone for future new alarms.
+                DataModel.getDataModel().setDefaultAlarmRingtoneUri(uri);
+
+                // Set the ringtone uri on the alarm.
+                final Alarm alarm = mAlarmTimeClickHandler.getSelectedAlarm();
+                if (alarm == null) {
+                    LogUtils.e("Could not get selected alarm to set ringtone");
+                    return;
+                }
+                alarm.alert = uri;
+
+                // Save the change to alarm.
+                mAlarmUpdateHandler.asyncUpdateAlarm(alarm, false /* popToast */,
+                        true /* minorUpdate */);
+                break;
+            default:
+                LogUtils.w("Unhandled request code in onActivityResult: " + requestCode);
         }
     }
 
     @Override
-    public void onRequestPermissionsResult(int requestCode, String[] permissions,
-            int[] grantResults) {
-        // The permission change may alter the cached ringtone titles so clear them.
-        // (e.g. READ_EXTERNAL_STORAGE is granted or revoked)
-        mRingtoneTitleCache.clear();
-    }
-
-    private class AlarmItemAdapter extends CursorAdapter {
-        private final Context mContext;
-        private final LayoutInflater mFactory;
-        private final Typeface mRobotoNormal;
-        private final ListView mList;
-
-        private long mExpandedId;
-        private ItemHolder mExpandedItemHolder;
-        private final HashSet<Long> mRepeatChecked = new HashSet<>();
-        private final HashSet<Long> mSelectedAlarms = new HashSet<>();
-        private Bundle mPreviousDaysOfWeekMap = new Bundle();
-
-        private final boolean mHasVibrator;
-        private final int mCollapseExpandHeight;
-
-        // Determines the order that days of the week are shown in the UI
-        private int[] mDayOrder;
-
-        // A reference used to create mDayOrder
-        private final int[] DAY_ORDER = new int[] {
-                Calendar.SUNDAY,
-                Calendar.MONDAY,
-                Calendar.TUESDAY,
-                Calendar.WEDNESDAY,
-                Calendar.THURSDAY,
-                Calendar.FRIDAY,
-                Calendar.SATURDAY,
-        };
-
-        public class ItemHolder {
-
-            // views for optimization
-            LinearLayout alarmItem;
-            TextTime clock;
-            TextView tomorrowLabel;
-            CompoundButton onoff;
-            TextView daysOfWeek;
-            TextView label;
-            ImageButton delete;
-            View expandArea;
-            View summary;
-            TextView clickableLabel;
-            CheckBox repeat;
-            LinearLayout repeatDays;
-            CompoundButton[] dayButtons = new CompoundButton[7];
-            CheckBox vibrate;
-            TextView ringtone;
-            View hairLine;
-            View arrow;
-            View collapseExpandArea;
-
-            // Other states
-            Alarm alarm;
-        }
-
-        // Used for scrolling an expanded item in the list to make sure it is fully visible.
-        private long mScrollAlarmId = AlarmClockFragment.INVALID_ID;
-        private final Runnable mScrollRunnable = new Runnable() {
-            @Override
-            public void run() {
-                if (mScrollAlarmId != AlarmClockFragment.INVALID_ID) {
-                    View v = getViewById(mScrollAlarmId);
-                    if (v != null) {
-                        Rect rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
-                        mList.requestChildRectangleOnScreen(v, rect, false);
-                    }
-                    mScrollAlarmId = AlarmClockFragment.INVALID_ID;
-                }
-            }
-        };
-
-        public AlarmItemAdapter(Context context, long expandedId, long[] repeatCheckedIds,
-                long[] selectedAlarms, Bundle previousDaysOfWeekMap, ListView list) {
-            super(context, null, 0);
-            mContext = context;
-            mFactory = LayoutInflater.from(context);
-            mList = list;
-
-            Resources res = mContext.getResources();
-
-            mRobotoNormal = Typeface.create("sans-serif", Typeface.NORMAL);
-
-            mExpandedId = expandedId;
-            if (repeatCheckedIds != null) {
-                buildHashSetFromArray(repeatCheckedIds, mRepeatChecked);
-            }
-            if (previousDaysOfWeekMap != null) {
-                mPreviousDaysOfWeekMap = previousDaysOfWeekMap;
-            }
-            if (selectedAlarms != null) {
-                buildHashSetFromArray(selectedAlarms, mSelectedAlarms);
-            }
-
-            mHasVibrator = ((Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE))
-                    .hasVibrator();
-
-            mCollapseExpandHeight = (int) res.getDimension(R.dimen.collapse_expand_height);
-
-            setDayOrder();
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            if (!getCursor().moveToPosition(position)) {
-                // May happen if the last alarm was deleted and the cursor refreshed while the
-                // list is updated.
-                LogUtils.v("couldn't move cursor to position " + position);
-                return null;
-            }
-            View v;
-            if (convertView == null) {
-                v = newView(mContext, getCursor(), parent);
-            } else {
-                v = convertView;
-            }
-            bindView(v, mContext, getCursor());
-            return v;
-        }
-
-        @Override
-        public View newView(Context context, Cursor cursor, ViewGroup parent) {
-            final View view = mFactory.inflate(R.layout.alarm_time, parent, false);
-            setNewHolder(view);
-            return view;
-        }
-
-        /**
-         * In addition to changing the data set for the alarm list, swapCursor is now also
-         * responsible for preparing the transition for any added/removed items.
-         */
-        @Override
-        public synchronized Cursor swapCursor(Cursor cursor) {
-            if (USE_TRANSITION_FRAMEWORK && (mAddedAlarm != null || mDeletedAlarm != null)) {
-                TransitionManager.beginDelayedTransition(mAlarmsList, mAddRemoveTransition);
-            }
-
-            final Cursor c = super.swapCursor(cursor);
-
-            mAddedAlarm = null;
-            mDeletedAlarm = null;
-
-            return c;
-        }
-
-        private void setDayOrder() {
-            // Value from preferences corresponds to Calendar.<WEEKDAY> value
-            // -1 in order to correspond to DAY_ORDER indexing
-            final int startDay = Utils.getZeroIndexedFirstDayOfWeek(mContext);
-            mDayOrder = new int[DaysOfWeek.DAYS_IN_A_WEEK];
-
-            for (int i = 0; i < DaysOfWeek.DAYS_IN_A_WEEK; ++i) {
-                mDayOrder[i] = DAY_ORDER[(startDay + i) % 7];
-            }
-        }
-
-        private ItemHolder setNewHolder(View view) {
-            // standard view holder optimization
-            final ItemHolder holder = new ItemHolder();
-            holder.alarmItem = (LinearLayout) view.findViewById(R.id.alarm_item);
-            holder.tomorrowLabel = (TextView) view.findViewById(R.id.tomorrowLabel);
-            holder.clock = (TextTime) view.findViewById(R.id.digital_clock);
-            holder.onoff = (CompoundButton) view.findViewById(R.id.onoff);
-            holder.onoff.setTypeface(mRobotoNormal);
-            holder.daysOfWeek = (TextView) view.findViewById(R.id.daysOfWeek);
-            holder.label = (TextView) view.findViewById(R.id.label);
-            holder.delete = (ImageButton) view.findViewById(R.id.delete);
-            holder.summary = view.findViewById(R.id.summary);
-            holder.expandArea = view.findViewById(R.id.expand_area);
-            holder.hairLine = view.findViewById(R.id.hairline);
-            holder.arrow = view.findViewById(R.id.arrow);
-            holder.repeat = (CheckBox) view.findViewById(R.id.repeat_onoff);
-            holder.clickableLabel = (TextView) view.findViewById(R.id.edit_label);
-            holder.repeatDays = (LinearLayout) view.findViewById(R.id.repeat_days);
-            holder.collapseExpandArea = view.findViewById(R.id.collapse_expand);
-
-            // Build button for each day.
-            for (int i = 0; i < 7; i++) {
-                final CompoundButton dayButton = (CompoundButton) mFactory.inflate(
-                        R.layout.day_button, holder.repeatDays, false /* attachToRoot */);
-                final int firstDay = Utils.getZeroIndexedFirstDayOfWeek(mContext);
-                dayButton.setText(Utils.getShortWeekday(i, firstDay));
-                dayButton.setContentDescription(Utils.getLongWeekday(i, firstDay));
-                holder.repeatDays.addView(dayButton);
-                holder.dayButtons[i] = dayButton;
-            }
-            holder.vibrate = (CheckBox) view.findViewById(R.id.vibrate_onoff);
-            holder.ringtone = (TextView) view.findViewById(R.id.choose_ringtone);
-
-            view.setTag(holder);
-            return holder;
-        }
-
-        @Override
-        public void bindView(final View view, Context context, final Cursor cursor) {
-            final Alarm alarm = new Alarm(cursor);
-            Object tag = view.getTag();
-            if (tag == null) {
-                // The view was converted but somehow lost its tag.
-                tag = setNewHolder(view);
-            }
-            final ItemHolder itemHolder = (ItemHolder) tag;
-            itemHolder.alarm = alarm;
-
-            // We must unset the listener first because this maybe a recycled view so changing the
-            // state would affect the wrong alarm.
-            itemHolder.onoff.setOnCheckedChangeListener(null);
-
-            // Hack to workaround b/21459481: the SwitchCompat instance must be detached from
-            // its parent in order to avoid running the checked animation, which may get stuck
-            // when ListView calls View#jumpDrawablesToCurrentState() on a recycled view.
-            if (itemHolder.onoff.isChecked() != alarm.enabled) {
-                final ViewGroup onoffParent = (ViewGroup) itemHolder.onoff.getParent();
-                final int onoffIndex = onoffParent.indexOfChild(itemHolder.onoff);
-
-                onoffParent.removeView(itemHolder.onoff);
-                itemHolder.onoff.setChecked(alarm.enabled);
-                onoffParent.addView(itemHolder.onoff, onoffIndex);
-            }
-
-            if (mSelectedAlarms.contains(itemHolder.alarm.id)) {
-                setAlarmItemBackgroundAndElevation(itemHolder.alarmItem, true /* expanded */);
-                setDigitalTimeAlpha(itemHolder, true);
-                itemHolder.onoff.setEnabled(false);
-            } else {
-                itemHolder.onoff.setEnabled(true);
-                setAlarmItemBackgroundAndElevation(itemHolder.alarmItem, false /* expanded */);
-                setDigitalTimeAlpha(itemHolder, itemHolder.onoff.isChecked());
-            }
-            itemHolder.clock.setFormat(mContext,
-                    mContext.getResources().getDimensionPixelSize(R.dimen.alarm_label_size));
-            itemHolder.clock.setTime(alarm.hour, alarm.minutes);
-            itemHolder.clock.setClickable(true);
-            itemHolder.clock.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-                    mSelectedAlarm = itemHolder.alarm;
-                    showTimeEditDialog(alarm);
-                    expandAlarm(itemHolder, true);
-                    itemHolder.alarmItem.post(mScrollRunnable);
-                }
-            });
-
-            final CompoundButton.OnCheckedChangeListener onOffListener =
-                    new CompoundButton.OnCheckedChangeListener() {
-                @Override
-                public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
-                    if (checked != alarm.enabled) {
-                        if (!isAlarmExpanded(alarm)) {
-                            // Only toggle this when alarm is collapsed
-                            setDigitalTimeAlpha(itemHolder, checked);
-                        }
-                        alarm.enabled = checked;
-                        asyncUpdateAlarm(alarm, alarm.enabled);
-                    }
-                }
-            };
-
-            if (mRepeatChecked.contains(alarm.id) || itemHolder.alarm.daysOfWeek.isRepeating()) {
-                itemHolder.tomorrowLabel.setVisibility(View.GONE);
-            } else {
-                itemHolder.tomorrowLabel.setVisibility(View.VISIBLE);
-                final Resources resources = getResources();
-                final String labelText = Alarm.isTomorrow(alarm) ?
-                        resources.getString(R.string.alarm_tomorrow) :
-                        resources.getString(R.string.alarm_today);
-                itemHolder.tomorrowLabel.setText(labelText);
-            }
-            itemHolder.onoff.setOnCheckedChangeListener(onOffListener);
-
-            boolean expanded = isAlarmExpanded(alarm);
-            if (expanded) {
-                mExpandedItemHolder = itemHolder;
-            }
-            itemHolder.expandArea.setVisibility(expanded? View.VISIBLE : View.GONE);
-            itemHolder.delete.setVisibility(expanded ? View.VISIBLE : View.GONE);
-            itemHolder.summary.setVisibility(expanded? View.GONE : View.VISIBLE);
-            itemHolder.hairLine.setVisibility(expanded ? View.GONE : View.VISIBLE);
-            itemHolder.arrow.setRotation(expanded ? ROTATE_180_DEGREE : 0);
-
-            // Add listener on the arrow to enable proper talkback functionality.
-            // Avoid setting content description on the entire card.
-            itemHolder.arrow.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-                    if (isAlarmExpanded(alarm)) {
-                        // Is expanded, make collapse call.
-                        collapseAlarm(itemHolder, true);
-                    } else {
-                        // Is collapsed, make expand call.
-                        expandAlarm(itemHolder, true);
-                    }
-                }
-            });
-
-            // Set the repeat text or leave it blank if it does not repeat.
-            final String daysOfWeekStr =
-                    alarm.daysOfWeek.toString(context, Utils.getFirstDayOfWeek(context));
-            if (daysOfWeekStr != null && daysOfWeekStr.length() != 0) {
-                itemHolder.daysOfWeek.setText(daysOfWeekStr);
-                itemHolder.daysOfWeek.setContentDescription(alarm.daysOfWeek.toAccessibilityString(
-                        context, Utils.getFirstDayOfWeek(context)));
-                itemHolder.daysOfWeek.setVisibility(View.VISIBLE);
-                itemHolder.daysOfWeek.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View view) {
-                        expandAlarm(itemHolder, true);
-                        itemHolder.alarmItem.post(mScrollRunnable);
-                    }
-                });
-
-            } else {
-                itemHolder.daysOfWeek.setVisibility(View.GONE);
-            }
-
-            if (alarm.label != null && alarm.label.length() != 0) {
-                itemHolder.label.setText(alarm.label + "  ");
-                itemHolder.label.setVisibility(View.VISIBLE);
-                itemHolder.label.setContentDescription(
-                        mContext.getResources().getString(R.string.label_description) + " "
-                        + alarm.label);
-                itemHolder.label.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View view) {
-                        expandAlarm(itemHolder, true);
-                        itemHolder.alarmItem.post(mScrollRunnable);
-                    }
-                });
-            } else {
-                itemHolder.label.setVisibility(View.GONE);
-            }
-
-            itemHolder.delete.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    mDeletedAlarm = alarm;
-                    mRepeatChecked.remove(alarm.id);
-                    asyncDeleteAlarm(alarm);
-                }
-            });
-
-            if (expanded) {
-                expandAlarm(itemHolder, false);
-            }
-
-            itemHolder.alarmItem.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-                    if (isAlarmExpanded(alarm)) {
-                        collapseAlarm(itemHolder, true);
-                    } else {
-                        expandAlarm(itemHolder, true);
-                    }
-                }
-            });
-        }
-
-        private void setAlarmItemBackgroundAndElevation(LinearLayout layout, boolean expanded) {
-            if (expanded) {
-                layout.setBackgroundColor(getTintedBackgroundColor());
-                ViewCompat.setElevation(layout, ALARM_ELEVATION);
-            } else {
-                layout.setBackgroundResource(R.drawable.alarm_background_normal);
-                ViewCompat.setElevation(layout, 0f);
-            }
-        }
-
-        private int getTintedBackgroundColor() {
-            final int c = Utils.getCurrentHourColor();
-            final int red = Color.red(c) + (int) (TINTED_LEVEL * (255 - Color.red(c)));
-            final int green = Color.green(c) + (int) (TINTED_LEVEL * (255 - Color.green(c)));
-            final int blue = Color.blue(c) + (int) (TINTED_LEVEL * (255 - Color.blue(c)));
-            return Color.rgb(red, green, blue);
-        }
-
-        private void bindExpandArea(final ItemHolder itemHolder, final Alarm alarm) {
-            // Views in here are not bound until the item is expanded.
-
-            if (alarm.label != null && alarm.label.length() > 0) {
-                itemHolder.clickableLabel.setText(alarm.label);
-            } else {
-                itemHolder.clickableLabel.setText(R.string.label);
-            }
-
-            itemHolder.clickableLabel.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-                    showLabelDialog(alarm);
-                }
-            });
-
-            if (mRepeatChecked.contains(alarm.id) || itemHolder.alarm.daysOfWeek.isRepeating()) {
-                itemHolder.repeat.setChecked(true);
-                itemHolder.repeatDays.setVisibility(View.VISIBLE);
-            } else {
-                itemHolder.repeat.setChecked(false);
-                itemHolder.repeatDays.setVisibility(View.GONE);
-            }
-            itemHolder.repeat.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-                    // Animate the resulting layout changes.
-                    if (USE_TRANSITION_FRAMEWORK) {
-                        TransitionManager.beginDelayedTransition(mList, mRepeatTransition);
-                    }
-
-                    final Calendar now = Calendar.getInstance();
-                    final Calendar oldNextAlarmTime = alarm.getNextAlarmTime(now);
-
-                    final boolean checked = ((CheckBox) view).isChecked();
-                    if (checked) {
-                        // Show days
-                        itemHolder.repeatDays.setVisibility(View.VISIBLE);
-                        mRepeatChecked.add(alarm.id);
-
-                        // Set all previously set days
-                        // or
-                        // Set all days if no previous.
-                        final int bitSet = mPreviousDaysOfWeekMap.getInt("" + alarm.id);
-                        alarm.daysOfWeek.setBitSet(bitSet);
-                        if (!alarm.daysOfWeek.isRepeating()) {
-                            alarm.daysOfWeek.setDaysOfWeek(true, mDayOrder);
-                        }
-                        updateDaysOfWeekButtons(itemHolder, alarm.daysOfWeek);
-                    } else {
-                        // Hide days
-                        itemHolder.repeatDays.setVisibility(View.GONE);
-                        mRepeatChecked.remove(alarm.id);
-
-                        // Remember the set days in case the user wants it back.
-                        final int bitSet = alarm.daysOfWeek.getBitSet();
-                        mPreviousDaysOfWeekMap.putInt("" + alarm.id, bitSet);
-
-                        // Remove all repeat days
-                        alarm.daysOfWeek.clearAllDays();
-                    }
-
-                    // if the change altered the next scheduled alarm time, tell the user
-                    final Calendar newNextAlarmTime = alarm.getNextAlarmTime(now);
-                    final boolean popupToast = !oldNextAlarmTime.equals(newNextAlarmTime);
-
-                    asyncUpdateAlarm(alarm, popupToast);
-                }
-            });
-
-            updateDaysOfWeekButtons(itemHolder, alarm.daysOfWeek);
-            for (int i = 0; i < 7; i++) {
-                final int buttonIndex = i;
-
-                itemHolder.dayButtons[i].setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View view) {
-                        final boolean isActivated =
-                                itemHolder.dayButtons[buttonIndex].isActivated();
-
-                        final Calendar now = Calendar.getInstance();
-                        final Calendar oldNextAlarmTime = alarm.getNextAlarmTime(now);
-                        alarm.daysOfWeek.setDaysOfWeek(!isActivated, mDayOrder[buttonIndex]);
-
-                        if (!isActivated) {
-                            turnOnDayOfWeek(itemHolder, buttonIndex);
-                        } else {
-                            turnOffDayOfWeek(itemHolder, buttonIndex);
-
-                            // See if this was the last day, if so, un-check the repeat box.
-                            if (!alarm.daysOfWeek.isRepeating()) {
-                                if (USE_TRANSITION_FRAMEWORK) {
-                                    // Animate the resulting layout changes.
-                                    TransitionManager.beginDelayedTransition(mList, mRepeatTransition);
-                                }
-
-                                itemHolder.repeat.setChecked(false);
-                                itemHolder.repeatDays.setVisibility(View.GONE);
-                                mRepeatChecked.remove(alarm.id);
-
-                                // Set history to no days, so it will be everyday when repeat is
-                                // turned back on
-                                mPreviousDaysOfWeekMap.putInt("" + alarm.id,
-                                        DaysOfWeek.NO_DAYS_SET);
-                            }
-                        }
-
-                        // if the change altered the next scheduled alarm time, tell the user
-                        final Calendar newNextAlarmTime = alarm.getNextAlarmTime(now);
-                        final boolean popupToast = !oldNextAlarmTime.equals(newNextAlarmTime);
-
-                        asyncUpdateAlarm(alarm, popupToast);
-                    }
-                });
-            }
-
-            if (!mHasVibrator) {
-                itemHolder.vibrate.setVisibility(View.INVISIBLE);
-            } else {
-                itemHolder.vibrate.setVisibility(View.VISIBLE);
-                if (!alarm.vibrate) {
-                    itemHolder.vibrate.setChecked(false);
-                } else {
-                    itemHolder.vibrate.setChecked(true);
-                }
-            }
-
-            itemHolder.vibrate.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    alarm.vibrate = ((CheckBox) v).isChecked();
-                    asyncUpdateAlarm(alarm, false);
-                }
-            });
-
-            final String ringtone;
-            if (Alarm.NO_RINGTONE_URI.equals(alarm.alert)) {
-                ringtone = mContext.getResources().getString(R.string.silent_alarm_summary);
-            } else {
-                ringtone = getRingToneTitle(alarm.alert);
-            }
-            itemHolder.ringtone.setText(ringtone);
-            itemHolder.ringtone.setContentDescription(
-                    mContext.getResources().getString(R.string.ringtone_description) + " "
-                            + ringtone);
-            itemHolder.ringtone.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-                    launchRingTonePicker(alarm);
-                }
-            });
-        }
-
-        // Sets the alpha of the digital time display. This gives a visual effect
-        // for enabled/disabled and expanded/collapsed alarm while leaving the
-        // on/off switch more visible
-        private void setDigitalTimeAlpha(ItemHolder holder, boolean enabled) {
-            float alpha = enabled ? 1f : 0.69f;
-            holder.clock.setAlpha(alpha);
-        }
-
-        private void updateDaysOfWeekButtons(ItemHolder holder, DaysOfWeek daysOfWeek) {
-            HashSet<Integer> setDays = daysOfWeek.getSetDays();
-            for (int i = 0; i < 7; i++) {
-                if (setDays.contains(mDayOrder[i])) {
-                    turnOnDayOfWeek(holder, i);
-                } else {
-                    turnOffDayOfWeek(holder, i);
-                }
-            }
-        }
-
-        private void turnOffDayOfWeek(ItemHolder holder, int dayIndex) {
-            final CompoundButton dayButton = holder.dayButtons[dayIndex];
-            dayButton.setActivated(false);
-            dayButton.setChecked(false);
-            dayButton.setTextColor(getResources().getColor(R.color.clock_white));
-        }
-
-        private void turnOnDayOfWeek(ItemHolder holder, int dayIndex) {
-            final CompoundButton dayButton = holder.dayButtons[dayIndex];
-            dayButton.setActivated(true);
-            dayButton.setChecked(true);
-            dayButton.setTextColor(Utils.getCurrentHourColor());
-        }
-
-
-        /**
-         * Does a read-through cache for ringtone titles.
-         *
-         * @param uri The uri of the ringtone.
-         * @return The ringtone title. {@literal null} if no matching ringtone found.
-         */
-        private String getRingToneTitle(Uri uri) {
-            // Try the cache first
-            String title = mRingtoneTitleCache.getString(uri.toString());
-            if (title == null) {
-                // If the user cannot read the ringtone file, insert our own name rather than the
-                // ugly one returned by Ringtone.getTitle().
-                if (!AlarmUtils.hasPermissionToDisplayRingtoneTitle(mContext, uri)) {
-                    title = getString(R.string.custom_ringtone);
-                } else {
-                    // This is slow because a media player is created during Ringtone object creation.
-                    final Ringtone ringTone = RingtoneManager.getRingtone(mContext, uri);
-                    if (ringTone == null) {
-                        LogUtils.i("No ringtone for uri %s", uri.toString());
-                        return null;
-                    }
-                    title = ringTone.getTitle(mContext);
-                }
-
-                if (title != null) {
-                    mRingtoneTitleCache.putString(uri.toString(), title);
-                }
-            }
-            return title;
-        }
-
-        public void setNewAlarm(long alarmId) {
-            if (mExpandedId != alarmId) {
-                if (mExpandedItemHolder != null) {
-                    collapseAlarm(mExpandedItemHolder, true);
-                }
-                mExpandedId = alarmId;
-            }
-        }
-
-        /**
-         * Expands the alarm for editing.
-         *
-         * @param itemHolder The item holder instance.
-         */
-        private void expandAlarm(final ItemHolder itemHolder, boolean animate) {
-            // Skip animation later if item is already expanded
-            animate &= mExpandedId != itemHolder.alarm.id;
-
-            if (mExpandedItemHolder != null
-                    && mExpandedItemHolder != itemHolder
-                    && mExpandedId != itemHolder.alarm.id) {
-                // Only allow one alarm to expand at a time.
-                collapseAlarm(mExpandedItemHolder, animate);
-            }
-
-            bindExpandArea(itemHolder, itemHolder.alarm);
-
-            mExpandedId = itemHolder.alarm.id;
-            mExpandedItemHolder = itemHolder;
-
-            // Scroll the view to make sure it is fully viewed
-            mScrollAlarmId = itemHolder.alarm.id;
-
-            // Save the starting height so we can animate from this value.
-            final int startingHeight = itemHolder.alarmItem.getHeight();
-
-            // Set the expand area to visible so we can measure the height to animate to.
-            setAlarmItemBackgroundAndElevation(itemHolder.alarmItem, true /* expanded */);
-            itemHolder.expandArea.setVisibility(View.VISIBLE);
-            itemHolder.delete.setVisibility(View.VISIBLE);
-            // Show digital time in full-opaque when expanded, even when alarm is disabled
-            setDigitalTimeAlpha(itemHolder, true /* enabled */);
-
-            itemHolder.arrow.setContentDescription(getString(R.string.collapse_alarm));
-
-            if (!animate) {
-                // Set the "end" layout and don't do the animation.
-                itemHolder.arrow.setRotation(ROTATE_180_DEGREE);
-                itemHolder.summary.setVisibility(View.GONE);
-                itemHolder.hairLine.setVisibility(View.GONE);
-                itemHolder.delete.setVisibility(View.VISIBLE);
-                return;
-            }
-
-            // Mark the alarmItem as having transient state to prevent it from being recycled
-            // while it is animating.
-            itemHolder.alarmItem.setHasTransientState(true);
-
-            // Add an onPreDrawListener, which gets called after measurement but before the draw.
-            // This way we can check the height we need to animate to before any drawing.
-            // Note the series of events:
-            //  * expandArea is set to VISIBLE, which causes a layout pass
-            //  * the view is measured, and our onPreDrawListener is called
-            //  * we set up the animation using the start and end values.
-            //  * the height is set back to the starting point so it can be animated down.
-            //  * request another layout pass.
-            //  * return false so that onDraw() is not called for the single frame before
-            //    the animations have started.
-            final ViewTreeObserver observer = mAlarmsList.getViewTreeObserver();
-            observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
-                @Override
-                public boolean onPreDraw() {
-                    // We don't want to continue getting called for every listview drawing.
-                    if (observer.isAlive()) {
-                        observer.removeOnPreDrawListener(this);
-                    }
-                    // Calculate some values to help with the animation.
-                    final int endingHeight = itemHolder.alarmItem.getHeight();
-                    final int distance = endingHeight - startingHeight;
-                    final int collapseHeight = itemHolder.collapseExpandArea.getHeight();
-
-                    // Set the height back to the start state of the animation.
-                    itemHolder.alarmItem.getLayoutParams().height = startingHeight;
-                    // To allow the expandArea to glide in with the expansion animation, set a
-                    // negative top margin, which will animate down to a margin of 0 as the height
-                    // is increased.
-                    // Note that we need to maintain the bottom margin as a fixed value (instead of
-                    // just using a listview, to allow for a flatter hierarchy) to fit the bottom
-                    // bar underneath.
-                    FrameLayout.LayoutParams expandParams = (FrameLayout.LayoutParams)
-                            itemHolder.expandArea.getLayoutParams();
-                    expandParams.setMargins(0, -distance, 0, collapseHeight);
-                    itemHolder.alarmItem.requestLayout();
-
-                    // Set up the animator to animate the expansion.
-                    ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f)
-                            .setDuration(EXPAND_DURATION);
-                    animator.setInterpolator(mExpandInterpolator);
-                    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                        @Override
-                        public void onAnimationUpdate(ValueAnimator animator) {
-                            Float value = (Float) animator.getAnimatedValue();
-
-                            // For each value from 0 to 1, animate the various parts of the layout.
-                            itemHolder.alarmItem.getLayoutParams().height =
-                                    (int) (value * distance + startingHeight);
-                            FrameLayout.LayoutParams expandParams = (FrameLayout.LayoutParams)
-                                    itemHolder.expandArea.getLayoutParams();
-                            expandParams.setMargins(
-                                    0, (int) -((1 - value) * distance), 0, collapseHeight);
-                            itemHolder.arrow.setRotation(ROTATE_180_DEGREE * value);
-                            itemHolder.summary.setAlpha(1 - value);
-                            itemHolder.hairLine.setAlpha(1 - value);
-
-                            itemHolder.alarmItem.requestLayout();
-                        }
-                    });
-                    // Set everything to their final values when the animation's done.
-                    animator.addListener(new AnimatorListenerAdapter() {
-                        @Override
-                        public void onAnimationEnd(Animator animation) {
-                            // Set it back to wrap content since we'd explicitly set the height.
-                            itemHolder.alarmItem.getLayoutParams().height =
-                                    LayoutParams.WRAP_CONTENT;
-                            itemHolder.arrow.setRotation(ROTATE_180_DEGREE);
-                            itemHolder.summary.setAlpha(1);
-                            itemHolder.hairLine.setAlpha(1);
-                            itemHolder.summary.setVisibility(View.GONE);
-                            itemHolder.hairLine.setVisibility(View.GONE);
-                            itemHolder.delete.setVisibility(View.VISIBLE);
-                            itemHolder.alarmItem.setHasTransientState(false);
-                        }
-                    });
-                    animator.start();
-
-                    // Return false so this draw does not occur to prevent the final frame from
-                    // being drawn for the single frame before the animations start.
-                    return false;
-                }
-            });
-        }
-
-        private boolean isAlarmExpanded(Alarm alarm) {
-            return mExpandedId == alarm.id;
-        }
-
-        private void collapseAlarm(final ItemHolder itemHolder, boolean animate) {
-            mExpandedId = AlarmClockFragment.INVALID_ID;
-            mExpandedItemHolder = null;
-
-            // Save the starting height so we can animate from this value.
-            final int startingHeight = itemHolder.alarmItem.getHeight();
-
-            // Set the expand area to gone so we can measure the height to animate to.
-            setAlarmItemBackgroundAndElevation(itemHolder.alarmItem, false /* expanded */);
-            itemHolder.expandArea.setVisibility(View.GONE);
-            setDigitalTimeAlpha(itemHolder, itemHolder.onoff.isChecked());
-
-            itemHolder.arrow.setContentDescription(getString(R.string.expand_alarm));
-
-            if (!animate) {
-                // Set the "end" layout and don't do the animation.
-                itemHolder.arrow.setRotation(0);
-                itemHolder.hairLine.setTranslationY(0);
-                itemHolder.hairLine.setVisibility(View.VISIBLE);
-                itemHolder.summary.setAlpha(1);
-                itemHolder.summary.setVisibility(View.VISIBLE);
-                return;
-            }
-
-            // Mark the alarmItem as having transient state to prevent it from being recycled
-            // while it is animating.
-            itemHolder.alarmItem.setHasTransientState(true);
-
-            // Add an onPreDrawListener, which gets called after measurement but before the draw.
-            // This way we can check the height we need to animate to before any drawing.
-            // Note the series of events:
-            //  * expandArea is set to GONE, which causes a layout pass
-            //  * the view is measured, and our onPreDrawListener is called
-            //  * we set up the animation using the start and end values.
-            //  * expandArea is set to VISIBLE again so it can be shown animating.
-            //  * request another layout pass.
-            //  * return false so that onDraw() is not called for the single frame before
-            //    the animations have started.
-            final ViewTreeObserver observer = mAlarmsList.getViewTreeObserver();
-            observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
-                @Override
-                public boolean onPreDraw() {
-                    if (observer.isAlive()) {
-                        observer.removeOnPreDrawListener(this);
-                    }
-
-                    // Calculate some values to help with the animation.
-                    final int endingHeight = itemHolder.alarmItem.getHeight();
-                    final int distance = endingHeight - startingHeight;
-
-                    // Re-set the visibilities for the start state of the animation.
-                    itemHolder.expandArea.setVisibility(View.VISIBLE);
-                    itemHolder.delete.setVisibility(View.GONE);
-                    itemHolder.summary.setVisibility(View.VISIBLE);
-                    itemHolder.hairLine.setVisibility(View.VISIBLE);
-                    itemHolder.summary.setAlpha(1);
-
-                    // Set up the animator to animate the expansion.
-                    ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f)
-                            .setDuration(COLLAPSE_DURATION);
-                    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                        @Override
-                        public void onAnimationUpdate(ValueAnimator animator) {
-                            Float value = (Float) animator.getAnimatedValue();
-
-                            // For each value from 0 to 1, animate the various parts of the layout.
-                            itemHolder.alarmItem.getLayoutParams().height =
-                                    (int) (value * distance + startingHeight);
-                            FrameLayout.LayoutParams expandParams = (FrameLayout.LayoutParams)
-                                    itemHolder.expandArea.getLayoutParams();
-                            expandParams.setMargins(
-                                    0, (int) (value * distance), 0, mCollapseExpandHeight);
-                            itemHolder.arrow.setRotation(ROTATE_180_DEGREE * (1 - value));
-                            itemHolder.delete.setAlpha(value);
-                            itemHolder.summary.setAlpha(value);
-                            itemHolder.hairLine.setAlpha(value);
-
-                            itemHolder.alarmItem.requestLayout();
-                        }
-                    });
-                    animator.setInterpolator(mCollapseInterpolator);
-                    // Set everything to their final values when the animation's done.
-                    animator.addListener(new AnimatorListenerAdapter() {
-                        @Override
-                        public void onAnimationEnd(Animator animation) {
-                            // Set it back to wrap content since we'd explicitly set the height.
-                            itemHolder.alarmItem.getLayoutParams().height =
-                                    LayoutParams.WRAP_CONTENT;
-
-                            FrameLayout.LayoutParams expandParams = (FrameLayout.LayoutParams)
-                                    itemHolder.expandArea.getLayoutParams();
-                            expandParams.setMargins(0, 0, 0, mCollapseExpandHeight);
-
-                            itemHolder.expandArea.setVisibility(View.GONE);
-                            itemHolder.arrow.setRotation(0);
-                            itemHolder.alarmItem.setHasTransientState(false);
-                        }
-                    });
-                    animator.start();
-
-                    return false;
-                }
-            });
-        }
-
-        @Override
-        public int getViewTypeCount() {
-            return 1;
-        }
-
-        private View getViewById(long id) {
-            for (int i = 0; i < mList.getCount(); i++) {
-                View v = mList.getChildAt(i);
-                if (v != null) {
-                    ItemHolder h = (ItemHolder)(v.getTag());
-                    if (h != null && h.alarm.id == id) {
-                        return v;
-                    }
-                }
-            }
-            return null;
-        }
-
-        public long getExpandedId() {
-            return mExpandedId;
-        }
-
-        public long[] getSelectedAlarmsArray() {
-            int index = 0;
-            long[] ids = new long[mSelectedAlarms.size()];
-            for (long id : mSelectedAlarms) {
-                ids[index] = id;
-                index++;
-            }
-            return ids;
-        }
-
-        public long[] getRepeatArray() {
-            int index = 0;
-            long[] ids = new long[mRepeatChecked.size()];
-            for (long id : mRepeatChecked) {
-                ids[index] = id;
-                index++;
-            }
-            return ids;
-        }
-
-        public Bundle getPreviousDaysOfWeekMap() {
-            return mPreviousDaysOfWeekMap;
-        }
-
-        private void buildHashSetFromArray(long[] ids, HashSet<Long> set) {
-            for (long id : ids) {
-                set.add(id);
-            }
-        }
-    }
-
-    private static AlarmInstance setupAlarmInstance(Context context, Alarm alarm) {
-        ContentResolver cr = context.getContentResolver();
-        AlarmInstance newInstance = alarm.createInstanceAfter(Calendar.getInstance());
-        newInstance = AlarmInstance.addInstance(cr, newInstance);
-        // Register instance to state manager
-        AlarmStateManager.registerInstance(context, newInstance, true);
-        return newInstance;
-    }
-
-    private void asyncDeleteAlarm(final Alarm alarm) {
-        final Context context = AlarmClockFragment.this.getActivity().getApplicationContext();
-        final AsyncTask<Void, Void, Void> deleteTask = new AsyncTask<Void, Void, Void>() {
-            @Override
-            protected Void doInBackground(Void... parameters) {
-                // Activity may be closed at this point , make sure data is still valid
-                if (context != null && alarm != null) {
-                    Events.sendAlarmEvent(R.string.action_delete, R.string.label_deskclock);
-
-                    ContentResolver cr = context.getContentResolver();
-                    AlarmStateManager.deleteAllInstances(context, alarm.id);
-                    Alarm.deleteAlarm(cr, alarm.id);
-                }
-                return null;
-            }
-        };
-        mUndoShowing = true;
-        deleteTask.execute();
-    }
-
-    protected void asyncAddAlarm(final Alarm alarm) {
-        final Context context = AlarmClockFragment.this.getActivity().getApplicationContext();
-        final AsyncTask<Void, Void, AlarmInstance> updateTask =
-                new AsyncTask<Void, Void, AlarmInstance>() {
-            @Override
-            protected AlarmInstance doInBackground(Void... parameters) {
-                if (context != null && alarm != null) {
-                    Events.sendAlarmEvent(R.string.action_create, R.string.label_deskclock);
-                    ContentResolver cr = context.getContentResolver();
-
-                    // Add alarm to db
-                    Alarm newAlarm = Alarm.addAlarm(cr, alarm);
-                    mScrollToAlarmId = newAlarm.id;
-
-                    // Create and add instance to db
-                    if (newAlarm.enabled) {
-                        return setupAlarmInstance(context, newAlarm);
-                    }
-                }
-                return null;
-            }
-
-            @Override
-            protected void onPostExecute(AlarmInstance instance) {
-                if (instance != null) {
-                    AlarmUtils.popAlarmSetToast(context, instance.getAlarmTime().getTimeInMillis());
-                }
-            }
-        };
-        updateTask.execute();
-    }
-
-    protected void asyncUpdateAlarm(final Alarm alarm, final boolean popToast) {
-        final Context context = AlarmClockFragment.this.getActivity().getApplicationContext();
-        final AsyncTask<Void, Void, AlarmInstance> updateTask =
-                new AsyncTask<Void, Void, AlarmInstance>() {
-            @Override
-            protected AlarmInstance doInBackground(Void ... parameters) {
-                Events.sendAlarmEvent(R.string.action_update, R.string.label_deskclock);
-                ContentResolver cr = context.getContentResolver();
-
-                // Dismiss all old instances
-                AlarmStateManager.deleteAllInstances(context, alarm.id);
-
-                // Update alarm
-                Alarm.updateAlarm(cr, alarm);
-                if (alarm.enabled) {
-                    return setupAlarmInstance(context, alarm);
-                }
-
-                return null;
-            }
-
-            @Override
-            protected void onPostExecute(AlarmInstance instance) {
-                if (popToast && instance != null) {
-                    AlarmUtils.popAlarmSetToast(context, instance.getAlarmTime().getTimeInMillis());
-                }
-            }
-        };
-        updateTask.execute();
+    public void setSmoothScrollStableId(long stableId) {
+        mScrollToAlarmId = stableId;
     }
 
     @Override
-    public boolean onTouch(View v, MotionEvent event) {
-        hideUndoBar(true, event);
-        return false;
-    }
-
-    @Override
-    public void onFabClick(View view){
-        hideUndoBar(true, null);
+    public void onFabClick(View view) {
+        mAlarmUpdateHandler.hideUndoBar();
         startCreatingAlarm();
     }
 
     @Override
     public void setFabAppearance() {
-        final DeskClock activity = (DeskClock) getActivity();
-        if (mFab == null || activity.getSelectedTab() != DeskClock.ALARM_TAB_INDEX) {
+        if (mFab == null || getDeskClock().getSelectedTab() != DeskClock.ALARM_TAB_INDEX) {
             return;
         }
         mFab.setVisibility(View.VISIBLE);
-        mFab.setImageResource(R.drawable.ic_fab_plus);
+        mFab.setImageResource(R.drawable.ic_add_white_24dp);
         mFab.setContentDescription(getString(R.string.button_alarms));
     }
 
     @Override
     public void setLeftRightButtonAppearance() {
-        final DeskClock activity = (DeskClock) getActivity();
         if (mLeftButton == null || mRightButton == null ||
-                activity.getSelectedTab() != DeskClock.ALARM_TAB_INDEX) {
+                getDeskClock().getSelectedTab() != DeskClock.ALARM_TAB_INDEX) {
             return;
         }
         mLeftButton.setVisibility(View.INVISIBLE);
         mRightButton.setVisibility(View.INVISIBLE);
     }
+
+    private void startCreatingAlarm() {
+        mAlarmTimeClickHandler.clearSelectedAlarm();
+        TimePickerCompat.showTimeEditDialog(this, null /* alarm */,
+                DateFormat.is24HourFormat(getActivity()));
+    }
 }
diff --git a/src/com/android/deskclock/AlarmClockFragmentPostL.java b/src/com/android/deskclock/AlarmClockFragmentPostL.java
deleted file mode 100644
index f9927b1..0000000
--- a/src/com/android/deskclock/AlarmClockFragmentPostL.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.android.deskclock;
-
-import android.app.TimePickerDialog;
-import android.widget.TimePicker;
-
-import com.android.deskclock.provider.Alarm;
-
-/**
- * AlarmClockFragment for L+ devices
- */
-public class AlarmClockFragmentPostL extends AlarmClockFragment implements
-        TimePickerDialog.OnTimeSetListener {
-
-    // Callback used by TimePickerDialog
-    @Override
-    public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
-        processTimeSet(hourOfDay, minute);
-    }
-
-    @Override
-    protected void setTimePickerListener() {
-        // Do nothing
-    }
-
-    @Override
-    protected void startCreatingAlarm() {
-        // Set the "selected" alarm as null, and we'll create the new one when the timepicker
-        // comes back.
-        mSelectedAlarm = null;
-        AlarmUtils.showTimeEditDialog(this, null);
-    }
-
-    @Override
-    protected void showTimeEditDialog(Alarm alarm) {
-        AlarmUtils.showTimeEditDialog(AlarmClockFragmentPostL.this, alarm);
-    }
-}
diff --git a/src/com/android/deskclock/AlarmClockFragmentPreL.java b/src/com/android/deskclock/AlarmClockFragmentPreL.java
deleted file mode 100644
index 7a4db13..0000000
--- a/src/com/android/deskclock/AlarmClockFragmentPreL.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.android.deskclock;
-
-import android.text.format.DateFormat;
-
-import com.android.datetimepicker.time.RadialPickerLayout;
-import com.android.datetimepicker.time.TimePickerDialog;
-import com.android.deskclock.provider.Alarm;
-
-/**
- * AlarmClockFragment for pre-L devices
- */
-public class AlarmClockFragmentPreL extends AlarmClockFragment implements
-        TimePickerDialog.OnTimeSetListener {
-
-    @Override
-    public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) {
-        processTimeSet(hourOfDay, minute);
-    }
-
-    @Override
-    protected void setTimePickerListener() {
-        // Make sure to use the child FragmentManager. We have to use that one for the
-        // case where an intent comes in telling the activity to load the timepicker,
-        // which means we have to use that one everywhere so that the fragment can get
-        // correctly picked up here if it's open.
-        final TimePickerDialog tpd = (TimePickerDialog) getChildFragmentManager()
-                .findFragmentByTag(AlarmUtils.FRAG_TAG_TIME_PICKER);
-        if (tpd != null) {
-            // The dialog is already open so we need to set the listener again.
-            tpd.setOnTimeSetListener(this);
-        }
-    }
-
-    @Override
-    protected void startCreatingAlarm() {
-        // Set the "selected" alarm as null, and we'll create the new one when the timepicker
-        // comes back.
-        mSelectedAlarm = null;
-        AlarmUtils.showTimeEditDialog(getChildFragmentManager(),
-                null, AlarmClockFragmentPreL.this, DateFormat.is24HourFormat(getActivity()));
-    }
-
-    @Override
-    public void showTimeEditDialog(Alarm alarm) {
-        AlarmUtils.showTimeEditDialog(getChildFragmentManager(),
-            alarm, AlarmClockFragmentPreL.this, DateFormat.is24HourFormat(getActivity()));
-    }
-}
diff --git a/src/com/android/deskclock/AlarmInitReceiver.java b/src/com/android/deskclock/AlarmInitReceiver.java
index 30c1920..fcfaefb 100644
--- a/src/com/android/deskclock/AlarmInitReceiver.java
+++ b/src/com/android/deskclock/AlarmInitReceiver.java
@@ -16,19 +16,25 @@
 
 package com.android.deskclock;
 
+import android.annotation.SuppressLint;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.os.PowerManager.WakeLock;
 
 import com.android.deskclock.alarms.AlarmStateManager;
-import com.android.deskclock.timer.TimerObj;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.events.Events;
 
 public class AlarmInitReceiver extends BroadcastReceiver {
 
-    // A flag that indicates that switching the volume button default was done
-    private static final String PREF_VOLUME_DEF_DONE = "vol_def_done";
+    /**
+     * When running on N devices, we're interested in the boot completed event that is sent while
+     * the user is still locked, so that we can schedule alarms.
+     */
+    @SuppressLint("InlinedApi")
+    private static final String ACTION_BOOT_COMPLETED = Utils.isNOrLater()
+            ? Intent.ACTION_LOCKED_BOOT_COMPLETED : Intent.ACTION_BOOT_COMPLETED;
 
     /**
      * This receiver handles a variety of actions:
@@ -36,16 +42,16 @@
      * <ul>
      *     <li>Clean up backup data that was recently restored to this device on
      *     ACTION_COMPLETE_RESTORE.</li>
-     *     <li>Clean up backup data that was recently restored to this device and reset timers and
-     *     clear stopwatch on ACTION_BOOT_COMPLETED</li>
+     *     <li>Reset timers and stopwatch on ACTION_BOOT_COMPLETED</li>
      *     <li>Fix alarm states on ACTION_BOOT_COMPLETED, TIME_SET, TIMEZONE_CHANGED,
      *     and LOCALE_CHANGED</li>
+     *     <li>Rebuild notifications on MY_PACKAGE_REPLACED</li>
      * </ul>
      */
     @Override
     public void onReceive(final Context context, Intent intent) {
         final String action = intent.getAction();
-        LogUtils.v("AlarmInitReceiver " + action);
+        LogUtils.i("AlarmInitReceiver " + action);
 
         final PendingResult result = goAsync();
         final WakeLock wl = AlarmAlertWakeLock.createPartialWakeLock(context);
@@ -54,34 +60,25 @@
         // We need to increment the global id out of the async task to prevent race conditions
         AlarmStateManager.updateGlobalIntentId(context);
 
+        // Clear stopwatch data and reset timers because they rely on elapsed real-time values
+        // which are meaningless after a device reboot.
+        if (ACTION_BOOT_COMPLETED.equals(action)) {
+            DataModel.getDataModel().clearLaps();
+            DataModel.getDataModel().resetStopwatch();
+            Events.sendStopwatchEvent(R.string.action_reset, R.string.label_reboot);
+            DataModel.getDataModel().resetTimers(R.string.label_reboot);
+        }
+
+        // Notifications are canceled by the system on application upgrade. This broadcast signals
+        // that the new app is free to rebuild the notifications using the existing data.
+        if (Intent.ACTION_MY_PACKAGE_REPLACED.equals(action)) {
+            DataModel.getDataModel().updateAllNotifications();
+        }
+
         AsyncHandler.post(new Runnable() {
-            @Override public void run() {
-                // When running on N devices, we're interested in the boot
-                // completed event that is sent while the user is still locked,
-                // so that we can schedule alarms.
-                final boolean bootCompleted;
-                if (Utils.isNOrLater()) {
-                    bootCompleted = Intent.ACTION_LOCKED_BOOT_COMPLETED.equals(action);
-                } else {
-                    bootCompleted = Intent.ACTION_BOOT_COMPLETED.equals(action);
-                }
-
+            @Override
+            public void run() {
                 try {
-                    if (bootCompleted) {
-                        // Clear stopwatch and timers data
-                        final SharedPreferences prefs =
-                                Utils.getDefaultSharedPreferences(context);
-                        LogUtils.v("AlarmInitReceiver - Reset timers and clear stopwatch data");
-                        TimerObj.resetTimersInSharedPrefs(prefs);
-                        Utils.clearSwSharedPref(prefs);
-
-                        if (!prefs.getBoolean(PREF_VOLUME_DEF_DONE, false)) {
-                            // Fix the default
-                            LogUtils.v("AlarmInitReceiver - resetting volume button default");
-                            switchVolumeButtonDefault(prefs);
-                        }
-                    }
-
                     // Process restored data if any exists
                     if (!DeskClockBackupAgent.processRestoredData(context)) {
                         // Update all the alarm instances on time change event
@@ -95,15 +92,4 @@
             }
         });
     }
-
-    private void switchVolumeButtonDefault(SharedPreferences prefs) {
-        SharedPreferences.Editor editor = prefs.edit();
-
-        editor.putString(SettingsActivity.KEY_VOLUME_BEHAVIOR,
-            SettingsActivity.DEFAULT_VOLUME_BEHAVIOR);
-
-        // Make sure we do it only once
-        editor.putBoolean(PREF_VOLUME_DEF_DONE, true);
-        editor.apply();
-    }
 }
diff --git a/src/com/android/deskclock/AlarmListeners.java b/src/com/android/deskclock/AlarmListeners.java
deleted file mode 100644
index 1f01b09..0000000
--- a/src/com/android/deskclock/AlarmListeners.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.view.View;
-
-/** Change me */
-public class AlarmListeners {
-
-    public static class DigitalClockClickListener implements View.OnClickListener {
-
-        private int alarmId;
-
-        public DigitalClockClickListener(int alarmId) {
-            this.alarmId = alarmId;
-        }
-
-        @Override
-        public void onClick(View view) {
-
-        }
-    }
-
-}
diff --git a/src/com/android/deskclock/AlarmSelectionActivity.java b/src/com/android/deskclock/AlarmSelectionActivity.java
index 85e258d..f046996 100644
--- a/src/com/android/deskclock/AlarmSelectionActivity.java
+++ b/src/com/android/deskclock/AlarmSelectionActivity.java
@@ -22,7 +22,6 @@
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Parcelable;
-import android.util.ArrayMap;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ListView;
@@ -33,14 +32,12 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 public class AlarmSelectionActivity extends ListActivity {
 
     public static final String EXTRA_ALARMS = "com.android.deskclock.EXTRA_ALARMS";
 
     private final List<AlarmSelection> mSelections = new ArrayList<>();
-    private final Map<Long, Alarm> mAlarmsMap = new ArrayMap<>();
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -71,7 +68,6 @@
         // so no need to check if alarmsFromIntent is empty
         for (Parcelable parcelable : alarmsFromIntent) {
             final Alarm alarm = (Alarm) parcelable;
-            mAlarmsMap.put(alarm.id, alarm);
 
             // filling mSelections that go into the UI picker list
             final String label = String.format("%d %02d", alarm.hour, alarm.minutes);
diff --git a/src/com/android/deskclock/AlarmUtils.java b/src/com/android/deskclock/AlarmUtils.java
index 8dcfcd2..5f91a00 100644
--- a/src/com/android/deskclock/AlarmUtils.java
+++ b/src/com/android/deskclock/AlarmUtils.java
@@ -16,25 +16,17 @@
 
 package com.android.deskclock;
 
-import android.Manifest;
-import android.annotation.TargetApi;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.app.TimePickerDialog;
 import android.content.Context;
-import android.content.pm.PackageManager;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Build;
-import android.provider.Settings;
 import android.support.annotation.VisibleForTesting;
+import android.support.design.widget.Snackbar;
 import android.text.format.DateFormat;
 import android.text.format.DateUtils;
+import android.view.View;
 import android.widget.Toast;
 
-import com.android.deskclock.provider.Alarm;
 import com.android.deskclock.provider.AlarmInstance;
+import com.android.deskclock.widget.toast.SnackbarManager;
+import com.android.deskclock.widget.toast.ToastManager;
 
 import java.util.Calendar;
 import java.util.Locale;
@@ -43,113 +35,19 @@
  * Static utility methods for Alarms.
  */
 public class AlarmUtils {
-    public static final String FRAG_TAG_TIME_PICKER = "time_dialog";
 
     public static String getFormattedTime(Context context, Calendar time) {
-        String pattern;
-        if (Utils.isJBMR2OrLater()) {
-            final String skeleton = DateFormat.is24HourFormat(context) ? "EHm" : "Ehma";
-            pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
-            return (String) DateFormat.format(pattern, time);
-        } else {
-            pattern = DateFormat.is24HourFormat(context)
-                    ? context.getString(R.string.weekday_time_format_24_mode)
-                    : context.getString(R.string.weekday_time_format_12_mode);
-        }
+        final String skeleton = DateFormat.is24HourFormat(context) ? "EHm" : "Ehma";
+        final String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
         return (String) DateFormat.format(pattern, time);
     }
 
-    public static String getAlarmText(Context context, AlarmInstance instance) {
+    public static String getAlarmText(Context context, AlarmInstance instance,
+            boolean includeLabel) {
         String alarmTimeStr = getFormattedTime(context, instance.getAlarmTime());
-        return !instance.mLabel.isEmpty() ? alarmTimeStr + " - " + instance.mLabel
-                : alarmTimeStr;
-    }
-
-    // show time picker dialog for pre-L devices
-    public static void showTimeEditDialog(FragmentManager manager, final Alarm alarm,
-          com.android.datetimepicker.time.TimePickerDialog.OnTimeSetListener listener,
-          boolean is24HourMode) {
-
-        final int hour, minutes;
-        if (alarm == null) {
-            hour = 0;
-            minutes = 0;
-        } else {
-            hour = alarm.hour;
-            minutes = alarm.minutes;
-        }
-        com.android.datetimepicker.time.TimePickerDialog dialog =
-                com.android.datetimepicker.time.TimePickerDialog.newInstance(listener,
-                    hour, minutes, is24HourMode);
-        dialog.setThemeDark(true);
-
-        // Make sure the dialog isn't already added.
-        manager.executePendingTransactions();
-        final FragmentTransaction ft = manager.beginTransaction();
-        final Fragment prev = manager.findFragmentByTag(FRAG_TAG_TIME_PICKER);
-        if (prev != null) {
-            ft.remove(prev);
-        }
-        ft.commit();
-
-        if (!dialog.isAdded()) {
-            dialog.show(manager, FRAG_TAG_TIME_PICKER);
-        }
-    }
-
-    /**
-     * Show the time picker dialog for post-L devices.
-     * This is called from AlarmClockFragment to set alarm.
-     * @param fragment The calling fragment (which is also a onTimeSetListener),
-     *                 we use it as the target fragment of the TimePickerFragment, so later the
-     *                 latter can retrieve it and set it as its onTimeSetListener when the fragment
-     *                 is recreated.
-     * @param alarm The clicked alarm, it can be null if user was clicking the fab instead.
-     */
-    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
-    public static void showTimeEditDialog(Fragment fragment, final Alarm alarm) {
-        final FragmentManager manager = fragment.getFragmentManager();
-        final FragmentTransaction ft = manager.beginTransaction();
-        final Fragment prev = manager.findFragmentByTag(FRAG_TAG_TIME_PICKER);
-        if (prev != null) {
-            ft.remove(prev);
-        }
-        ft.commit();
-        final TimePickerFragment timePickerFragment = new TimePickerFragment();
-        timePickerFragment.setTargetFragment(fragment, 0);
-        timePickerFragment.setOnTimeSetListener((TimePickerDialog.OnTimeSetListener) fragment);
-        timePickerFragment.setAlarm(alarm);
-        timePickerFragment.show(manager, FRAG_TAG_TIME_PICKER);
-    }
-
-    /**
-     * @return {@code true} iff the user has granted permission to read the ringtone at the given
-     *      uri or no permission is required to read the ringtone
-     */
-    public static boolean hasPermissionToDisplayRingtoneTitle(Context context, Uri ringtoneUri) {
-        final PackageManager pm = context.getPackageManager();
-        final String packageName = context.getPackageName();
-
-        // If the default alarm alert ringtone URI is given, resolve it to the actual URI.
-        if (Settings.System.DEFAULT_ALARM_ALERT_URI.equals(ringtoneUri)) {
-            ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context,
-                    RingtoneManager.TYPE_ALARM);
-        }
-
-        // If no ringtone is specified, return true.
-        if (ringtoneUri == null || ringtoneUri == Alarm.NO_RINGTONE_URI) {
-            return true;
-        }
-
-        // If the permission is already granted, return true.
-        if (pm.checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, packageName)
-                == PackageManager.PERMISSION_GRANTED) {
-            return true;
-        }
-
-        // If the ringtone is internal, return true;
-        // external ringtones require the permission to see their title
-        return ringtoneUri.toString().startsWith("content://media/internal/");
+        return (instance.mLabel.isEmpty() || !includeLabel)
+                ? alarmTimeStr
+                : alarmTimeStr + " - " + instance.mLabel;
     }
 
     /**
@@ -192,7 +90,15 @@
         final long alarmTimeDelta = alarmTime - System.currentTimeMillis();
         final String text = formatElapsedTimeUntilAlarm(context, alarmTimeDelta);
         Toast toast = Toast.makeText(context, text, Toast.LENGTH_LONG);
-        ToastMaster.setToast(toast);
+        ToastManager.setToast(toast);
         toast.show();
     }
+
+    public static void popAlarmSetSnackbar(View snackbarAnchor, long alarmTime) {
+        final long alarmTimeDelta = alarmTime - System.currentTimeMillis();
+        final String text = formatElapsedTimeUntilAlarm(
+                snackbarAnchor.getContext(), alarmTimeDelta);
+        SnackbarManager.show(Snackbar.make(snackbarAnchor, text, Snackbar.LENGTH_SHORT));
+        snackbarAnchor.announceForAccessibility(text);
+    }
 }
diff --git a/src/com/android/deskclock/AndroidClockTextView.java b/src/com/android/deskclock/AndroidClockTextView.java
deleted file mode 100644
index 9c1735a..0000000
--- a/src/com/android/deskclock/AndroidClockTextView.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2010 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.Paint;
-import android.graphics.Typeface;
-import android.util.AttributeSet;
-import android.widget.TextView;
-
-/**
- * Displays text using the special AndroidClock font.
- */
-public class AndroidClockTextView extends TextView {
-
-    private static final String SYSTEM = "/system/fonts/";
-    private static final String SYSTEM_FONT_TIME_BACKGROUND = SYSTEM + "AndroidClock.ttf";
-
-    private static final String ATTR_USE_CLOCK_TYPEFACE = "useClockTypeface";
-
-    private static Typeface sClockTypeface;
-    private static Typeface sStandardTypeface;
-
-    private boolean mUseClockTypeface;
-
-    public AndroidClockTextView(Context context) {
-        super(context);
-    }
-
-    public AndroidClockTextView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        mUseClockTypeface = attrs.getAttributeBooleanValue(null, ATTR_USE_CLOCK_TYPEFACE, true)
-                && !isInEditMode();
-
-        sStandardTypeface = Typeface.DEFAULT;
-        if (sClockTypeface == null && mUseClockTypeface) {
-            sClockTypeface = Typeface.createFromFile(SYSTEM_FONT_TIME_BACKGROUND);
-        }
-
-        Paint paint = getPaint();
-        paint.setTypeface(mUseClockTypeface ? sClockTypeface : sStandardTypeface);
-    }
-}
diff --git a/src/com/android/deskclock/AsyncRingtonePlayer.java b/src/com/android/deskclock/AsyncRingtonePlayer.java
index 4416aab..8a794a6 100644
--- a/src/com/android/deskclock/AsyncRingtonePlayer.java
+++ b/src/com/android/deskclock/AsyncRingtonePlayer.java
@@ -12,7 +12,9 @@
 import android.os.HandlerThread;
 import android.os.Looper;
 import android.os.Message;
+import android.preference.PreferenceManager;
 import android.telephony.TelephonyManager;
+import android.text.format.DateUtils;
 
 import java.io.IOException;
 import java.lang.reflect.Method;
@@ -39,16 +41,19 @@
  *     the android.permission.READ_EXTERNAL_STORAGE permission has no effect on playback in M+.</li>
  * </ul>
  */
-public class AsyncRingtonePlayer {
+public final class AsyncRingtonePlayer {
 
     private static final String TAG = "AsyncRingtonePlayer";
 
+    private static final String DEFAULT_CRESCENDO_LENGTH = "0";
+
     // Volume suggested by media team for in-call alarms.
     private static final float IN_CALL_VOLUME = 0.125f;
 
     // Message codes used with the ringtone thread.
     private static final int EVENT_PLAY = 1;
     private static final int EVENT_STOP = 2;
+    private static final int EVENT_VOLUME = 3;
     private static final String RINGTONE_URI_KEY = "RINGTONE_URI_KEY";
 
     /** Handler running on the ringtone thread. */
@@ -60,28 +65,49 @@
     /** The context. */
     private final Context mContext;
 
-    public AsyncRingtonePlayer(Context context) {
+    /** The key of the preference that controls the crescendo behavior when playing a ringtone. */
+    private final String mCrescendoPrefKey;
+
+    /**
+     * @param crescendoPrefKey the key to the user preference that defines the crescendo behavior
+     *                         associated with this ringtone player
+     */
+    public AsyncRingtonePlayer(Context context, String crescendoPrefKey) {
         mContext = context;
+        mCrescendoPrefKey = crescendoPrefKey;
     }
 
     /** Plays the ringtone. */
     public void play(Uri ringtoneUri) {
         LogUtils.d(TAG, "Posting play.");
-        postMessage(EVENT_PLAY, ringtoneUri);
+        postMessage(EVENT_PLAY, ringtoneUri, 0);
     }
 
     /** Stops playing the ringtone. */
     public void stop() {
         LogUtils.d(TAG, "Posting stop.");
-        postMessage(EVENT_STOP, null);
+        postMessage(EVENT_STOP, null, 0);
+    }
+
+    /** Schedules an adjustment of the playback volume 50ms in the future. */
+    private void scheduleVolumeAdjustment() {
+        LogUtils.v(TAG, "Adjusting volume.");
+
+        // Ensure we never have more than one volume adjustment queued.
+        mHandler.removeMessages(EVENT_VOLUME);
+
+        // Queue the next volume adjustment.
+        postMessage(EVENT_VOLUME, null, 50);
     }
 
     /**
      * Posts a message to the ringtone-thread handler.
      *
      * @param messageCode The message to post.
+     * @param ringtoneUri The ringtone in question, if any.
+     * @param delayMillis The amount of time to delay sending the message, if any.
      */
-    private void postMessage(int messageCode, Uri ringtoneUri) {
+    private void postMessage(int messageCode, Uri ringtoneUri, long delayMillis) {
         synchronized (this) {
             if (mHandler == null) {
                 mHandler = getNewHandler();
@@ -93,7 +119,8 @@
                 bundle.putParcelable(RINGTONE_URI_KEY, ringtoneUri);
                 message.setData(bundle);
             }
-            message.sendToTarget();
+
+            mHandler.sendMessageDelayed(message, delayMillis);
         }
     }
 
@@ -110,11 +137,18 @@
                 switch (msg.what) {
                     case EVENT_PLAY:
                         final Uri ringtoneUri = msg.getData().getParcelable(RINGTONE_URI_KEY);
-                        getPlaybackDelegate().play(mContext, ringtoneUri);
+                        if (getPlaybackDelegate().play(mContext, ringtoneUri)) {
+                            scheduleVolumeAdjustment();
+                        }
                         break;
                     case EVENT_STOP:
                         getPlaybackDelegate().stop(mContext);
                         break;
+                    case EVENT_VOLUME:
+                        if (getPlaybackDelegate().adjustVolume(mContext)) {
+                            scheduleVolumeAdjustment();
+                        }
+                        break;
                 }
             }
         };
@@ -134,7 +168,7 @@
      */
     private static Uri getInCallRingtoneUri(Context context) {
         final String packageName = context.getPackageName();
-        return Uri.parse("android.resource://" + packageName + "/" + R.raw.in_call_alarm);
+        return Uri.parse("android.resource://" + packageName + "/" + R.raw.alarm_expire);
     }
 
     /**
@@ -142,13 +176,64 @@
      */
     private static Uri getFallbackRingtoneUri(Context context) {
         final String packageName = context.getPackageName();
-        return Uri.parse("android.resource://" + packageName + "/" + R.raw.fallbackring);
+        return Uri.parse("android.resource://" + packageName + "/" + R.raw.alarm_expire);
+    }
+
+    /**
+     * Check if the executing thread is the one dedicated to controlling the ringtone playback.
+     */
+    private void checkAsyncRingtonePlayerThread() {
+        if (Looper.myLooper() != mHandler.getLooper()) {
+            LogUtils.e(TAG, "Must be on the AsyncRingtonePlayer thread!",
+                    new IllegalStateException());
+        }
+    }
+
+    /**
+     * @param currentTime current time of the device
+     * @param stopTime time at which the crescendo finishes
+     * @param duration length of time over which the crescendo occurs
+     * @return the scalar volume value that produces a linear increase in volume (in decibels)
+     */
+    private static float computeVolume(long currentTime, long stopTime, long duration) {
+        // Compute the percentage of the crescendo that has completed.
+        final float elapsedCrescendoTime = stopTime - currentTime;
+        final float fractionComplete = 1 - (elapsedCrescendoTime / duration);
+
+        // Use the fraction to compute a target decibel between -40dB (near silent) and 0dB (max).
+        final float gain = (fractionComplete * 40) - 40;
+
+        // Convert the target gain (in decibels) into the corresponding volume scalar.
+        final float volume = (float) Math.pow(10f, gain/20f);
+
+        LogUtils.v(TAG, "Ringtone crescendo %,.2f%% complete (scalar: %f, volume: %f dB)",
+                fractionComplete * 100, volume, gain);
+
+        return volume;
+    }
+
+    /**
+     * @return {@code true} iff the crescendo duration is more than 0 seconds
+     */
+    private boolean isCrescendoEnabled(Context context) {
+        return getCrescendoDurationMillis(context) > 0;
+    }
+
+    /**
+     * @return the duration of the crescendo in milliseconds
+     */
+    private long getCrescendoDurationMillis(Context context) {
+        final String crescendoSecondsStr = Utils.getDefaultSharedPreferences(context)
+                .getString(mCrescendoPrefKey, DEFAULT_CRESCENDO_LENGTH);
+        return Integer.parseInt(crescendoSecondsStr) * DateUtils.SECOND_IN_MILLIS;
     }
 
     /**
      * @return the platform-specific playback delegate to use to play the ringtone
      */
     private PlaybackDelegate getPlaybackDelegate() {
+        checkAsyncRingtonePlayerThread();
+
         if (mPlaybackDelegate == null) {
             if (Utils.isMOrLater()) {
                 // Use the newer Ringtone-based playback delegate because it does not require
@@ -169,14 +254,22 @@
      * vs {@link MediaPlayer}.
      */
     private interface PlaybackDelegate {
-        void play(Context context, Uri ringtoneUri);
+        /**
+         * @return {@code true} iff a {@link #adjustVolume volume adjustment} should be scheduled
+         */
+        boolean play(Context context, Uri ringtoneUri);
         void stop(Context context);
+
+        /**
+         * @return {@code true} iff another volume adjustment should be scheduled
+         */
+        boolean adjustVolume(Context context);
     }
 
     /**
      * Loops playback of a ringtone using {@link MediaPlayer}.
      */
-    private static class MediaPlayerPlaybackDelegate implements PlaybackDelegate {
+    private class MediaPlayerPlaybackDelegate implements PlaybackDelegate {
 
         /** The audio focus manager. Only used by the ringtone thread. */
         private AudioManager mAudioManager;
@@ -184,14 +277,18 @@
         /** Non-{@code null} while playing a ringtone; {@code null} otherwise. */
         private MediaPlayer mMediaPlayer;
 
+        /** The duration over which to increase the volume. */
+        private long mCrescendoDuration = 0;
+
+        /** The time at which the crescendo shall cease; 0 if no crescendo is present. */
+        private long mCrescendoStopTime = 0;
+
         /**
          * Starts the actual playback of the ringtone. Executes on ringtone-thread.
          */
         @Override
-        public void play(final Context context, Uri ringtoneUri) {
-            if (Looper.getMainLooper() == Looper.myLooper()) {
-                LogUtils.e(TAG, "Must not be on the main thread!", new IllegalStateException());
-            }
+        public boolean play(final Context context, Uri ringtoneUri) {
+            checkAsyncRingtonePlayerThread();
 
             LogUtils.i(TAG, "Play ringtone via android.media.MediaPlayer.");
 
@@ -216,6 +313,7 @@
                 }
             });
 
+            boolean scheduleVolumeAdjustment = false;
             try {
                 // Check if we are in a call. If we are, use the in-call alarm resource at a
                 // low volume to not disrupt the call.
@@ -223,6 +321,13 @@
                     LogUtils.v("Using the in-call alarm");
                     mMediaPlayer.setVolume(IN_CALL_VOLUME, IN_CALL_VOLUME);
                     alarmNoise = getInCallRingtoneUri(context);
+                } else if (isCrescendoEnabled(context)) {
+                    mMediaPlayer.setVolume(0, 0);
+
+                    // Compute the time at which the crescendo will stop.
+                    mCrescendoDuration = getCrescendoDurationMillis(context);
+                    mCrescendoStopTime = System.currentTimeMillis() + mCrescendoDuration;
+                    scheduleVolumeAdjustment = true;
                 }
 
                 // If alarmNoise is a custom ringtone on the sd card the app must be granted
@@ -231,6 +336,7 @@
                 mMediaPlayer.setDataSource(context, alarmNoise);
 
                 startAlarm(mMediaPlayer);
+                scheduleVolumeAdjustment = true;
             } catch (Throwable t) {
                 LogUtils.e("Use the fallback ringtone, original was " + alarmNoise, t);
                 // The alarmNoise may be on the sd card which could be busy right now.
@@ -245,6 +351,8 @@
                     LogUtils.e("Failed to play fallback ringtone", t2);
                 }
             }
+
+            return scheduleVolumeAdjustment;
         }
 
         /**
@@ -274,26 +382,62 @@
          */
         @Override
         public void stop(Context context) {
-            if (Looper.getMainLooper() == Looper.myLooper()) {
-                LogUtils.e(TAG, "Must not be on the main thread!", new IllegalStateException());
-            }
+            checkAsyncRingtonePlayerThread();
 
             LogUtils.i(TAG, "Stop ringtone via android.media.MediaPlayer.");
 
+            mCrescendoDuration = 0;
+            mCrescendoStopTime = 0;
+
             // Stop audio playing
             if (mMediaPlayer != null) {
                 mMediaPlayer.stop();
-                mAudioManager.abandonAudioFocus(null);
                 mMediaPlayer.release();
                 mMediaPlayer = null;
             }
+
+            if (mAudioManager != null) {
+                mAudioManager.abandonAudioFocus(null);
+            }
+        }
+
+        /**
+         * Adjusts the volume of the ringtone being played to create a crescendo effect.
+         */
+        @Override
+        public boolean adjustVolume(Context context) {
+            checkAsyncRingtonePlayerThread();
+
+            // If media player is absent or not playing, ignore volume adjustment.
+            if (mMediaPlayer == null || !mMediaPlayer.isPlaying()) {
+                mCrescendoDuration = 0;
+                mCrescendoStopTime = 0;
+                return false;
+            }
+
+            // If the crescendo is complete set the volume to the maximum; we're done.
+            final long currentTime = System.currentTimeMillis();
+            if (currentTime > mCrescendoStopTime) {
+                mCrescendoDuration = 0;
+                mCrescendoStopTime = 0;
+                mMediaPlayer.setVolume(1, 1);
+                return false;
+            }
+
+            // The current volume of the crescendo is the percentage of the crescendo completed.
+            final float volume = computeVolume(currentTime, mCrescendoStopTime, mCrescendoDuration);
+            mMediaPlayer.setVolume(volume, volume);
+            LogUtils.i(TAG, "MediaPlayer volume set to " + volume);
+
+            // Schedule the next volume bump in the crescendo.
+            return true;
         }
     }
 
     /**
      * Loops playback of a ringtone using {@link Ringtone}.
      */
-    private static class RingtonePlaybackDelegate implements PlaybackDelegate {
+    private class RingtonePlaybackDelegate implements PlaybackDelegate {
 
         /** The audio focus manager. Only used by the ringtone thread. */
         private AudioManager mAudioManager;
@@ -307,6 +451,12 @@
         /** The method to adjust playback looping; cannot be null. */
         private Method mSetLoopingMethod;
 
+        /** The duration over which to increase the volume. */
+        private long mCrescendoDuration = 0;
+
+        /** The time at which the crescendo shall cease; 0 if no crescendo is present. */
+        private long mCrescendoStopTime = 0;
+
         private RingtonePlaybackDelegate() {
             try {
                 mSetVolumeMethod = Ringtone.class.getDeclaredMethod("setVolume", float.class);
@@ -325,10 +475,8 @@
          * Starts the actual playback of the ringtone. Executes on ringtone-thread.
          */
         @Override
-        public void play(Context context, Uri ringtoneUri) {
-            if (Looper.getMainLooper() == Looper.myLooper()) {
-                LogUtils.e(TAG, "Must not be on the main thread!", new IllegalStateException());
-            }
+        public boolean play(Context context, Uri ringtoneUri) {
+            checkAsyncRingtonePlayerThread();
 
             LogUtils.i(TAG, "Play ringtone via android.media.Ringtone.");
 
@@ -344,6 +492,12 @@
             // attempt to fetch the specified ringtone
             mRingtone = RingtoneManager.getRingtone(context, ringtoneUri);
 
+            if (mRingtone == null) {
+                // fall back to the default ringtone
+                final Uri defaultUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
+                mRingtone = RingtoneManager.getRingtone(context, defaultUri);
+            }
+
             // Attempt to enable looping the ringtone.
             try {
                 mSetLoopingMethod.invoke(mRingtone, true);
@@ -355,16 +509,11 @@
                 mRingtone = null;
             }
 
-            if (mRingtone == null) {
-                // fall back to the default ringtone
-                final Uri defaultUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
-                mRingtone = RingtoneManager.getRingtone(context, defaultUri);
-            }
-
             // if we don't have a ringtone at this point there isn't much recourse
             if (mRingtone == null) {
-                LogUtils.i(TAG, "Unable to locate alarm ringtone.");
-                return;
+                LogUtils.i(TAG, "Unable to locate alarm ringtone, using internal fallback " +
+                        "ringtone.");
+                mRingtone = RingtoneManager.getRingtone(context, getFallbackRingtoneUri(context));
             }
 
             if (Utils.isLOrLater()) {
@@ -375,18 +524,38 @@
             }
 
             // Attempt to adjust the ringtone volume if the user is in a telephone call.
+            boolean scheduleVolumeAdjustment = false;
             if (inTelephoneCall) {
                 LogUtils.v("Using the in-call alarm");
-                try {
-                    mSetVolumeMethod.invoke(mRingtone, IN_CALL_VOLUME);
-                } catch (Exception e) {
-                    LogUtils.e(TAG, "Unable to set in-call volume for android.media.Ringtone", e);
-                }
+                setRingtoneVolume(IN_CALL_VOLUME);
+            } else if (isCrescendoEnabled(context)) {
+                setRingtoneVolume(0);
+
+                // Compute the time at which the crescendo will stop.
+                mCrescendoDuration = getCrescendoDurationMillis(context);
+                mCrescendoStopTime = System.currentTimeMillis() + mCrescendoDuration;
+                scheduleVolumeAdjustment = true;
             }
 
             mAudioManager.requestAudioFocus(null, AudioManager.STREAM_ALARM,
                     AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
             mRingtone.play();
+
+            return scheduleVolumeAdjustment;
+        }
+
+        /**
+         * Sets the volume of the ringtone.
+         *
+         * @param volume a raw scalar in range 0.0 to 1.0, where 0.0 mutes this player, and 1.0
+         *               corresponds to no attenuation being applied.
+         */
+        private void setRingtoneVolume(float volume) {
+            try {
+                mSetVolumeMethod.invoke(mRingtone, volume);
+            } catch (Exception e) {
+                LogUtils.e(TAG, "Unable to set volume for android.media.Ringtone", e);
+            }
         }
 
         /**
@@ -394,21 +563,54 @@
          */
         @Override
         public void stop(Context context) {
-            if (Looper.getMainLooper() == Looper.myLooper()) {
-                LogUtils.e(TAG, "Must not be on the main thread!", new IllegalStateException());
-            }
+            checkAsyncRingtonePlayerThread();
 
             LogUtils.i(TAG, "Stop ringtone via android.media.Ringtone.");
 
+            mCrescendoDuration = 0;
+            mCrescendoStopTime = 0;
+
             if (mRingtone != null && mRingtone.isPlaying()) {
                 LogUtils.d(TAG, "Ringtone.stop() invoked.");
                 mRingtone.stop();
             }
 
+            mRingtone = null;
+
             if (mAudioManager != null) {
                 mAudioManager.abandonAudioFocus(null);
             }
         }
+
+        /**
+         * Adjusts the volume of the ringtone being played to create a crescendo effect.
+         */
+        @Override
+        public boolean adjustVolume(Context context) {
+            checkAsyncRingtonePlayerThread();
+
+            // If ringtone is absent or not playing, ignore volume adjustment.
+            if (mRingtone == null || !mRingtone.isPlaying()) {
+                mCrescendoDuration = 0;
+                mCrescendoStopTime = 0;
+                return false;
+            }
+
+            // If the crescendo is complete set the volume to the maximum; we're done.
+            final long currentTime = System.currentTimeMillis();
+            if (currentTime > mCrescendoStopTime) {
+                mCrescendoDuration = 0;
+                mCrescendoStopTime = 0;
+                setRingtoneVolume(1);
+                return false;
+            }
+
+            final float volume = computeVolume(currentTime, mCrescendoStopTime, mCrescendoDuration);
+            setRingtoneVolume(volume);
+
+            // Schedule the next volume bump in the crescendo.
+            return true;
+        }
     }
 }
 
diff --git a/src/com/android/deskclock/CircleButtonsLayout.java b/src/com/android/deskclock/CircleButtonsLayout.java
index 163cdc9..a00d6cb 100644
--- a/src/com/android/deskclock/CircleButtonsLayout.java
+++ b/src/com/android/deskclock/CircleButtonsLayout.java
@@ -1,7 +1,9 @@
 package com.android.deskclock;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.util.AttributeSet;
+import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.ImageButton;
 import android.widget.TextView;
@@ -13,25 +15,22 @@
  * the label text near the top. The maximum text size for the label text view is also calculated.
  */
 public class CircleButtonsLayout extends FrameLayout {
-    private Context mContext;
+
     private int mCircleTimerViewId;
     private int mResetAddButtonId;
     private int mLabelId;
-    private float mStrokeSize;
     private float mDiamOffset;
-    private CircleTimerView mCtv;
+    private View mCircleView;
     private ImageButton mResetAddButton;
     private TextView mLabel;
 
     @SuppressWarnings("unused")
     public CircleButtonsLayout(Context context) {
         this(context, null);
-        mContext = context;
     }
 
     public CircleButtonsLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
-        mContext = context;
     }
 
     public void setCircleTimerViewIds(int circleTimerViewId, int stopButtonId,  int labelId) {
@@ -39,11 +38,11 @@
         mResetAddButtonId = stopButtonId;
         mLabelId = labelId;
 
-        float dotStrokeSize = mContext.getResources().getDimension(R.dimen.circletimer_dot_size);
-        float markerStrokeSize =
-                mContext.getResources().getDimension(R.dimen.circletimer_marker_size);
-        mStrokeSize = mContext.getResources().getDimension(R.dimen.circletimer_circle_size);
-        mDiamOffset = Utils.calculateRadiusOffset(mStrokeSize, dotStrokeSize, markerStrokeSize) * 2;
+        final Resources res = getContext().getResources();
+        final float strokeSize = res.getDimension(R.dimen.circletimer_circle_size);
+        final float dotStrokeSize = res.getDimension(R.dimen.circletimer_dot_size);
+        final float markerStrokeSize = res.getDimension(R.dimen.circletimer_marker_size);
+        mDiamOffset = Utils.calculateRadiusOffset(strokeSize, dotStrokeSize, markerStrokeSize) * 2;
     }
 
     @Override
@@ -57,19 +56,19 @@
     }
 
     protected void remeasureViews() {
-        if (mCtv == null) {
-            mCtv = (CircleTimerView) findViewById(mCircleTimerViewId);
-            if (mCtv == null) {
+        if (mCircleView == null) {
+            mCircleView = findViewById(mCircleTimerViewId);
+            if (mCircleView == null) {
                 return;
             }
             mResetAddButton = (ImageButton) findViewById(mResetAddButtonId);
             mLabel = (TextView) findViewById(mLabelId);
         }
 
-        int frameWidth = mCtv.getMeasuredWidth();
-        int frameHeight = mCtv.getMeasuredHeight();
-        int minBound = Math.min(frameWidth, frameHeight);
-        int circleDiam = (int) (minBound - mDiamOffset);
+        final int frameWidth = mCircleView.getMeasuredWidth();
+        final int frameHeight = mCircleView.getMeasuredHeight();
+        final int minBound = Math.min(frameWidth, frameHeight);
+        final int circleDiam = (int) (minBound - mDiamOffset);
 
         if (mResetAddButton != null) {
             final MarginLayoutParams resetAddParams = (MarginLayoutParams) mResetAddButton
@@ -81,7 +80,6 @@
         }
 
         if (mLabel != null) {
-            // label will be null if this is a stopwatch, which does not have a label.
             MarginLayoutParams labelParams = (MarginLayoutParams) mLabel.getLayoutParams();
             labelParams.topMargin = circleDiam/6;
             if (minBound == frameWidth) {
diff --git a/src/com/android/deskclock/CircleTimerView.java b/src/com/android/deskclock/CircleTimerView.java
deleted file mode 100644
index 83d0cc7..0000000
--- a/src/com/android/deskclock/CircleTimerView.java
+++ /dev/null
@@ -1,261 +0,0 @@
-package com.android.deskclock;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.RectF;
-import android.util.AttributeSet;
-import android.view.View;
-
-import com.android.deskclock.stopwatch.Stopwatches;
-
-/**
- * Class to draw a circle for timers and stopwatches.
- * These two usages require two different animation modes:
- * Timer counts down. In this mode the animation is counter-clockwise and stops at 0.
- * Stopwatch counts up. In this mode the animation is clockwise and will run until stopped.
- */
-public class CircleTimerView extends View {
-
-    private int mAccentColor;
-    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 boolean mAnimate = false;
-    private static float mStrokeSize = 4;
-    private static float mDotRadius = 6;
-    private static float mMarkerStrokeSize = 2;
-    private final Paint mPaint = new Paint();
-    private final Paint mFill = new Paint();
-    private final RectF mArcRect = new RectF();
-    private float mRadiusOffset;   // amount to remove from radius to account for markers on circle
-    private float mScreenDensity;
-
-    // Stopwatch mode is the default.
-    private boolean mTimerMode = false;
-
-    @SuppressWarnings("unused")
-    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;
-        postInvalidate();
-    }
-
-    public void setMarkerTime(long t) {
-        mMarkerTime = t;
-        postInvalidate();
-    }
-
-    public void reset() {
-        mIntervalStartTime = -1;
-        mMarkerTime = -1;
-        postInvalidate();
-    }
-    public void startIntervalAnimation() {
-        mIntervalStartTime = Utils.getTimeNow();
-        mAnimate = true;
-        invalidate();
-        mPaused = false;
-    }
-    public void stopIntervalAnimation() {
-        mAnimate = false;
-        mIntervalStartTime = -1;
-        mAccumulatedTime = 0;
-    }
-
-    public boolean isAnimating() {
-        return (mIntervalStartTime != -1);
-    }
-
-    public void pauseIntervalAnimation() {
-        mAnimate = false;
-        mAccumulatedTime += Utils.getTimeNow() - mIntervalStartTime;
-        mPaused = true;
-    }
-
-    public void abortIntervalAnimation() {
-        mAnimate = false;
-    }
-
-    public void setPassedTime(long time, boolean drawRed) {
-        // The onDraw() method checks if mIntervalStartTime has been set before drawing any red.
-        // Without drawRed, mIntervalStartTime should not be set here at all, and would remain at -1
-        // when the state is reconfigured after exiting and re-entering the application.
-        // If the timer is currently running, this drawRed will not be set, and will have no effect
-        // because mIntervalStartTime will be set when the thread next runs.
-        // When the timer is not running, mIntervalStartTime will not be set upon loading the state,
-        // and no red will be drawn, so drawRed is used to force onDraw() to draw the red portion,
-        // despite the timer not running.
-        mCurrentIntervalTime = mAccumulatedTime = time;
-        if (drawRed) {
-            mIntervalStartTime = Utils.getTimeNow();
-        }
-        postInvalidate();
-    }
-
-
-
-    private void init(Context c) {
-
-        Resources resources = c.getResources();
-        mStrokeSize = resources.getDimension(R.dimen.circletimer_circle_size);
-        float dotDiameter = resources.getDimension(R.dimen.circletimer_dot_size);
-        mMarkerStrokeSize = resources.getDimension(R.dimen.circletimer_marker_size);
-        mRadiusOffset = Utils.calculateRadiusOffset(
-                mStrokeSize, dotDiameter, mMarkerStrokeSize);
-        mPaint.setAntiAlias(true);
-        mPaint.setStyle(Paint.Style.STROKE);
-        mWhiteColor = resources.getColor(R.color.clock_white);
-        mAccentColor = Utils.obtainStyledColor(c, R.attr.colorAccent, Color.RED);
-        mScreenDensity = resources.getDisplayMetrics().density;
-        mFill.setAntiAlias(true);
-        mFill.setStyle(Paint.Style.FILL);
-        mFill.setColor(mAccentColor);
-        mDotRadius = dotDiameter / 2f;
-    }
-
-    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) - mRadiusOffset;
-
-        if (mIntervalStartTime == -1) {
-            // just draw a complete white circle, no red arc needed
-            mPaint.setColor(mWhiteColor);
-            canvas.drawCircle (xCenter, yCenter, radius, mPaint);
-            if (mTimerMode) {
-                drawRedDot(canvas, 0f, xCenter, yCenter, radius);
-            }
-        } else {
-            if (mAnimate) {
-                mCurrentIntervalTime = Utils.getTimeNow() - mIntervalStartTime + mAccumulatedTime;
-            }
-            //draw a combination of red and white arcs to create a circle
-            mArcRect.top = yCenter - radius;
-            mArcRect.bottom = yCenter + radius;
-            mArcRect.left =  xCenter - radius;
-            mArcRect.right = xCenter + radius;
-            float redPercent = (float)mCurrentIntervalTime / (float)mIntervalTime;
-            // prevent timer from doing more than one full circle
-            redPercent = (redPercent > 1 && mTimerMode) ? 1 : redPercent;
-
-            float whitePercent = 1 - (redPercent > 1 ? 1 : redPercent);
-            // draw red arc here
-            mPaint.setColor(mAccentColor);
-            if (mTimerMode){
-                canvas.drawArc (mArcRect, 270, - redPercent * 360 , false, mPaint);
-            } else {
-                canvas.drawArc (mArcRect, 270, + redPercent * 360 , false, mPaint);
-            }
-
-            // draw white arc here
-            mPaint.setStrokeWidth(mStrokeSize);
-            mPaint.setColor(mWhiteColor);
-            if (mTimerMode) {
-                canvas.drawArc(mArcRect, 270, + whitePercent * 360, false, mPaint);
-            } else {
-                canvas.drawArc(mArcRect, 270 + (1 - whitePercent) * 360,
-                        whitePercent * 360, false, mPaint);
-            }
-
-            if (mMarkerTime != -1 && radius > 0 && mIntervalTime != 0) {
-                mPaint.setStrokeWidth(mMarkerStrokeSize);
-                float angle = (float)(mMarkerTime % mIntervalTime) / (float)mIntervalTime * 360;
-                // draw 2dips thick marker
-                // the formula to draw the marker 1 unit thick is:
-                // 180 / (radius * Math.PI)
-                // after that we have to scale it by the screen density
-                canvas.drawArc (mArcRect, 270 + angle, mScreenDensity *
-                        (float) (360 / (radius * Math.PI)) , false, mPaint);
-            }
-            drawRedDot(canvas, redPercent, xCenter, yCenter, radius);
-        }
-        if (mAnimate) {
-            postInvalidateOnAnimation();
-        }
-   }
-
-    protected void drawRedDot(
-            Canvas canvas, float degrees, int xCenter, int yCenter, float radius) {
-        mPaint.setColor(mAccentColor);
-        float dotPercent;
-        if (mTimerMode) {
-            dotPercent = 270 - degrees * 360;
-        } else {
-            dotPercent = 270 + degrees * 360;
-        }
-
-        final double dotRadians = Math.toRadians(dotPercent);
-        canvas.drawCircle(xCenter + (float) (radius * Math.cos(dotRadians)),
-                yCenter + (float) (radius * Math.sin(dotRadians)), mDotRadius, mFill);
-    }
-
-    public static final String PREF_CTV_PAUSED  = "_ctv_paused";
-    public static final String PREF_CTV_INTERVAL  = "_ctv_interval";
-    public static final String PREF_CTV_INTERVAL_START = "_ctv_interval_start";
-    public static final String PREF_CTV_CURRENT_INTERVAL = "_ctv_current_interval";
-    public static final String PREF_CTV_ACCUM_TIME = "_ctv_accum_time";
-    public static final String PREF_CTV_TIMER_MODE = "_ctv_timer_mode";
-    public static final String PREF_CTV_MARKER_TIME = "_ctv_marker_time";
-
-    // Since this view is used in multiple places, use the key to save different instances
-    public void writeToSharedPref(SharedPreferences prefs, String key) {
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.putBoolean (key + PREF_CTV_PAUSED, mPaused);
-        editor.putLong (key + PREF_CTV_INTERVAL, mIntervalTime);
-        editor.putLong (key + PREF_CTV_INTERVAL_START, mIntervalStartTime);
-        editor.putLong (key + PREF_CTV_CURRENT_INTERVAL, mCurrentIntervalTime);
-        editor.putLong (key + PREF_CTV_ACCUM_TIME, mAccumulatedTime);
-        editor.putLong (key + PREF_CTV_MARKER_TIME, mMarkerTime);
-        editor.putBoolean (key + PREF_CTV_TIMER_MODE, mTimerMode);
-        editor.apply();
-    }
-
-    public void readFromSharedPref(SharedPreferences prefs, String key) {
-        mPaused = prefs.getBoolean(key + PREF_CTV_PAUSED, false);
-        mIntervalTime = prefs.getLong(key + PREF_CTV_INTERVAL, 0);
-        mIntervalStartTime = prefs.getLong(key + PREF_CTV_INTERVAL_START, -1);
-        mCurrentIntervalTime = prefs.getLong(key + PREF_CTV_CURRENT_INTERVAL, 0);
-        mAccumulatedTime = prefs.getLong(key + PREF_CTV_ACCUM_TIME, 0);
-        mMarkerTime = prefs.getLong(key + PREF_CTV_MARKER_TIME, -1);
-        mTimerMode = prefs.getBoolean(key + PREF_CTV_TIMER_MODE, false);
-        mAnimate = (mIntervalStartTime != -1 && !mPaused);
-    }
-
-    public void clearSharedPref(SharedPreferences prefs, String key) {
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.remove (Stopwatches.PREF_START_TIME);
-        editor.remove (Stopwatches.PREF_ACCUM_TIME);
-        editor.remove (Stopwatches.PREF_STATE);
-        editor.remove (key + PREF_CTV_PAUSED);
-        editor.remove (key + PREF_CTV_INTERVAL);
-        editor.remove (key + PREF_CTV_INTERVAL_START);
-        editor.remove (key + PREF_CTV_CURRENT_INTERVAL);
-        editor.remove (key + PREF_CTV_ACCUM_TIME);
-        editor.remove (key + PREF_CTV_MARKER_TIME);
-        editor.remove (key + PREF_CTV_TIMER_MODE);
-        editor.apply();
-    }
-}
diff --git a/src/com/android/deskclock/ClockFragment.java b/src/com/android/deskclock/ClockFragment.java
index a14044a..c9b339f 100644
--- a/src/com/android/deskclock/ClockFragment.java
+++ b/src/com/android/deskclock/ClockFragment.java
@@ -22,13 +22,10 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 import android.database.ContentObserver;
-import android.os.Build;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
-import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -36,293 +33,398 @@
 import android.view.View.OnTouchListener;
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
+import android.widget.BaseAdapter;
 import android.widget.ListView;
 import android.widget.TextClock;
+import android.widget.TextView;
 
-import com.android.deskclock.worldclock.CitiesActivity;
-import com.android.deskclock.worldclock.WorldClockAdapter;
+import com.android.deskclock.data.City;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.worldclock.CitySelectionActivity;
+
+import java.util.Calendar;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import static android.view.View.GONE;
+import static android.view.View.INVISIBLE;
+import static android.view.View.VISIBLE;
+import static java.util.Calendar.DAY_OF_WEEK;
 
 /**
- * Fragment that shows  the clock (analog or digital), the next alarm info and the world clock.
+ * Fragment that shows the clock (analog or digital), the next alarm info and the world clock.
  */
-public class ClockFragment extends DeskClockFragment implements OnSharedPreferenceChangeListener {
+public final class ClockFragment extends DeskClockFragment {
 
-    private static final String BUTTONS_HIDDEN_KEY = "buttons_hidden";
-    private static final boolean PRE_L_DEVICE =
-            Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP;
-    private final static String TAG = "ClockFragment";
+    // Updates the UI in response to system setting changes that alter time values and time display.
+    private final BroadcastReceiver mBroadcastReceiver = new SystemBroadcastReceiver();
 
-    private boolean mButtonsHidden = false;
-    private View mDigitalClock, mAnalogClock, mClockFrame, mHairline;
-    private WorldClockAdapter mAdapter;
-    private ListView mList;
-    private SharedPreferences mPrefs;
+    // Updates dates in the UI on every quarter-hour.
+    private final Runnable mQuarterHourUpdater = new QuarterHourRunnable();
+
+    // Detects changes to the next scheduled alarm pre-L.
+    private ContentObserver mAlarmObserver;
+
+    private Handler mHandler;
+
+    private TextClock mDigitalClock;
+    private View mAnalogClock, mClockFrame;
+    private SelectedCitiesAdapter mCityAdapter;
+    private ListView mCityList;
     private String mDateFormat;
     private String mDateFormatForAccessibility;
-    private String mDefaultClockStyle;
-    private String mClockStyle;
 
-    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            String action = intent.getAction();
-            boolean changed = action.equals(Intent.ACTION_TIME_CHANGED)
-                    || action.equals(Intent.ACTION_TIMEZONE_CHANGED)
-                    || action.equals(Intent.ACTION_LOCALE_CHANGED);
-            if (changed) {
-                Utils.updateDate(mDateFormat, mDateFormatForAccessibility, mClockFrame);
-                if (mAdapter != null) {
-                    // *CHANGED may modify the need for showing the Home City
-                    if (mAdapter.hasHomeCity() != mAdapter.needHomeCity()) {
-                        mAdapter.reloadData(context);
-                    } else {
-                        mAdapter.notifyDataSetChanged();
-                    }
-                    // Locale change: update digital clock format and
-                    // reload the cities list with new localized names
-                    if (action.equals(Intent.ACTION_LOCALE_CHANGED)) {
-                        if (mDigitalClock != null) {
-                            Utils.setTimeFormat(context,
-                                (TextClock) mDigitalClock.findViewById(R.id.digital_clock),
-                                context.getResources().getDimensionPixelSize(
-                                    R.dimen.main_ampm_font_size));
-                        }
-                        mAdapter.loadCitiesDb(context);
-                        mAdapter.notifyDataSetChanged();
-                    }
-                }
-                Utils.setQuarterHourUpdater(mHandler, mQuarterHourUpdater);
-            }
-            if (changed || action.equals(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED)) {
-                Utils.refreshAlarm(getActivity(), mClockFrame);
-            }
-        }
-    };
+    /** The public no-arg constructor required by all fragments. */
+    public ClockFragment() {}
 
-    private final Handler mHandler = new Handler();
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
 
-    /* Register ContentObserver to see alarm changes for pre-L */
-    private final ContentObserver mAlarmObserver = PRE_L_DEVICE
-            ? new ContentObserver(mHandler) {
-                @Override
-                public void onChange(boolean selfChange) {
-                    Utils.refreshAlarm(ClockFragment.this.getActivity(), mClockFrame);
-                }
-            }
-            : null;
-
-    // Thread that runs on every quarter-hour and refreshes the date.
-    private final Runnable mQuarterHourUpdater = new Runnable() {
-        @Override
-        public void run() {
-            // Update the main and world clock dates
-            Utils.updateDate(mDateFormat, mDateFormatForAccessibility, mClockFrame);
-            if (mAdapter != null) {
-                mAdapter.notifyDataSetChanged();
-            }
-            Utils.setQuarterHourUpdater(mHandler, mQuarterHourUpdater);
-        }
-    };
-
-    public ClockFragment() {
+        mHandler = new Handler();
+        mAlarmObserver = Utils.isPreL() ? new AlarmObserverPreL(mHandler) : null;
     }
 
     @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);
-        if (icicle != null) {
-            mButtonsHidden = icicle.getBoolean(BUTTONS_HIDDEN_KEY, false);
-        }
-        mList = (ListView) v.findViewById(R.id.cities);
-        mList.setDivider(null);
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle icicle) {
+        super.onCreateView(inflater, container, icicle);
 
-        OnTouchListener longPressNightMode = new OnTouchListener() {
-            private float mMaxMovementAllowed = -1;
-            private int mLongPressTimeout = -1;
-            private float mLastTouchX
-                    ,
-                    mLastTouchY;
+        final OnTouchListener startScreenSaverListener = new StartScreenSaverListener();
+        final View footerView = inflater.inflate(R.layout.blank_footer_view, mCityList, false);
+        final View fragmentView = inflater.inflate(R.layout.clock_fragment, container, false);
 
-            @Override
-            public boolean onTouch(View v, MotionEvent event) {
-                if (mMaxMovementAllowed == -1) {
-                    mMaxMovementAllowed = ViewConfiguration.get(getActivity()).getScaledTouchSlop();
-                    mLongPressTimeout = ViewConfiguration.getLongPressTimeout();
-                }
+        mCityAdapter = new SelectedCitiesAdapter(getActivity());
 
-                switch (event.getAction()) {
-                    case (MotionEvent.ACTION_DOWN):
-                        long time = Utils.getTimeNow();
-                        mHandler.postDelayed(new Runnable() {
-                            @Override
-                            public void run() {
-                                startActivity(new Intent(getActivity(), ScreensaverActivity.class));
-                            }
-                        }, mLongPressTimeout);
-                        mLastTouchX = event.getX();
-                        mLastTouchY = event.getY();
-                        return true;
-                    case (MotionEvent.ACTION_MOVE):
-                        float xDiff = Math.abs(event.getX() - mLastTouchX);
-                        float yDiff = Math.abs(event.getY() - mLastTouchY);
-                        if (xDiff >= mMaxMovementAllowed || yDiff >= mMaxMovementAllowed) {
-                            mHandler.removeCallbacksAndMessages(null);
-                        }
-                        break;
-                    default:
-                        mHandler.removeCallbacksAndMessages(null);
-                }
-                return false;
-            }
-        };
+        mCityList = (ListView) fragmentView.findViewById(R.id.cities);
+        mCityList.setDivider(null);
+        mCityList.setAdapter(mCityAdapter);
+        mCityList.addFooterView(footerView, null, false);
+        mCityList.setOnTouchListener(startScreenSaverListener);
 
         // On tablet landscape, the clock frame will be a distinct view. Otherwise, it'll be added
         // on as a header to the main listview.
-        mClockFrame = v.findViewById(R.id.main_clock_left_pane);
-        mHairline = v.findViewById(R.id.hairline);
+        mClockFrame = fragmentView.findViewById(R.id.main_clock_left_pane);
         if (mClockFrame == null) {
-            mClockFrame = inflater.inflate(R.layout.main_clock_frame, mList, false);
-            mHairline = mClockFrame.findViewById(R.id.hairline);
-            mHairline.setVisibility(View.VISIBLE);
-            mList.addHeaderView(mClockFrame, null, false);
+            mClockFrame = inflater.inflate(R.layout.main_clock_frame, mCityList, false);
+            mCityList.addHeaderView(mClockFrame, null, false);
+            final View hairline = mClockFrame.findViewById(R.id.hairline);
+            hairline.setVisibility(mCityAdapter.getCount() == 0 ? GONE : VISIBLE);
         } else {
-            mHairline.setVisibility(View.GONE);
+            final View hairline = mClockFrame.findViewById(R.id.hairline);
+            hairline.setVisibility(GONE);
             // The main clock frame needs its own touch listener for night mode now.
-            v.setOnTouchListener(longPressNightMode);
-        }
-        mList.setOnTouchListener(longPressNightMode);
-
-        // If the current layout has a fake overflow menu button, let the parent
-        // activity set up its click and touch listeners.
-        View menuButton = v.findViewById(R.id.menu_button);
-        if (menuButton != null) {
-            setupFakeOverflowMenuButton(menuButton);
+            fragmentView.setOnTouchListener(startScreenSaverListener);
         }
 
-        mDigitalClock = mClockFrame.findViewById(R.id.digital_clock);
+        mDigitalClock = (TextClock) mClockFrame.findViewById(R.id.digital_clock);
         mAnalogClock = mClockFrame.findViewById(R.id.analog_clock);
-        Utils.setTimeFormat(getActivity(),
-            (TextClock) mDigitalClock.findViewById(R.id.digital_clock),
-            getResources().getDimensionPixelSize(R.dimen.main_ampm_font_size));
-        View footerView = inflater.inflate(R.layout.blank_footer_view, mList, false);
-        mList.addFooterView(footerView, null, false);
-        mAdapter = new WorldClockAdapter(getActivity());
-        if (mAdapter.getCount() == 0) {
-            mHairline.setVisibility(View.GONE);
-        }
-        mList.setAdapter(mAdapter);
+        return fragmentView;
+    }
 
-        mPrefs = Utils.getDefaultSharedPreferences(getActivity());
-        mDefaultClockStyle = getActivity().getResources().getString(R.string.default_clock_style);
-        return v;
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        Utils.setTimeFormat(getActivity(), mDigitalClock);
     }
 
     @Override
     public void onResume() {
         super.onResume();
 
-        final DeskClock activity = (DeskClock) getActivity();
-        if (activity.getSelectedTab() == DeskClock.CLOCK_TAB_INDEX) {
-            setFabAppearance();
-            setLeftRightButtonAppearance();
-        }
+        final Activity activity = getActivity();
+        setFabAppearance();
+        setLeftRightButtonAppearance();
 
-        mPrefs.registerOnSharedPreferenceChangeListener(this);
         mDateFormat = getString(R.string.abbrev_wday_month_day_no_year);
         mDateFormatForAccessibility = getString(R.string.full_wday_month_day_no_year);
 
+        // Schedule a runnable to update the date every quarter hour.
         Utils.setQuarterHourUpdater(mHandler, mQuarterHourUpdater);
-        // Besides monitoring when quarter-hour changes, monitor other actions that
-        // effect clock time
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
+
+        // Watch for system events that effect clock time or format.
+        final IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_TIME_CHANGED);
         filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
-        filter.addAction(Intent.ACTION_LOCALE_CHANGED);
-        activity.registerReceiver(mIntentReceiver, filter);
+        filter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
+        activity.registerReceiver(mBroadcastReceiver, filter);
 
-        // Resume can invoked after changing the cities list or a change in locale
-        if (mAdapter != null) {
-            mAdapter.loadCitiesDb(activity);
-            mAdapter.reloadData(activity);
+        // Resume can be invoked after changing the clock style.
+        Utils.setClockStyle(mDigitalClock, mAnalogClock);
+
+        final View view = getView();
+        if (view != null && view.findViewById(R.id.main_clock_left_pane) != null) {
+            // Center the main clock frame by hiding the world clocks when none are selected.
+            mCityList.setVisibility(mCityAdapter.getCount() == 0 ? GONE : VISIBLE);
         }
-        // Resume can invoked after changing the clock style.
-        View clockView = Utils.setClockStyle(activity, mDigitalClock, mAnalogClock,
-                SettingsActivity.KEY_CLOCK_STYLE);
-        mClockStyle = (clockView == mDigitalClock ?
-                Utils.CLOCK_TYPE_DIGITAL : Utils.CLOCK_TYPE_ANALOG);
 
-        // Center the main clock frame if cities are empty.
-        if (getView().findViewById(R.id.main_clock_left_pane) != null && mAdapter.getCount() == 0) {
-            mList.setVisibility(View.GONE);
-        } else {
-            mList.setVisibility(View.VISIBLE);
-        }
-        mAdapter.notifyDataSetChanged();
+        refreshDates();
+        refreshAlarm();
 
-        Utils.updateDate(mDateFormat, mDateFormatForAccessibility, mClockFrame);
-        Utils.refreshAlarm(activity, mClockFrame);
-        if (PRE_L_DEVICE) {
-            activity.getContentResolver().registerContentObserver(
-                Settings.System.getUriFor(Settings.System.NEXT_ALARM_FORMATTED),
-                false,
-                mAlarmObserver);
+        if (mAlarmObserver != null) {
+            final Uri uri = Settings.System.getUriFor(Settings.System.NEXT_ALARM_FORMATTED);
+            activity.getContentResolver().registerContentObserver(uri, false, mAlarmObserver);
         }
     }
 
     @Override
     public void onPause() {
         super.onPause();
-        mPrefs.unregisterOnSharedPreferenceChangeListener(this);
         Utils.cancelQuarterHourUpdater(mHandler, mQuarterHourUpdater);
-        Activity activity = getActivity();
-        activity.unregisterReceiver(mIntentReceiver);
-        if (PRE_L_DEVICE) {
+
+        final Activity activity = getActivity();
+        activity.unregisterReceiver(mBroadcastReceiver);
+        if (mAlarmObserver != null) {
             activity.getContentResolver().unregisterContentObserver(mAlarmObserver);
         }
     }
 
     @Override
-    public void onSaveInstanceState(Bundle outState) {
-        outState.putBoolean(BUTTONS_HIDDEN_KEY, mButtonsHidden);
-        super.onSaveInstanceState(outState);
-    }
-
-    @Override
-    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
-        if (key == SettingsActivity.KEY_CLOCK_STYLE) {
-            mClockStyle = prefs.getString(SettingsActivity.KEY_CLOCK_STYLE, mDefaultClockStyle);
-            mAdapter.notifyDataSetChanged();
-        }
-    }
-
-    @Override
     public void onFabClick(View view) {
-        final Activity activity = getActivity();
-        startActivity(new Intent(activity, CitiesActivity.class));
+        startActivity(new Intent(getActivity(), CitySelectionActivity.class));
     }
 
     @Override
     public void setFabAppearance() {
-        final DeskClock activity = (DeskClock) getActivity();
-        if (mFab == null || activity.getSelectedTab() != DeskClock.CLOCK_TAB_INDEX) {
+        if (mFab == null || getSelectedTab() != DeskClock.CLOCK_TAB_INDEX) {
             return;
         }
-        mFab.setVisibility(View.VISIBLE);
-        mFab.setImageResource(R.drawable.ic_globe);
+
+        mFab.setVisibility(VISIBLE);
+        mFab.setImageResource(R.drawable.ic_language_white_24dp);
         mFab.setContentDescription(getString(R.string.button_cities));
     }
 
     @Override
     public void setLeftRightButtonAppearance() {
-        final DeskClock activity = (DeskClock) getActivity();
-        if (mLeftButton == null || mRightButton == null ||
-                activity.getSelectedTab() != DeskClock.CLOCK_TAB_INDEX) {
+        if (getSelectedTab() != DeskClock.CLOCK_TAB_INDEX) {
             return;
         }
-        mLeftButton.setVisibility(View.INVISIBLE);
-        mRightButton.setVisibility(View.INVISIBLE);
+
+        if (mLeftButton != null) {
+            mLeftButton.setVisibility(INVISIBLE);
+        }
+
+        if (mRightButton != null) {
+            mRightButton.setVisibility(INVISIBLE);
+        }
+    }
+
+    /**
+     * Refresh the displayed dates in response to a change that may have changed them.
+     */
+    private void refreshDates() {
+        // Refresh the date in the main clock.
+        Utils.updateDate(mDateFormat, mDateFormatForAccessibility, mClockFrame);
+
+        // Refresh the day-of-week in each world clock.
+        mCityAdapter.notifyDataSetChanged();
+    }
+
+    /**
+     * Refresh the next alarm time.
+     */
+    private void refreshAlarm() {
+        Utils.refreshAlarm(getActivity(), mClockFrame);
+    }
+
+    /**
+     * Long pressing over the main clock or any world clock item starts the screen saver.
+     */
+    private final class StartScreenSaverListener implements OnTouchListener, Runnable {
+
+        private float mTouchSlop = -1;
+        private int mLongPressTimeout = -1;
+        private float mLastTouchX, mLastTouchY;
+
+        @Override
+        public boolean onTouch(View v, MotionEvent event) {
+            if (mTouchSlop == -1) {
+                mTouchSlop = ViewConfiguration.get(getActivity()).getScaledTouchSlop();
+                mLongPressTimeout = ViewConfiguration.getLongPressTimeout();
+            }
+
+            switch (event.getAction()) {
+                case (MotionEvent.ACTION_DOWN):
+                    // Create and post a runnable to start the screen saver in the future.
+                    mHandler.postDelayed(this, mLongPressTimeout);
+                    mLastTouchX = event.getX();
+                    mLastTouchY = event.getY();
+                    return true;
+
+                case (MotionEvent.ACTION_MOVE):
+                    final float xDiff = Math.abs(event.getX() - mLastTouchX);
+                    final float yDiff = Math.abs(event.getY() - mLastTouchY);
+                    if (xDiff >= mTouchSlop || yDiff >= mTouchSlop) {
+                        mHandler.removeCallbacks(this);
+                    }
+                    break;
+                default:
+                    mHandler.removeCallbacks(this);
+            }
+            return false;
+        }
+
+        @Override
+        public void run() {
+            startActivity(new Intent(getActivity(), ScreensaverActivity.class));
+        }
+    }
+
+    /**
+     * This runnable executes at every quarter-hour (e.g. 1:00, 1:15, 1:30, 1:45, etc...) and
+     * updates the dates displayed within the UI. Quarter-hour increments were chosen to accommodate
+     * the "weirdest" timezones (e.g. Nepal is UTC/GMT +05:45).
+     */
+    private final class QuarterHourRunnable implements Runnable {
+        @Override
+        public void run() {
+            refreshDates();
+
+            // Schedule the next quarter-hour callback.
+            Utils.setQuarterHourUpdater(mHandler, mQuarterHourUpdater);
+        }
+    }
+
+    /**
+     * Prior to L, a ContentObserver was used to monitor changes to the next scheduled alarm.
+     * In L and beyond this is accomplished via a system broadcast of
+     * {@link AlarmManager#ACTION_NEXT_ALARM_CLOCK_CHANGED}.
+     */
+    private final class AlarmObserverPreL extends ContentObserver {
+        public AlarmObserverPreL(Handler handler) {
+            super(handler);
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            Utils.refreshAlarm(getActivity(), mClockFrame);
+        }
+    }
+
+    /**
+     * Handle system broadcasts that influence the display of this fragment. Since this fragment
+     * displays time-related information, ACTION_TIME_CHANGED and ACTION_TIMEZONE_CHANGED both
+     * alter the actual time values displayed. ACTION_NEXT_ALARM_CLOCK_CHANGED indicates the time at
+     * which the next alarm will fire has changed.
+     */
+    private final class SystemBroadcastReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            switch (intent.getAction()) {
+                case Intent.ACTION_TIME_CHANGED:
+                case Intent.ACTION_TIMEZONE_CHANGED:
+                    refreshDates();
+
+                case AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED:
+                    refreshAlarm();
+            }
+        }
+    }
+
+    /**
+     * This adapter lists all of the selected world clocks. Optionally, it also includes a clock at
+     * the top for the home timezone if "Automatic home clock" is turned on in settings and the
+     * current time at home does not match the current time in the timezone of the current location.
+     */
+    private static final class SelectedCitiesAdapter extends BaseAdapter {
+
+        private final LayoutInflater mInflater;
+        private final Context mContext;
+
+        public SelectedCitiesAdapter(Context context) {
+            mContext = context;
+            mInflater = LayoutInflater.from(context);
+        }
+
+        @Override
+        public int getCount() {
+            final int homeClockCount = getShowHomeClock() ? 1 : 0;
+            final int worldClockCount = getCities().size();
+            return homeClockCount + worldClockCount;
+        }
+
+        @Override
+        public Object getItem(int position) {
+            if (getShowHomeClock()) {
+                return position == 0 ? getHomeCity() : getCities().get(position - 1);
+            }
+
+            return getCities().get(position);
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public View getView(int position, View view, ViewGroup parent) {
+            // Retrieve the city to bind.
+            final City city = (City) getItem(position);
+
+            // Inflate a new view for the city, if necessary.
+            if (view == null) {
+                view = mInflater.inflate(R.layout.world_clock_list_item, parent, false);
+            }
+
+            final View clock = view.findViewById(R.id.city_left);
+
+            // Configure the digital clock or analog clock depending on the user preference.
+            final TextClock digitalClock = (TextClock) clock.findViewById(R.id.digital_clock);
+            final AnalogClock analogClock = (AnalogClock) clock.findViewById(R.id.analog_clock);
+            if (DataModel.getDataModel().getClockStyle() == DataModel.ClockStyle.ANALOG) {
+                digitalClock.setVisibility(GONE);
+                analogClock.setVisibility(VISIBLE);
+                analogClock.setTimeZone(city.getTimeZoneId());
+                analogClock.enableSeconds(false);
+            } else {
+                digitalClock.setVisibility(VISIBLE);
+                analogClock.setVisibility(GONE);
+                digitalClock.setTimeZone(city.getTimeZoneId());
+                Utils.setTimeFormat(mContext, digitalClock);
+            }
+
+            // Bind the city name.
+            final TextView name = (TextView) clock.findViewById(R.id.city_name);
+            name.setText(city.getName());
+
+            // Compute if the city week day matches the weekday of the current timezone.
+            final Calendar localCal = Calendar.getInstance(TimeZone.getDefault());
+            final Calendar cityCal = Calendar.getInstance(city.getTimeZone());
+            final boolean displayDayOfWeek = localCal.get(DAY_OF_WEEK) != cityCal.get(DAY_OF_WEEK);
+
+            // Bind the week day display.
+            final TextView dayOfWeek = (TextView) clock.findViewById(R.id.city_day);
+            dayOfWeek.setVisibility(displayDayOfWeek ? VISIBLE : GONE);
+            if (displayDayOfWeek) {
+                final Locale locale = Locale.getDefault();
+                final String weekday = cityCal.getDisplayName(DAY_OF_WEEK, Calendar.SHORT, locale);
+                dayOfWeek.setText(mContext.getString(R.string.world_day_of_week_label, weekday));
+            }
+
+            return view;
+        }
+
+        /**
+         * @return {@code false} to prevent the cities from responding to touch
+         */
+        @Override
+        public boolean isEnabled(int position) {
+            return false;
+        }
+
+        private City getHomeCity() {
+            return DataModel.getDataModel().getHomeCity();
+        }
+
+        private List<City> getCities() {
+            return DataModel.getDataModel().getSelectedCities();
+        }
+
+        private boolean getShowHomeClock() {
+            return DataModel.getDataModel().getShowHomeClock();
+        }
     }
 }
diff --git a/src/com/android/deskclock/DeskClock.java b/src/com/android/deskclock/DeskClock.java
index 0a4fafa..e0189a0 100644
--- a/src/com/android/deskclock/DeskClock.java
+++ b/src/com/android/deskclock/DeskClock.java
@@ -18,116 +18,161 @@
 
 import android.app.Fragment;
 import android.app.FragmentManager;
-import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.res.Configuration;
 import android.media.AudioManager;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
 import android.support.annotation.VisibleForTesting;
+import android.support.design.widget.TabLayout;
+import android.support.design.widget.TabLayout.Tab;
+import android.support.design.widget.TabLayout.ViewPagerOnTabSelectedListener;
 import android.support.v13.app.FragmentPagerAdapter;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.view.ViewPager;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.ActionBar.Tab;
+import android.support.v4.view.ViewPager.OnPageChangeListener;
 import android.support.v7.app.AppCompatActivity;
-import android.text.TextUtils;
-import android.util.Log;
+import android.support.v7.widget.Toolbar;
+import android.util.ArraySet;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
+import android.view.ViewGroup;
 import android.widget.ImageButton;
+import android.widget.ImageView;
 
+import com.android.deskclock.actionbarmenu.ActionBarMenuManager;
+import com.android.deskclock.actionbarmenu.MenuItemControllerFactory;
+import com.android.deskclock.actionbarmenu.NightModeMenuItemController;
+import com.android.deskclock.actionbarmenu.SettingMenuItemController;
 import com.android.deskclock.alarms.AlarmStateManager;
+import com.android.deskclock.data.DataModel;
 import com.android.deskclock.events.Events;
 import com.android.deskclock.provider.Alarm;
 import com.android.deskclock.stopwatch.StopwatchFragment;
-import com.android.deskclock.stopwatch.StopwatchService;
-import com.android.deskclock.stopwatch.Stopwatches;
 import com.android.deskclock.timer.TimerFragment;
-import com.android.deskclock.timer.TimerObj;
-import com.android.deskclock.timer.Timers;
+import com.android.deskclock.widget.RtlViewPager;
 
 import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.TimeZone;
+import java.util.List;
+import java.util.Set;
 
 /**
  * DeskClock clock view for desk docks.
  */
 public class DeskClock extends BaseActivity
-        implements LabelDialogFragment.TimerLabelDialogHandler,
-        LabelDialogFragment.AlarmLabelDialogHandler {
+        implements LabelDialogFragment.AlarmLabelDialogHandler {
 
-    private static final boolean DEBUG = false;
-    private static final String LOG_TAG = "DeskClock";
+    private static final String TAG = "DeskClock";
 
     // Alarm action for midnight (so we can update the date display).
     private static final String KEY_SELECTED_TAB = "selected_tab";
     public static final String SELECT_TAB_INTENT_EXTRA = "deskclock.select.tab";
 
-    // Request code used when SettingsActivity is launched.
-    private static final int REQUEST_CHANGE_SETTINGS = 1;
-
     public static final int ALARM_TAB_INDEX = 0;
     public static final int CLOCK_TAB_INDEX = 1;
     public static final int TIMER_TAB_INDEX = 2;
     public static final int STOPWATCH_TAB_INDEX = 3;
 
-    // Tabs indices are switched for right-to-left since there is no
-    // native support for RTL in the ViewPager.
-    public static final int RTL_ALARM_TAB_INDEX = 3;
-    public static final int RTL_CLOCK_TAB_INDEX = 2;
-    public static final int RTL_TIMER_TAB_INDEX = 1;
-    public static final int RTL_STOPWATCH_TAB_INDEX = 0;
+    private final ActionBarMenuManager mActionBarMenuManager = new ActionBarMenuManager(this);
 
-    private ActionBar mActionBar;
-    private Menu mMenu;
-    private ViewPager mViewPager;
-    private ImageButton mFab;
+    private TabLayout mTabLayout;
+    private RtlViewPager mViewPager;
+    private ImageView mFab;
     private ImageButton mLeftButton;
     private ImageButton mRightButton;
 
     private TabsAdapter mTabsAdapter;
     private int mSelectedTab;
-    private boolean mActivityResumed;
+
+    /** {@code true} when a settings change necessitates recreating this activity. */
+    private boolean mRecreateActivity;
 
     @Override
     public void onNewIntent(Intent newIntent) {
         super.onNewIntent(newIntent);
-        if (DEBUG) Log.d(LOG_TAG, "onNewIntent with intent: " + newIntent);
+        LogUtils.d(TAG, "onNewIntent with intent: %s", 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);
 
-        // Timer receiver may ask to go to the timers fragment if a timer expired.
+        // Honor the tab requested by the intent, if any.
         int tab = newIntent.getIntExtra(SELECT_TAB_INTENT_EXTRA, -1);
-        if (tab != -1) {
-            if (mActionBar != null) {
-                mActionBar.setSelectedNavigationItem(tab);
-            }
+        if (tab != -1 && mTabLayout != null) {
+            mTabLayout.getTabAt(tab).select();
+            mViewPager.setCurrentItem(tab);
         }
     }
 
-    private void initViews() {
+    @VisibleForTesting
+    DeskClockFragment getSelectedFragment() {
+        return (DeskClockFragment) mTabsAdapter.getItem(mSelectedTab);
+    }
+
+    private void createTabs() {
+        final TabLayout.Tab alarmTab = mTabLayout.newTab();
+        alarmTab.setIcon(R.drawable.ic_tab_alarm).setContentDescription(R.string.menu_alarm);
+        mTabsAdapter.addTab(alarmTab, AlarmClockFragment.class, ALARM_TAB_INDEX);
+
+        final Tab clockTab = mTabLayout.newTab();
+        clockTab.setIcon(R.drawable.ic_tab_clock).setContentDescription(R.string.menu_clock);
+        mTabsAdapter.addTab(clockTab, ClockFragment.class, CLOCK_TAB_INDEX);
+
+        final Tab timerTab = mTabLayout.newTab();
+        timerTab.setIcon(R.drawable.ic_tab_timer).setContentDescription(R.string.menu_timer);
+        mTabsAdapter.addTab(timerTab, TimerFragment.class, TIMER_TAB_INDEX);
+
+        final Tab stopwatchTab = mTabLayout.newTab();
+        stopwatchTab.setIcon(R.drawable.ic_tab_stopwatch)
+                .setContentDescription(R.string.menu_stopwatch);
+        mTabsAdapter.addTab(stopwatchTab, StopwatchFragment.class, STOPWATCH_TAB_INDEX);
+
+        mTabLayout.getTabAt(mSelectedTab).select();
+        mViewPager.setCurrentItem(mSelectedTab);
+        mTabsAdapter.notifySelectedPage(mSelectedTab);
+    }
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        setVolumeControlStream(AudioManager.STREAM_ALARM);
+
+        if (icicle != null) {
+            mSelectedTab = icicle.getInt(KEY_SELECTED_TAB, CLOCK_TAB_INDEX);
+        } else {
+            mSelectedTab = CLOCK_TAB_INDEX;
+
+            // Set the background color to initially match the theme value so that we can
+            // smoothly transition to the dynamic color.
+            setBackgroundColor(getResources().getColor(R.color.default_background),
+                    false /* animate */);
+        }
+
+        // Honor the tab requested by the intent, if any.
+        final Intent intent = getIntent();
+        if (intent != null) {
+            int tab = intent.getIntExtra(SELECT_TAB_INTENT_EXTRA, -1);
+            if (tab != -1) {
+                mSelectedTab = tab;
+            }
+        }
+
         setContentView(R.layout.desk_clock);
-        mFab = (ImageButton) findViewById(R.id.fab);
+        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+        setSupportActionBar(toolbar);
+        mTabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
+        mFab = (ImageView) findViewById(R.id.fab);
         mLeftButton = (ImageButton) findViewById(R.id.left_button);
         mRightButton = (ImageButton) findViewById(R.id.right_button);
         if (mTabsAdapter == null) {
-            mViewPager = (ViewPager) findViewById(R.id.desk_clock_pager);
+            mViewPager = (RtlViewPager) findViewById(R.id.desk_clock_pager);
             // Keep all four tabs to minimize jank.
             mViewPager.setOffscreenPageLimit(3);
             // Set Accessibility Delegate to null so ViewPager doesn't intercept movements and
             // prevent the fab from being selected.
             mViewPager.setAccessibilityDelegate(null);
             mTabsAdapter = new TabsAdapter(this, mViewPager);
-            createTabs(mSelectedTab);
+            createTabs();
+            mTabLayout.setOnTabSelectedListener(new ViewPagerOnTabSelectedListener(mViewPager));
         }
 
         mFab.setOnClickListener(new OnClickListener() {
@@ -149,77 +194,16 @@
             }
         });
 
-        mActionBar.setSelectedNavigationItem(mSelectedTab);
-    }
+        // Configure the menu item controllers.
+        mActionBarMenuManager
+                .addMenuItemController(new SettingMenuItemController(this))
+                .addMenuItemController(new NightModeMenuItemController(this))
+                .addMenuItemController(MenuItemControllerFactory.getInstance()
+                        .buildMenuItemControllers(this));
 
-    @VisibleForTesting
-    DeskClockFragment getSelectedFragment() {
-        return (DeskClockFragment) mTabsAdapter.getItem(getRtlPosition(mSelectedTab));
-    }
-
-    private void createTabs(int selectedIndex) {
-        mActionBar = getSupportActionBar();
-
-        if (mActionBar != null) {
-            mActionBar.setDisplayOptions(0);
-            mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
-
-            final Tab alarmTab = mActionBar.newTab();
-
-            alarmTab.setIcon(R.drawable.ic_tab_alarm);
-            alarmTab.setContentDescription(R.string.menu_alarm);
-            mTabsAdapter.addTab(alarmTab,
-                    Utils.isLOrLater()
-                            ? AlarmClockFragmentPostL.class
-                            : AlarmClockFragmentPreL.class,
-                    ALARM_TAB_INDEX);
-
-            final Tab clockTab = mActionBar.newTab();
-            clockTab.setIcon(R.drawable.ic_tab_clock);
-            clockTab.setContentDescription(R.string.menu_clock);
-            mTabsAdapter.addTab(clockTab, ClockFragment.class, CLOCK_TAB_INDEX);
-
-            final Tab timerTab = mActionBar.newTab();
-            timerTab.setIcon(R.drawable.ic_tab_timer);
-            timerTab.setContentDescription(R.string.menu_timer);
-            mTabsAdapter.addTab(timerTab, TimerFragment.class, TIMER_TAB_INDEX);
-
-            final Tab stopwatchTab = mActionBar.newTab();
-            stopwatchTab.setIcon(R.drawable.ic_tab_stopwatch);
-            stopwatchTab.setContentDescription(R.string.menu_stopwatch);
-            mTabsAdapter.addTab(stopwatchTab, StopwatchFragment.class, STOPWATCH_TAB_INDEX);
-
-            mActionBar.setSelectedNavigationItem(selectedIndex);
-            mTabsAdapter.notifySelectedPage(selectedIndex);
-        }
-    }
-
-    @Override
-    protected void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        setVolumeControlStream(AudioManager.STREAM_ALARM);
-
-        if (icicle != null) {
-            mSelectedTab = icicle.getInt(KEY_SELECTED_TAB, CLOCK_TAB_INDEX);
-        } else {
-            mSelectedTab = CLOCK_TAB_INDEX;
-
-            // Set the background color to initially match the theme value so that we can
-            // smoothly transition to the dynamic color.
-            setBackgroundColor(getResources().getColor(R.color.default_background),
-                    false /* animate */);
-        }
-
-        // Timer receiver may ask the app to go to the timer fragment if a timer expired
-        Intent i = getIntent();
-        if (i != null) {
-            int tab = i.getIntExtra(SELECT_TAB_INTENT_EXTRA, -1);
-            if (tab != -1) {
-                mSelectedTab = tab;
-            }
-        }
-        initViews();
-        setHomeTimeZone();
+        // Inflate the menu during creation to avoid a double layout pass. Otherwise, the menu
+        // inflation occurs *after* the initial draw and a second layout pass adds in the menu.
+        onCreateOptionsMenu(toolbar.getMenu());
 
         // We need to update the system next alarm time on app startup because the
         // user might have clear our data.
@@ -229,144 +213,69 @@
     @Override
     protected void onResume() {
         super.onResume();
+        DataModel.getDataModel().setApplicationInForeground(true);
+    }
 
-        // We only want to show notifications for stopwatch/timer when the app is closed so
-        // that we don't have to worry about keeping the notifications in perfect sync with
-        // the app.
-        Intent stopwatchIntent = new Intent(getApplicationContext(), StopwatchService.class);
-        stopwatchIntent.setAction(Stopwatches.KILL_NOTIF);
-        startService(stopwatchIntent);
+    @Override
+    protected void onPostResume() {
+        super.onPostResume();
 
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(this);
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.putBoolean(Timers.NOTIF_APP_OPEN, true);
-        editor.apply();
-        Intent timerIntent = new Intent();
-        timerIntent.setAction(Timers.NOTIF_IN_USE_CANCEL);
-        sendBroadcast(timerIntent);
-        mActivityResumed = true;
+        if (mRecreateActivity) {
+            mRecreateActivity = false;
+
+            // A runnable must be posted here or the new DeskClock activity will be recreated in a
+            // paused state, even though it is the foreground activity.
+            mViewPager.post(new Runnable() {
+                @Override
+                public void run() {
+                    recreate();
+                }
+            });
+        }
     }
 
     @Override
     public void onPause() {
-        mActivityResumed = false;
-        Intent intent = new Intent(getApplicationContext(), StopwatchService.class);
-        intent.setAction(Stopwatches.SHOW_NOTIF);
-        startService(intent);
-
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(this);
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.putBoolean(Timers.NOTIF_APP_OPEN, false);
-        editor.apply();
-        Utils.showInUseNotifications(this);
-
+        DataModel.getDataModel().setApplicationInForeground(false);
         super.onPause();
     }
 
     @Override
     protected void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
-        outState.putInt(KEY_SELECTED_TAB, mActionBar.getSelectedNavigationIndex());
+        outState.putInt(KEY_SELECTED_TAB, mTabLayout.getSelectedTabPosition());
     }
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
-        // We only want to show it as a menu in landscape, and only for clock/alarm fragment.
-        mMenu = menu;
-        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
-            if (mActionBar.getSelectedNavigationIndex() == ALARM_TAB_INDEX ||
-                    mActionBar.getSelectedNavigationIndex() == CLOCK_TAB_INDEX) {
-                // Clear the menu so that it doesn't get duplicate items in case onCreateOptionsMenu
-                // was called multiple times.
-                menu.clear();
-                getMenuInflater().inflate(R.menu.desk_clock_menu, menu);
-            }
-            // Always return true for landscape, regardless of whether we've inflated the menu, so
-            // that when we switch tabs this method will get called and we can inflate the menu.
-            return true;
-        }
-        return false;
+        mActionBarMenuManager.createOptionsMenu(menu, getMenuInflater());
+        return true;
     }
 
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
-        updateMenu(menu);
+        super.onPrepareOptionsMenu(menu);
+        mActionBarMenuManager.prepareShowMenu(menu);
         return true;
     }
 
-    private void updateMenu(Menu menu) {
-        // Hide "help" if we don't have a URI for it.
-        MenuItem help = menu.findItem(R.id.menu_item_help);
-        if (help != null) {
-            Utils.prepareHelpMenuItem(this, help);
-        }
-
-        // Hide "lights out" for timer.
-        MenuItem nightMode = menu.findItem(R.id.menu_item_night_mode);
-        if (mActionBar.getSelectedNavigationIndex() == ALARM_TAB_INDEX) {
-            nightMode.setVisible(false);
-        } else if (mActionBar.getSelectedNavigationIndex() == CLOCK_TAB_INDEX) {
-            nightMode.setVisible(true);
-        }
-    }
-
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        if (processMenuClick(item)) {
+        if (mActionBarMenuManager.handleMenuItemClick(item)) {
             return true;
         }
-
         return super.onOptionsItemSelected(item);
     }
 
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         // Recreate the activity if any settings have been changed
-        if (requestCode == REQUEST_CHANGE_SETTINGS && resultCode == RESULT_OK) {
-            recreate();
+        if (requestCode == SettingMenuItemController.REQUEST_CHANGE_SETTINGS
+                && resultCode == RESULT_OK) {
+            mRecreateActivity = true;
         }
     }
 
-    private boolean processMenuClick(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.menu_item_settings:
-                startActivityForResult(new Intent(DeskClock.this, SettingsActivity.class),
-                        REQUEST_CHANGE_SETTINGS);
-                return true;
-            case R.id.menu_item_help:
-                Intent i = item.getIntent();
-                if (i != null) {
-                    try {
-                        startActivity(i);
-                    } catch (ActivityNotFoundException e) {
-                        // No activity found to match the intent - ignore
-                    }
-                }
-                return true;
-            case R.id.menu_item_night_mode:
-                startActivity(new Intent(DeskClock.this, ScreensaverActivity.class));
-            default:
-                break;
-        }
-        return true;
-    }
-
-    /**
-     * Insert the local time zone as the Home Time Zone if one is not set
-     */
-    private void setHomeTimeZone() {
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(this);
-        String homeTimeZone = prefs.getString(SettingsActivity.KEY_HOME_TZ, "");
-        if (!homeTimeZone.isEmpty()) {
-            return;
-        }
-        homeTimeZone = TimeZone.getDefault().getID();
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.putString(SettingsActivity.KEY_HOME_TZ, homeTimeZone);
-        editor.apply();
-        Log.v(LOG_TAG, "Setting home time zone to " + homeTimeZone);
-    }
-
     public void registerPageChangedListener(DeskClockFragment frag) {
         if (mTabsAdapter != null) {
             mTabsAdapter.registerPageChangedListener(frag);
@@ -382,8 +291,7 @@
     /**
      * Adapter for wrapping together the ActionBar's tab with the ViewPager
      */
-    private class TabsAdapter extends FragmentPagerAdapter
-            implements ActionBar.TabListener, ViewPager.OnPageChangeListener {
+    private class TabsAdapter extends FragmentPagerAdapter implements OnPageChangeListener {
 
         private static final String KEY_TAB_POSITION = "tab_position";
 
@@ -402,20 +310,23 @@
             }
         }
 
-        private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
-        ActionBar mMainActionBar;
-        Context mContext;
-        ViewPager mPager;
+        private final List<TabInfo> mTabs = new ArrayList<>(4 /* number of fragments */);
+        private final Context mContext;
+        private final RtlViewPager mPager;
         // Used for doing callbacks to fragments.
-        HashSet<String> mFragmentTags = new HashSet<String>();
+        private final Set<String> mFragmentTags = new ArraySet<>(4 /* number of fragments */);
 
-        public TabsAdapter(AppCompatActivity activity, ViewPager pager) {
+        public TabsAdapter(AppCompatActivity activity, RtlViewPager pager) {
             super(activity.getFragmentManager());
             mContext = activity;
-            mMainActionBar = activity.getSupportActionBar();
             mPager = pager;
             mPager.setAdapter(this);
-            mPager.setOnPageChangeListener(this);
+            mPager.setOnRTLPageChangeListener(this);
+        }
+
+        @Override
+        public Object instantiateItem(ViewGroup container, int position) {
+            return super.instantiateItem(container, mViewPager.getRtlAwareIndex(position));
         }
 
         @Override
@@ -425,7 +336,7 @@
             final String name = makeFragmentName(R.id.desk_clock_pager, position);
             Fragment fragment = getFragmentManager().findFragmentByTag(name);
             if (fragment == null) {
-                TabInfo info = mTabs.get(getRtlPosition(position));
+                TabInfo info = mTabs.get(position);
                 fragment = Fragment.instantiate(mContext, info.clss.getName(), info.args);
                 if (fragment instanceof TimerFragment) {
                     ((TimerFragment) fragment).setFabAppearance();
@@ -449,12 +360,10 @@
             return mTabs.size();
         }
 
-        public void addTab(ActionBar.Tab tab, Class<?> clss, int position) {
+        public void addTab(TabLayout.Tab tab, Class<?> clss, int position) {
             TabInfo info = new TabInfo(clss, position);
-            tab.setTag(info);
-            tab.setTabListener(this);
             mTabs.add(info);
-            mMainActionBar.addTab(tab);
+            mTabLayout.addTab(tab);
             notifyDataSetChanged();
         }
 
@@ -466,39 +375,14 @@
         @Override
         public void onPageSelected(int position) {
             // Set the page before doing the menu so that onCreateOptionsMenu knows what page it is.
-            mMainActionBar.setSelectedNavigationItem(getRtlPosition(position));
+            mTabLayout.getTabAt(position).select();
             notifyPageChanged(position);
 
-            // Only show the overflow menu for alarm and world clock.
-            if (mMenu != null) {
-                // Make sure the menu's been initialized.
-                if (position == ALARM_TAB_INDEX || position == CLOCK_TAB_INDEX) {
-                    mMenu.setGroupVisible(R.id.menu_items, true);
-                    onCreateOptionsMenu(mMenu);
-                } else {
-                    mMenu.setGroupVisible(R.id.menu_items, false);
-                }
-            }
-        }
-
-        @Override
-        public void onPageScrollStateChanged(int state) {
-            // Do nothing
-        }
-
-        @Override
-        public void onTabReselected(Tab tab, FragmentTransaction arg1) {
-            // Do nothing
-        }
-
-        @Override
-        public void onTabSelected(Tab tab, FragmentTransaction ft) {
-            final TabInfo info = (TabInfo) tab.getTag();
-            final int position = info.getPosition();
-            final int rtlSafePosition = getRtlPosition(position);
             mSelectedTab = position;
 
-            if (mActivityResumed) {
+            // Avoid sending events for the initial tab selection on launch and the reselecting a
+            // tab after a configuration change.
+            if (DataModel.getDataModel().isApplicationInForeground()) {
                 switch (mSelectedTab) {
                     case ALARM_TAB_INDEX:
                         Events.sendAlarmEvent(R.string.action_show, R.string.label_deskclock);
@@ -515,16 +399,15 @@
                 }
             }
 
-            final DeskClockFragment f = (DeskClockFragment) getItem(rtlSafePosition);
+            final DeskClockFragment f = (DeskClockFragment) getItem(position);
             if (f != null) {
                 f.setFabAppearance();
                 f.setLeftRightButtonAppearance();
             }
-            mPager.setCurrentItem(rtlSafePosition);
         }
 
         @Override
-        public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
+        public void onPageScrollStateChanged(int state) {
             // Do nothing
         }
 
@@ -545,34 +428,22 @@
         public void registerPageChangedListener(DeskClockFragment frag) {
             String tag = frag.getTag();
             if (mFragmentTags.contains(tag)) {
-                Log.wtf(LOG_TAG, "Trying to add an existing fragment " + tag);
+                LogUtils.wtf(TAG, "Trying to add an existing fragment " + tag);
             } else {
                 mFragmentTags.add(frag.getTag());
             }
             // Since registering a listener by the fragment is done sometimes after the page
             // was already changed, make sure the fragment gets the current page
-            frag.onPageChanged(mMainActionBar.getSelectedNavigationIndex());
+            frag.onPageChanged(mTabLayout.getSelectedTabPosition());
         }
 
         public void unregisterPageChangedListener(DeskClockFragment frag) {
             mFragmentTags.remove(frag.getTag());
         }
-
     }
 
     /**
-     * Called by the LabelDialogFormat class after the dialog is finished. *
-     */
-    @Override
-    public void onDialogLabelSet(TimerObj timer, String label, String tag) {
-        Fragment frag = getFragmentManager().findFragmentByTag(tag);
-        if (frag instanceof TimerFragment) {
-            ((TimerFragment) frag).setLabel(timer, label);
-        }
-    }
-
-    /**
-     * Called by the LabelDialogFormat class after the dialog is finished. *
+     * Called by the LabelDialogFormat class after the dialog is finished.
      */
     @Override
     public void onDialogLabelSet(Alarm alarm, String label, String tag) {
@@ -586,30 +457,7 @@
         return mSelectedTab;
     }
 
-    private boolean isRtl() {
-        return TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) ==
-                View.LAYOUT_DIRECTION_RTL;
-    }
-
-    private int getRtlPosition(int position) {
-        if (isRtl()) {
-            switch (position) {
-                case TIMER_TAB_INDEX:
-                    return RTL_TIMER_TAB_INDEX;
-                case CLOCK_TAB_INDEX:
-                    return RTL_CLOCK_TAB_INDEX;
-                case STOPWATCH_TAB_INDEX:
-                    return RTL_STOPWATCH_TAB_INDEX;
-                case ALARM_TAB_INDEX:
-                    return RTL_ALARM_TAB_INDEX;
-                default:
-                    break;
-            }
-        }
-        return position;
-    }
-
-    public ImageButton getFab() {
+    public ImageView getFab() {
         return mFab;
     }
 
diff --git a/src/com/android/deskclock/DeskClockApplication.java b/src/com/android/deskclock/DeskClockApplication.java
index b71ce5f..c560f01 100644
--- a/src/com/android/deskclock/DeskClockApplication.java
+++ b/src/com/android/deskclock/DeskClockApplication.java
@@ -18,6 +18,7 @@
 
 import android.app.Application;
 
+import com.android.deskclock.data.DataModel;
 import com.android.deskclock.events.Events;
 import com.android.deskclock.events.LogEventTracker;
 
@@ -27,6 +28,8 @@
     public void onCreate() {
         super.onCreate();
 
+        DataModel.getDataModel().setContext(getApplicationContext());
+
         Events.addEventTracker(new LogEventTracker(getApplicationContext()));
     }
 }
diff --git a/src/com/android/deskclock/DeskClockFragment.java b/src/com/android/deskclock/DeskClockFragment.java
index 2f5202f..669f1ef 100644
--- a/src/com/android/deskclock/DeskClockFragment.java
+++ b/src/com/android/deskclock/DeskClockFragment.java
@@ -19,14 +19,13 @@
 import android.app.Activity;
 import android.app.Fragment;
 import android.os.Bundle;
-import android.support.v7.widget.PopupMenu;
-import android.view.MenuItem;
 import android.view.View;
 import android.widget.ImageButton;
+import android.widget.ImageView;
 
 public class DeskClockFragment extends Fragment {
 
-    protected ImageButton mFab;
+    protected ImageView mFab;
     protected ImageButton mLeftButton;
     protected ImageButton mRightButton;
 
@@ -65,33 +64,13 @@
     public void onRightButtonClick(View view) {
         // Do nothing here , only in derived classes
     }
-    /**
-     * Installs click and touch listeners on a fake overflow menu button.
-     *
-     * @param menuButton the fragment's fake overflow menu button
-     */
-    public void setupFakeOverflowMenuButton(View menuButton) {
-        final PopupMenu fakeOverflow = new PopupMenu(menuButton.getContext(), menuButton) {
-            @Override
-            public void show() {
-                getActivity().onPrepareOptionsMenu(getMenu());
-                super.show();
-            }
-        };
-        fakeOverflow.inflate(R.menu.desk_clock_menu);
-        fakeOverflow.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener () {
-            @Override
-            public boolean onMenuItemClick(MenuItem item) {
-                return getActivity().onOptionsItemSelected(item);
-            }
-        });
 
-        menuButton.setOnTouchListener(fakeOverflow.getDragToOpenListener());
-        menuButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                fakeOverflow.show();
-            }
-        });
+    protected final DeskClock getDeskClock() {
+        return (DeskClock) getActivity();
+    }
+
+    protected final int getSelectedTab() {
+        final DeskClock deskClock = getDeskClock();
+        return deskClock == null ? -1 : deskClock.getSelectedTab();
     }
 }
diff --git a/src/com/android/deskclock/DontPressWithParentLayout.java b/src/com/android/deskclock/DontPressWithParentLayout.java
deleted file mode 100644
index 6c13998..0000000
--- a/src/com/android/deskclock/DontPressWithParentLayout.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.LinearLayout;
-
-/**
- * Special class to to allow the parent to be pressed without being pressed
- * itself. This way the time in the alarm list can be pressed without changing
- * the background of the indicator.
- */
-public class DontPressWithParentLayout extends LinearLayout {
-
-    public DontPressWithParentLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public void setPressed(boolean pressed) {
-        // If the parent is pressed, do not set to pressed.
-        if (pressed && ((View) getParent()).isPressed()) {
-            return;
-        }
-        super.setPressed(pressed);
-    }
-}
diff --git a/src/com/android/deskclock/FetchMatchingAlarmsAction.java b/src/com/android/deskclock/FetchMatchingAlarmsAction.java
index 4729461..9b797b4 100644
--- a/src/com/android/deskclock/FetchMatchingAlarmsAction.java
+++ b/src/com/android/deskclock/FetchMatchingAlarmsAction.java
@@ -105,6 +105,20 @@
                 }
                 break;
             case AlarmClock.ALARM_SEARCH_MODE_NEXT:
+                // Match currently firing alarms before scheduled alarms.
+                for (Alarm alarm : mAlarms) {
+                    final AlarmInstance alarmInstance =
+                            AlarmInstance.getNextUpcomingInstanceByAlarmId(cr, alarm.id);
+                    if (alarmInstance != null
+                            && alarmInstance.mAlarmState == AlarmInstance.FIRED_STATE) {
+                        mMatchingAlarms.add(alarm);
+                    }
+                }
+                if (!mMatchingAlarms.isEmpty()) {
+                    // return the matched firing alarms
+                    return;
+                }
+
                 final AlarmInstance nextAlarm = AlarmStateManager.getNextFiringAlarm(mContext);
                 if (nextAlarm == null) {
                     final String reason = mContext.getString(R.string.no_scheduled_alarms);
@@ -163,4 +177,4 @@
         LogUtils.e(reason);
         Voice.notifyFailure(activity, reason);
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/deskclock/HandleApiCalls.java b/src/com/android/deskclock/HandleApiCalls.java
index e74dd71..06cb65a 100644
--- a/src/com/android/deskclock/HandleApiCalls.java
+++ b/src/com/android/deskclock/HandleApiCalls.java
@@ -20,36 +20,38 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.media.RingtoneManager;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Looper;
 import android.os.Parcelable;
-import android.preference.PreferenceManager;
 import android.provider.AlarmClock;
 import android.text.TextUtils;
 import android.text.format.DateFormat;
 
 import com.android.deskclock.alarms.AlarmStateManager;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Timer;
 import com.android.deskclock.events.Events;
 import com.android.deskclock.provider.Alarm;
 import com.android.deskclock.provider.AlarmInstance;
 import com.android.deskclock.provider.DaysOfWeek;
-import com.android.deskclock.timer.TimerFullScreenFragment;
-import com.android.deskclock.timer.TimerObj;
-import com.android.deskclock.timer.Timers;
+import com.android.deskclock.timer.TimerFragment;
 
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Iterator;
 import java.util.List;
 
-public class HandleApiCalls extends Activity {
+import static android.text.format.DateUtils.SECOND_IN_MILLIS;
 
-    public static final long TIMER_MIN_LENGTH = 1000;
-    public static final long TIMER_MAX_LENGTH = 24 * 60 * 60 * 1000;
+/**
+ * This activity is never visible. It processes all public intents defined by {@link AlarmClock}
+ * that apply to alarms and timers. Its definition in AndroidManifest.xml requires callers to hold
+ * the com.android.alarm.permission.SET_ALARM permission to complete the requested action.
+ */
+public class HandleApiCalls extends Activity {
 
     private Context mAppContext;
 
@@ -300,12 +302,12 @@
         alarm.daysOfWeek = daysOfWeek;
         alarm.vibrate = vibrate;
 
-        if (alert == null) {
-            alarm.alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
-        } else if (AlarmClock.VALUE_RINGTONE_SILENT.equals(alert) || alert.isEmpty()) {
-            alarm.alert = Alarm.NO_RINGTONE_URI;
-        } else {
-            alarm.alert = Uri.parse(alert);
+        if (alert != null) {
+            if (AlarmClock.VALUE_RINGTONE_SILENT.equals(alert) || alert.isEmpty()) {
+                alarm.alert = Alarm.NO_RINGTONE_URI;
+            } else {
+                alarm.alert = Uri.parse(alert);
+            }
         }
         alarm.deleteAfterUse = !daysOfWeek.isRepeating() && skipUi;
 
@@ -327,66 +329,52 @@
     }
 
     private void handleSetTimer(Intent intent) {
-        final SharedPreferences prefs = Utils.getDefaultSharedPreferences(this);
-        // If no length is supplied, show the timer setup view
+        // If no length is supplied, show the timer setup view.
         if (!intent.hasExtra(AlarmClock.EXTRA_LENGTH)) {
-            startActivity(new Intent(this, DeskClock.class)
-                  .putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.TIMER_TAB_INDEX)
-                  .putExtra(TimerFullScreenFragment.GOTO_SETUP_VIEW, true));
+            startActivity(TimerFragment.createTimerSetupIntent(this));
             LogUtils.i("HandleApiCalls showing timer setup");
             return;
         }
 
-        final long length = 1000l * intent.getIntExtra(AlarmClock.EXTRA_LENGTH, 0);
-        if (length < TIMER_MIN_LENGTH || length > TIMER_MAX_LENGTH) {
+        // Verify that the timer length is between one second and one day.
+        final long lengthMillis = SECOND_IN_MILLIS * intent.getIntExtra(AlarmClock.EXTRA_LENGTH, 0);
+        if (lengthMillis < Timer.MIN_LENGTH || lengthMillis > Timer.MAX_LENGTH) {
             Voice.notifyFailure(this, getString(R.string.invalid_timer_length));
-            LogUtils.i("Invalid timer length requested: " + length);
+            LogUtils.i("Invalid timer length requested: " + lengthMillis);
             return;
         }
-        String label = getMessageFromIntent(intent);
 
-        TimerObj timer = null;
-        // Find an existing matching time
-        final List<TimerObj> timers = new ArrayList<>();
-        TimerObj.getTimersFromSharedPrefs(prefs, timers);
-        for (TimerObj t : timers) {
-            if (t.mSetupLength == length && (TextUtils.equals(label, t.mLabel))
-                    && t.mState == TimerObj.STATE_RESTART) {
-                timer = t;
-                break;
-            }
+        final String label = getMessageFromIntent(intent);
+        final boolean skipUi = intent.getBooleanExtra(AlarmClock.EXTRA_SKIP_UI, false);
+
+        // Attempt to reuse an existing timer that is Reset with the same length and label.
+        Timer timer = null;
+        for (Timer t : DataModel.getDataModel().getTimers()) {
+            if (!t.isReset()) { continue; }
+            if (t.getLength() != lengthMillis) { continue; }
+            if (!TextUtils.equals(label, t.getLabel())) { continue; }
+
+            timer = t;
+            break;
         }
 
-        boolean skipUi = intent.getBooleanExtra(AlarmClock.EXTRA_SKIP_UI, false);
+        // Create a new timer if one could not be reused.
         if (timer == null) {
-            // Use a new timer
-            timer = new TimerObj(length, label, this /* context */);
-            // Timers set without presenting UI to the user will be deleted after use
-            timer.mDeleteAfterUse = skipUi;
-
+            timer = DataModel.getDataModel().addTimer(lengthMillis, label, skipUi);
             Events.sendTimerEvent(R.string.action_create, R.string.label_intent);
         }
 
-        timer.setState(TimerObj.STATE_RUNNING);
-        timer.mStartTime = Utils.getTimeNow();
-        timer.writeToSharedPref(prefs);
-
+        // Start the selected timer.
+        DataModel.getDataModel().startTimer(timer);
         Events.sendTimerEvent(R.string.action_start, R.string.label_intent);
+        Voice.notifySuccess(this, getString(R.string.timer_created));
 
-        // Tell TimerReceiver that the timer was started
-        sendBroadcast(new Intent().setAction(Timers.START_TIMER)
-                .putExtra(Timers.TIMER_INTENT_EXTRA, timer.mTimerId));
-
-        if (skipUi) {
-            Utils.showInUseNotifications(this);
-        } else {
+        // If not instructed to skip the UI, display the running timer.
+        if (!skipUi) {
             startActivity(new Intent(this, DeskClock.class)
                     .putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.TIMER_TAB_INDEX)
-                    .putExtra(Timers.FIRST_LAUNCH_FROM_API_CALL, true)
-                    .putExtra(Timers.SCROLL_TO_TIMER_ID, timer.mTimerId));
+                    .putExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID, timer.getId()));
         }
-        Voice.notifySuccess(this, getString(R.string.timer_created));
-        LogUtils.i("HandleApiCalls timer created: %s", timer);
     }
 
     private void setupInstance(AlarmInstance instance, boolean skipUi) {
@@ -402,12 +390,12 @@
         }
     }
 
-    private String getMessageFromIntent(Intent intent) {
+    private static String getMessageFromIntent(Intent intent) {
         final String message = intent.getStringExtra(AlarmClock.EXTRA_MESSAGE);
         return message == null ? "" : message;
     }
 
-    private DaysOfWeek getDaysFromIntent(Intent intent) {
+    private static DaysOfWeek getDaysFromIntent(Intent intent) {
         final DaysOfWeek daysOfWeek = new DaysOfWeek(0);
         final ArrayList<Integer> days = intent.getIntegerArrayListExtra(AlarmClock.EXTRA_DAYS);
         if (days != null) {
diff --git a/src/com/android/deskclock/HandleDeskClockApiCalls.java b/src/com/android/deskclock/HandleDeskClockApiCalls.java
index 3e74402..224bf19 100644
--- a/src/com/android/deskclock/HandleDeskClockApiCalls.java
+++ b/src/com/android/deskclock/HandleDeskClockApiCalls.java
@@ -19,26 +19,15 @@
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
-import android.os.AsyncTask;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
 
+import com.android.deskclock.data.City;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Timer;
 import com.android.deskclock.events.Events;
-import com.android.deskclock.stopwatch.StopwatchService;
-import com.android.deskclock.stopwatch.Stopwatches;
-import com.android.deskclock.timer.TimerFullScreenFragment;
-import com.android.deskclock.timer.TimerObj;
-import com.android.deskclock.timer.Timers;
-import com.android.deskclock.worldclock.Cities;
-import com.android.deskclock.worldclock.CitiesActivity;
-import com.android.deskclock.worldclock.CityObj;
+import com.android.deskclock.worldclock.CitySelectionActivity;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 public class HandleDeskClockApiCalls extends Activity {
@@ -48,6 +37,8 @@
 
     // shows the tab with world clocks
     public static final String ACTION_SHOW_CLOCK = ACTION_PREFIX + "SHOW_CLOCK";
+    // extra for ACTION_SHOW_CLOCK indicating the clock is being displayed from tapping the widget
+    public static final String EXTRA_FROM_WIDGET = "com.android.deskclock.extra.clock.FROM_WIDGET";
     // add a clock of a selected city, if no city is specified opens the city selection screen
     public static final String ACTION_ADD_CLOCK = ACTION_PREFIX + "ADD_CLOCK";
     // delete a clock of a selected city, if no city is specified shows CitiesActivity for the user
@@ -60,23 +51,30 @@
     public static final String ACTION_SHOW_STOPWATCH = ACTION_PREFIX + "SHOW_STOPWATCH";
     // starts the current stopwatch
     public static final String ACTION_START_STOPWATCH = ACTION_PREFIX + "START_STOPWATCH";
-    // stops the current stopwatch
-    public static final String ACTION_STOP_STOPWATCH = ACTION_PREFIX + "STOP_STOPWATCH";
+    // pauses the current stopwatch that's currently running
+    public static final String ACTION_PAUSE_STOPWATCH = ACTION_PREFIX + "PAUSE_STOPWATCH";
     // laps the stopwatch that's currently running
     public static final String ACTION_LAP_STOPWATCH = ACTION_PREFIX + "LAP_STOPWATCH";
     // resets the stopwatch if it's stopped
     public static final String ACTION_RESET_STOPWATCH = ACTION_PREFIX + "RESET_STOPWATCH";
 
-    // shows the tab with timers
+    // shows the tab with timers; optionally scrolls to a specific timer
     public static final String ACTION_SHOW_TIMERS = ACTION_PREFIX + "SHOW_TIMERS";
-    // deletes the topmost timer
-    public static final String ACTION_DELETE_TIMER = ACTION_PREFIX + "DELETE_TIMER";
-    // stops the running timer
-    public static final String ACTION_STOP_TIMER = ACTION_PREFIX + "STOP_TIMER";
-    // starts the topmost timer
+    // pauses running timers; resets expired timers
+    public static final String ACTION_PAUSE_TIMER = ACTION_PREFIX + "PAUSE_TIMER";
+    // starts the sole timer
     public static final String ACTION_START_TIMER = ACTION_PREFIX + "START_TIMER";
-    // resets the timer, works for both running and stopped
+    // resets the timer
     public static final String ACTION_RESET_TIMER = ACTION_PREFIX + "RESET_TIMER";
+    // adds an extra minute to the timer
+    public static final String ACTION_ADD_MINUTE_TIMER = ACTION_PREFIX + "ADD_MINUTE_TIMER";
+
+    // extra for many actions specific to a given timer
+    public static final String EXTRA_TIMER_ID =
+            "com.android.deskclock.extra.TIMER_ID";
+
+    // Describes the entity responsible for the action being performed.
+    public static final String EXTRA_EVENT_LABEL = "com.android.deskclock.extra.EVENT_LABEL";
 
     @Override
     protected void onCreate(Bundle icicle) {
@@ -90,25 +88,26 @@
             }
 
             final String action = intent.getAction();
+            LogUtils.i("HandleDeskClockApiCalls " + action);
+
             switch (action) {
                 case ACTION_START_STOPWATCH:
-                case ACTION_STOP_STOPWATCH:
+                case ACTION_PAUSE_STOPWATCH:
                 case ACTION_LAP_STOPWATCH:
                 case ACTION_SHOW_STOPWATCH:
                 case ACTION_RESET_STOPWATCH:
-                    handleStopwatchIntent(action);
+                    handleStopwatchIntent(intent);
                     break;
                 case ACTION_SHOW_TIMERS:
-                case ACTION_DELETE_TIMER:
                 case ACTION_RESET_TIMER:
-                case ACTION_STOP_TIMER:
+                case ACTION_PAUSE_TIMER:
                 case ACTION_START_TIMER:
-                    handleTimerIntent(action);
+                    handleTimerIntent(intent);
                     break;
                 case ACTION_SHOW_CLOCK:
                 case ACTION_ADD_CLOCK:
                 case ACTION_DELETE_CLOCK:
-                    handleClockIntent(action);
+                    handleClockIntent(intent);
                     break;
             }
         } finally {
@@ -116,400 +115,243 @@
         }
     }
 
-    private void handleStopwatchIntent(String action) {
-        // Opens the UI for stopwatch
-        final Intent stopwatchIntent = new Intent(mAppContext, DeskClock.class)
-                .setAction(action)
-                .putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.STOPWATCH_TAB_INDEX);
-        startActivity(stopwatchIntent);
-        LogUtils.i("HandleDeskClockApiCalls " + action);
+    private void handleStopwatchIntent(Intent intent) {
+        final String action = intent.getAction();
 
-        if (action.equals(ACTION_SHOW_STOPWATCH)) {
-            Events.sendStopwatchEvent(R.string.action_show, R.string.label_intent);
-            return;
-        }
+        // Determine where this intent originated.
+        final int eventLabel = intent.getIntExtra(EXTRA_EVENT_LABEL, R.string.label_intent);
 
-        // checking if the stopwatch is already running
-        final SharedPreferences prefs = Utils.getDefaultSharedPreferences(mAppContext);
-        final boolean stopwatchAlreadyRunning =
-                prefs.getBoolean(Stopwatches.NOTIF_CLOCK_RUNNING, false);
-
-        if (stopwatchAlreadyRunning) {
-            // don't fire START_STOPWATCH or RESET_STOPWATCH if a stopwatch is already running
-            if (ACTION_START_STOPWATCH.equals(action)) {
-                final String reason = getString(R.string.stopwatch_already_running);
-                Voice.notifyFailure(this, reason);
-                LogUtils.i(reason);
-                return;
-            } else if (ACTION_RESET_STOPWATCH.equals(action)) { // RESET_STOPWATCH
-                final String reason = getString(R.string.stopwatch_cant_be_reset_because_is_running);
-                Voice.notifyFailure(this, reason);
-                LogUtils.i(reason);
-                return;
-            }
+        if (ACTION_SHOW_STOPWATCH.equals(action)) {
+            Events.sendStopwatchEvent(R.string.action_show, eventLabel);
         } else {
-            // if a stopwatch isn't running, don't try to stop or lap it
-            if (ACTION_STOP_STOPWATCH.equals(action) ||
-                    ACTION_LAP_STOPWATCH.equals(action)) {
-                final String reason = getString(R.string.stopwatch_isnt_running);
-                Voice.notifyFailure(this, reason);
-                LogUtils.i(reason);
-                return;
-            }
-        }
-
-        final String reason;
-        // Events and voice interactor setup
-        switch (action) {
-            case ACTION_START_STOPWATCH:
-                Events.sendStopwatchEvent(R.string.action_start, R.string.label_intent);
-                reason = getString(R.string.stopwatch_started);
-                break;
-            case ACTION_STOP_STOPWATCH:
-                Events.sendStopwatchEvent(R.string.action_stop, R.string.label_intent);
-                reason = getString(R.string.stopwatch_stopped);
-                break;
-            case ACTION_LAP_STOPWATCH:
-                Events.sendStopwatchEvent(R.string.action_lap, R.string.label_intent);
-                reason = getString(R.string.stopwatch_lapped);
-                break;
-            case ACTION_RESET_STOPWATCH:
-                Events.sendStopwatchEvent(R.string.action_reset, R.string.label_intent);
-                reason = getString(R.string.stopwatch_reset);
-                break;
-            default:
-                return;
-        }
-        final Intent intent = new Intent(mAppContext, StopwatchService.class).setAction(action);
-        startService(intent);
-        Voice.notifySuccess(this, reason);
-        LogUtils.i(reason);
-    }
-
-    private void handleTimerIntent(final String action) {
-        // Opens the UI for timers
-        final Intent timerIntent = new Intent(mAppContext, DeskClock.class)
-                .putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.TIMER_TAB_INDEX)
-                .putExtra(TimerFullScreenFragment.GOTO_SETUP_VIEW, false);
-        startActivity(timerIntent);
-        LogUtils.i("HandleDeskClockApiCalls " + action);
-
-        if (ACTION_SHOW_TIMERS.equals(action)) {
-            Events.sendTimerEvent(R.string.action_show, R.string.label_intent);
-            return;
-        }
-        new HandleTimersAsync(mAppContext, action, this).execute();
-    }
-
-    private void handleClockIntent(final String action) {
-        // Opens the UI for clocks
-        final Intent handleClock = new Intent(mAppContext, DeskClock.class)
-                .setAction(action)
-                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
-                .putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.CLOCK_TAB_INDEX);
-        startActivity(handleClock);
-
-        new HandleClockAsync(mAppContext, getIntent(), this).execute();
-    }
-
-    private static class HandleTimersAsync extends AsyncTask<Void, Void, Void> {
-        private final Context mContext;
-        private final String mAction;
-        private final Activity mActivity;
-
-        public HandleTimersAsync(Context context, String action, Activity activity) {
-            mContext = context;
-            mAction = action;
-            mActivity = activity;
-        }
-        // STOP_TIMER and START_TIMER should only be triggered if there is one timer that is
-        // not stopped or not started respectively. This method checks all timers to find only
-        // one that corresponds to that.
-        // Only change the mode of the timer if no disambiguation is necessary
-
-        @Override
-        protected Void doInBackground(Void... parameters) {
-            final List<TimerObj> timers = new ArrayList<>();
-            final SharedPreferences prefs = Utils.getDefaultSharedPreferences(mContext);
-            TimerObj.getTimersFromSharedPrefs(prefs, timers);
-            if (timers.isEmpty()) {
-                final String reason = mContext.getString(R.string.no_timer_set);
-                LogUtils.i(reason);
-                Voice.notifyFailure(mActivity, reason);
-                return null;
-            }
-            final TimerObj timer;
-            final String timerAction;
-            switch (mAction) {
-                case ACTION_DELETE_TIMER: {
-                    timerAction = Timers.DELETE_TIMER;
-                    // Delete a timer only if there's one available
-                    if (timers.size() > 1) {
-                        final String reason = mContext.getString(R.string.multiple_timers_available);
-                        LogUtils.i(reason);
-                        Voice.notifyFailure(mActivity, reason);
-                        return null;
-                    }
-
-                    timer = timers.get(0);
-                    timer.deleteFromSharedPref(prefs);
-                    Events.sendTimerEvent(R.string.action_delete, R.string.label_intent);
-                    final String reason = mContext.getString(R.string.timer_deleted);
-                    Voice.notifySuccess(mActivity, reason);
-                    LogUtils.i(reason);
+            final String reason;
+            boolean fail = false;
+            switch (action) {
+                case ACTION_START_STOPWATCH: {
+                    DataModel.getDataModel().startStopwatch();
+                    Events.sendStopwatchEvent(R.string.action_start, eventLabel);
+                    reason = getString(R.string.stopwatch_started);
                     break;
                 }
-                case ACTION_START_TIMER: {
-                    timerAction = Timers.START_TIMER;
-                    timer = getTimerWithStateToIgnore(timers, TimerObj.STATE_RUNNING);
-                    // Only start a timer if there's one non-running timer available
-                    if (timer == null) {
-                        // notifyFailure was already triggered
-                        return null;
-                    }
-                    timer.setState(TimerObj.STATE_RUNNING);
-                    timer.mStartTime = Utils.getTimeNow() - (timer.mSetupLength - timer.mTimeLeft);
-                    timer.writeToSharedPref(prefs);
-                    final String reason = mContext.getString(R.string.timer_started);
-                    Voice.notifySuccess(mActivity, reason);
-                    LogUtils.i(reason);
-                    Events.sendTimerEvent(R.string.action_start, R.string.label_intent);
+                case ACTION_PAUSE_STOPWATCH: {
+                    DataModel.getDataModel().pauseStopwatch();
+                    Events.sendStopwatchEvent(R.string.action_pause, eventLabel);
+                    reason = getString(R.string.stopwatch_paused);
                     break;
                 }
-                case ACTION_RESET_TIMER: {
-                    timerAction = Timers.RESET_TIMER;
-                    // Since timer can be reset only if it's stopped
-                    // it's only triggered when there's only one stopped timer
-                    final Set<Integer> statesToInclude = new HashSet<>();
-                    statesToInclude.add(TimerObj.STATE_STOPPED);
-                    timer = getTimerWithStatesToInclude(timers, statesToInclude, mAction);
-                    if (timer == null) {
-                        return null;
-                    }
-                    final String reason = mContext.getString(R.string.timer_was_reset);
-                    Voice.notifySuccess(mActivity, reason);
-                    LogUtils.i(reason);
-                    timer.setState(TimerObj.STATE_RESTART);
-                    timer.mTimeLeft = timer.mSetupLength;
-                    timer.writeToSharedPref(prefs);
-                    Events.sendTimerEvent(R.string.action_reset, R.string.label_intent);
+                case ACTION_RESET_STOPWATCH: {
+                    DataModel.getDataModel().clearLaps();
+                    DataModel.getDataModel().resetStopwatch();
+                    Events.sendStopwatchEvent(R.string.action_reset, eventLabel);
+                    reason = getString(R.string.stopwatch_reset);
                     break;
                 }
-                case ACTION_STOP_TIMER: {
-                    timerAction = Timers.STOP_TIMER;
-                    final Set<Integer> statesToInclude = new HashSet<>();
-                    statesToInclude.add(TimerObj.STATE_TIMESUP);
-                    statesToInclude.add(TimerObj.STATE_RUNNING);
-                    // Timer is stopped if there's only one running timer
-                    timer = getTimerWithStatesToInclude(timers, statesToInclude, mAction);
-                    if (timer == null) {
-                        return null;
-                    }
-                    final String reason = mContext.getString(R.string.timer_stopped);
-                    LogUtils.i(reason);
-                    Voice.notifySuccess(mActivity, reason);
-                    if (timer.mState == TimerObj.STATE_RUNNING) {
-                        timer.setState(TimerObj.STATE_STOPPED);
+                case ACTION_LAP_STOPWATCH: {
+                    if (!DataModel.getDataModel().getStopwatch().isRunning()) {
+                        fail = true;
+                        reason = getString(R.string.stopwatch_isnt_running);
                     } else {
-                        // if the time is up on the timer
-                        // restart it and reset the length
-                        timer.setState(TimerObj.STATE_RESTART);
-                        timer.mTimeLeft = timer.mSetupLength;
+                        DataModel.getDataModel().addLap();
+                        Events.sendStopwatchEvent(R.string.action_lap, eventLabel);
+                        reason = getString(R.string.stopwatch_lapped);
                     }
-                    timer.writeToSharedPref(prefs);
-                    Events.sendTimerEvent(R.string.action_stop, R.string.label_intent);
                     break;
                 }
                 default:
-                    return null;
+                    throw new IllegalArgumentException("unknown stopwatch action: " + action);
             }
-            // updating the time for next firing timer
-            final Intent i = new Intent()
-                    .setAction(timerAction)
-                    .putExtra(Timers.TIMER_INTENT_EXTRA, timer.mTimerId)
-                    .putExtra(Timers.UPDATE_NEXT_TIMESUP, true)
-                    // Make sure the receiver is getting the intent ASAP.
-                    .addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-            mContext.sendBroadcast(i);
-            return null;
+
+            if (fail) {
+                Voice.notifyFailure(this, reason);
+            } else {
+                Voice.notifySuccess(this, reason);
+            }
+            LogUtils.i(reason);
         }
 
-        /**
-         * @param timers available to the user
-         * @param stateToIgnore the opposite of the state that the timer should be in
-         * @return a timer only if there's one timer available that is of a state
-         * other than the state that's passed
-         * in all other cases returns null
-         */
-        private TimerObj getTimerWithStateToIgnore(List<TimerObj> timers, int stateToIgnore) {
-            TimerObj soleTimer = null;
-            for (TimerObj timer : timers) {
-                if (timer.mState != stateToIgnore) {
-                    if (soleTimer == null) {
-                        soleTimer = timer;
-                    } else {
-                        // soleTimer has already been set
-                        final String reason = mContext.getString(R.string.multiple_timers_available);
-                        LogUtils.i(reason);
-                        Voice.notifyFailure(mActivity, reason);
-                        return null;
-                    }
-                }
-            }
-            return soleTimer;
-        }
-
-        /**
-         * @param timers available to the user
-         * @param statesToInclude acceptable states of the timer
-         * @return a timer only if there's one timer available that is of the state
-         * that is passed in
-         * in all other cases returns null
-         */
-        private TimerObj getTimerWithStatesToInclude(
-                List<TimerObj> timers, Set<Integer> statesToInclude, String action) {
-            TimerObj soleTimer = null;
-            for (TimerObj timer : timers) {
-                if (statesToInclude.contains(timer.mState)) {
-                    if (soleTimer == null) {
-                        soleTimer = timer;
-                    } else {
-                        // soleTimer has already been set
-                        final String reason = mContext.getString(
-                                R.string.multiple_timers_available);
-                        LogUtils.i(reason);
-                        Voice.notifyFailure(mActivity, reason);
-                        return null;
-                    }
-                }
-            }
-            // if there are no timers of desired property
-            // announce it to the user
-            if (soleTimer == null) {
-                if (action.equals(ACTION_RESET_TIMER)) {
-                    // all timers are running
-                    final String reason = mContext.getString(
-                            R.string.timer_cant_be_reset_because_its_running);
-                    LogUtils.i(reason);
-                    Voice.notifyFailure(mActivity, reason);
-                } else if (action.equals(ACTION_STOP_TIMER)) {
-                    // no running timers
-                    final String reason = mContext.getString(R.string.timer_already_stopped);
-                    LogUtils.i(reason);
-                    Voice.notifyFailure(mActivity, reason);
-                }
-            }
-            return soleTimer;
-        }
+        // Open the UI to the stopwatch.
+        final Intent stopwatchIntent = new Intent(mAppContext, DeskClock.class)
+                .putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.STOPWATCH_TAB_INDEX);
+        startActivity(stopwatchIntent);
     }
 
-    private static class HandleClockAsync extends AsyncTask<Void, Void, Void> {
-        private final Context mContext;
-        private final Intent mIntent;
-        private final Activity mActivity;
+    private void handleTimerIntent(Intent intent) {
+        final String action = intent.getAction();
 
-        public HandleClockAsync(Context context, Intent intent, Activity activity) {
-            mContext = context;
-            mIntent = intent;
-            mActivity = activity;
+        // Determine where this intent originated.
+        final int eventLabel = intent.getIntExtra(EXTRA_EVENT_LABEL, R.string.label_intent);
+        int timerId = intent.getIntExtra(EXTRA_TIMER_ID, -1);
+        Timer timer = null;
+
+        if (ACTION_SHOW_TIMERS.equals(action)) {
+            Events.sendTimerEvent(R.string.action_show, eventLabel);
+        } else {
+            String reason = null;
+            if (timerId == -1) {
+                // No timer id was given explicitly, so check if only one timer exists.
+                final List<Timer> timers =  DataModel.getDataModel().getTimers();
+                if (timers.isEmpty()) {
+                    // No timers exist to control.
+                    reason = getString(R.string.no_timers_exist);
+                } else if (timers.size() > 1) {
+                    // Many timers exist so the control command is ambiguous.
+                    reason = getString(R.string.too_many_timers_exist);
+                } else {
+                    timer = timers.get(0);
+                }
+            } else {
+                // Verify that the given timer does exist.
+                timer = DataModel.getDataModel().getTimer(timerId);
+                if (timer == null) {
+                    reason = getString(R.string.timer_does_not_exist);
+                }
+            }
+
+            if (timer == null) {
+                Voice.notifyFailure(this, reason);
+            } else {
+                timerId = timer.getId();
+
+                // Otherwise the control command can be honored.
+                switch (action) {
+                    case ACTION_RESET_TIMER: {
+                        DataModel.getDataModel().resetOrDeleteTimer(timer, eventLabel);
+                        if (timer.isExpired() && timer.getDeleteAfterUse()) {
+                            timerId = -1;
+                            reason = getString(R.string.timer_deleted);
+                        } else {
+                            reason = getString(R.string.timer_was_reset);
+                        }
+                        break;
+                    }
+                    case ACTION_START_TIMER: {
+                        DataModel.getDataModel().startTimer(timer);
+                        Events.sendTimerEvent(R.string.action_start, eventLabel);
+                        reason = getString(R.string.timer_started);
+                        break;
+                    }
+                    case ACTION_PAUSE_TIMER: {
+                        DataModel.getDataModel().pauseTimer(timer);
+                        Events.sendTimerEvent(R.string.action_pause, eventLabel);
+                        reason = getString(R.string.timer_paused);
+                        break;
+                    }
+                    default:
+                        throw new IllegalArgumentException("unknown timer action: " + action);
+                }
+
+                Voice.notifySuccess(this, reason);
+            }
+
+            LogUtils.i(reason);
         }
 
-        @Override
-        protected Void doInBackground(Void... parameters) {
-            final String cityExtra = mIntent.getStringExtra(EXTRA_CITY);
-            final SharedPreferences prefs =
-                    Utils.getDefaultSharedPreferences(mContext);
-            switch (mIntent.getAction()) {
+        // Open the UI to the timers.
+        final Intent showTimers = new Intent(mAppContext, DeskClock.class)
+                .putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.TIMER_TAB_INDEX);
+        if (timerId != -1) {
+            showTimers.putExtra(EXTRA_TIMER_ID, timerId);
+        }
+        startActivity(showTimers);
+    }
+
+    private void handleClockIntent(Intent intent) {
+        final String action = intent.getAction();
+
+        if (ACTION_SHOW_CLOCK.equals(action)) {
+            final boolean fromWidget = intent.getBooleanExtra(EXTRA_FROM_WIDGET, false);
+            final int label = fromWidget ? R.string.label_widget : R.string.label_intent;
+            Events.sendClockEvent(R.string.action_show, label);
+        } else {
+            final String cityName = intent.getStringExtra(EXTRA_CITY);
+
+            final String reason;
+            boolean fail = false;
+
+            // If no city was given, start the city chooser.
+            if (cityName == null) {
+                reason = getString(R.string.no_city_selected);
+                LogUtils.i(reason);
+                Voice.notifySuccess(this, reason);
+                startActivity(new Intent(this, CitySelectionActivity.class)
+                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+                switch (action) {
+                    case ACTION_ADD_CLOCK:
+                        Events.sendClockEvent(R.string.action_add, R.string.label_intent);
+                        break;
+                    case ACTION_DELETE_CLOCK:
+                        Events.sendClockEvent(R.string.action_delete, R.string.label_intent);
+                        break;
+                }
+                return;
+            }
+
+            // If a city was given, ensure it can be located.
+            final City city = DataModel.getDataModel().getCity(cityName);
+            if (city == null) {
+                reason = getString(R.string.the_city_you_specified_is_not_available);
+                LogUtils.i(reason);
+                Voice.notifyFailure(this, reason);
+                switch (action) {
+                    case ACTION_ADD_CLOCK:
+                        Events.sendClockEvent(R.string.action_add, R.string.label_intent);
+                        break;
+                    case ACTION_DELETE_CLOCK:
+                        Events.sendClockEvent(R.string.action_delete, R.string.label_intent);
+                        break;
+                }
+                return;
+            }
+
+            final Set<City> selectedCities =
+                    Utils.newArraySet(DataModel.getDataModel().getSelectedCities());
+
+            switch (action) {
                 case ACTION_ADD_CLOCK: {
-                    // if a city isn't specified open CitiesActivity to choose a city
-                    if (cityExtra == null) {
-                        final String reason = mContext.getString(R.string.no_city_selected);
-                        Voice.notifyFailure(mActivity, reason);
-                        LogUtils.i(reason);
-                        startCitiesActivity();
-                        Events.sendClockEvent(R.string.action_create, R.string.label_intent);
+                    // Fail if the city is already present.
+                    if (!selectedCities.add(city)) {
+                        fail = true;
+                        reason = getString(R.string.the_city_already_added);
                         break;
                     }
 
-                    // if a city is passed add that city to the list
-                    final Map<String, CityObj> cities = Utils.loadCityMapFromXml(mContext);
-                    final CityObj city = cities.get(cityExtra.toLowerCase());
-                    // check if this city exists in the list of available cities
-                    if (city == null) {
-                        final String reason = mContext.getString(
-                                R.string.the_city_you_specified_is_not_available);
-                        Voice.notifyFailure(mActivity, reason);
-                        LogUtils.i(reason);
-                        break;
-                    }
-
-                    final HashMap<String, CityObj> selectedCities =
-                            Cities.readCitiesFromSharedPrefs(prefs);
-                    // if this city is already added don't add it
-                    if (selectedCities.put(city.mCityId, city) != null) {
-                        final String reason = mContext.getString(R.string.the_city_already_added);
-                        Voice.notifyFailure(mActivity, reason);
-                        LogUtils.i(reason);
-                        break;
-                    }
-
-                    Cities.saveCitiesToSharedPrefs(prefs, selectedCities);
-                    final String reason = mContext.getString(R.string.city_added, city.mCityName);
-                    Voice.notifySuccess(mActivity, reason);
-                    LogUtils.i(reason);
-                    Events.sendClockEvent(R.string.action_start, R.string.label_intent);
+                    // Otherwise report the success.
+                    DataModel.getDataModel().setSelectedCities(selectedCities);
+                    reason = getString(R.string.city_added, city.getName());
+                    Events.sendClockEvent(R.string.action_add, R.string.label_intent);
                     break;
                 }
                 case ACTION_DELETE_CLOCK: {
-                    if (cityExtra == null) {
-                        // if a city isn't specified open CitiesActivity to choose a city
-                        final String reason = mContext.getString(R.string.no_city_selected);
-                        Voice.notifyFailure(mActivity, reason);
-                        LogUtils.i(reason);
-                        startCitiesActivity();
-                        Events.sendClockEvent(R.string.action_create, R.string.label_intent);
+                    // Fail if the city is not present.
+                    if (!selectedCities.remove(city)) {
+                        fail = true;
+                        reason = getString(R.string.the_city_you_specified_is_not_available);
                         break;
                     }
 
-                    // if a city is specified check if it's selected and if so delete it
-                    final Map<String, CityObj> cities = Utils.loadCityMapFromXml(mContext);
-                    // check if this city exists in the list of available cities
-                    final CityObj city = cities.get(cityExtra.toLowerCase());
-                    if (city == null) {
-                        final String reason = mContext.getString(
-                                R.string.the_city_you_specified_is_not_available);
-                        Voice.notifyFailure(mActivity, reason);
-                        LogUtils.i(reason);
-                        break;
-                    }
-
-                    final HashMap<String, CityObj> selectedCities =
-                            Cities.readCitiesFromSharedPrefs(prefs);
-                    if (selectedCities.remove(city.mCityId) != null) {
-                        final String reason = mContext.getString(R.string.city_deleted,
-                                city.mCityName);
-                        Voice.notifySuccess(mActivity, reason);
-                        LogUtils.i(reason);
-                        Cities.saveCitiesToSharedPrefs(prefs, selectedCities);
-                        Events.sendClockEvent(R.string.action_delete, R.string.label_intent);
-                    } else {
-                        // the specified city hasn't been added to the user's list yet
-                        Voice.notifyFailure(mActivity, mContext.getString(
-                                R.string.the_city_you_specified_is_not_available));
-                    }
+                    // Otherwise report the success.
+                    DataModel.getDataModel().setSelectedCities(selectedCities);
+                    reason = getString(R.string.city_deleted, city.getName());
+                    Events.sendClockEvent(R.string.action_delete, R.string.label_intent);
                     break;
                 }
-                case ACTION_SHOW_CLOCK:
-                    Events.sendClockEvent(R.string.action_show, R.string.label_intent);
-                    break;
+                default:
+                    throw new IllegalArgumentException("unknown clock action: " + action);
             }
-            return null;
+
+            if (fail) {
+                Voice.notifyFailure(this, reason);
+            } else {
+                Voice.notifySuccess(this, reason);
+            }
+            LogUtils.i(reason);
         }
 
-        private void startCitiesActivity() {
-            mContext.startActivity(new Intent(mContext, CitiesActivity.class).addFlags(
-                    Intent.FLAG_ACTIVITY_NEW_TASK));
-        }
+        // Opens the UI for clocks
+        final Intent clockIntent = new Intent(mAppContext, DeskClock.class)
+                .setAction(action)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+                .putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.CLOCK_TAB_INDEX);
+        startActivity(clockIntent);
     }
-}
-
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/LabelDialogFragment.java b/src/com/android/deskclock/LabelDialogFragment.java
index 472e378..36c08d5 100644
--- a/src/com/android/deskclock/LabelDialogFragment.java
+++ b/src/com/android/deskclock/LabelDialogFragment.java
@@ -16,24 +16,30 @@
 
 package com.android.deskclock;
 
-import android.app.Activity;
 import android.app.Dialog;
 import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.res.ColorStateList;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.widget.AppCompatEditText;
 import android.text.Editable;
+import android.text.InputType;
 import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.view.KeyEvent;
-import android.view.WindowManager;
 import android.view.inputmethod.EditorInfo;
 import android.widget.TextView;
 
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Timer;
 import com.android.deskclock.provider.Alarm;
-import com.android.deskclock.timer.TimerObj;
+
+import static android.graphics.Color.RED;
+import static android.graphics.Color.WHITE;
+import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE;
 
 /**
  * DialogFragment to edit label.
@@ -42,148 +48,156 @@
 
     private static final String KEY_LABEL = "label";
     private static final String KEY_ALARM = "alarm";
-    private static final String KEY_TIMER = "timer";
+    private static final String KEY_TIMER_ID = "timer_id";
     private static final String KEY_TAG = "tag";
 
     private AppCompatEditText mLabelBox;
+    private Alarm mAlarm;
+    private int mTimerId;
+    private String mTag;
 
     public static LabelDialogFragment newInstance(Alarm alarm, String label, String tag) {
-        final LabelDialogFragment frag = new LabelDialogFragment();
-        Bundle args = new Bundle();
+        final Bundle args = new Bundle();
         args.putString(KEY_LABEL, label);
         args.putParcelable(KEY_ALARM, alarm);
         args.putString(KEY_TAG, tag);
+
+        final LabelDialogFragment frag = new LabelDialogFragment();
         frag.setArguments(args);
         return frag;
     }
 
-    public static LabelDialogFragment newInstance(TimerObj timer, String label, String tag) {
+    public static LabelDialogFragment newInstance(Timer timer) {
+        final Bundle args = new Bundle();
+        args.putString(KEY_LABEL, timer.getLabel());
+        args.putInt(KEY_TIMER_ID, timer.getId());
+
         final LabelDialogFragment frag = new LabelDialogFragment();
-        Bundle args = new Bundle();
-        args.putString(KEY_LABEL, label);
-        args.putParcelable(KEY_TIMER, timer);
-        args.putString(KEY_TAG, tag);
         frag.setArguments(args);
         return frag;
     }
 
     @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
+    public void onSaveInstanceState(@NonNull Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putString(KEY_LABEL, mLabelBox.getText().toString());
     }
 
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
-        Bundle bundle = getArguments();
-        final String label = bundle.getString(KEY_LABEL);
-        final Alarm alarm = bundle.getParcelable(KEY_ALARM);
-        final TimerObj timer = bundle.getParcelable(KEY_TIMER);
-        final String tag = bundle.getString(KEY_TAG);
+        final Bundle bundle = getArguments();
+        mAlarm = bundle.getParcelable(KEY_ALARM);
+        mTimerId = bundle.getInt(KEY_TIMER_ID, -1);
+        mTag = bundle.getString(KEY_TAG);
+
+        final String label = savedInstanceState != null ?
+                savedInstanceState.getString(KEY_LABEL) : bundle.getString(KEY_LABEL);
 
         final Context context = getActivity();
 
         mLabelBox = new AppCompatEditText(context);
+        mLabelBox.setOnEditorActionListener(new ImeDoneListener());
+        mLabelBox.addTextChangedListener(new TextChangeListener(context));
+        mLabelBox.setSingleLine();
+        mLabelBox.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
         mLabelBox.setText(label);
-        mLabelBox.setOnEditorActionListener(new TextView.OnEditorActionListener() {
-            @Override
-            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-                if (actionId == EditorInfo.IME_ACTION_DONE) {
-                    set(alarm, timer, tag);
-                    return true;
-                }
-                return false;
-            }
-        });
-        mLabelBox.addTextChangedListener(new TextWatcher() {
-            @Override
-            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-            }
-
-            @Override
-            public void onTextChanged(CharSequence s, int start, int before, int count) {
-                setLabelBoxBackground(s == null || TextUtils.isEmpty(s));
-            }
-
-            @Override
-            public void afterTextChanged(Editable editable) {
-            }
-        });
         mLabelBox.selectAll();
-        setLabelBoxBackground(TextUtils.isEmpty(label));
 
+        final int padding = getResources().getDimensionPixelSize(R.dimen.label_edittext_padding);
         final AlertDialog alertDialog = new AlertDialog.Builder(context)
-                .setView(mLabelBox)
-                .setPositiveButton(R.string.time_picker_set, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        set(alarm, timer, tag);
-                    }
-                })
-                .setNegativeButton(R.string.time_picker_cancel,
-                        new DialogInterface.OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialog, int which) {
-                            dismiss();
-                        }
-                })
+                .setView(mLabelBox, padding, 0, padding, 0)
+                .setPositiveButton(R.string.time_picker_set, new OkListener())
+                .setNegativeButton(R.string.time_picker_cancel, new CancelListener())
                 .setMessage(R.string.label)
                 .create();
 
-        alertDialog.getWindow().setSoftInputMode(
-                WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+        alertDialog.getWindow().setSoftInputMode(SOFT_INPUT_STATE_VISIBLE);
         return alertDialog;
     }
 
-    private void set(Alarm alarm, TimerObj timer, String tag) {
+    /**
+     * Sets the new label into the timer or alarm.
+     */
+    private void setLabel() {
         String label = mLabelBox.getText().toString();
-        if (label.trim().length() == 0) {
+        if (label.trim().isEmpty()) {
             // Don't allow user to input label with only whitespace.
             label = "";
         }
 
-        if (alarm != null) {
-            set(alarm, tag, label);
-        } else if (timer != null) {
-            set(timer, tag, label);
-        } else {
-            LogUtils.e("No alarm or timer available.");
+        if (mAlarm != null) {
+            ((AlarmLabelDialogHandler) getActivity()).onDialogLabelSet(mAlarm, label, mTag);
+        } else if (mTimerId >= 0) {
+            final Timer timer = DataModel.getDataModel().getTimer(mTimerId);
+            if (timer != null) {
+                DataModel.getDataModel().setTimerLabel(timer, label);
+            }
         }
     }
 
-    private void set(Alarm alarm, String tag, String label) {
-        final Activity activity = getActivity();
-        // TODO just pass in a listener in newInstance()
-        if (activity instanceof AlarmLabelDialogHandler) {
-            ((DeskClock) activity).onDialogLabelSet(alarm, label, tag);
-        } else {
-            LogUtils.e("Error! Activities that use LabelDialogFragment must implement "
-                    + "AlarmLabelDialogHandler");
-        }
-        dismiss();
-    }
-
-    private void set(TimerObj timer, String tag, String label) {
-        final Activity activity = getActivity();
-        // TODO just pass in a listener in newInstance()
-        if (activity instanceof TimerLabelDialogHandler){
-            ((DeskClock) activity).onDialogLabelSet(timer, label, tag);
-        } else {
-            LogUtils.e("Error! Activities that use LabelDialogFragment must implement "
-                    + "AlarmLabelDialogHandler or TimerLabelDialogHandler");
-        }
-        dismiss();
-    }
-
-    private void setLabelBoxBackground(boolean emptyText) {
-        mLabelBox.setBackgroundResource(emptyText ?
-                R.drawable.bg_edittext_default : R.drawable.bg_edittext_activated);
-    }
-
     interface AlarmLabelDialogHandler {
         void onDialogLabelSet(Alarm alarm, String label, String tag);
     }
 
-    interface TimerLabelDialogHandler {
-        void onDialogLabelSet(TimerObj timer, String label, String tag);
+    /**
+     * Alters the UI to indicate when input is valid or invalid.
+     */
+    private class TextChangeListener implements TextWatcher {
+
+        private final int colorAccent;
+        private final int colorControlNormal;
+
+        public TextChangeListener(Context context) {
+            colorAccent = Utils.obtainStyledColor(context, R.attr.colorAccent, RED);
+            colorControlNormal = Utils.obtainStyledColor(context, R.attr.colorControlNormal, WHITE);
+        }
+
+        @Override
+        public void onTextChanged(CharSequence s, int start, int before, int count) {
+            final int color = TextUtils.isEmpty(s) ? colorControlNormal : colorAccent;
+            mLabelBox.setSupportBackgroundTintList(ColorStateList.valueOf(color));
+        }
+
+        @Override
+        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+
+        @Override
+        public void afterTextChanged(Editable editable) {}
     }
-}
+
+    /**
+     * Handles completing the label edit from the IME keyboard.
+     */
+    private class ImeDoneListener implements TextView.OnEditorActionListener {
+        @Override
+        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+            if (actionId == EditorInfo.IME_ACTION_DONE) {
+                setLabel();
+                dismiss();
+                return true;
+            }
+            return false;
+        }
+    }
+
+    /**
+     * Handles completing the label edit from the Ok button of the dialog.
+     */
+    private class OkListener implements DialogInterface.OnClickListener {
+        @Override
+        public void onClick(DialogInterface dialog, int which) {
+            setLabel();
+            dismiss();
+        }
+    }
+
+    /**
+     * Handles discarding the label edit from the Cancel button of the dialog.
+     */
+    private class CancelListener implements DialogInterface.OnClickListener {
+        @Override
+        public void onClick(DialogInterface dialog, int which) {
+            dismiss();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/NumberPickerCompat.java b/src/com/android/deskclock/NumberPickerCompat.java
index 477fb89..89baed6 100644
--- a/src/com/android/deskclock/NumberPickerCompat.java
+++ b/src/com/android/deskclock/NumberPickerCompat.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2015 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.annotation.TargetApi;
@@ -6,19 +22,38 @@
 import android.graphics.Color;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
+import android.os.Parcel;
+import android.os.Parcelable;
 import android.util.AttributeSet;
 import android.widget.NumberPicker;
 
 import java.lang.reflect.Field;
 
 /**
- * Subclass of NumberPicker that allows customizing divider color.
+ * Subclass of NumberPicker that allows customizing divider color and saves/restores its value
+ * across device rotations.
  */
-public class NumberPickerCompat extends NumberPicker {
+public class NumberPickerCompat extends NumberPicker implements NumberPicker.OnValueChangeListener {
 
     private static Field sSelectionDivider;
     private static boolean sTrySelectionDivider = true;
 
+    private final Runnable mAnnounceValueRunnable = new Runnable() {
+        @Override
+        public void run() {
+            if (mOnAnnounceValueChangedListener != null) {
+                final int value = getValue();
+                final String[] displayedValues = getDisplayedValues();
+                final String displayedValue =
+                        displayedValues == null ? null : displayedValues[value];
+                mOnAnnounceValueChangedListener.onAnnounceValueChanged(
+                        NumberPickerCompat.this, value, displayedValue);
+            }
+        }
+    };
+    private OnValueChangeListener mOnValueChangedListener;
+    private OnAnnounceValueChangedListener mOnAnnounceValueChangedListener;
+
     public NumberPickerCompat(Context context) {
         this(context, null /* attrs */);
     }
@@ -26,23 +61,21 @@
     public NumberPickerCompat(Context context, AttributeSet attrs) {
         super(context, attrs);
         tintSelectionDivider(context);
+        super.setOnValueChangedListener(this);
     }
 
     public NumberPickerCompat(Context context, AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
         tintSelectionDivider(context);
+        super.setOnValueChangedListener(this);
     }
 
     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
     private void tintSelectionDivider(Context context) {
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP
-                || Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
-            // Accent color in KK will stay system blue, so leave divider color matching.
-            // The divider is correctly tinted to controlColorNormal in M.
-            return;
-        }
+        // Accent color in KK will stay system blue, so leave divider color matching.
+        // The divider is correctly tinted to controlColorNormal in M.
 
-        if (sTrySelectionDivider) {
+        if (Utils.isLOrLMR1() && sTrySelectionDivider) {
             final TypedArray a = context.obtainStyledAttributes(
                     new int[] { android.R.attr.colorControlNormal });
              // White is default color if colorControlNormal is not defined.
@@ -66,4 +99,91 @@
         }
     }
 
-}
+    /**
+     * @return the state of this NumberPicker including the currently selected value
+     */
+    @Override
+    protected Parcelable onSaveInstanceState() {
+        return new State(super.onSaveInstanceState(), getValue());
+    }
+
+    /**
+     * @param state the state of this NumberPicker including the value to select
+     */
+    @Override
+    protected void onRestoreInstanceState(Parcelable state) {
+        final State instanceState = (State) state;
+        super.onRestoreInstanceState(instanceState.getSuperState());
+        setValue(instanceState.mValue);
+    }
+
+    @Override
+    public void setOnValueChangedListener(OnValueChangeListener onValueChangedListener) {
+        mOnValueChangedListener = onValueChangedListener;
+    }
+
+    @Override
+    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
+        if (mOnValueChangedListener != null) {
+            mOnValueChangedListener.onValueChange(picker, oldVal, newVal);
+        }
+
+        // Wait till we reach a value to prevent TalkBack from announcing every intermediate value
+        // when scrolling fast.
+        removeCallbacks(mAnnounceValueRunnable);
+        postDelayed(mAnnounceValueRunnable, 200L);
+    }
+
+    /**
+     * Register a callback to be invoked whenever a value change should be announced.
+     */
+    public void setOnAnnounceValueChangedListener(OnAnnounceValueChangedListener listener) {
+        mOnAnnounceValueChangedListener = listener;
+    }
+
+    /**
+     * The state of this NumberPicker including the selected value. Used to preserve values across
+     * device rotation.
+     */
+    private static final class State extends BaseSavedState {
+
+        private final int mValue;
+
+        public State(Parcel source) {
+            super(source);
+            mValue = source.readInt();
+        }
+
+        public State(Parcelable superState, int value) {
+            super(superState);
+            mValue = value;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            super.writeToParcel(dest, flags);
+            dest.writeInt(mValue);
+        }
+
+        public static final Parcelable.Creator<State> CREATOR =
+                new Parcelable.Creator<State>() {
+                    public State createFromParcel(Parcel in) { return new State(in); }
+                    public State[] newArray(int size) { return new State[size]; }
+                };
+    }
+
+    /**
+     * Interface for a callback to be invoked when a value change should be announced for
+     * accessibility.
+     */
+    public interface OnAnnounceValueChangedListener {
+        /**
+         * Called when a value change should be announced.
+         * @param picker The number picker whose value changed.
+         * @param value The new value.
+         * @param displayedValue The text displayed for the value, or null if the value itself
+         *     is displayed.
+         */
+        void onAnnounceValueChanged(NumberPicker picker, int value, String displayedValue);
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/Screensaver.java b/src/com/android/deskclock/Screensaver.java
index 0d85cc7..c2e69ca 100644
--- a/src/com/android/deskclock/Screensaver.java
+++ b/src/com/android/deskclock/Screensaver.java
@@ -23,7 +23,6 @@
 import android.content.IntentFilter;
 import android.content.res.Configuration;
 import android.database.ContentObserver;
-import android.os.Build;
 import android.os.Handler;
 import android.preference.PreferenceManager;
 import android.provider.Settings;
@@ -33,6 +32,7 @@
 import android.widget.TextClock;
 
 import com.android.deskclock.Utils.ScreensaverMoveSaverRunnable;
+import com.android.deskclock.settings.ScreensaverSettingsActivity;
 
 public class Screensaver extends DreamService {
 
@@ -40,8 +40,6 @@
 
     private static final boolean DEBUG = false;
     private static final String TAG = "DeskClock/Screensaver";
-    private static final boolean PRE_L_DEVICE =
-            Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP;
 
     private View mContentView, mSaverView;
     private View mAnalogClock, mDigitalClock;
@@ -53,7 +51,7 @@
     private final ScreensaverMoveSaverRunnable mMoveSaverRunnable;
 
     /* Register ContentObserver to see alarm changes for pre-L */
-    private final ContentObserver mSettingsContentObserver = PRE_L_DEVICE
+    private final ContentObserver mSettingsContentObserver = Utils.isPreL()
         ? new ContentObserver(mHandler) {
             @Override
             public void onChange(boolean selfChange) {
@@ -143,7 +141,7 @@
         registerReceiver(mIntentReceiver, filter);
         Utils.setMidnightUpdater(mHandler, mMidnightUpdater);
 
-        if (PRE_L_DEVICE) {
+        if (Utils.isPreL()) {
             getContentResolver().registerContentObserver(
                 Settings.System.getUriFor(Settings.System.NEXT_ALARM_FORMATTED),
                 false,
@@ -160,7 +158,7 @@
 
         mHandler.removeCallbacks(mMoveSaverRunnable);
 
-        if (PRE_L_DEVICE) {
+        if (Utils.isPreL()) {
             getContentResolver().unregisterContentObserver(mSettingsContentObserver);
         }
 
@@ -170,8 +168,7 @@
     }
 
     private void setClockStyle() {
-        Utils.setClockStyle(this, mDigitalClock, mAnalogClock,
-                ScreensaverSettingsActivity.KEY_CLOCK_STYLE);
+        Utils.setScreensaverClockStyle(mDigitalClock, mAnalogClock);
         mSaverView = findViewById(R.id.main_clock);
         boolean dimNightMode = Utils.getDefaultSharedPreferences(this)
                 .getBoolean(ScreensaverSettingsActivity.KEY_NIGHT_MODE, false);
@@ -184,8 +181,7 @@
         mDigitalClock = findViewById(R.id.digital_clock);
         mAnalogClock = findViewById(R.id.analog_clock);
         setClockStyle();
-        Utils.setTimeFormat(this, (TextClock) mDigitalClock,
-                getResources().getDimensionPixelSize(R.dimen.main_ampm_font_size));
+        Utils.setTimeFormat(this, (TextClock) mDigitalClock);
 
         mContentView = (View) mSaverView.getParent();
         mSaverView.setAlpha(0);
diff --git a/src/com/android/deskclock/ScreensaverActivity.java b/src/com/android/deskclock/ScreensaverActivity.java
index 573ce79..2754114 100644
--- a/src/com/android/deskclock/ScreensaverActivity.java
+++ b/src/com/android/deskclock/ScreensaverActivity.java
@@ -24,10 +24,10 @@
 import android.content.res.Configuration;
 import android.database.ContentObserver;
 import android.os.BatteryManager;
-import android.os.Build;
 import android.os.Handler;
 import android.provider.Settings;
 import android.support.v7.app.AppCompatActivity;
+import android.util.TypedValue;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
@@ -39,13 +39,6 @@
     static final boolean DEBUG = false;
     static final String TAG = "DeskClock/ScreensaverActivity";
 
-    // This value must match android:defaultValue of
-    // android:key="screensaver_clock_style" in dream_settings.xml
-    static final String DEFAULT_CLOCK_STYLE = "digital";
-
-    private static final boolean PRE_L_DEVICE =
-            Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP;
-
     private View mContentView, mSaverView;
     private View mAnalogClock, mDigitalClock;
 
@@ -53,7 +46,6 @@
     private final ScreensaverMoveSaverRunnable mMoveSaverRunnable;
     private String mDateFormat;
     private String mDateFormatForAccessibility;
-    private String mClockStyle;
     private boolean mPluggedIn = true;
     private final int mFlags = (WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
             | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
@@ -90,7 +82,7 @@
     };
 
     /* Register ContentObserver to see alarm changes for pre-L */
-    private final ContentObserver mSettingsContentObserver = PRE_L_DEVICE
+    private final ContentObserver mSettingsContentObserver = Utils.isPreL()
         ? new ContentObserver(mHandler) {
             @Override
             public void onChange(boolean selfChange) {
@@ -123,7 +115,7 @@
         filter.addAction(Intent.ACTION_TIME_CHANGED);
         filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
         registerReceiver(mIntentReceiver, filter);
-        if (PRE_L_DEVICE) {
+        if (Utils.isPreL()) {
             getContentResolver().registerContentObserver(
                 Settings.System.getUriFor(Settings.System.NEXT_ALARM_FORMATTED),
                 false,
@@ -160,7 +152,7 @@
 
     @Override
     public void onStop() {
-        if (PRE_L_DEVICE) {
+        if (Utils.isPreL()) {
             getContentResolver().unregisterContentObserver(mSettingsContentObserver);
         }
         unregisterReceiver(mIntentReceiver);
@@ -194,11 +186,8 @@
     }
 
     private void setClockStyle() {
-        Utils.setClockStyle(this, mDigitalClock, mAnalogClock,
-                SettingsActivity.KEY_CLOCK_STYLE);
+        Utils.setClockStyle(mDigitalClock, mAnalogClock);
         mSaverView = findViewById(R.id.main_clock);
-        mClockStyle = (mSaverView == mDigitalClock ?
-                Utils.CLOCK_TYPE_DIGITAL : Utils.CLOCK_TYPE_ANALOG);
         Utils.dimClockView(true, mSaverView);
     }
 
@@ -207,8 +196,7 @@
         mDigitalClock = findViewById(R.id.digital_clock);
         mAnalogClock = findViewById(R.id.analog_clock);
         setClockStyle();
-        Utils.setTimeFormat(this, (TextClock) mDigitalClock,
-                getResources().getDimensionPixelSize(R.dimen.main_ampm_font_size));
+        Utils.setTimeFormat(this, (TextClock) mDigitalClock);
 
         mContentView = (View) mSaverView.getParent();
         mContentView.forceLayout();
@@ -224,5 +212,4 @@
         Utils.updateDate(mDateFormat, mDateFormatForAccessibility,mContentView);
         Utils.refreshAlarm(ScreensaverActivity.this, mContentView);
     }
-
-}
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/SettingsActivity.java b/src/com/android/deskclock/SettingsActivity.java
deleted file mode 100644
index 248bb6f..0000000
--- a/src/com/android/deskclock/SettingsActivity.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * 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.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.media.AudioManager;
-import android.os.Bundle;
-import android.preference.CheckBoxPreference;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
-import android.text.format.DateUtils;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.deskclock.worldclock.Cities;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.TimeZone;
-
-/**
- * Settings for the Alarm Clock.
- */
-public class SettingsActivity extends BaseActivity {
-
-    public static final String KEY_ALARM_SNOOZE = "snooze_duration";
-    public static final String KEY_ALARM_VOLUME = "volume_setting";
-    public static final String KEY_VOLUME_BEHAVIOR = "volume_button_setting";
-    public static final String KEY_AUTO_SILENCE = "auto_silence";
-    public static final String KEY_CLOCK_STYLE = "clock_style";
-    public static final String KEY_HOME_TZ = "home_time_zone";
-    public static final String KEY_AUTO_HOME_CLOCK = "automatic_home_clock";
-    public static final String KEY_VOLUME_BUTTONS = "volume_button_setting";
-    public static final String KEY_WEEK_START = "week_start";
-
-    public static final String DEFAULT_VOLUME_BEHAVIOR = "0";
-    public static final String VOLUME_BEHAVIOR_SNOOZE = "1";
-    public static final String VOLUME_BEHAVIOR_DISMISS = "2";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setVolumeControlStream(AudioManager.STREAM_ALARM);
-        setContentView(R.layout.settings);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected (MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                finish();
-                return true;
-            default:
-                break;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu (Menu menu) {
-        getMenuInflater().inflate(R.menu.settings_menu, menu);
-        MenuItem help = menu.findItem(R.id.menu_item_help);
-        if (help != null) {
-            Utils.prepareHelpMenuItem(this, help);
-        }
-        return super.onCreateOptionsMenu(menu);
-    }
-
-
-    public static class PrefsFragment extends PreferenceFragment
-            implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
-
-        private static CharSequence[][] mTimezones;
-        private long mTime;
-
-        @Override
-        public void onCreate(Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-            addPreferencesFromResource(R.xml.settings);
-
-            // We don't want to reconstruct the timezone list every single time onResume() is
-            // called so we do it once in onCreate
-            if (mTimezones == null) {
-                mTime = System.currentTimeMillis();
-                mTimezones = getAllTimezones();
-            }
-            final ListPreference homeTimezonePref = (ListPreference) findPreference(KEY_HOME_TZ);
-            homeTimezonePref.setEntryValues(mTimezones[0]);
-            homeTimezonePref.setEntries(mTimezones[1]);
-            homeTimezonePref.setSummary(homeTimezonePref.getEntry());
-            homeTimezonePref.setOnPreferenceChangeListener(this);
-        }
-
-        @Override
-        public void onResume() {
-            super.onResume();
-            // By default, do not recreate the DeskClock activity
-            getActivity().setResult(RESULT_CANCELED);
-            refresh();
-        }
-
-        @Override
-        public boolean onPreferenceChange(Preference pref, Object newValue) {
-            if (KEY_AUTO_SILENCE.equals(pref.getKey())) {
-                final ListPreference autoSilencePref = (ListPreference) pref;
-                String delay = (String) newValue;
-                updateAutoSnoozeSummary(autoSilencePref, delay);
-            } else if (KEY_CLOCK_STYLE.equals(pref.getKey())) {
-                final ListPreference clockStylePref = (ListPreference) pref;
-                final int idx = clockStylePref.findIndexOfValue((String) newValue);
-                clockStylePref.setSummary(clockStylePref.getEntries()[idx]);
-            } else if (KEY_HOME_TZ.equals(pref.getKey())) {
-                final ListPreference homeTimezonePref = (ListPreference) pref;
-                final int idx = homeTimezonePref.findIndexOfValue((String) newValue);
-                homeTimezonePref.setSummary(homeTimezonePref.getEntries()[idx]);
-                notifyHomeTimeZoneChanged();
-            } else if (KEY_AUTO_HOME_CLOCK.equals(pref.getKey())) {
-                final boolean autoHomeClockEnabled = ((CheckBoxPreference) pref).isChecked();
-                final Preference homeTimeZonePref = findPreference(KEY_HOME_TZ);
-                homeTimeZonePref.setEnabled(!autoHomeClockEnabled);
-                notifyHomeTimeZoneChanged();
-            } else if (KEY_VOLUME_BUTTONS.equals(pref.getKey())) {
-                final ListPreference volumeButtonsPref = (ListPreference) pref;
-                final int index = volumeButtonsPref.findIndexOfValue((String) newValue);
-                volumeButtonsPref.setSummary(volumeButtonsPref.getEntries()[index]);
-            } else if (KEY_WEEK_START.equals(pref.getKey())) {
-                final ListPreference weekStartPref = (ListPreference) findPreference(KEY_WEEK_START);
-                final int idx = weekStartPref.findIndexOfValue((String) newValue);
-                weekStartPref.setSummary(weekStartPref.getEntries()[idx]);
-            }
-            // Set result so DeskClock knows to refresh itself
-            getActivity().setResult(RESULT_OK);
-            return true;
-        }
-
-        @Override
-        public boolean onPreferenceClick(Preference pref) {
-            final Activity activity = getActivity();
-            if (activity == null) {
-                return false;
-            }
-
-            if (KEY_ALARM_VOLUME.equals(pref.getKey())) {
-                final AudioManager audioManager =
-                        (AudioManager) activity.getSystemService(Context.AUDIO_SERVICE);
-                audioManager.adjustStreamVolume(AudioManager.STREAM_ALARM,
-                        AudioManager.ADJUST_SAME, AudioManager.FLAG_SHOW_UI);
-                return true;
-            }
-            return false;
-        }
-
-        /**
-         * Returns an array of ids/time zones. This returns a double indexed array
-         * of ids and time zones for Calendar. It is an inefficient method and
-         * shouldn't be called often, but can be used for one time generation of
-         * this list.
-         *
-         * @return double array of tz ids and tz names
-         */
-        public CharSequence[][] getAllTimezones() {
-            Resources resources = this.getResources();
-            String[] ids = resources.getStringArray(R.array.timezone_values);
-            String[] labels = resources.getStringArray(R.array.timezone_labels);
-            int minLength = ids.length;
-            if (ids.length != labels.length) {
-                minLength = Math.min(minLength, labels.length);
-                LogUtils.e("Timezone ids and labels have different length!");
-            }
-            List<TimeZoneRow> timezones = new ArrayList<>();
-            for (int i = 0; i < minLength; i++) {
-                timezones.add(new TimeZoneRow(ids[i], labels[i]));
-            }
-            Collections.sort(timezones);
-
-            CharSequence[][] timeZones = new CharSequence[2][timezones.size()];
-            int i = 0;
-            for (TimeZoneRow row : timezones) {
-                timeZones[0][i] = row.mId;
-                timeZones[1][i++] = row.mDisplayName;
-            }
-            return timeZones;
-        }
-
-        private void refresh() {
-            final ListPreference autoSilencePref =
-                    (ListPreference) findPreference(KEY_AUTO_SILENCE);
-            String delay = autoSilencePref.getValue();
-            updateAutoSnoozeSummary(autoSilencePref, delay);
-            autoSilencePref.setOnPreferenceChangeListener(this);
-
-            final ListPreference clockStylePref = (ListPreference) findPreference(KEY_CLOCK_STYLE);
-            clockStylePref.setSummary(clockStylePref.getEntry());
-            clockStylePref.setOnPreferenceChangeListener(this);
-
-            final Preference autoHomeClockPref = findPreference(KEY_AUTO_HOME_CLOCK);
-            final boolean autoHomeClockEnabled =
-                    ((CheckBoxPreference) autoHomeClockPref).isChecked();
-            autoHomeClockPref.setOnPreferenceChangeListener(this);
-
-            final ListPreference homeTimezonePref = (ListPreference) findPreference(KEY_HOME_TZ);
-            homeTimezonePref.setEnabled(autoHomeClockEnabled);
-            homeTimezonePref.setSummary(homeTimezonePref.getEntry());
-            homeTimezonePref.setOnPreferenceChangeListener(this);
-
-            final ListPreference volumeButtonsPref =
-                    (ListPreference) findPreference(KEY_VOLUME_BUTTONS);
-            volumeButtonsPref.setSummary(volumeButtonsPref.getEntry());
-            volumeButtonsPref.setOnPreferenceChangeListener(this);
-
-            final Preference volumePref = findPreference(KEY_ALARM_VOLUME);
-            volumePref.setOnPreferenceClickListener(this);
-
-            final SnoozeLengthDialog snoozePref =
-                    (SnoozeLengthDialog) findPreference(KEY_ALARM_SNOOZE);
-            snoozePref.setSummary();
-
-            final ListPreference weekStartPref = (ListPreference) findPreference(KEY_WEEK_START);
-            // Set the default value programmatically
-            final String value = weekStartPref.getValue();
-            final int idx = weekStartPref.findIndexOfValue(
-                    value == null ? String.valueOf(Utils.DEFAULT_WEEK_START) : value);
-            weekStartPref.setValueIndex(idx);
-            weekStartPref.setSummary(weekStartPref.getEntries()[idx]);
-            weekStartPref.setOnPreferenceChangeListener(this);
-        }
-
-        private void updateAutoSnoozeSummary(ListPreference listPref, String delay) {
-            int i = Integer.parseInt(delay);
-            if (i == -1) {
-                listPref.setSummary(R.string.auto_silence_never);
-            } else {
-                listPref.setSummary(Utils.getNumberFormattedQuantityString(getActivity(),
-                        R.plurals.auto_silence_summary, i));
-            }
-        }
-
-        private void notifyHomeTimeZoneChanged() {
-            Intent i = new Intent(Cities.WORLDCLOCK_UPDATE_INTENT);
-            getActivity().sendBroadcast(i);
-        }
-
-        private class TimeZoneRow implements Comparable<TimeZoneRow> {
-            private static final boolean SHOW_DAYLIGHT_SAVINGS_INDICATOR = false;
-
-            public final String mId;
-            public final String mDisplayName;
-            public final int mOffset;
-
-            public TimeZoneRow(String id, String name) {
-                mId = id;
-                TimeZone tz = TimeZone.getTimeZone(id);
-                boolean useDaylightTime = tz.useDaylightTime();
-                mOffset = tz.getOffset(mTime);
-                mDisplayName = buildGmtDisplayName(name, useDaylightTime);
-            }
-
-            @Override
-            public int compareTo(TimeZoneRow another) {
-                return mOffset - another.mOffset;
-            }
-
-            public String buildGmtDisplayName(String displayName, boolean useDaylightTime) {
-                int p = Math.abs(mOffset);
-                StringBuilder name = new StringBuilder("(GMT");
-                name.append(mOffset < 0 ? '-' : '+');
-
-                name.append(p / DateUtils.HOUR_IN_MILLIS);
-                name.append(':');
-
-                int min = p / 60000;
-                min %= 60;
-
-                if (min < 10) {
-                    name.append('0');
-                }
-                name.append(min);
-                name.append(") ");
-                name.append(displayName);
-                if (useDaylightTime && SHOW_DAYLIGHT_SAVINGS_INDICATOR) {
-                    name.append(" \u2600"); // Sun symbol
-                }
-                return name.toString();
-            }
-        }
-    }
-}
diff --git a/src/com/android/deskclock/SnoozeLengthDialog.java b/src/com/android/deskclock/SnoozeLengthDialog.java
deleted file mode 100644
index 3ba7590..0000000
--- a/src/com/android/deskclock/SnoozeLengthDialog.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.android.deskclock;
-
-import android.app.AlertDialog;
-import android.content.Context;
-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(Utils.getNumberFormattedQuantityString(mContext, R.plurals.snooze_duration,
-                        mSnoozeMinutes));
-    }
-
-    public int getCurrentValue() {
-        return mSnoozeMinutes;
-    }
-}
-
-
-
diff --git a/src/com/android/deskclock/TimePickerFragment.java b/src/com/android/deskclock/TimePickerFragment.java
deleted file mode 100644
index 04454e9..0000000
--- a/src/com/android/deskclock/TimePickerFragment.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.deskclock;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.TimePickerDialog;
-import android.app.TimePickerDialog.OnTimeSetListener;
-import android.os.Bundle;
-import android.text.format.DateFormat;
-
-import com.android.deskclock.provider.Alarm;
-
-import java.util.Calendar;
-
-public class TimePickerFragment extends DialogFragment {
-
-    private Alarm mAlarm;
-    private OnTimeSetListener mListener;
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        final int hour, minute;
-        if (mAlarm == null) {
-            final Calendar c = Calendar.getInstance();
-            hour = c.get(Calendar.HOUR_OF_DAY);
-            minute = c.get(Calendar.MINUTE);
-        } else {
-            hour = mAlarm.hour;
-            minute = mAlarm.minutes;
-        }
-
-        return new TimePickerDialog(getActivity(), R.style.TimePickerTheme, mListener, hour, minute,
-                DateFormat.is24HourFormat(getActivity()));
-    }
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        if (getTargetFragment() instanceof OnTimeSetListener) {
-            setOnTimeSetListener((OnTimeSetListener) getTargetFragment());
-        }
-    }
-
-    public void setOnTimeSetListener(OnTimeSetListener listener) {
-        mListener = listener;
-    }
-
-    public void setAlarm(Alarm alarm) {
-        mAlarm = alarm;
-    }
-}
diff --git a/src/com/android/deskclock/TimerRingService.java b/src/com/android/deskclock/TimerRingService.java
deleted file mode 100644
index 567b073..0000000
--- a/src/com/android/deskclock/TimerRingService.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * 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.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.AssetFileDescriptor;
-import android.content.res.Resources;
-import android.media.AudioManager;
-import android.media.MediaPlayer;
-import android.media.MediaPlayer.OnErrorListener;
-import android.os.IBinder;
-import android.telephony.PhoneStateListener;
-import android.telephony.TelephonyManager;
-
-/**
- * Play the timer's ringtone. Will continue playing the same alarm until service is stopped.
- */
-public class TimerRingService extends Service implements AudioManager.OnAudioFocusChangeListener {
-
-    private boolean mPlaying = false;
-    private MediaPlayer mMediaPlayer;
-    private TelephonyManager mTelephonyManager;
-    private int mInitialCallState;
-
-
-    private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
-        @Override
-        public void onCallStateChanged(int state, String ignored) {
-            // The user might already be in a call when the alarm fires. When
-            // we register onCallStateChanged, we get the initial in-call state
-            // which kills the alarm. Check against the initial call state so
-            // we don't kill the alarm during a call.
-            if (state != TelephonyManager.CALL_STATE_IDLE
-                    && state != mInitialCallState) {
-                stopSelf();
-            }
-        }
-    };
-
-    @Override
-    public void onCreate() {
-        // Listen for incoming calls to kill the alarm.
-        mTelephonyManager =
-                (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
-        mTelephonyManager.listen(
-                mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
-        AlarmAlertWakeLock.acquireScreenCpuWakeLock(this);
-    }
-
-    @Override
-    public void onDestroy() {
-        stop();
-        // Stop listening for incoming calls.
-        mTelephonyManager.listen(mPhoneStateListener, 0);
-        AlarmAlertWakeLock.releaseCpuLock();
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        return null;
-    }
-
-    @Override
-    public int onStartCommand(Intent intent, int flags, int startId) {
-        // No intent, tell the system not to restart us.
-        if (intent == null) {
-            stopSelf();
-            return START_NOT_STICKY;
-        }
-
-        play();
-        // Record the initial call state here so that the new alarm has the newest state.
-        mInitialCallState = mTelephonyManager.getCallState();
-
-        return START_STICKY;
-    }
-
-    // Volume suggested by media team for in-call alarms.
-    private static final float IN_CALL_VOLUME = 0.125f;
-
-    private void play() {
-
-        if (mPlaying) {
-            return;
-        }
-
-        LogUtils.v("TimerRingService.play()");
-
-        // TODO: Reuse mMediaPlayer instead of creating a new one and/or use
-        // RingtoneManager.
-        mMediaPlayer = new MediaPlayer();
-        mMediaPlayer.setOnErrorListener(new OnErrorListener() {
-            @Override
-            public boolean onError(MediaPlayer mp, int what, int extra) {
-                LogUtils.e("Error occurred while playing audio.");
-                mp.stop();
-                mp.release();
-                mMediaPlayer = null;
-                return true;
-            }
-        });
-
-        try {
-            // Check if we are in a call. If we are, use the in-call alarm
-            // resource at a low volume to not disrupt the call.
-            if (mTelephonyManager.getCallState()
-                    != TelephonyManager.CALL_STATE_IDLE) {
-                LogUtils.v("Using the in-call alarm");
-                mMediaPlayer.setVolume(IN_CALL_VOLUME, IN_CALL_VOLUME);
-                setDataSourceFromResource(getResources(), mMediaPlayer,
-                        R.raw.in_call_alarm);
-            } else {
-                AssetFileDescriptor afd = getAssets().openFd("sounds/Timer_Expire.ogg");
-                mMediaPlayer.setDataSource(
-                        afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
-            }
-            startAlarm(mMediaPlayer);
-        } catch (Exception ex) {
-            LogUtils.v("Using the fallback ringtone");
-            // The alert may be on the sd card which could be busy right
-            // now. Use the fallback ringtone.
-            try {
-                // Must reset the media player to clear the error state.
-                mMediaPlayer.reset();
-                setDataSourceFromResource(getResources(), mMediaPlayer,
-                        R.raw.fallbackring);
-                startAlarm(mMediaPlayer);
-            } catch (Exception ex2) {
-                // At this point we just don't play anything.
-                LogUtils.e("Failed to play fallback ringtone", ex2);
-            }
-        }
-
-        mPlaying = true;
-    }
-
-    // Do the common stuff when starting the alarm.
-    private void startAlarm(MediaPlayer player)
-            throws java.io.IOException, IllegalArgumentException,
-                   IllegalStateException {
-        final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
-        // do not play alarms if stream volume is 0
-        // (typically because ringer mode is silent).
-        if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
-            player.setAudioStreamType(AudioManager.STREAM_ALARM);
-            player.setLooping(true);
-            player.prepare();
-            audioManager.requestAudioFocus(
-                    this, AudioManager.STREAM_ALARM, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
-            player.start();
-        }
-    }
-
-    private void setDataSourceFromResource(Resources resources,
-            MediaPlayer player, int res) throws java.io.IOException {
-        AssetFileDescriptor afd = resources.openRawResourceFd(res);
-        if (afd != null) {
-            player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),
-                    afd.getLength());
-            afd.close();
-        }
-    }
-
-    /**
-     * Stops timer audio
-     */
-    public void stop() {
-        LogUtils.v("TimerRingService.stop()");
-        if (mPlaying) {
-            mPlaying = false;
-
-            // Stop audio playing
-            if (mMediaPlayer != null) {
-                mMediaPlayer.stop();
-                final AudioManager audioManager =
-                        (AudioManager)getSystemService(Context.AUDIO_SERVICE);
-                audioManager.abandonAudioFocus(this);
-                mMediaPlayer.release();
-                mMediaPlayer = null;
-            }
-        }
-    }
-
-
-    @Override
-    public void onAudioFocusChange(int focusChange) {
-        // Do nothing
-    }
-}
diff --git a/src/com/android/deskclock/TimerSetupView.java b/src/com/android/deskclock/TimerSetupView.java
deleted file mode 100644
index 04b7d65..0000000
--- a/src/com/android/deskclock/TimerSetupView.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * 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.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.content.Context;
-import android.graphics.Color;
-import android.os.Bundle;
-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.timer.TimerView;
-
-
-public class TimerSetupView extends LinearLayout implements Button.OnClickListener,
-        Button.OnLongClickListener{
-
-    protected int mInputSize = 5;
-
-    protected final Button mNumbers [] = new Button [10];
-    protected int mInput [] = new int [mInputSize];
-    protected int mInputPointer = -1;
-    protected Button mLeft, mRight;
-    protected ImageButton mStart;
-    protected ImageButton mDelete;
-    protected TimerView mEnteredTime;
-    protected View mDivider;
-
-    private final int mColorAccent;
-    private final int mColorHairline;
-
-    private final AnimatorListenerAdapter mHideFabAnimatorListener = new AnimatorListenerAdapter() {
-        @Override
-        public void onAnimationEnd(Animator animation) {
-            if (mStart != null) {
-                mStart.setScaleX(1.0f);
-                mStart.setScaleY(1.0f);
-                mStart.setVisibility(View.INVISIBLE);
-            }
-        }
-    };
-
-    private final AnimatorListenerAdapter mShowFabAnimatorListener = new AnimatorListenerAdapter() {
-        @Override
-        public void onAnimationStart(Animator animation) {
-            if (mStart != null) {
-                mStart.setVisibility(View.VISIBLE);
-            }
-        }
-    };
-
-    public TimerSetupView(Context context) {
-        this(context, null /* attrs */);
-    }
-
-    public TimerSetupView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        mColorAccent = Utils.obtainStyledColor(context, R.attr.colorAccent, Color.RED);
-        mColorHairline = context.getResources().getColor(R.color.hairline);
-
-        LayoutInflater.from(context).inflate(R.layout.time_setup_view, this);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-
-        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);
-        mDelete.setOnLongClickListener(this);
-        mDivider = findViewById(R.id.divider);
-
-        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);
-
-        mLeft.setVisibility(INVISIBLE);
-        mRight.setVisibility(INVISIBLE);
-
-        for (int i = 0; i < 10; i++) {
-            mNumbers[i].setOnClickListener(this);
-            mNumbers[i].setText(String.format("%d", i));
-            mNumbers[i].setTextColor(Color.WHITE);
-            mNumbers[i].setTag(R.id.numbers_key, new Integer(i));
-        }
-        updateTime();
-    }
-
-    public void registerStartButton(ImageButton start) {
-        mStart = start;
-        initializeStartButtonVisibility();
-    }
-
-    private void initializeStartButtonVisibility() {
-        if (mStart != null) {
-            mStart.setVisibility(isInputHasValue() ? View.VISIBLE : View.INVISIBLE);
-        }
-    }
-
-    private void updateStartButton() {
-        setFabButtonVisibility(isInputHasValue() /* show or hide */);
-    }
-
-    public void updateDeleteButtonAndDivider() {
-        final boolean enabled = isInputHasValue();
-        if (mDelete != null) {
-            mDelete.setEnabled(enabled);
-            mDivider.setBackgroundColor(enabled ? mColorAccent : mColorHairline);
-        }
-    }
-
-    private boolean isInputHasValue() {
-        return mInputPointer != -1;
-    }
-
-    private void setFabButtonVisibility(boolean show) {
-        final int finalVisibility = show ? View.VISIBLE : View.INVISIBLE;
-        if (mStart == null || mStart.getVisibility() == finalVisibility) {
-            // Fab is not initialized yet or already shown/hidden
-            return;
-        }
-
-        final Animator scaleAnimator = AnimatorUtils.getScaleAnimator(
-                mStart, show ? 0.0f : 1.0f, show ? 1.0f : 0.0f);
-        scaleAnimator.setDuration(AnimatorUtils.ANIM_DURATION_SHORT);
-        scaleAnimator.addListener(show ? mShowFabAnimatorListener : mHideFabAnimatorListener);
-        scaleAnimator.start();
-    }
-
-    @Override
-    public void onClick(View v) {
-        doOnClick(v);
-        updateStartButton();
-        updateDeleteButtonAndDivider();
-    }
-
-    protected void doOnClick(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 < mInputSize - 1) {
-                for (int i = mInputPointer; i >= 0; i--) {
-                    mInput[i+1] = mInput[i];
-                }
-                mInputPointer++;
-                mInput [0] = val;
-                // Update so talkback will read the number being deleted
-                mDelete.setContentDescription(
-                        getResources().getString(R.string.timer_descriptive_delete,
-                                Integer.toString(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();
-            }
-            // update so talkback will read either the next number or its original description
-            // if there are no more numbers.
-            mDelete.setContentDescription(getResources().getString(
-                    R.string.timer_descriptive_delete,
-                    mInputPointer < 0 ? "" : Integer.toString(mInput[mInputPointer])));
-        }
-    }
-
-    @Override
-    public boolean onLongClick(View v) {
-        if (v == mDelete) {
-            reset();
-            updateStartButton();
-            updateDeleteButtonAndDivider();
-            return true;
-        }
-        return false;
-    }
-
-    protected void updateTime() {
-        mEnteredTime.setTime(mInput[4], mInput[3], mInput[2],
-                mInput[1] * 10 + mInput[0]);
-    }
-
-    public void reset() {
-        for (int i = 0; i < mInputSize; 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];
-    }
-
-    public void saveEntryState(Bundle outState, String key) {
-        outState.putIntArray(key, mInput);
-    }
-
-    public void restoreEntryState(Bundle inState, String key) {
-        int[] input = inState.getIntArray(key);
-        if (input != null && mInputSize == input.length) {
-            for (int i = 0; i < mInputSize; i++) {
-                mInput[i] = input[i];
-                if (mInput[i] != 0) {
-                    mInputPointer = i;
-                }
-            }
-            updateTime();
-        }
-        initializeStartButtonVisibility();
-    }
-}
diff --git a/src/com/android/deskclock/Utils.java b/src/com/android/deskclock/Utils.java
index 89542ad..13c7c4c 100644
--- a/src/com/android/deskclock/Utils.java
+++ b/src/com/android/deskclock/Utils.java
@@ -20,12 +20,11 @@
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.animation.TimeInterpolator;
+import android.annotation.TargetApi;
 import android.app.AlarmManager;
+import android.content.ContentResolver;
 import android.content.Context;
-import android.content.Intent;
 import android.content.SharedPreferences;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Color;
@@ -33,10 +32,9 @@
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffColorFilter;
 import android.graphics.Typeface;
-import android.net.Uri;
 import android.os.Build;
 import android.os.Handler;
-import android.os.SystemClock;
+import android.os.Looper;
 import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.support.v4.content.ContextCompat;
@@ -47,51 +45,36 @@
 import android.text.format.DateFormat;
 import android.text.format.DateUtils;
 import android.text.format.Time;
-import android.text.style.AbsoluteSizeSpan;
+import android.text.style.RelativeSizeSpan;
 import android.text.style.StyleSpan;
 import android.text.style.TypefaceSpan;
-import android.util.Log;
-import android.view.MenuItem;
+import android.util.ArraySet;
 import android.view.View;
 import android.view.animation.AccelerateInterpolator;
 import android.view.animation.DecelerateInterpolator;
 import android.widget.TextClock;
 import android.widget.TextView;
 
+import com.android.deskclock.data.DataModel;
 import com.android.deskclock.provider.AlarmInstance;
 import com.android.deskclock.provider.DaysOfWeek;
-import com.android.deskclock.stopwatch.Stopwatches;
-import com.android.deskclock.timer.Timers;
-import com.android.deskclock.worldclock.CityObj;
+import com.android.deskclock.settings.SettingsActivity;
 
 import java.io.File;
+import java.text.DateFormatSymbols;
 import java.text.NumberFormat;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
+import java.util.Collection;
 import java.util.Date;
 import java.util.GregorianCalendar;
-import java.util.HashMap;
 import java.util.Locale;
-import java.util.Map;
 import java.util.TimeZone;
 
-
 public class Utils {
-    private final static String PARAM_LANGUAGE_CODE = "hl";
-
-    /**
-     * Help URL query parameter key for the app version.
-     */
-    private final static String PARAM_VERSION = "version";
-
-    /**
-     * Cached version code to prevent repeated calls to the package manager.
-     */
-    private static String sCachedVersionCode = null;
-
     // Single-char version of day name, e.g.: 'S', 'M', 'T', 'W', 'T', 'F', 'S'
     private static String[] sShortWeekdays = null;
-    private static final String DATE_FORMAT_SHORT = isJBMR2OrLater() ? "ccccc" : "ccc";
+    private static final String DATE_FORMAT_SHORT = "ccccc";
 
     // Long-version of day name, e.g.: 'Sunday', 'Monday', 'Tuesday', etc
     private static String[] sLongWeekdays = null;
@@ -101,10 +84,6 @@
 
     private static Locale sLocaleUsedForWeekdays;
 
-    /** Types that may be used for clock displays. **/
-    public static final String CLOCK_TYPE_DIGITAL = "digital";
-    public static final String CLOCK_TYPE_ANALOG = "analog";
-
     /**
      * Temporary array used by {@link #obtainStyledColor(Context, int, int)}.
      */
@@ -140,18 +119,32 @@
             0xFF20222A /* 11 PM */
     };
 
-    /**
-     * Returns whether the SDK is KitKat or later
-     */
-    public static boolean isKitKatOrLater() {
-        return Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2;
+    public static void enforceMainLooper() {
+        if (Looper.getMainLooper() != Looper.myLooper()) {
+            throw new IllegalAccessError("May only call from main thread.");
+        }
+    }
+
+    public static void enforceNotMainLooper() {
+        if (Looper.getMainLooper() == Looper.myLooper()) {
+            throw new IllegalAccessError("May not call from main thread.");
+        }
     }
 
     /**
-     * @return {@code true} if the device is {@link Build.VERSION_CODES#JELLY_BEAN_MR2} or later
+     * @return {@code true} if the device is prior to {@link Build.VERSION_CODES#LOLLIPOP}
      */
-    public static boolean isJBMR2OrLater() {
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
+    public static boolean isPreL() {
+        return Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP;
+    }
+
+    /**
+     * @return {@code true} if the device is {@link Build.VERSION_CODES#LOLLIPOP} or
+     *      {@link Build.VERSION_CODES#LOLLIPOP_MR1}
+     */
+    public static boolean isLOrLMR1() {
+        final int sdkInt = Build.VERSION.SDK_INT;
+        return sdkInt == Build.VERSION_CODES.LOLLIPOP || sdkInt == Build.VERSION_CODES.LOLLIPOP_MR1;
     }
 
     /**
@@ -182,70 +175,8 @@
         return BuildCompat.isAtLeastN();
     }
 
-    public static void prepareHelpMenuItem(Context context, MenuItem helpMenuItem) {
-        String helpUrlString = context.getResources().getString(R.string.desk_clock_help_url);
-        if (TextUtils.isEmpty(helpUrlString)) {
-            // The help url string is empty or null, so set the help menu item to be invisible.
-            helpMenuItem.setVisible(false);
-            return;
-        }
-        // The help url string exists, so first add in some extra query parameters.  87
-        final Uri fullUri = uriWithAddedParameters(context, Uri.parse(helpUrlString));
-
-        // Then, create an intent that will be fired when the user
-        // selects this help menu item.
-        Intent intent = new Intent(Intent.ACTION_VIEW, fullUri);
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
-                | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
-
-        // Set the intent to the help menu item, show the help menu item in the overflow
-        // menu, and make it visible.
-        helpMenuItem.setIntent(intent);
-        helpMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
-        helpMenuItem.setVisible(true);
-    }
-
     /**
-     * Adds two query parameters into the Uri, namely the language code and the version code
-     * of the application's package as gotten via the context.
-     * @return the uri with added query parameters
-     */
-    private static Uri uriWithAddedParameters(Context context, Uri baseUri) {
-        Uri.Builder builder = baseUri.buildUpon();
-
-        // Add in the preferred language
-        builder.appendQueryParameter(PARAM_LANGUAGE_CODE, Locale.getDefault().toString());
-
-        // Add in the package version code
-        if (sCachedVersionCode == null) {
-            // There is no cached version code, so try to get it from the package manager.
-            try {
-                // cache the version code
-                PackageInfo info = context.getPackageManager().getPackageInfo(
-                        context.getPackageName(), 0);
-                sCachedVersionCode = Integer.toString(info.versionCode);
-
-                // append the version code to the uri
-                builder.appendQueryParameter(PARAM_VERSION, sCachedVersionCode);
-            } catch (NameNotFoundException e) {
-                // Cannot find the package name, so don't add in the version parameter
-                // This shouldn't happen.
-                LogUtils.wtf("Invalid package name for context " + e);
-            }
-        } else {
-            builder.appendQueryParameter(PARAM_VERSION, sCachedVersionCode);
-        }
-
-        // Build the full uri and return it
-        return builder.build();
-    }
-
-    public static long getTimeNow() {
-        return SystemClock.elapsedRealtime();
-    }
-
-    /**
-     * Calculate the amount by which the radius of a CircleTimerView should be offset by the any
+     * Calculate the amount by which the radius of a CircleTimerView should be offset by any
      * of the extra painted objects.
      */
     public static float calculateRadiusOffset(
@@ -255,7 +186,7 @@
 
     /**
      * Uses {@link Utils#calculateRadiusOffset(float, float, float)} after fetching the values
-     * from the resources just as {@link CircleTimerView#init(android.content.Context)} does.
+     * from the resources.
      */
     public static float calculateRadiusOffset(Resources resources) {
         if (resources != null) {
@@ -268,50 +199,6 @@
         }
     }
 
-    /**
-     * Clears the persistent data of stopwatch (start time, state, laps, etc...).
-     */
-    public static void clearSwSharedPref(SharedPreferences prefs) {
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.remove (Stopwatches.PREF_START_TIME);
-        editor.remove (Stopwatches.PREF_ACCUM_TIME);
-        editor.remove (Stopwatches.PREF_STATE);
-        int lapNum = prefs.getInt(Stopwatches.PREF_LAP_NUM, Stopwatches.STOPWATCH_RESET);
-        for (int i = 0; i < lapNum; i++) {
-            String key = Stopwatches.PREF_LAP_TIME + Integer.toString(i);
-            editor.remove(key);
-        }
-        editor.remove(Stopwatches.PREF_LAP_NUM);
-        editor.apply();
-    }
-
-    /**
-     * Broadcast a message to show the in-use timers in the notifications
-     */
-    public static void showInUseNotifications(Context context) {
-        Intent timerIntent = new Intent();
-        timerIntent.setAction(Timers.NOTIF_IN_USE_SHOW);
-        context.sendBroadcast(timerIntent);
-    }
-
-    /**
-     * Broadcast a message to show the in-use timers in the notifications
-     */
-    public static void showTimesUpNotifications(Context context) {
-        Intent timerIntent = new Intent();
-        timerIntent.setAction(Timers.NOTIF_TIMES_UP_SHOW);
-        context.sendBroadcast(timerIntent);
-    }
-
-    /**
-     * Broadcast a message to cancel the in-use timers in the notifications
-     */
-    public static void cancelTimesUpNotifications(Context context) {
-        Intent timerIntent = new Intent();
-        timerIntent.setAction(Timers.NOTIF_TIMES_UP_CANCEL);
-        context.sendBroadcast(timerIntent);
-    }
-
     /** Runnable for use with screensaver and dream, to move the clock every minute.
      *  registerViews() must be called prior to posting.
      */
@@ -501,23 +388,40 @@
      * For screensavers to set whether the digital or analog clock should be displayed.
      * Returns the view to be displayed.
      */
-    public static View setClockStyle(Context context, View digitalClock, View analogClock,
-            String clockStyleKey) {
-        SharedPreferences sharedPref = Utils.getDefaultSharedPreferences(context);
-        String defaultClockStyle = context.getResources().getString(R.string.default_clock_style);
-        String style = sharedPref.getString(clockStyleKey, defaultClockStyle);
-        View returnView;
-        if (style.equals(CLOCK_TYPE_ANALOG)) {
-            digitalClock.setVisibility(View.GONE);
-            analogClock.setVisibility(View.VISIBLE);
-            returnView = analogClock;
-        } else {
-            digitalClock.setVisibility(View.VISIBLE);
-            analogClock.setVisibility(View.GONE);
-            returnView = digitalClock;
+    public static View setClockStyle(View digitalClock, View analogClock) {
+        final DataModel.ClockStyle clockStyle = DataModel.getDataModel().getClockStyle();
+        switch (clockStyle) {
+            case ANALOG:
+                digitalClock.setVisibility(View.GONE);
+                analogClock.setVisibility(View.VISIBLE);
+                return analogClock;
+            case DIGITAL:
+                digitalClock.setVisibility(View.VISIBLE);
+                analogClock.setVisibility(View.GONE);
+                return digitalClock;
         }
 
-        return returnView;
+        throw new IllegalStateException("unexpected clock style: " + clockStyle);
+    }
+
+    /**
+     * For screensavers to set whether the digital or analog clock should be displayed.
+     * Returns the view to be displayed.
+     */
+    public static View setScreensaverClockStyle(View digitalClock, View analogClock) {
+        final DataModel.ClockStyle clockStyle = DataModel.getDataModel().getScreensaverClockStyle();
+        switch (clockStyle) {
+            case ANALOG:
+                digitalClock.setVisibility(View.GONE);
+                analogClock.setVisibility(View.VISIBLE);
+                return analogClock;
+            case DIGITAL:
+                digitalClock.setVisibility(View.VISIBLE);
+                analogClock.setVisibility(View.GONE);
+                return digitalClock;
+        }
+
+        throw new IllegalStateException("unexpected clock style: " + clockStyle);
     }
 
     /**
@@ -536,21 +440,27 @@
      * @return The next alarm from {@link AlarmManager}
      */
     public static String getNextAlarm(Context context) {
-        String timeString = null;
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
-            timeString = Settings.System.getString(context.getContentResolver(),
-                    Settings.System.NEXT_ALARM_FORMATTED);
-        } else {
-            final AlarmManager.AlarmClockInfo info = ((AlarmManager) context.getSystemService(
-                    Context.ALARM_SERVICE)).getNextAlarmClock();
-            if (info != null) {
-                final long triggerTime = info.getTriggerTime();
-                final Calendar alarmTime = Calendar.getInstance();
-                alarmTime.setTimeInMillis(triggerTime);
-                timeString = AlarmUtils.getFormattedTime(context, alarmTime);
-            }
+        return isPreL() ? getNextAlarmPreL(context) : getNextAlarmLOrLater(context);
+    }
+
+    @TargetApi(Build.VERSION_CODES.KITKAT)
+    private static String getNextAlarmPreL(Context context) {
+        final ContentResolver cr = context.getContentResolver();
+        return Settings.System.getString(cr, Settings.System.NEXT_ALARM_FORMATTED);
+    }
+
+    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+    private static String getNextAlarmLOrLater(Context context) {
+        final AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+        final AlarmManager.AlarmClockInfo info = am.getNextAlarmClock();
+        if (info != null) {
+            final long triggerTime = info.getTriggerTime();
+            final Calendar alarmTime = Calendar.getInstance();
+            alarmTime.setTimeInMillis(triggerTime);
+            return AlarmUtils.getFormattedTime(context, alarmTime);
         }
-        return timeString;
+
+        return null;
     }
 
     public static boolean isAlarmWithin24Hours(AlarmInstance alarmInstance) {
@@ -559,42 +469,39 @@
         return nextAlarmTimeMillis - System.currentTimeMillis() <= DateUtils.DAY_IN_MILLIS;
     }
 
-    /** Clock views can call this to refresh their alarm to the next upcoming value. **/
+    /** Clock views can call this to refresh their alarm to the next upcoming value. */
     public static void refreshAlarm(Context context, View clock) {
-        final String nextAlarm = getNextAlarm(context);
-        TextView nextAlarmView;
-        nextAlarmView = (TextView) clock.findViewById(R.id.nextAlarm);
-        if (!TextUtils.isEmpty(nextAlarm) && nextAlarmView != null) {
-            nextAlarmView.setText(
-                    context.getString(R.string.control_set_alarm_with_existing, nextAlarm));
-            nextAlarmView.setContentDescription(context.getResources().getString(
-                    R.string.next_alarm_description, nextAlarm));
+        final TextView nextAlarmView = (TextView) clock.findViewById(R.id.nextAlarm);
+        if (nextAlarmView == null) {
+            return;
+        }
+
+        final String alarm = getNextAlarm(context);
+        if (!TextUtils.isEmpty(alarm)) {
+            final String description = context.getString(R.string.next_alarm_description, alarm);
+            nextAlarmView.setText(alarm);
+            nextAlarmView.setContentDescription(description);
             nextAlarmView.setVisibility(View.VISIBLE);
-        } else  {
+        } else {
             nextAlarmView.setVisibility(View.GONE);
         }
     }
 
     /** Clock views can call this to refresh their date. **/
-    public static void updateDate(
-            String dateFormat, String dateFormatForAccessibility, View clock) {
-
-        Date now = new Date();
-        TextView dateDisplay;
-        dateDisplay = (TextView) clock.findViewById(R.id.date);
-        if (dateDisplay != null) {
-            final Locale l = Locale.getDefault();
-            dateDisplay.setText(isJBMR2OrLater()
-                    ? new SimpleDateFormat(
-                            DateFormat.getBestDateTimePattern(l, dateFormat), l).format(now)
-                    : SimpleDateFormat.getDateInstance().format(now));
-            dateDisplay.setVisibility(View.VISIBLE);
-            dateDisplay.setContentDescription(isJBMR2OrLater()
-                    ? new SimpleDateFormat(
-                    DateFormat.getBestDateTimePattern(l, dateFormatForAccessibility), l)
-                    .format(now)
-                    : SimpleDateFormat.getDateInstance(java.text.DateFormat.FULL).format(now));
+    public static void updateDate(String dateSkeleton, String descriptionSkeleton, View clock) {
+        final TextView dateDisplay = (TextView) clock.findViewById(R.id.date);
+        if (dateDisplay == null) {
+            return;
         }
+
+        final Locale l = Locale.getDefault();
+        final String datePattern = DateFormat.getBestDateTimePattern(l, dateSkeleton);
+        final String descriptionPattern = DateFormat.getBestDateTimePattern(l, descriptionSkeleton);
+
+        final Date now = new Date();
+        dateDisplay.setText(new SimpleDateFormat(datePattern, l).format(now));
+        dateDisplay.setVisibility(View.VISIBLE);
+        dateDisplay.setContentDescription(new SimpleDateFormat(descriptionPattern, l).format(now));
     }
 
     /***
@@ -602,30 +509,43 @@
      * formatting treatment for the am/pm label.
      * @param context - Context used to get user's locale and time preferences
      * @param clock - TextClock to format
-     * @param amPmFontSize - size of the am/pm label since it is usually smaller
      */
-    public static void setTimeFormat(Context context, TextClock clock, int amPmFontSize) {
+    public static void setTimeFormat(Context context, TextClock clock) {
         if (clock != null) {
             // Get the best format for 12 hours mode according to the locale
-            clock.setFormat12Hour(get12ModeFormat(context, amPmFontSize));
+            clock.setFormat12Hour(get12ModeFormat(context, true /* showAmPm */));
             // Get the best format for 24 hours mode according to the locale
             clock.setFormat24Hour(get24ModeFormat());
         }
     }
-    /***
+
+    /**
+     * Returns {@code true} if the am / pm strings for the current locale are long and a reduced
+     * text size should be used for displaying the digital clock.
+     */
+    public static boolean isAmPmStringLong() {
+        final String[] amPmStrings = new DateFormatSymbols().getAmPmStrings();
+        for (String amPmString : amPmStrings) {
+            // Dots are small, so don't count them.
+            final int amPmStringLength = amPmString.replace(".", "").length();
+            if (amPmStringLength > 3) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
      * @param context - context used to get time format string resource
-     * @param amPmFontSize - size of am/pm label (label removed is size is 0).
+     * @param showAmPm - include the am/pm string if true
      * @return format string for 12 hours mode time
      */
-    public static CharSequence get12ModeFormat(Context context, int amPmFontSize) {
-        String pattern = isJBMR2OrLater()
-                ? DateFormat.getBestDateTimePattern(Locale.getDefault(), "hma")
-                : context.getString(R.string.time_format_12_mode);
-
-        // Remove the am/pm
-        if (amPmFontSize <= 0) {
-            pattern.replaceAll("a", "").trim();
+    public static CharSequence get12ModeFormat(Context context, boolean showAmPm) {
+        String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), "hma");
+        if (!showAmPm) {
+            pattern = pattern.replaceAll("a", "").trim();
         }
+
         // Replace spaces with "Hair Space"
         pattern = pattern.replaceAll(" ", "\u200A");
         // Build a spannable so that the am/pm will be formatted
@@ -633,74 +553,29 @@
         if (amPmPos == -1) {
             return pattern;
         }
-        Spannable sp = new SpannableString(pattern);
+
+        final Resources resources = context.getResources();
+        final float amPmProportion = resources.getFraction(R.fraction.ampm_font_size_scale, 1, 1);
+        final Spannable sp = new SpannableString(pattern);
+        sp.setSpan(new RelativeSizeSpan(amPmProportion), amPmPos, amPmPos + 1,
+                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
         sp.setSpan(new StyleSpan(Typeface.NORMAL), amPmPos, amPmPos + 1,
-                Spannable.SPAN_POINT_MARK);
-        sp.setSpan(new AbsoluteSizeSpan(amPmFontSize), amPmPos, amPmPos + 1,
-                Spannable.SPAN_POINT_MARK);
+                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
         sp.setSpan(new TypefaceSpan("sans-serif"), amPmPos, amPmPos + 1,
-                Spannable.SPAN_POINT_MARK);
+                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+        // Make the font smaller for locales with long am/pm strings.
+        if (Utils.isAmPmStringLong()) {
+            final float proportion = resources.getFraction(
+                    R.fraction.reduced_clock_font_size_scale, 1, 1);
+            sp.setSpan(new RelativeSizeSpan(proportion), 0, pattern.length(),
+                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+        }
         return sp;
     }
 
     public static CharSequence get24ModeFormat() {
-        return isJBMR2OrLater()
-                ? DateFormat.getBestDateTimePattern(Locale.getDefault(), "Hm")
-                : (new SimpleDateFormat("k:mm", Locale.getDefault())).toLocalizedPattern();
-    }
-
-    public static CityObj[] loadCitiesFromXml(Context c) {
-        Resources r = c.getResources();
-        // Read strings array of name,timezone, id
-        // make sure the list are the same length
-        String[] cityNames = r.getStringArray(R.array.cities_names);
-        String[] timezones = r.getStringArray(R.array.cities_tz);
-        String[] ids = r.getStringArray(R.array.cities_id);
-        int minLength = cityNames.length;
-        if (cityNames.length != timezones.length || ids.length != cityNames.length) {
-            minLength = Math.min(cityNames.length, Math.min(timezones.length, ids.length));
-            LogUtils.e("City lists sizes are not the same, truncating");
-        }
-        CityObj[] cities = new CityObj[minLength];
-        for (int i = 0; i < cities.length; i++) {
-            // Default to using the first character of the city name as the index unless one is
-            // specified. The indicator for a specified index is the addition of character(s)
-            // before the "=" separator.
-            final String parseString = cityNames[i];
-            final int separatorIndex = parseString.indexOf("=");
-            final String index;
-            final String cityName;
-            if (parseString.length() <= 1 && separatorIndex >= 0) {
-                LogUtils.w("Cannot parse city name %s; skipping", parseString);
-                continue;
-            }
-            if (separatorIndex == 0) {
-                // Default to using second character (the first character after the = separator)
-                // as the index.
-                index = parseString.substring(1, 2);
-                cityName = parseString.substring(1);
-            } else if (separatorIndex == -1) {
-                // Default to using the first character as the index
-                index = parseString.substring(0, 1);
-                cityName = parseString;
-                LogUtils.e("Missing expected separator character =");
-            } else {
-                 index = parseString.substring(0, separatorIndex);
-                 cityName = parseString.substring(separatorIndex + 1);
-            }
-            cities[i] = new CityObj(cityName, timezones[i], ids[i], index);
-        }
-        return cities;
-    }
-    // Returns a map of cities where the key is lowercase
-    public static Map<String, CityObj> loadCityMapFromXml(Context c) {
-        CityObj[] cities = loadCitiesFromXml(c);
-
-        final Map<String, CityObj> map = new HashMap<>(cities.length);
-        for (CityObj city : cities) {
-            map.put(city.mCityName.toLowerCase(), city);
-        }
-        return map;
+        return DateFormat.getBestDateTimePattern(Locale.getDefault(), "Hm");
     }
 
     /**
@@ -721,10 +596,6 @@
         }
     }
 
-    public static String getCityName(CityObj city, CityObj dbCity) {
-        return (city.mCityId == null || dbCity == null) ? city.mCityName : dbCity.mCityName;
-    }
-
     /**
      * Convenience method for retrieving a themed color value.
      *
@@ -771,8 +642,7 @@
     // Return the first day of the week value corresponding to Calendar.<WEEKDAY> value, which is
     // 1-indexed starting with Sunday.
     public static int getFirstDayOfWeek(Context context) {
-        return Integer.parseInt(Utils
-                .getDefaultSharedPreferences(context)
+        return Integer.parseInt(getDefaultSharedPreferences(context)
                 .getString(SettingsActivity.KEY_WEEK_START, String.valueOf(DEFAULT_WEEK_START)));
     }
 
@@ -817,7 +687,6 @@
     }
 
     /**
-     * @param context
      * @param id Resource id of the plural
      * @param quantity integer value
      * @return string with properly localized numbers
@@ -827,6 +696,12 @@
         return context.getResources().getQuantityString(id, quantity, localizedQuantity);
     }
 
+    public static <E> ArraySet<E> newArraySet(Collection<E> collection) {
+        final ArraySet<E> arraySet = new ArraySet<>(collection.size());
+        arraySet.addAll(collection);
+        return arraySet;
+    }
+
     /**
      * Return the default shared preferences.
      */
diff --git a/src/com/android/deskclock/Voice.java b/src/com/android/deskclock/Voice.java
index 7881f8c..f33bbe7 100644
--- a/src/com/android/deskclock/Voice.java
+++ b/src/com/android/deskclock/Voice.java
@@ -16,8 +16,10 @@
 
 package com.android.deskclock;
 
+import android.annotation.TargetApi;
 import android.app.Activity;
 import android.app.VoiceInteractor;
+import android.os.Build;
 
 /**
  * Notifies Voice Interactor about whether the action
@@ -34,6 +36,10 @@
         sDelegate = delegate;
     }
 
+    public static Delegate getDelegate() {
+        return sDelegate;
+    }
+
     public static void notifySuccess(Activity activity, String message) {
         if (Utils.isMOrLater()) {
             sDelegate.notifySuccess(activity.getVoiceInteractor(), message);
@@ -52,6 +58,7 @@
         void notifyFailure(VoiceInteractor vi, String message);
     }
 
+    @TargetApi(Build.VERSION_CODES.M)
     private static class VoiceInteractorDelegate implements Delegate {
         @Override
         public void notifySuccess(VoiceInteractor vi, String message) {
@@ -69,4 +76,4 @@
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/actionbarmenu/AbstractMenuItemController.java b/src/com/android/deskclock/actionbarmenu/AbstractMenuItemController.java
new file mode 100644
index 0000000..047d816
--- /dev/null
+++ b/src/com/android/deskclock/actionbarmenu/AbstractMenuItemController.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2015 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.actionbarmenu;
+
+import android.view.Menu;
+
+/**
+ * Base of all {@link MenuItemController}. It contains basic implementation for enabling controller.
+ */
+public abstract class AbstractMenuItemController implements MenuItemController {
+    // Whether or not the controller is enabled. By default it's enabled.
+    private boolean mEnabled = true;
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        mEnabled = enabled;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return mEnabled;
+    }
+
+    @Override
+    public void setInitialState(Menu menu) {
+        // By default, there is nothing to initialize.
+    }
+}
diff --git a/src/com/android/deskclock/actionbarmenu/ActionBarMenuManager.java b/src/com/android/deskclock/actionbarmenu/ActionBarMenuManager.java
new file mode 100644
index 0000000..f470e5b
--- /dev/null
+++ b/src/com/android/deskclock/actionbarmenu/ActionBarMenuManager.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2015 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.actionbarmenu;
+
+import android.app.Activity;
+import android.util.ArrayMap;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+
+import com.android.deskclock.R;
+
+/**
+ * Activity scoped singleton that manages action bar menus. Each menu item is controlled by a
+ * {@link MenuItemController} instance.
+ * <p/>
+ * This class needs to be instantiated before or during activity's onCreate event.
+ */
+public final class ActionBarMenuManager {
+    // A map of all menu item controllers, keyed by menu item id.
+    private final ArrayMap<Integer, MenuItemController> mControllers;
+
+    public ActionBarMenuManager(Activity activity) {
+        mControllers = new ArrayMap<>();
+    }
+
+    /**
+     * Add one or more {@link MenuItemController} to the actionbar menu.
+     * <p/>
+     * This should be called before activity's onPrepareOptionsMenu event.
+     */
+    public ActionBarMenuManager addMenuItemController(MenuItemController... menuItemControllers) {
+        if (menuItemControllers != null) {
+            for (MenuItemController controller : menuItemControllers) {
+                mControllers.put(controller.getId(), controller);
+            }
+        }
+        return this;
+    }
+
+    /**
+     * Inflates {@link Menu} for the activity.
+     * <p/>
+     * This method should be called during activity's onCreateOptionsMenu method.
+     */
+    public void createOptionsMenu(Menu menu, MenuInflater inflater) {
+        if (menu.size() > 0) {
+            throw new IllegalStateException("Menu has already been inflated.");
+        }
+        inflater.inflate(R.menu.desk_clock_menu, menu);
+
+        final int controllerSize = mControllers.size();
+        for (int i = 0; i < controllerSize; i++) {
+            final MenuItemController controller = mControllers.valueAt(i);
+            if (controller.isEnabled()) {
+                controller.setInitialState(menu);
+            }
+        }
+    }
+
+    /**
+     * Prepares the popup to displays all required menu items.
+     * <p/>
+     * This method should be called during activity's onPrepareOptionsMenu method.
+     */
+    public void prepareShowMenu(Menu menu) {
+        final int menuSize = menu.size();
+        for (int i = 0; i < menuSize; i++) {
+            menu.getItem(i).setVisible(false);
+        }
+        final int controllerSize = mControllers.size();
+        for (int i = 0; i < controllerSize; i++) {
+            final MenuItemController controller = mControllers.valueAt(i);
+            if (controller.isEnabled()) {
+                controller.showMenuItem(menu);
+            }
+        }
+    }
+
+    /**
+     * Handles click action for a menu item.
+     * <p/>
+     * This method should be called during activity's onOptionsItemSelected method.
+     */
+    public boolean handleMenuItemClick(MenuItem item) {
+        final int itemId = item.getItemId();
+        return mControllers.get(itemId).handleMenuItemClick(item);
+    }
+}
diff --git a/src/com/android/deskclock/actionbarmenu/MenuItemController.java b/src/com/android/deskclock/actionbarmenu/MenuItemController.java
new file mode 100644
index 0000000..d7cb06f
--- /dev/null
+++ b/src/com/android/deskclock/actionbarmenu/MenuItemController.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2015 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.actionbarmenu;
+
+import android.view.Menu;
+import android.view.MenuItem;
+
+/**
+ * Interface for handling a single menu item in action bar.
+ */
+public interface MenuItemController {
+
+    /**
+     * Sets whether or not the controller is enabled.
+     */
+    void setEnabled(boolean enabled);
+
+    /**
+     * Returns true if the controller is currently enabled.
+     */
+    boolean isEnabled();
+
+    /**
+     * Returns the menu item id that the controller is responsible for.
+     */
+    int getId();
+
+    /**
+     * Sets the initial state for the menu item.
+     */
+    void setInitialState(Menu menu);
+
+    /**
+     * Find the menu item this controller cares about, and make it visible.
+     *
+     * @param menu The menu object containing an item that controller can handle.
+     */
+    void showMenuItem(Menu menu);
+
+    /**
+     * Attempts to handle the click action.
+     *
+     * @param item The menu item being clicked.
+     * @return True if the action is handled by this controller, false otherwise.
+     */
+    boolean handleMenuItemClick(MenuItem item);
+}
diff --git a/src/com/android/deskclock/actionbarmenu/MenuItemControllerFactory.java b/src/com/android/deskclock/actionbarmenu/MenuItemControllerFactory.java
new file mode 100644
index 0000000..3598f16
--- /dev/null
+++ b/src/com/android/deskclock/actionbarmenu/MenuItemControllerFactory.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2015 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.actionbarmenu;
+
+import android.app.Activity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Factory that builds optional {@link MenuItemController} instances.
+ */
+public final class MenuItemControllerFactory {
+
+    private static final MenuItemControllerFactory INSTANCE = new MenuItemControllerFactory();
+
+    public static MenuItemControllerFactory getInstance() {
+        return INSTANCE;
+    }
+
+    private final List<MenuItemProvider> mMenuItemProviders;
+
+    private MenuItemControllerFactory() {
+        mMenuItemProviders = new ArrayList<>();
+    }
+
+    public MenuItemControllerFactory addMenuItemProvider(MenuItemProvider provider) {
+        mMenuItemProviders.add(provider);
+        return this;
+    }
+
+    public MenuItemController[] buildMenuItemControllers(Activity activity) {
+        final int providerSize = mMenuItemProviders.size();
+        final MenuItemController[] controllers = new MenuItemController[providerSize];
+        for (int i = 0; i < providerSize; i++) {
+            controllers[i] = mMenuItemProviders.get(i).provide(activity);
+        }
+        return controllers;
+    }
+}
diff --git a/src/com/android/deskclock/actionbarmenu/MenuItemProvider.java b/src/com/android/deskclock/actionbarmenu/MenuItemProvider.java
new file mode 100644
index 0000000..c3e460d
--- /dev/null
+++ b/src/com/android/deskclock/actionbarmenu/MenuItemProvider.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2015 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.actionbarmenu;
+
+import android.app.Activity;
+
+/**
+ * Provider for a {@link MenuItemController} instances.
+ */
+public interface MenuItemProvider {
+
+    /**
+     * provides a {@link MenuItemController} that handles menu item.
+     */
+    MenuItemController provide(Activity activity);
+}
diff --git a/src/com/android/deskclock/actionbarmenu/NavUpMenuItemController.java b/src/com/android/deskclock/actionbarmenu/NavUpMenuItemController.java
new file mode 100644
index 0000000..a2aebbf
--- /dev/null
+++ b/src/com/android/deskclock/actionbarmenu/NavUpMenuItemController.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2015 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.actionbarmenu;
+
+import android.app.Activity;
+import android.view.Menu;
+import android.view.MenuItem;
+
+/**
+ * {@link MenuItemController} for handling navigation up button in actionbar. It is a special
+ * menu item because it's not inflated through menu.xml, and has its own predefined id.
+ */
+public final class NavUpMenuItemController extends AbstractMenuItemController {
+
+    private final Activity mActivity;
+
+    public NavUpMenuItemController(Activity activity) {
+        mActivity = activity;
+    }
+
+    @Override
+    public int getId() {
+        return android.R.id.home;
+    }
+
+    @Override
+    public void showMenuItem(Menu menu) {
+        // Intentionally left empty, because back button in actionbar is not shown by inflating
+        // menu layouts. It's directly controlled by actionbar.
+    }
+
+    @Override
+    public boolean handleMenuItemClick(MenuItem item) {
+        mActivity.finish();
+        return true;
+    }
+}
diff --git a/src/com/android/deskclock/actionbarmenu/NightModeMenuItemController.java b/src/com/android/deskclock/actionbarmenu/NightModeMenuItemController.java
new file mode 100644
index 0000000..0a98621
--- /dev/null
+++ b/src/com/android/deskclock/actionbarmenu/NightModeMenuItemController.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2015 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.actionbarmenu;
+
+import android.content.Context;
+import android.content.Intent;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.deskclock.R;
+import com.android.deskclock.ScreensaverActivity;
+
+/**
+ * {@link MenuItemController} for controlling night mode display.
+ */
+public final class NightModeMenuItemController extends AbstractMenuItemController {
+
+    private static final int NIGHT_MODE_MENU_RES_ID = R.id.menu_item_night_mode;
+
+    private final Context mContext;
+
+    public NightModeMenuItemController(Context context) {
+        mContext = context;
+    }
+
+    @Override
+    public int getId() {
+        return NIGHT_MODE_MENU_RES_ID;
+    }
+
+    @Override
+    public void showMenuItem(Menu menu) {
+        menu.findItem(NIGHT_MODE_MENU_RES_ID).setVisible(true);
+    }
+
+    @Override
+    public boolean handleMenuItemClick(MenuItem item) {
+        mContext.startActivity(new Intent(mContext, ScreensaverActivity.class));
+        return true;
+    }
+}
diff --git a/src/com/android/deskclock/actionbarmenu/SearchMenuItemController.java b/src/com/android/deskclock/actionbarmenu/SearchMenuItemController.java
new file mode 100644
index 0000000..fbba78d
--- /dev/null
+++ b/src/com/android/deskclock/actionbarmenu/SearchMenuItemController.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2015 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.actionbarmenu;
+
+import android.os.Bundle;
+import android.support.v4.view.MenuItemCompat;
+import android.support.v7.widget.SearchView;
+import android.support.v7.widget.SearchView.OnQueryTextListener;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+
+import com.android.deskclock.R;
+
+/**
+ * {@link MenuItemController} for search menu.
+ */
+public final class SearchMenuItemController extends AbstractMenuItemController {
+
+    private static final String KEY_SEARCH_QUERY = "search_query";
+    private static final String KEY_SEARCH_MODE = "search_mode";
+    private static final int SEARCH_MENU_RES_ID = R.id.menu_item_search;
+    private final SearchView.OnQueryTextListener mQueryListener;
+    private final SearchModeChangeListener mSearchModeChangeListener;
+    private String mQuery = "";
+    private boolean mSearchMode;
+
+    public SearchMenuItemController(OnQueryTextListener queryListener, Bundle savedState) {
+        mSearchModeChangeListener = new SearchModeChangeListener();
+        mQueryListener = queryListener;
+        if (savedState != null) {
+            mSearchMode = savedState.getBoolean(KEY_SEARCH_MODE, false);
+            mQuery = savedState.getString(KEY_SEARCH_QUERY, "");
+        }
+    }
+
+    public void saveInstance(Bundle outState) {
+        outState.putString(KEY_SEARCH_QUERY, mQuery);
+        outState.putBoolean(KEY_SEARCH_MODE, mSearchMode);
+    }
+
+    @Override
+    public int getId() {
+        return SEARCH_MENU_RES_ID;
+    }
+
+    @Override
+    public void setInitialState(Menu menu) {
+        super.setInitialState(menu);
+        final MenuItem search = menu.findItem(SEARCH_MENU_RES_ID);
+        final SearchView searchView = (SearchView) MenuItemCompat.getActionView(search);
+        searchView.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
+        searchView.setQuery(mQuery, false);
+        searchView.setOnCloseListener(mSearchModeChangeListener);
+        searchView.setOnSearchClickListener(mSearchModeChangeListener);
+        searchView.setOnQueryTextListener(mQueryListener);
+        if (mSearchMode) {
+            searchView.requestFocus();
+            searchView.setIconified(false);
+        }
+    }
+
+    @Override
+    public void showMenuItem(Menu menu) {
+        menu.findItem(SEARCH_MENU_RES_ID).setVisible(true);
+    }
+
+    @Override
+    public boolean handleMenuItemClick(MenuItem item) {
+        // The search view is handled by {@link #mSearchListener}. Skip handling here.
+        return false;
+    }
+
+    public String getQueryText() {
+        return mQuery;
+    }
+
+    public void setQueryText(String query) {
+        mQuery = query;
+    }
+
+    /**
+     * Listener for user actions on search view.
+     */
+    private final class SearchModeChangeListener implements View.OnClickListener,
+            SearchView.OnCloseListener {
+        @Override
+        public void onClick(View v) {
+            mSearchMode = true;
+        }
+
+        @Override
+        public boolean onClose() {
+            mSearchMode = false;
+            return false;
+        }
+    }
+}
diff --git a/src/com/android/deskclock/actionbarmenu/SettingMenuItemController.java b/src/com/android/deskclock/actionbarmenu/SettingMenuItemController.java
new file mode 100644
index 0000000..a984451
--- /dev/null
+++ b/src/com/android/deskclock/actionbarmenu/SettingMenuItemController.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2015 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.actionbarmenu;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.deskclock.R;
+import com.android.deskclock.settings.SettingsActivity;
+
+/**
+ * {@link MenuItemController} for setting menu.
+ */
+public final class SettingMenuItemController extends AbstractMenuItemController {
+
+    public static final int REQUEST_CHANGE_SETTINGS = 1;
+
+    private static final int SETTING_MENU_RES_ID = R.id.menu_item_settings;
+    private final Activity mActivity;
+
+    public SettingMenuItemController(Activity activity) {
+        mActivity = activity;
+    }
+
+    @Override
+    public int getId() {
+        return SETTING_MENU_RES_ID;
+    }
+
+    @Override
+    public void showMenuItem(Menu menu) {
+        menu.findItem(SETTING_MENU_RES_ID).setVisible(true);
+    }
+
+    @Override
+    public boolean handleMenuItemClick(MenuItem item) {
+        Intent settingIntent = new Intent(mActivity, SettingsActivity.class);
+        mActivity.startActivityForResult(settingIntent, REQUEST_CHANGE_SETTINGS);
+        return true;
+    }
+}
diff --git a/src/com/android/deskclock/alarms/AlarmActivity.java b/src/com/android/deskclock/alarms/AlarmActivity.java
index 0efb7a5..7335885 100644
--- a/src/com/android/deskclock/alarms/AlarmActivity.java
+++ b/src/com/android/deskclock/alarms/AlarmActivity.java
@@ -22,7 +22,6 @@
 import android.animation.PropertyValuesHolder;
 import android.animation.TimeInterpolator;
 import android.animation.ValueAnimator;
-import android.annotation.TargetApi;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -33,7 +32,6 @@
 import android.graphics.Color;
 import android.graphics.Rect;
 import android.graphics.drawable.ColorDrawable;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -55,10 +53,10 @@
 import com.android.deskclock.AnimatorUtils;
 import com.android.deskclock.LogUtils;
 import com.android.deskclock.R;
-import com.android.deskclock.SettingsActivity;
 import com.android.deskclock.Utils;
 import com.android.deskclock.events.Events;
 import com.android.deskclock.provider.AlarmInstance;
+import com.android.deskclock.settings.SettingsActivity;
 import com.android.deskclock.widget.CircleView;
 
 public class AlarmActivity extends AppCompatActivity
@@ -166,7 +164,7 @@
 
         // Get the volume/camera button behavior setting
         mVolumeBehavior = Utils.getDefaultSharedPreferences(this)
-                .getString(SettingsActivity.KEY_VOLUME_BEHAVIOR,
+                .getString(SettingsActivity.KEY_VOLUME_BUTTONS,
                         SettingsActivity.DEFAULT_VOLUME_BEHAVIOR);
 
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
@@ -210,8 +208,7 @@
         final CircleView pulseView = (CircleView) mContentView.findViewById(R.id.pulse);
 
         titleView.setText(mAlarmInstance.getLabelOrDefault(this));
-        Utils.setTimeFormat(this, digitalClock,
-                getResources().getDimensionPixelSize(R.dimen.main_ampm_font_size));
+        Utils.setTimeFormat(this, digitalClock);
 
         mCurrentHourColor = Utils.getCurrentHourColor();
         getWindow().setBackgroundDrawable(new ColorDrawable(mCurrentHourColor));
@@ -234,15 +231,6 @@
     }
 
     @Override
-    protected void onStart() {
-        super.onStart();
-
-        // Bind to AlarmService
-        bindService(new Intent(this, AlarmService.class), mConnection, Context.BIND_AUTO_CREATE);
-        mServiceBound = true;
-    }
-
-    @Override
     protected void onResume() {
         super.onResume();
 
@@ -272,6 +260,8 @@
             mReceiverRegistered = true;
         }
 
+        bindAlarmService();
+
         resetAnimations();
     }
 
@@ -415,13 +405,10 @@
         return true;
     }
 
-    @TargetApi(Build.VERSION_CODES.KITKAT)
     private void hideNavigationBar() {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
-            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
-                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
-                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
-        }
+        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
     }
 
     private void hintSnooze() {
@@ -476,7 +463,7 @@
 
         AlarmStateManager.setSnoozeState(this, mAlarmInstance, false /* showToast */);
 
-        Events.sendAlarmEvent(R.string.action_dismiss, R.string.label_deskclock);
+        Events.sendAlarmEvent(R.string.action_snooze, R.string.label_deskclock);
 
         // Unbind here, otherwise alarm will keep ringing until activity finishes.
         unbindAlarmService();
@@ -495,7 +482,7 @@
                 getString(R.string.alarm_alert_off_text) /* accessibilityText */,
                 Color.WHITE, mCurrentHourColor).start();
 
-        AlarmStateManager.setDismissState(this, mAlarmInstance);
+        AlarmStateManager.deleteInstanceAndUpdateParent(this, mAlarmInstance);
 
         Events.sendAlarmEvent(R.string.action_dismiss, R.string.label_deskclock);
 
@@ -504,6 +491,17 @@
     }
 
     /**
+     * Bind AlarmService if not yet bound.
+     */
+    private void bindAlarmService() {
+        if (!mServiceBound) {
+            final Intent intent = new Intent(this, AlarmService.class);
+            bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
+            mServiceBound = true;
+        }
+    }
+
+    /**
      * Unbind AlarmService if bound.
      */
     private void unbindAlarmService() {
diff --git a/src/com/android/deskclock/alarms/AlarmKlaxon.java b/src/com/android/deskclock/alarms/AlarmKlaxon.java
index c286f45..971c5e9 100644
--- a/src/com/android/deskclock/alarms/AlarmKlaxon.java
+++ b/src/com/android/deskclock/alarms/AlarmKlaxon.java
@@ -16,6 +16,7 @@
 
 package com.android.deskclock.alarms;
 
+import android.annotation.TargetApi;
 import android.content.Context;
 import android.media.AudioAttributes;
 import android.os.Build;
@@ -23,7 +24,9 @@
 
 import com.android.deskclock.AsyncRingtonePlayer;
 import com.android.deskclock.LogUtils;
+import com.android.deskclock.Utils;
 import com.android.deskclock.provider.AlarmInstance;
+import com.android.deskclock.settings.SettingsActivity;
 
 /**
  * Manages playing ringtone and vibrating the device.
@@ -37,9 +40,8 @@
     private AlarmKlaxon() {}
 
     public static void stop(Context context) {
-        LogUtils.v("AlarmKlaxon.stop()");
-
         if (sStarted) {
+            LogUtils.v("AlarmKlaxon.stop()");
             sStarted = false;
             getAsyncRingtonePlayer(context).stop();
             ((Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE)).cancel();
@@ -47,9 +49,9 @@
     }
 
     public static void start(Context context, AlarmInstance instance) {
-        LogUtils.v("AlarmKlaxon.start()");
         // Make sure we are stopped before starting
         stop(context);
+        LogUtils.v("AlarmKlaxon.start()");
 
         if (!AlarmInstance.NO_RINGTONE_URI.equals(instance.mRingtone)) {
             getAsyncRingtonePlayer(context).play(instance.mRingtone);
@@ -57,11 +59,8 @@
 
         if (instance.mVibrate) {
             final Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                vibrator.vibrate(sVibratePattern, 0, new AudioAttributes.Builder()
-                        .setUsage(AudioAttributes.USAGE_ALARM)
-                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
-                        .build());
+            if (Utils.isLOrLater()) {
+                vibrateLOrLater(vibrator);
             } else {
                 vibrator.vibrate(sVibratePattern, 0);
             }
@@ -70,9 +69,18 @@
         sStarted = true;
     }
 
+    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+    private static void vibrateLOrLater(Vibrator vibrator) {
+        vibrator.vibrate(sVibratePattern, 0, new AudioAttributes.Builder()
+                .setUsage(AudioAttributes.USAGE_ALARM)
+                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                .build());
+    }
+
     private static synchronized AsyncRingtonePlayer getAsyncRingtonePlayer(Context context) {
         if (sAsyncRingtonePlayer == null) {
-            sAsyncRingtonePlayer = new AsyncRingtonePlayer(context.getApplicationContext());
+            sAsyncRingtonePlayer = new AsyncRingtonePlayer(context.getApplicationContext(),
+                    SettingsActivity.KEY_ALARM_CRESCENDO);
         }
 
         return sAsyncRingtonePlayer;
diff --git a/src/com/android/deskclock/alarms/AlarmNotifications.java b/src/com/android/deskclock/alarms/AlarmNotifications.java
index 995af1d..3fff8e3 100644
--- a/src/com/android/deskclock/alarms/AlarmNotifications.java
+++ b/src/com/android/deskclock/alarms/AlarmNotifications.java
@@ -16,6 +16,7 @@
 package com.android.deskclock.alarms;
 
 import android.app.PendingIntent;
+import android.app.Service;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -35,12 +36,12 @@
 
     public static void showLowPriorityNotification(Context context, AlarmInstance instance) {
         LogUtils.v("Displaying low priority notification for alarm instance: " + instance.mId);
-        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
 
         NotificationCompat.Builder notification = new NotificationCompat.Builder(context)
                 .setContentTitle(context.getString(
                         R.string.alarm_alert_predismiss_title))
-                .setContentText(AlarmUtils.getAlarmText(context, instance))
+                .setContentText(AlarmUtils.getAlarmText(context, instance,
+                        true /* includeLabel */))
                 .setSmallIcon(R.drawable.stat_notify_alarm)
                 .setAutoCancel(false)
                 .setPriority(NotificationCompat.PRIORITY_DEFAULT)
@@ -52,7 +53,7 @@
         Intent hideIntent = AlarmStateManager.createStateChangeIntent(context,
                 AlarmStateManager.ALARM_DELETE_TAG, instance,
                 AlarmInstance.HIDE_NOTIFICATION_STATE);
-        notification.setDeleteIntent(PendingIntent.getBroadcast(context, instance.hashCode(),
+        notification.setDeleteIntent(PendingIntent.getService(context, instance.hashCode(),
                 hideIntent, PendingIntent.FLAG_UPDATE_CURRENT));
 
         // Setup up dismiss action
@@ -60,7 +61,7 @@
                 AlarmStateManager.ALARM_DISMISS_TAG, instance, AlarmInstance.PREDISMISSED_STATE);
         notification.addAction(R.drawable.ic_alarm_off_24dp,
                 context.getString(R.string.alarm_alert_dismiss_now_text),
-                PendingIntent.getBroadcast(context, instance.hashCode(),
+                PendingIntent.getService(context, instance.hashCode(),
                         dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT));
 
         // Setup content action if instance is owned by alarm
@@ -68,17 +69,17 @@
         notification.setContentIntent(PendingIntent.getActivity(context, instance.hashCode(),
                 viewAlarmIntent, PendingIntent.FLAG_UPDATE_CURRENT));
 
-        nm.cancel(instance.hashCode());
+        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
         nm.notify(instance.hashCode(), notification.build());
     }
 
     public static void showHighPriorityNotification(Context context, AlarmInstance instance) {
         LogUtils.v("Displaying high priority notification for alarm instance: " + instance.mId);
-        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
 
         NotificationCompat.Builder notification = new NotificationCompat.Builder(context)
                 .setContentTitle(context.getString(R.string.alarm_alert_predismiss_title))
-                .setContentText(AlarmUtils.getAlarmText(context, instance))
+                .setContentText(AlarmUtils.getAlarmText(context, instance,
+                        true /* includeLabel */))
                 .setSmallIcon(R.drawable.stat_notify_alarm)
                 .setAutoCancel(false)
                 .setOngoing(true)
@@ -94,7 +95,7 @@
                 AlarmStateManager.ALARM_DISMISS_TAG, instance, AlarmInstance.PREDISMISSED_STATE);
         notification.addAction(R.drawable.ic_alarm_off_24dp,
                 context.getString(R.string.alarm_alert_dismiss_now_text),
-                PendingIntent.getBroadcast(context, instance.hashCode(),
+                PendingIntent.getService(context, instance.hashCode(),
                         dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT));
 
         // Setup content action if instance is owned by alarm
@@ -102,13 +103,12 @@
         notification.setContentIntent(PendingIntent.getActivity(context, instance.hashCode(),
                 viewAlarmIntent, PendingIntent.FLAG_UPDATE_CURRENT));
 
-        nm.cancel(instance.hashCode());
+        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
         nm.notify(instance.hashCode(), notification.build());
     }
 
     public static void showSnoozeNotification(Context context, AlarmInstance instance) {
         LogUtils.v("Displaying snoozed notification for alarm instance: " + instance.mId);
-        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
 
         NotificationCompat.Builder notification = new NotificationCompat.Builder(context)
                 .setContentTitle(instance.getLabelOrDefault(context))
@@ -127,20 +127,20 @@
                 AlarmStateManager.ALARM_DISMISS_TAG, instance, AlarmInstance.DISMISSED_STATE);
         notification.addAction(R.drawable.ic_alarm_off_24dp,
                 context.getString(R.string.alarm_alert_dismiss_text),
-                PendingIntent.getBroadcast(context, instance.hashCode(),
+                PendingIntent.getService(context, instance.hashCode(),
                         dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT));
 
         // Setup content action if instance is owned by alarm
         Intent viewAlarmIntent = createViewAlarmIntent(context, instance);
         notification.setContentIntent(PendingIntent.getActivity(context, instance.hashCode(),
                 viewAlarmIntent, PendingIntent.FLAG_UPDATE_CURRENT));
-        nm.cancel(instance.hashCode());
+
+        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
         nm.notify(instance.hashCode(), notification.build());
     }
 
     public static void showMissedNotification(Context context, AlarmInstance instance) {
         LogUtils.v("Displaying missed notification for alarm instance: " + instance.mId);
-        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
 
         String label = instance.mLabel;
         String alarmTime = AlarmUtils.getFormattedTime(context, instance.getAlarmTime());
@@ -159,7 +159,7 @@
         // Setup dismiss intent
         Intent dismissIntent = AlarmStateManager.createStateChangeIntent(context,
                 AlarmStateManager.ALARM_DISMISS_TAG, instance, AlarmInstance.DISMISSED_STATE);
-        notification.setDeleteIntent(PendingIntent.getBroadcast(context, hashCode,
+        notification.setDeleteIntent(PendingIntent.getService(context, hashCode,
                 dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT));
 
         // Setup content intent
@@ -170,18 +170,17 @@
         notification.setContentIntent(PendingIntent.getBroadcast(context, hashCode,
                 showAndDismiss, PendingIntent.FLAG_UPDATE_CURRENT));
 
-        nm.cancel(hashCode);
+        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
         nm.notify(hashCode, notification.build());
     }
 
-    public static void showAlarmNotification(Context context, AlarmInstance instance) {
+    public static void showAlarmNotification(Service service, AlarmInstance instance) {
         LogUtils.v("Displaying alarm notification for alarm instance: " + instance.mId);
-        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
 
-        Resources resources = context.getResources();
-        NotificationCompat.Builder notification = new NotificationCompat.Builder(context)
-                .setContentTitle(instance.getLabelOrDefault(context))
-                .setContentText(AlarmUtils.getFormattedTime(context, instance.getAlarmTime()))
+        Resources resources = service.getResources();
+        NotificationCompat.Builder notification = new NotificationCompat.Builder(service)
+                .setContentTitle(instance.getLabelOrDefault(service))
+                .setContentText(AlarmUtils.getFormattedTime(service, instance.getAlarmTime()))
                 .setSmallIcon(R.drawable.stat_notify_alarm)
                 .setOngoing(true)
                 .setAutoCancel(false)
@@ -192,44 +191,44 @@
                 .setLocalOnly(true);
 
         // Setup Snooze Action
-        Intent snoozeIntent = AlarmStateManager.createStateChangeIntent(context,
+        Intent snoozeIntent = AlarmStateManager.createStateChangeIntent(service,
                 AlarmStateManager.ALARM_SNOOZE_TAG, instance, AlarmInstance.SNOOZE_STATE);
         snoozeIntent.putExtra(AlarmStateManager.FROM_NOTIFICATION_EXTRA, true);
-        PendingIntent snoozePendingIntent = PendingIntent.getBroadcast(context, instance.hashCode(),
+        PendingIntent snoozePendingIntent = PendingIntent.getService(service, instance.hashCode(),
                 snoozeIntent,
                 PendingIntent.FLAG_UPDATE_CURRENT);
         notification.addAction(R.drawable.ic_snooze_24dp,
                 resources.getString(R.string.alarm_alert_snooze_text), snoozePendingIntent);
 
         // Setup Dismiss Action
-        Intent dismissIntent = AlarmStateManager.createStateChangeIntent(context,
+        Intent dismissIntent = AlarmStateManager.createStateChangeIntent(service,
                 AlarmStateManager.ALARM_DISMISS_TAG, instance, AlarmInstance.DISMISSED_STATE);
         dismissIntent.putExtra(AlarmStateManager.FROM_NOTIFICATION_EXTRA, true);
-        PendingIntent dismissPendingIntent = PendingIntent.getBroadcast(context,
+        PendingIntent dismissPendingIntent = PendingIntent.getService(service,
                 instance.hashCode(), dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT);
         notification.addAction(R.drawable.ic_alarm_off_24dp,
                 resources.getString(R.string.alarm_alert_dismiss_text),
                 dismissPendingIntent);
 
         // Setup Content Action
-        Intent contentIntent = AlarmInstance.createIntent(context, AlarmActivity.class,
+        Intent contentIntent = AlarmInstance.createIntent(service, AlarmActivity.class,
                 instance.mId);
-        notification.setContentIntent(PendingIntent.getActivity(context,
+        notification.setContentIntent(PendingIntent.getActivity(service,
                 instance.hashCode(), contentIntent, PendingIntent.FLAG_UPDATE_CURRENT));
 
         // Setup fullscreen intent
-        Intent fullScreenIntent = AlarmInstance.createIntent(context, AlarmActivity.class,
+        Intent fullScreenIntent = AlarmInstance.createIntent(service, AlarmActivity.class,
                 instance.mId);
         // set action, so we can be different then content pending intent
         fullScreenIntent.setAction("fullscreen_activity");
         fullScreenIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                 Intent.FLAG_ACTIVITY_NO_USER_ACTION);
-        notification.setFullScreenIntent(PendingIntent.getActivity(context,
+        notification.setFullScreenIntent(PendingIntent.getActivity(service,
                 instance.hashCode(), fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT), true);
         notification.setPriority(NotificationCompat.PRIORITY_MAX);
 
-        nm.cancel(instance.hashCode());
-        nm.notify(instance.hashCode(), notification.build());
+        clearNotification(service, instance);
+        service.startForeground(instance.hashCode(), notification.build());
     }
 
     public static void clearNotification(Context context, AlarmInstance instance) {
@@ -238,6 +237,28 @@
         nm.cancel(instance.hashCode());
     }
 
+    /**
+     * Updates the notification for an existing alarm. Use if the label has changed.
+     */
+    public static void updateNotification(Context context, AlarmInstance instance) {
+        switch (instance.mAlarmState) {
+            case AlarmInstance.LOW_NOTIFICATION_STATE:
+                showLowPriorityNotification(context, instance);
+                break;
+            case AlarmInstance.HIGH_NOTIFICATION_STATE:
+                showHighPriorityNotification(context, instance);
+                break;
+            case AlarmInstance.SNOOZE_STATE:
+                showSnoozeNotification(context, instance);
+                break;
+            case AlarmInstance.MISSED_STATE:
+                showMissedNotification(context, instance);
+                break;
+            default:
+                LogUtils.d("No notification to update");
+        }
+    }
+
     public static Intent createViewAlarmIntent(Context context, AlarmInstance instance) {
         long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId;
         Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId);
diff --git a/src/com/android/deskclock/alarms/AlarmService.java b/src/com/android/deskclock/alarms/AlarmService.java
index 1e0c887..cd1bec4 100644
--- a/src/com/android/deskclock/alarms/AlarmService.java
+++ b/src/com/android/deskclock/alarms/AlarmService.java
@@ -59,9 +59,6 @@
     /** A public action sent by AlarmService when the alarm has stopped for any reason. */
     public static final String ALARM_DONE_ACTION = "com.android.deskclock.ALARM_DONE";
 
-    /** Private action used to start an alarm with this service. */
-    public static final String START_ALARM_ACTION = "START_ALARM";
-
     /** Private action used to stop an alarm with this service. */
     public static final String STOP_ALARM_ACTION = "STOP_ALARM";
 
@@ -87,22 +84,6 @@
     }
 
     /**
-     * Utility method to help start alarm properly. If alarm is already firing, it
-     * will mark it as missed and start the new one.
-     *
-     * @param context application context
-     * @param instance to trigger alarm
-     */
-    public static void startAlarm(Context context, AlarmInstance instance) {
-        final Intent intent = AlarmInstance.createIntent(context, AlarmService.class, instance.mId)
-                .setAction(START_ALARM_ACTION);
-
-        // Maintain a cpu wake lock until the service can get it
-        AlarmAlertWakeLock.acquireCpuWakeLock(context);
-        context.startService(intent);
-    }
-
-    /**
      * Utility method to help stop an alarm properly. Nothing will happen, if alarm is not firing
      * or using a different instance.
      *
@@ -129,7 +110,7 @@
             // which kills the alarm. Check against the initial call state so
             // we don't kill the alarm during a call.
             if (state != TelephonyManager.CALL_STATE_IDLE && state != mInitialCallState) {
-                sendBroadcast(AlarmStateManager.createStateChangeIntent(AlarmService.this,
+                startService(AlarmStateManager.createStateChangeIntent(AlarmService.this,
                         "AlarmService", mCurrentAlarm, AlarmInstance.MISSED_STATE));
             }
         }
@@ -144,8 +125,6 @@
 
         AlarmAlertWakeLock.acquireCpuWakeLock(this);
 
-        Events.sendEvent(R.string.category_alarm, R.string.action_fire, 0);
-
         mCurrentAlarm = instance;
         AlarmNotifications.showAlarmNotification(this, mCurrentAlarm);
         mInitialCallState = mTelephonyManager.getCallState();
@@ -160,11 +139,23 @@
             return;
         }
 
-        LogUtils.v("AlarmService.stop with instance: %s", (Object) mCurrentAlarm.mId);
+        final long instanceId = mCurrentAlarm.mId;
+        LogUtils.v("AlarmService.stop with instance: %s", instanceId);
+
         AlarmKlaxon.stop(this);
         mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
         sendBroadcast(new Intent(ALARM_DONE_ACTION));
 
+        // Since we use the same id for all notifications, the system has no way to distinguish the
+        // firing notification we were bound to from other subsequent notifications posted for the
+        // same AlarmInstance (e.g. after snoozing). We workaround the issue by forcing removal of
+        // the notification and re-posting it.
+        stopForeground(true /* removeNotification */);
+        mCurrentAlarm = AlarmInstance.getInstance(getContentResolver(), instanceId);
+        if (mCurrentAlarm != null) {
+            AlarmNotifications.updateNotification(this, mCurrentAlarm);
+        }
+
         mCurrentAlarm = null;
         AlarmAlertWakeLock.releaseCpuLock();
     }
@@ -194,7 +185,7 @@
                     break;
                 case ALARM_DISMISS_ACTION:
                     // Set the alarm state to dismissed.
-                    AlarmStateManager.setDismissState(context, mCurrentAlarm);
+                    AlarmStateManager.deleteInstanceAndUpdateParent(context, mCurrentAlarm);
                     Events.sendAlarmEvent(R.string.action_dismiss, R.string.label_intent);
                     break;
             }
@@ -219,23 +210,29 @@
 
         final long instanceId = AlarmInstance.getId(intent.getData());
         switch (intent.getAction()) {
-            case START_ALARM_ACTION:
-                final ContentResolver cr = this.getContentResolver();
-                final AlarmInstance instance = AlarmInstance.getInstance(cr, instanceId);
-                if (instance == null) {
-                    LogUtils.e("No instance found to start alarm: %d", instanceId);
-                    if (mCurrentAlarm != null) {
-                        // Only release lock if we are not firing alarm
-                        AlarmAlertWakeLock.releaseCpuLock();
-                    }
-                    break;
-                }
+            case AlarmStateManager.CHANGE_STATE_ACTION:
+                AlarmStateManager.handleIntent(this, intent);
 
-                if (mCurrentAlarm != null && mCurrentAlarm.mId == instanceId) {
-                    LogUtils.e("Alarm already started for instance: %d", instanceId);
-                    break;
+                // If state is changed to firing, actually fire the alarm!
+                final int alarmState = intent.getIntExtra(AlarmStateManager.ALARM_STATE_EXTRA, -1);
+                if (alarmState == AlarmInstance.FIRED_STATE) {
+                    final ContentResolver cr = this.getContentResolver();
+                    final AlarmInstance instance = AlarmInstance.getInstance(cr, instanceId);
+                    if (instance == null) {
+                        LogUtils.e("No instance found to start alarm: %d", instanceId);
+                        if (mCurrentAlarm != null) {
+                            // Only release lock if we are not firing alarm
+                            AlarmAlertWakeLock.releaseCpuLock();
+                        }
+                        break;
+                    }
+
+                    if (mCurrentAlarm != null && mCurrentAlarm.mId == instanceId) {
+                        LogUtils.e("Alarm already started for instance: %d", instanceId);
+                        break;
+                    }
+                    startAlarm(instance);
                 }
-                startAlarm(instance);
                 break;
             case STOP_ALARM_ACTION:
                 if (mCurrentAlarm != null && mCurrentAlarm.mId != instanceId) {
diff --git a/src/com/android/deskclock/alarms/AlarmStateManager.java b/src/com/android/deskclock/alarms/AlarmStateManager.java
index 3b87eba..827c2c1 100644
--- a/src/com/android/deskclock/alarms/AlarmStateManager.java
+++ b/src/com/android/deskclock/alarms/AlarmStateManager.java
@@ -29,8 +29,8 @@
 import android.os.PowerManager;
 import android.preference.PreferenceManager;
 import android.provider.Settings;
-import android.text.format.DateFormat;
 import android.support.v4.app.NotificationManagerCompat;
+import android.text.format.DateFormat;
 import android.widget.Toast;
 
 import com.android.deskclock.AlarmAlertWakeLock;
@@ -40,11 +40,11 @@
 import com.android.deskclock.DeskClock;
 import com.android.deskclock.LogUtils;
 import com.android.deskclock.R;
-import com.android.deskclock.SettingsActivity;
 import com.android.deskclock.Utils;
 import com.android.deskclock.events.Events;
 import com.android.deskclock.provider.Alarm;
 import com.android.deskclock.provider.AlarmInstance;
+import com.android.deskclock.settings.SettingsActivity;
 
 import java.util.Calendar;
 import java.util.List;
@@ -158,12 +158,12 @@
     }
 
     public static int getGlobalIntentId(Context context) {
-        final SharedPreferences prefs = Utils.getDefaultSharedPreferences(context);
+        SharedPreferences prefs = Utils.getDefaultSharedPreferences(context);
         return prefs.getInt(ALARM_GLOBAL_ID_EXTRA, -1);
     }
 
     public static void updateGlobalIntentId(Context context) {
-        final SharedPreferences prefs = Utils.getDefaultSharedPreferences(context);
+        SharedPreferences prefs = Utils.getDefaultSharedPreferences(context);
         int globalId = prefs.getInt(ALARM_GLOBAL_ID_EXTRA, -1) + 1;
         prefs.edit().putInt(ALARM_GLOBAL_ID_EXTRA, globalId).commit();
     }
@@ -177,7 +177,7 @@
     public static void updateNextAlarm(Context context) {
         final AlarmInstance nextAlarm = getNextFiringAlarm(context);
 
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+        if (Utils.isPreL()) {
             updateNextAlarmInSystemSettings(context, nextAlarm);
         } else {
             updateNextAlarmInAlarmManager(context, nextAlarm);
@@ -303,7 +303,13 @@
      */
     public static Intent createStateChangeIntent(Context context, String tag,
             AlarmInstance instance, Integer state) {
-        Intent intent = AlarmInstance.createIntent(context, AlarmStateManager.class, instance.mId);
+        // This intent is directed to AlarmService, though the actual handling of it occurs here
+        // in AlarmStateManager. The reason is that evidence exists showing the jump between the
+        // broadcast receiver (AlarmStateManager) and service (AlarmService) can be thwarted by the
+        // Out Of Memory killer. If clock is killed during that jump, firing an alarm can fail to
+        // occur. To be safer, the call begins in AlarmService, which has the power to display the
+        // firing alarm if needed, so no jump is needed.
+        Intent intent = AlarmInstance.createIntent(context, AlarmService.class, instance.mId);
         intent.setAction(CHANGE_STATE_ACTION);
         intent.addCategory(tag);
         intent.putExtra(ALARM_GLOBAL_ID_EXTRA, getGlobalIntentId(context));
@@ -346,7 +352,7 @@
      * @param instance to set state to
      */
     public static void setSilentState(Context context, AlarmInstance instance) {
-        LogUtils.v("Setting silent state to instance " + instance.mId);
+        LogUtils.i("Setting silent state to instance " + instance.mId);
 
         // Update alarm in db
         ContentResolver contentResolver = context.getContentResolver();
@@ -368,7 +374,7 @@
      * @param instance to set state to
      */
     public static void setLowNotificationState(Context context, AlarmInstance instance) {
-        LogUtils.v("Setting low notification state to instance " + instance.mId);
+        LogUtils.i("Setting low notification state to instance " + instance.mId);
 
         // Update alarm state in db
         ContentResolver contentResolver = context.getContentResolver();
@@ -390,7 +396,7 @@
      * @param instance to set state to
      */
     public static void setHideNotificationState(Context context, AlarmInstance instance) {
-        LogUtils.v("Setting hide notification state to instance " + instance.mId);
+        LogUtils.i("Setting hide notification state to instance " + instance.mId);
 
         // Update alarm state in db
         ContentResolver contentResolver = context.getContentResolver();
@@ -412,7 +418,7 @@
      * @param instance to set state to
      */
     public static void setHighNotificationState(Context context, AlarmInstance instance) {
-        LogUtils.v("Setting high notification state to instance " + instance.mId);
+        LogUtils.i("Setting high notification state to instance " + instance.mId);
 
         // Update alarm state in db
         ContentResolver contentResolver = context.getContentResolver();
@@ -434,7 +440,7 @@
      * @param instance to set state to
      */
     public static void setFiredState(Context context, AlarmInstance instance) {
-        LogUtils.v("Setting fire state to instance " + instance.mId);
+        LogUtils.i("Setting fire state to instance " + instance.mId);
 
         // Update alarm state in db
         ContentResolver contentResolver = context.getContentResolver();
@@ -444,11 +450,11 @@
         if (instance.mAlarmId != null) {
             // if the time changed *backward* and pushed an instance from missed back to fired,
             // remove any other scheduled instances that may exist
-            AlarmInstance.deleteOtherInstances(contentResolver, instance.mAlarmId, instance.mId);
+            AlarmInstance.deleteOtherInstances(context, contentResolver, instance.mAlarmId,
+                    instance.mId);
         }
 
-        // Start the alarm and schedule timeout timer for it
-        AlarmService.startAlarm(context, instance);
+        Events.sendAlarmEvent(R.string.action_fire, 0);
 
         Calendar timeout = instance.getTimeout(context);
         if (timeout != null) {
@@ -481,7 +487,7 @@
         newAlarmTime.add(Calendar.MINUTE, snoozeMinutes);
 
         // Update alarm state and new alarm time in db.
-        LogUtils.v("Setting snoozed state to instance " + instance.mId + " for "
+        LogUtils.i("Setting snoozed state to instance " + instance.mId + " for "
                 + AlarmUtils.getFormattedTime(context, newAlarmTime));
         instance.setAlarmTime(newAlarmTime);
         instance.mAlarmState = AlarmInstance.SNOOZE_STATE;
@@ -526,7 +532,7 @@
      * @param instance to set state to
      */
     public static void setMissedState(Context context, AlarmInstance instance) {
-        LogUtils.v("Setting missed state to instance " + instance.mId);
+        LogUtils.i("Setting missed state to instance " + instance.mId);
         // Stop alarm if this instance is firing it
         AlarmService.stopAlarm(context, instance);
 
@@ -556,7 +562,7 @@
      * @param instance
      */
     public static void setPreDismissState(Context context, AlarmInstance instance) {
-        LogUtils.v("Setting predismissed state to instance " + instance.mId);
+        LogUtils.i("Setting predismissed state to instance " + instance.mId);
 
         // Update alarm in db
         final ContentResolver contentResolver = context.getContentResolver();
@@ -576,18 +582,29 @@
                 updateParentAlarm(context, instance);
             }
         }
+
+        updateNextAlarm(context);
     }
 
     /**
-     * This will set the alarm instance to the SILENT_STATE and update
-     * the application notifications and schedule any state changes that need
-     * to occur in the future.
+     * This just sets the alarm instance to DISMISSED_STATE.
+     */
+    public static void setDismissState(Context context, AlarmInstance instance) {
+        LogUtils.i("Setting dismissed state to instance " + instance.mId);
+        instance.mAlarmState = AlarmInstance.DISMISSED_STATE;
+        final ContentResolver contentResolver = context.getContentResolver();
+        AlarmInstance.updateInstance(contentResolver, instance);
+    }
+
+    /**
+     * This will delete the alarm instance, update the application notifications, and schedule
+     * any state changes that need to occur in the future.
      *
      * @param context application context
      * @param instance to set state to
      */
-    public static void setDismissState(Context context, AlarmInstance instance) {
-        LogUtils.v("Setting dismissed state to instance " + instance.mId);
+    public static void deleteInstanceAndUpdateParent(Context context, AlarmInstance instance) {
+        LogUtils.i("Deleting instance " + instance.mId + " and updating parent alarm.");
 
         // Remove all other timers and notifications associated to it
         unregisterInstance(context, instance);
@@ -605,17 +622,19 @@
     }
 
     /**
-     * This will not change the state of instance, but remove it's notifications and
+     * This will set the instance state to DISMISSED_STATE and remove its notifications and
      * alarm timers.
      *
      * @param context application context
      * @param instance to unregister
      */
     public static void unregisterInstance(Context context, AlarmInstance instance) {
+        LogUtils.i("Unregistering instance " + instance.mId);
         // Stop alarm if this instance is firing it
         AlarmService.stopAlarm(context, instance);
         AlarmNotifications.clearNotification(context, instance);
         cancelScheduledInstanceStateChange(context, instance);
+        setDismissState(context, instance);
     }
 
     /**
@@ -657,7 +676,7 @@
         if (instance.mAlarmState == AlarmInstance.DISMISSED_STATE) {
             // This should never happen, but add a quick check here
             LogUtils.e("Alarm Instance is dismissed, but never deleted");
-            setDismissState(context, instance);
+            deleteInstanceAndUpdateParent(context, instance);
             return;
         } else if (instance.mAlarmState == AlarmInstance.FIRED_STATE) {
             // Keep alarm firing, unless it should be timed out
@@ -669,9 +688,10 @@
         } else if (instance.mAlarmState == AlarmInstance.MISSED_STATE) {
             if (currentTime.before(alarmTime)) {
                 if (instance.mAlarmId == null) {
+                    LogUtils.i("Cannot restore missed instance for one-time alarm");
                     // This instance parent got deleted (ie. deleteAfterUse), so
                     // we should not re-activate it.-
-                    setDismissState(context, instance);
+                    deleteInstanceAndUpdateParent(context, instance);
                     return;
                 }
 
@@ -688,7 +708,7 @@
             if (currentTime.before(alarmTime)) {
                 setPreDismissState(context, instance);
             } else {
-                setDismissState(context, instance);
+                deleteInstanceAndUpdateParent(context, instance);
             }
             return;
         }
@@ -696,7 +716,7 @@
         // Fix states that are time sensitive
         if (currentTime.after(missedTTL)) {
             // Alarm is so old, just dismiss it
-            setDismissState(context, instance);
+            deleteInstanceAndUpdateParent(context, instance);
         } else if (currentTime.after(alarmTime)) {
             // There is a chance that the TIME_SET occurred right when the alarm should go off, so
             // we need to add a check to see if we should fire the alarm instead of marking it
@@ -753,6 +773,23 @@
     }
 
     /**
+     * Delete and unregister all instances unless they are snoozed. This is used whenever an alarm
+     * is modified superficially (label, vibrate, or ringtone change).
+     */
+    public static void deleteNonSnoozeInstances(Context context, long alarmId) {
+        ContentResolver cr = context.getContentResolver();
+        List<AlarmInstance> instances = AlarmInstance.getInstancesByAlarmId(cr, alarmId);
+        for (AlarmInstance instance : instances) {
+            if (instance.mAlarmState == AlarmInstance.SNOOZE_STATE) {
+                continue;
+            }
+            unregisterInstance(context, instance);
+            AlarmInstance.deleteInstance(context.getContentResolver(), instance.mId);
+        }
+        updateNextAlarm(context);
+    }
+
+    /**
      * Fix and update all alarm instance when a time change event occurs.
      *
      * @param context application context
@@ -763,6 +800,12 @@
         final Calendar currentTime = getCurrentTime();
         for (AlarmInstance instance : AlarmInstance.getInstances(contentResolver, null)) {
             final Alarm alarm = Alarm.getAlarm(contentResolver, instance.mAlarmId);
+            if (alarm == null) {
+                unregisterInstance(context, instance);
+                AlarmInstance.deleteInstance(contentResolver, instance.mId);
+                LogUtils.e("Found instance without matching alarm; deleting instance %s", instance);
+                continue;
+            }
             final Calendar priorAlarmTime = alarm.getPreviousAlarmTime(instance.getAlarmTime());
             final Calendar missedTTLTime = instance.getMissedTimeToLive();
             if (currentTime.before(priorAlarmTime) || currentTime.after(missedTTLTime)) {
@@ -775,12 +818,12 @@
 
                 // The time change is so dramatic the AlarmInstance doesn't make any sense;
                 // remove it and schedule the new appropriate instance.
-                AlarmStateManager.setDismissState(context, instance);
+                AlarmStateManager.deleteInstanceAndUpdateParent(context, instance);
             } else {
                 registerInstance(context, instance, false);
             }
         }
-        
+
         updateNextAlarm(context);
     }
 
@@ -791,7 +834,7 @@
      * @param instance to change state on
      * @param state to change to
      */
-    public void setAlarmState(Context context, AlarmInstance instance, int state) {
+    private static void setAlarmState(Context context, AlarmInstance instance, int state) {
         if (instance == null) {
             LogUtils.e("Null alarm instance while setting state to %d", state);
             return;
@@ -822,7 +865,7 @@
                 setPreDismissState(context, instance);
                 break;
             case AlarmInstance.DISMISSED_STATE:
-                setDismissState(context, instance);
+                deleteInstanceAndUpdateParent(context, instance);
                 break;
             default:
                 LogUtils.e("Trying to change to unknown alarm state: " + state);
@@ -848,7 +891,7 @@
         });
     }
 
-    private void handleIntent(Context context, Intent intent) {
+    public static void handleIntent(Context context, Intent intent) {
         final String action = intent.getAction();
         LogUtils.v("AlarmStateManager received intent " + intent);
         if (CHANGE_STATE_ACTION.equals(action)) {
@@ -856,7 +899,6 @@
             AlarmInstance instance = AlarmInstance.getInstance(context.getContentResolver(),
                     AlarmInstance.getId(uri));
             if (instance == null) {
-                // Not a big deal, but it shouldn't happen
                 LogUtils.e("Can not change state for unknown instance: " + uri);
                 return;
             }
@@ -909,7 +951,7 @@
             viewAlarmIntent.putExtra(AlarmClockFragment.SCROLL_TO_ALARM_INTENT_EXTRA, alarmId);
             viewAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             context.startActivity(viewAlarmIntent);
-            setDismissState(context, instance);
+            deleteInstanceAndUpdateParent(context, instance);
         }
     }
 
@@ -956,15 +998,11 @@
                     createStateChangeIntent(context, ALARM_MANAGER_TAG, instance, newState);
             // Treat alarm state change as high priority, use foreground broadcasts
             stateChangeIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, instance.hashCode(),
+            PendingIntent pendingIntent = PendingIntent.getService(context, instance.hashCode(),
                     stateChangeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
 
             final AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
-            if (Utils.isKitKatOrLater()) {
-                am.setExact(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
-            } else {
-                am.set(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
-            }
+            am.setExact(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
         }
 
         @Override
@@ -972,7 +1010,7 @@
             LogUtils.v("Canceling instance " + instance.mId + " timers");
 
             // Create a PendingIntent that will match any one set for this instance
-            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, instance.hashCode(),
+            PendingIntent pendingIntent = PendingIntent.getService(context, instance.hashCode(),
                     createStateChangeIntent(context, ALARM_MANAGER_TAG, instance, null),
                     PendingIntent.FLAG_NO_CREATE);
 
diff --git a/src/com/android/deskclock/alarms/AlarmTimeClickHandler.java b/src/com/android/deskclock/alarms/AlarmTimeClickHandler.java
new file mode 100644
index 0000000..5249003
--- /dev/null
+++ b/src/com/android/deskclock/alarms/AlarmTimeClickHandler.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2015 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.alarms;
+
+import android.app.Fragment;
+import android.app.FragmentTransaction;
+import android.content.Context;
+import android.content.Intent;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Vibrator;
+import android.text.format.DateFormat;
+
+import com.android.deskclock.LabelDialogFragment;
+import com.android.deskclock.LogUtils;
+import com.android.deskclock.R;
+import com.android.deskclock.alarms.utils.DayOrderUtils;
+import com.android.deskclock.provider.Alarm;
+import com.android.deskclock.provider.AlarmInstance;
+
+import java.util.Calendar;
+
+/**
+ * Click handler for an alarm time item.
+ */
+public final class AlarmTimeClickHandler {
+
+    private static final String TAG = "AlarmTimeClickHandler";
+    private static final String KEY_PREVIOUS_DAY_MAP = "previousDayMap";
+
+    private final Fragment mFragment;
+    private final AlarmUpdateHandler mAlarmUpdateHandler;
+    private final ScrollHandler mScrollHandler;
+
+    private Alarm mSelectedAlarm;
+    private Bundle mPreviousDaysOfWeekMap;
+    private int[] mDayOrder;
+
+    public AlarmTimeClickHandler(Fragment fragment, Bundle savedState,
+            AlarmUpdateHandler alarmUpdateHandler, ScrollHandler smoothScrollController) {
+        mFragment = fragment;
+        mAlarmUpdateHandler = alarmUpdateHandler;
+        mScrollHandler = smoothScrollController;
+        if (savedState != null) {
+            mPreviousDaysOfWeekMap = savedState.getBundle(KEY_PREVIOUS_DAY_MAP);
+        }
+        if (mPreviousDaysOfWeekMap == null) {
+            mPreviousDaysOfWeekMap = new Bundle();
+        }
+        mDayOrder = DayOrderUtils.getDayOrder(fragment.getActivity());
+    }
+
+    public Alarm getSelectedAlarm() {
+        return mSelectedAlarm;
+    }
+
+    public void clearSelectedAlarm() {
+        mSelectedAlarm = null;
+    }
+
+    public void saveInstance(Bundle outState) {
+        outState.putBundle(KEY_PREVIOUS_DAY_MAP, mPreviousDaysOfWeekMap);
+    }
+
+    public void setAlarmEnabled(Alarm alarm, boolean newState) {
+        if (newState != alarm.enabled) {
+            alarm.enabled = newState;
+            mAlarmUpdateHandler.asyncUpdateAlarm(alarm, alarm.enabled, false);
+            LogUtils.d(TAG, "Updating alarm enabled state to " + newState);
+        }
+    }
+
+    public void setAlarmVibrationEnabled(Alarm alarm, boolean newState) {
+        if (newState != alarm.vibrate) {
+            alarm.vibrate = newState;
+            mAlarmUpdateHandler.asyncUpdateAlarm(alarm, false, true);
+            LogUtils.d(TAG, "Updating vibrate state to " + newState);
+
+            if (newState) {
+                // Buzz the vibrator to preview the alarm firing behavior.
+                final Context context = mFragment.getActivity();
+                final Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
+                if (v.hasVibrator()) {
+                    v.vibrate(300);
+                }
+            }
+        }
+    }
+
+    public void setAlarmRepeatEnabled(Alarm alarm, boolean isEnabled) {
+        final Calendar now = Calendar.getInstance();
+        final Calendar oldNextAlarmTime = alarm.getNextAlarmTime(now);
+        final String alarmId = String.valueOf(alarm.id);
+        if (isEnabled) {
+            // Set all previously set days
+            // or
+            // Set all days if no previous.
+            final int bitSet = mPreviousDaysOfWeekMap.getInt(alarmId);
+            alarm.daysOfWeek.setBitSet(bitSet);
+            if (!alarm.daysOfWeek.isRepeating()) {
+                alarm.daysOfWeek.setDaysOfWeek(true, mDayOrder);
+            }
+        } else {
+            // Remember the set days in case the user wants it back.
+            final int bitSet = alarm.daysOfWeek.getBitSet();
+            mPreviousDaysOfWeekMap.putInt(alarmId, bitSet);
+
+            // Remove all repeat days
+            alarm.daysOfWeek.clearAllDays();
+        }
+
+        // if the change altered the next scheduled alarm time, tell the user
+        final Calendar newNextAlarmTime = alarm.getNextAlarmTime(now);
+        final boolean popupToast = !oldNextAlarmTime.equals(newNextAlarmTime);
+
+        mAlarmUpdateHandler.asyncUpdateAlarm(alarm, popupToast, false);
+    }
+
+    public void setDayOfWeekEnabled(Alarm alarm, boolean checked, int index) {
+        final Calendar now = Calendar.getInstance();
+        final Calendar oldNextAlarmTime = alarm.getNextAlarmTime(now);
+        alarm.daysOfWeek.setDaysOfWeek(checked, mDayOrder[index]);
+        // if the change altered the next scheduled alarm time, tell the user
+        final Calendar newNextAlarmTime = alarm.getNextAlarmTime(now);
+        final boolean popupToast = !oldNextAlarmTime.equals(newNextAlarmTime);
+        mAlarmUpdateHandler.asyncUpdateAlarm(alarm, popupToast, false);
+    }
+
+    public void onDeleteClicked(Alarm alarm) {
+        mAlarmUpdateHandler.asyncDeleteAlarm(alarm);
+        LogUtils.d(TAG, "Deleting alarm.");
+    }
+
+    public void onClockClicked(Alarm alarm) {
+        mSelectedAlarm = alarm;
+        TimePickerCompat.showTimeEditDialog(mFragment, alarm,
+                DateFormat.is24HourFormat(mFragment.getActivity()));
+    }
+
+    public void dismissAlarmInstance(AlarmInstance alarmInstance) {
+        final Context context = mFragment.getActivity().getApplicationContext();
+        final Intent dismissIntent = AlarmStateManager.createStateChangeIntent(
+                context, AlarmStateManager.ALARM_DISMISS_TAG, alarmInstance,
+                AlarmInstance.PREDISMISSED_STATE);
+        context.startService(dismissIntent);
+        mAlarmUpdateHandler.showPredismissToast(alarmInstance);
+    }
+
+    public void onRingtoneClicked(Alarm alarm) {
+        mSelectedAlarm = alarm;
+        final Uri oldRingtone = Alarm.NO_RINGTONE_URI.equals(alarm.alert) ? null : alarm.alert;
+        final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
+        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, oldRingtone);
+        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
+        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false);
+        LogUtils.d(TAG, "Showing ringtone picker.");
+        mFragment.startActivityForResult(intent, R.id.request_code_ringtone);
+    }
+
+    public void onEditLabelClicked(Alarm alarm) {
+        final FragmentTransaction ft = mFragment.getFragmentManager().beginTransaction();
+        final Fragment prev = mFragment.getFragmentManager().findFragmentByTag("label_dialog");
+        if (prev != null) {
+            ft.remove(prev);
+        }
+        ft.addToBackStack(null);
+
+        // Create and show the dialog.
+        final LabelDialogFragment newFragment =
+                LabelDialogFragment.newInstance(alarm, alarm.label, mFragment.getTag());
+        newFragment.show(ft, "label_dialog");
+    }
+
+    public void processTimeSet(int hourOfDay, int minute) {
+        if (mSelectedAlarm == null) {
+            // If mSelectedAlarm is null then we're creating a new alarm.
+            final Alarm a = new Alarm();
+            a.hour = hourOfDay;
+            a.minutes = minute;
+            a.enabled = true;
+            mAlarmUpdateHandler.asyncAddAlarm(a);
+        } else {
+            mSelectedAlarm.hour = hourOfDay;
+            mSelectedAlarm.minutes = minute;
+            mSelectedAlarm.enabled = true;
+            mScrollHandler.setSmoothScrollStableId(mSelectedAlarm.id);
+            mAlarmUpdateHandler.asyncUpdateAlarm(mSelectedAlarm, true, false);
+            mSelectedAlarm = null;
+        }
+    }
+}
diff --git a/src/com/android/deskclock/alarms/AlarmUpdateHandler.java b/src/com/android/deskclock/alarms/AlarmUpdateHandler.java
new file mode 100644
index 0000000..12c7ed2
--- /dev/null
+++ b/src/com/android/deskclock/alarms/AlarmUpdateHandler.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2015 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.alarms;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.os.AsyncTask;
+import android.support.design.widget.Snackbar;
+import android.text.format.DateFormat;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.deskclock.AlarmUtils;
+import com.android.deskclock.R;
+import com.android.deskclock.events.Events;
+import com.android.deskclock.provider.Alarm;
+import com.android.deskclock.provider.AlarmInstance;
+import com.android.deskclock.widget.toast.SnackbarManager;
+
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * API for asynchronously mutating a single alarm.
+ */
+public final class AlarmUpdateHandler {
+
+    private final Context mAppContext;
+    private final ScrollHandler mScrollHandler;
+    private final View mSnackbarAnchor;
+
+    // For undo
+    private Alarm mDeletedAlarm;
+
+    public AlarmUpdateHandler(Context context, ScrollHandler scrollHandler,
+            ViewGroup snackbarAnchor) {
+        mAppContext = context.getApplicationContext();
+        mScrollHandler = scrollHandler;
+        mSnackbarAnchor = snackbarAnchor;
+    }
+
+    /**
+     * Adds a new alarm on the background.
+     *
+     * @param alarm The alarm to be added.
+     */
+    public void asyncAddAlarm(final Alarm alarm) {
+        final AsyncTask<Void, Void, AlarmInstance> updateTask =
+                new AsyncTask<Void, Void, AlarmInstance>() {
+                    @Override
+                    protected AlarmInstance doInBackground(Void... parameters) {
+                        if (alarm != null) {
+                            Events.sendAlarmEvent(R.string.action_create, R.string.label_deskclock);
+                            ContentResolver cr = mAppContext.getContentResolver();
+
+                            // Add alarm to db
+                            Alarm newAlarm = Alarm.addAlarm(cr, alarm);
+
+                            // Be ready to scroll to this alarm on UI later.
+                            mScrollHandler.setSmoothScrollStableId(newAlarm.id);
+
+                            // Create and add instance to db
+                            if (newAlarm.enabled) {
+                                return setupAlarmInstance(newAlarm);
+                            }
+                        }
+                        return null;
+                    }
+
+                    @Override
+                    protected void onPostExecute(AlarmInstance instance) {
+                        if (instance != null) {
+                            AlarmUtils.popAlarmSetSnackbar(
+                                    mSnackbarAnchor, instance.getAlarmTime().getTimeInMillis());
+                        }
+                    }
+                };
+        updateTask.execute();
+    }
+
+    /**
+     * Modifies an alarm on the background, and optionally show a toast when done.
+     *
+     * @param alarm       The alarm to be modified.
+     * @param popToast    whether or not a toast should be displayed when done.
+     * @param minorUpdate if true, don't affect any currently snoozed instances.
+     */
+    public void asyncUpdateAlarm(final Alarm alarm, final boolean popToast,
+            final boolean minorUpdate) {
+        final AsyncTask<Void, Void, AlarmInstance> updateTask =
+                new AsyncTask<Void, Void, AlarmInstance>() {
+                    @Override
+                    protected AlarmInstance doInBackground(Void... parameters) {
+                        Events.sendAlarmEvent(R.string.action_update, R.string.label_deskclock);
+                        ContentResolver cr = mAppContext.getContentResolver();
+
+                        // Update alarm
+                        Alarm.updateAlarm(cr, alarm);
+
+                        if (minorUpdate) {
+                            // just update the instance in the database and update notifications.
+                            final List<AlarmInstance> instanceList =
+                                    AlarmInstance.getInstancesByAlarmId(cr, alarm.id);
+                            for (AlarmInstance instance : instanceList) {
+                                // Make a copy of the existing instance
+                                final AlarmInstance newInstance = new AlarmInstance(instance);
+                                // Copy over minor change data to the instance; we don't know
+                                // exactly which minor field changed, so just copy them all.
+                                newInstance.mVibrate = alarm.vibrate;
+                                newInstance.mRingtone = alarm.alert;
+                                newInstance.mLabel = alarm.label;
+                                // Since we copied the mId of the old instance and the mId is used
+                                // as the primary key in the AlarmInstance table, this will replace
+                                // the existing instance.
+                                AlarmInstance.updateInstance(cr, newInstance);
+                                // Update the notification for this instance.
+                                AlarmNotifications.updateNotification(mAppContext, newInstance);
+                            }
+                            return null;
+                        }
+                        // Otherwise, this is a major update and we're going to re-create the alarm
+                        AlarmStateManager.deleteAllInstances(mAppContext, alarm.id);
+
+                        return alarm.enabled ? setupAlarmInstance(alarm) : null;
+                    }
+
+                    @Override
+                    protected void onPostExecute(AlarmInstance instance) {
+                        if (popToast && instance != null) {
+                            AlarmUtils.popAlarmSetSnackbar(
+                                    mSnackbarAnchor, instance.getAlarmTime().getTimeInMillis());
+                        }
+                    }
+                };
+        updateTask.execute();
+    }
+
+    /**
+     * Deletes an alarm on the background.
+     *
+     * @param alarm The alarm to be deleted.
+     */
+    public void asyncDeleteAlarm(final Alarm alarm) {
+        final AsyncTask<Void, Void, Boolean> deleteTask = new AsyncTask<Void, Void, Boolean>() {
+            @Override
+            protected Boolean doInBackground(Void... parameters) {
+                // Activity may be closed at this point , make sure data is still valid
+                if (alarm == null) {
+                    // Nothing to do here, just return.
+                    return false;
+                }
+                Events.sendAlarmEvent(R.string.action_delete, R.string.label_deskclock);
+                AlarmStateManager.deleteAllInstances(mAppContext, alarm.id);
+                return Alarm.deleteAlarm(mAppContext.getContentResolver(), alarm.id);
+            }
+
+            @Override
+            protected void onPostExecute(Boolean deleted) {
+                if (deleted) {
+                    mDeletedAlarm = alarm;
+                    showUndoBar();
+                }
+            }
+        };
+        deleteTask.execute();
+    }
+
+    /**
+     * Show a toast when an alarm is predismissed.
+     *
+     * @param instance Instance being predismissed.
+     */
+    public void showPredismissToast(AlarmInstance instance) {
+        final String time = DateFormat.getTimeFormat(mAppContext).format(
+                instance.getAlarmTime().getTime());
+        final String text = mAppContext.getString(R.string.alarm_is_dismissed, time);
+        SnackbarManager.show(Snackbar.make(mSnackbarAnchor, text, Snackbar.LENGTH_SHORT));
+    }
+
+    /**
+     * Hides any undo toast.
+     */
+    public void hideUndoBar() {
+        mDeletedAlarm = null;
+        SnackbarManager.dismiss();
+    }
+
+    private void showUndoBar() {
+        final Alarm deletedAlarm = mDeletedAlarm;
+        final Snackbar snackbar = Snackbar.make(mSnackbarAnchor,
+                mAppContext.getString(R.string.alarm_deleted), Snackbar.LENGTH_LONG)
+                .setAction(R.string.alarm_undo, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        mDeletedAlarm = null;
+                        asyncAddAlarm(deletedAlarm);
+                    }
+                });
+        SnackbarManager.show(snackbar);
+    }
+
+    private AlarmInstance setupAlarmInstance(Alarm alarm) {
+        final ContentResolver cr = mAppContext.getContentResolver();
+        AlarmInstance newInstance = alarm.createInstanceAfter(Calendar.getInstance());
+        newInstance = AlarmInstance.addInstance(cr, newInstance);
+        // Register instance to state manager
+        AlarmStateManager.registerInstance(mAppContext, newInstance, true);
+        return newInstance;
+    }
+}
diff --git a/src/com/android/deskclock/alarms/ScrollHandler.java b/src/com/android/deskclock/alarms/ScrollHandler.java
new file mode 100644
index 0000000..9ac00a5
--- /dev/null
+++ b/src/com/android/deskclock/alarms/ScrollHandler.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2015 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.alarms;
+
+/**
+ * API that handles scrolling when an alarm item is expanded/collapsed.
+ */
+public interface ScrollHandler {
+
+    /**
+     * Sets the stable id that view should be scrolled to. The view does not actually scroll yet.
+     */
+    void setSmoothScrollStableId(long stableId);
+
+    /**
+     * Perform smooth scroll to position.
+     */
+    void smoothScrollTo(int position);
+}
diff --git a/src/com/android/deskclock/alarms/TimePickerCompat.java b/src/com/android/deskclock/alarms/TimePickerCompat.java
new file mode 100644
index 0000000..38ff651
--- /dev/null
+++ b/src/com/android/deskclock/alarms/TimePickerCompat.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2015 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.alarms;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.os.Bundle;
+import android.text.format.DateFormat;
+import android.widget.TimePicker;
+
+import com.android.datetimepicker.time.RadialPickerLayout;
+import com.android.datetimepicker.time.TimePickerDialog;
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+import com.android.deskclock.provider.Alarm;
+
+import java.util.Calendar;
+
+/**
+ * Displays and handles callback for time picker UI.
+ */
+public final class TimePickerCompat {
+
+    /**
+     * Callback when a valid time is selected from UI.
+     */
+    public interface OnTimeSetListener {
+        void processTimeSet(int hourOfDay, int minute);
+    }
+
+    // Tag for timer picker fragment in FragmentManager.
+    private static final String FRAG_TAG_TIME_PICKER = "time_dialog";
+
+    // Do not instantiate.
+    private TimePickerCompat() {}
+
+    /**
+     * Pre-L implementation of timer picker UI.
+     */
+    public static class TimerPickerPreL extends TimePickerDialog {
+
+        public static TimerPickerPreL newInstance(final Fragment targetFragment, final int hour,
+                final int minutes, final boolean use24hourFormat) {
+            final TimerPickerPreL dialog = new TimerPickerPreL();
+            dialog.initialize(new OnTimeSetListener() {
+                @Override
+                public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) {
+                    ((TimePickerCompat.OnTimeSetListener) targetFragment)
+                            .processTimeSet(hourOfDay, minute);
+                }
+            }, hour, minutes, use24hourFormat);
+            dialog.setTargetFragment(targetFragment, 0);
+            dialog.setThemeDark(true);
+            return dialog;
+        }
+
+        @Override
+        public void onAttach(Activity activity) {
+            super.onAttach(activity);
+            if (getTargetFragment() instanceof TimePickerCompat.OnTimeSetListener) {
+                setOnTimeSetListener(new OnTimeSetListener() {
+                    @Override
+                    public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) {
+                        ((TimePickerCompat.OnTimeSetListener) getTargetFragment())
+                                .processTimeSet(hourOfDay, minute);
+                    }
+                });
+            }
+        }
+    }
+
+    /**
+     * Post-L implmenetation of timer picker UI.
+     */
+    public static class TimePickerPostL extends DialogFragment {
+
+        private Alarm mAlarm;
+        private android.app.TimePickerDialog.OnTimeSetListener mListener;
+
+        @Override
+        public Dialog onCreateDialog(Bundle savedInstanceState) {
+            final int hour, minute;
+            if (mAlarm == null) {
+                final Calendar c = Calendar.getInstance();
+                hour = c.get(Calendar.HOUR_OF_DAY);
+                minute = c.get(Calendar.MINUTE);
+            } else {
+                hour = mAlarm.hour;
+                minute = mAlarm.minutes;
+            }
+
+            return new android.app.TimePickerDialog(getActivity(), R.style.TimePickerTheme,
+                    mListener, hour, minute, DateFormat.is24HourFormat(getActivity()));
+        }
+
+        @Override
+        public void onAttach(Activity activity) {
+            super.onAttach(activity);
+            if (getTargetFragment() instanceof OnTimeSetListener) {
+                setOnTimeSetListener((OnTimeSetListener) getTargetFragment());
+            }
+        }
+
+        public void setOnTimeSetListener(final OnTimeSetListener listener) {
+            mListener = new android.app.TimePickerDialog.OnTimeSetListener() {
+                @Override
+                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+                    listener.processTimeSet(hourOfDay, minute);
+                }
+            };
+        }
+
+        public void setAlarm(Alarm alarm) {
+            mAlarm = alarm;
+        }
+    }
+
+    /**
+     * Show the time picker dialog for post-L devices.
+     * This is called from AlarmClockFragment to set alarm.
+     *
+     * @param targetFragment  The calling fragment (which is also a {@link OnTimeSetListener}),
+     *                        we use it as the target fragment of the time picker fragment, so later
+     *                        the latter can retrieve it and set it as its onTimeSetListener when
+     *                        the fragment is recreated.
+     * @param alarm           The clicked alarm, it can be null if user was clicking the fab.
+     * @param use24hourFormat Whether or not the time picker should use 24-hour format if supported.
+     */
+    public static void showTimeEditDialog(Fragment targetFragment, Alarm alarm,
+            boolean use24hourFormat) {
+        // Make sure the dialog isn't already added.
+        final FragmentManager manager = targetFragment.getFragmentManager();
+        final FragmentTransaction ft = manager.beginTransaction();
+        final Fragment prev = manager.findFragmentByTag(FRAG_TAG_TIME_PICKER);
+        if (prev != null) {
+            ft.remove(prev);
+        }
+        ft.commit();
+
+        if (Utils.isLOrLater()) {
+            final TimePickerPostL picker = new TimePickerPostL();
+            picker.setTargetFragment(targetFragment, 0);
+            picker.setOnTimeSetListener((OnTimeSetListener) targetFragment);
+            picker.setAlarm(alarm);
+            picker.show(manager, FRAG_TAG_TIME_PICKER);
+        } else {
+            final int hour, minutes;
+            if (alarm == null) {
+                hour = 0;
+                minutes = 0;
+            } else {
+                hour = alarm.hour;
+                minutes = alarm.minutes;
+            }
+            TimerPickerPreL picker = TimerPickerPreL.newInstance(targetFragment, hour,
+                    minutes, use24hourFormat);
+            if (!picker.isAdded()) {
+                picker.show(manager, FRAG_TAG_TIME_PICKER);
+            }
+        }
+    }
+}
diff --git a/src/com/android/deskclock/alarms/dataadapter/AlarmTimeAdapter.java b/src/com/android/deskclock/alarms/dataadapter/AlarmTimeAdapter.java
new file mode 100644
index 0000000..15d1f4e
--- /dev/null
+++ b/src/com/android/deskclock/alarms/dataadapter/AlarmTimeAdapter.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2015 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.alarms.dataadapter;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.os.Vibrator;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.deskclock.LogUtils;
+import com.android.deskclock.R;
+import com.android.deskclock.alarms.AlarmTimeClickHandler;
+import com.android.deskclock.alarms.ScrollHandler;
+import com.android.deskclock.provider.Alarm;
+import com.android.deskclock.provider.AlarmInstance;
+
+/**
+ * Data adapter for alarm time items.
+ */
+public final class AlarmTimeAdapter extends RecyclerView.Adapter<AlarmTimeViewHolder> {
+    private static final String TAG = "CwAlarm";
+    private static final String KEY_EXPANDED_ID = "expandedId";
+    private static final int VIEW_TYPE_ALARM_TIME_COLLAPSED = R.layout.alarm_time_collapsed;
+    private static final int VIEW_TYPE_ALARM_TIME_EXPANDED = R.layout.alarm_time_expanded;
+
+    private final Context mContext;
+    private final LayoutInflater mInflater;
+
+    private final AlarmTimeClickHandler mAlarmTimeClickHandler;
+    private final ScrollHandler mScrollHandler;
+
+    private final boolean mHasVibrator;
+    private int mExpandedPosition = -1;
+    private long mExpandedId = Alarm.INVALID_ID;
+    private Cursor mCursor;
+
+    public AlarmTimeAdapter(Context context, Bundle savedState,
+            AlarmTimeClickHandler alarmTimeClickHandler, ScrollHandler smoothScrollController) {
+        mContext = context;
+        mInflater = LayoutInflater.from(context);
+        mScrollHandler = smoothScrollController;
+        mAlarmTimeClickHandler = alarmTimeClickHandler;
+        mHasVibrator = ((Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE))
+                .hasVibrator();
+        if (savedState != null) {
+            mExpandedId = savedState.getLong(KEY_EXPANDED_ID, Alarm.INVALID_ID);
+        }
+
+        setHasStableIds(true);
+    }
+
+    @Override
+    public AlarmTimeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        final View v = mInflater.inflate(viewType, parent, false /* attachToRoot */);
+        if (viewType == VIEW_TYPE_ALARM_TIME_COLLAPSED) {
+            return new CollapsedAlarmViewHolder(v, mAlarmTimeClickHandler, this);
+        } else {
+            return new ExpandedAlarmViewHolder(v, mHasVibrator, mAlarmTimeClickHandler, this);
+        }
+    }
+
+    @Override
+    public void onViewRecycled(AlarmTimeViewHolder viewHolder) {
+        super.onViewRecycled(viewHolder);
+        viewHolder.clearData();
+    }
+
+    @Override
+    public void onBindViewHolder(AlarmTimeViewHolder viewHolder, int position) {
+        if (!mCursor.moveToPosition(position)) {
+            LogUtils.e(TAG, "Failed to bind alarm " + position);
+            return;
+        }
+        final Alarm alarm = new Alarm(mCursor);
+        final AlarmInstance alarmInstance = alarm.canPreemptivelyDismiss()
+                ? new AlarmInstance(mCursor, true /* joinedTable */) : null;
+        viewHolder.bindAlarm(mContext, alarm, alarmInstance);
+    }
+
+    @Override
+    public int getItemCount() {
+        return mCursor == null ? 0 : mCursor.getCount();
+    }
+
+    @Override
+    public long getItemId(int position) {
+        if (mCursor == null || !mCursor.moveToPosition(position)) {
+            return RecyclerView.NO_ID;
+        }
+        // TODO: Directly read id instead of instantiating Alarm object.
+        return new Alarm(mCursor).id;
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        final long stableId = getItemId(position);
+        return stableId != RecyclerView.NO_ID && stableId == mExpandedId
+                ? VIEW_TYPE_ALARM_TIME_EXPANDED : VIEW_TYPE_ALARM_TIME_COLLAPSED;
+    }
+
+    public void saveInstance(Bundle outState) {
+        outState.putLong(KEY_EXPANDED_ID, mExpandedId);
+    }
+
+    /**
+     * Request the UI to expand the alarm at selected position and scroll it into view.
+     */
+    public void expand(int position) {
+        final long stableId = getItemId(position);
+        if (mExpandedId == stableId) {
+            return;
+        }
+        mExpandedId = stableId;
+        mScrollHandler.smoothScrollTo(position);
+        if (mExpandedPosition >= 0) {
+            notifyItemChanged(mExpandedPosition);
+        }
+        mExpandedPosition = position;
+        notifyItemChanged(position);
+    }
+
+    public void collapse(int position) {
+        mExpandedId = Alarm.INVALID_ID;
+        mExpandedPosition = -1;
+        notifyItemChanged(position);
+    }
+
+    /**
+     * Swaps the adapter to a new data source.
+     *
+     * @param cursor A cursor generated by Cursor loader from {@link Alarm#getAlarmsCursorLoader}.
+     */
+    public void swapCursor(Cursor cursor) {
+        if (mCursor == cursor) {
+            return;
+        }
+        if (mCursor != null) {
+            mCursor.close();
+        }
+        mCursor = cursor;
+        notifyDataSetChanged();
+    }
+}
diff --git a/src/com/android/deskclock/alarms/dataadapter/AlarmTimeViewHolder.java b/src/com/android/deskclock/alarms/dataadapter/AlarmTimeViewHolder.java
new file mode 100644
index 0000000..b23eebb
--- /dev/null
+++ b/src/com/android/deskclock/alarms/dataadapter/AlarmTimeViewHolder.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2015 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.alarms.dataadapter;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.SwitchCompat;
+import android.view.View;
+import android.widget.CompoundButton;
+import android.widget.TextView;
+
+import com.android.deskclock.AlarmUtils;
+import com.android.deskclock.R;
+import com.android.deskclock.alarms.AlarmTimeClickHandler;
+import com.android.deskclock.provider.Alarm;
+import com.android.deskclock.provider.AlarmInstance;
+import com.android.deskclock.widget.TextTime;
+
+/**
+ * Abstract ViewHolder for alarm time items.
+ */
+public abstract class AlarmTimeViewHolder extends RecyclerView.ViewHolder {
+
+    private static final float CLOCK_ENABLED_ALPHA = 1f;
+    private static final float CLOCK_DISABLED_ALPHA = 0.69f;
+
+    public final TextTime clock;
+    public final CompoundButton onoff;
+    public final View arrow;
+    public final View preemptiveDismissContainer;
+    public final TextView preemptiveDismissButton;
+
+    protected Alarm mAlarm;
+    protected AlarmInstance mAlarmInstance;
+
+    private final AlarmTimeClickHandler mAlarmTimeClickHandler;
+
+    public AlarmTimeViewHolder(View itemView, AlarmTimeClickHandler alarmTimeClickHandler) {
+        super(itemView);
+        mAlarmTimeClickHandler = alarmTimeClickHandler;
+        clock = (TextTime) itemView.findViewById(R.id.digital_clock);
+        onoff = (CompoundButton) itemView.findViewById(R.id.onoff);
+        arrow = itemView.findViewById(R.id.arrow);
+        preemptiveDismissContainer = itemView.findViewById(R.id.preemptive_dismiss_container);
+        preemptiveDismissButton =
+                (TextView) itemView.findViewById(R.id.preemptive_dismiss_button);
+        preemptiveDismissButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                mAlarmTimeClickHandler.dismissAlarmInstance(mAlarmInstance);
+            }
+        });
+        onoff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+                mAlarmTimeClickHandler.setAlarmEnabled(mAlarm, checked);
+            }
+        });
+    }
+
+    public void setData(Alarm alarm, AlarmInstance alarmInstance) {
+        mAlarmInstance = alarmInstance;
+        mAlarm = alarm;
+    }
+
+    public void clearData() {
+        mAlarmInstance = null;
+        mAlarm = null;
+    }
+
+    /**
+     * Binds the view with {@link Alarm} data.
+     */
+    public abstract void bindAlarm(Context context, Alarm alarm, AlarmInstance alarmInstance);
+
+    protected void bindOnOffSwitch(Context context, Alarm alarm) {
+        onoff.setChecked(alarm.enabled);
+        ((SwitchCompat) onoff).setTextOn(context.getString(R.string.on_switch));
+        ((SwitchCompat) onoff).setTextOff(context.getString(R.string.off_switch));
+    }
+
+    protected void bindClock(Context context, Alarm alarm) {
+        clock.setAlpha(alarm.enabled ? CLOCK_ENABLED_ALPHA : CLOCK_DISABLED_ALPHA);
+        clock.setFormat(context);
+        clock.setTime(alarm.hour, alarm.minutes);
+    }
+
+    protected boolean bindPreemptiveDismissButton(Context context, Alarm alarm,
+            AlarmInstance alarmInstance) {
+        boolean canBind = alarm.canPreemptivelyDismiss() && alarmInstance != null;
+        if (canBind) {
+            preemptiveDismissContainer.setVisibility(View.VISIBLE);
+            final String dismissText = alarm.instanceState == AlarmInstance.SNOOZE_STATE
+                    ? context.getString(R.string.alarm_alert_snooze_until,
+                    AlarmUtils.getAlarmText(context, alarmInstance, false))
+                    : context.getString(R.string.alarm_alert_dismiss_now_text);
+            preemptiveDismissButton.setText(dismissText);
+        } else {
+            preemptiveDismissContainer.setVisibility(View.GONE);
+        }
+        return canBind;
+    }
+}
diff --git a/src/com/android/deskclock/alarms/dataadapter/CollapsedAlarmViewHolder.java b/src/com/android/deskclock/alarms/dataadapter/CollapsedAlarmViewHolder.java
new file mode 100644
index 0000000..6db8878
--- /dev/null
+++ b/src/com/android/deskclock/alarms/dataadapter/CollapsedAlarmViewHolder.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2015 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.alarms.dataadapter;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+import com.android.deskclock.alarms.AlarmTimeClickHandler;
+import com.android.deskclock.provider.Alarm;
+import com.android.deskclock.provider.AlarmInstance;
+
+import java.util.Calendar;
+
+/**
+ * A ViewHolder containing views for an alarm item in collapsed stated.
+ */
+public final class CollapsedAlarmViewHolder extends AlarmTimeViewHolder {
+
+    public final TextView alarmLabel;
+    public final TextView daysOfWeek;
+    public final TextView upcomingInstanceLabel;
+    public final View hairLine;
+
+    public CollapsedAlarmViewHolder(View itemView,
+            final AlarmTimeClickHandler alarmTimeClickHandler,
+            final AlarmTimeAdapter alarmTimeAdapter) {
+        super(itemView, alarmTimeClickHandler);
+        alarmLabel = (TextView) itemView.findViewById(R.id.label);
+        daysOfWeek = (TextView) itemView.findViewById(R.id.days_of_week);
+        upcomingInstanceLabel = (TextView) itemView.findViewById(R.id.upcoming_instance_label);
+        hairLine = itemView.findViewById(R.id.hairline);
+
+        // Expand handler
+        itemView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                alarmTimeAdapter.expand(getAdapterPosition());
+            }
+        });
+        alarmLabel.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                alarmTimeAdapter.expand(getAdapterPosition());
+            }
+        });
+        arrow.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                alarmTimeAdapter.expand(getAdapterPosition());
+            }
+        });
+        // Edit time handler
+        clock.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                alarmTimeClickHandler.onClockClicked(mAlarm);
+                alarmTimeAdapter.expand(getAdapterPosition());
+            }
+        });
+    }
+
+    @Override
+    public void bindAlarm(Context context, Alarm alarm, AlarmInstance alarmInstance) {
+        setData(alarm, alarmInstance);
+        bindOnOffSwitch(context, alarm);
+        bindClock(context, alarm);
+        bindRepeatText(context, alarm);
+        bindReadOnlyLabel(context, alarm);
+        bindUpcomingInstance(context, alarm);
+        boolean boundPreemptiveDismiss =
+                bindPreemptiveDismissButton(context, alarm, alarmInstance);
+        hairLine.setVisibility(boundPreemptiveDismiss ? View.GONE : View.VISIBLE);
+        itemView.setContentDescription(clock.getContentDescription() + " " +
+                alarm.getLabelOrDefault(context));
+    }
+
+    private void bindReadOnlyLabel(Context context, Alarm alarm) {
+        if (alarm.label != null && alarm.label.length() != 0) {
+            alarmLabel.setText(alarm.label);
+            alarmLabel.setVisibility(View.VISIBLE);
+            alarmLabel.setContentDescription(context.getString(R.string.label_description)
+                    + " " + alarm.label);
+        } else {
+            alarmLabel.setVisibility(View.GONE);
+        }
+    }
+
+    private void bindRepeatText(Context context, Alarm alarm) {
+        final String daysOfWeekText =
+                alarm.daysOfWeek.toString(context, Utils.getFirstDayOfWeek(context));
+        if (!TextUtils.isEmpty(daysOfWeekText)) {
+            daysOfWeek.setText(daysOfWeekText);
+            daysOfWeek.setContentDescription(alarm.daysOfWeek.toAccessibilityString(
+                    context, Utils.getFirstDayOfWeek(context)));
+            daysOfWeek.setVisibility(View.VISIBLE);
+        } else {
+            daysOfWeek.setVisibility(View.GONE);
+        }
+    }
+
+    private void bindUpcomingInstance(Context context, Alarm alarm) {
+        if (alarm.daysOfWeek.isRepeating()) {
+            upcomingInstanceLabel.setVisibility(View.GONE);
+        } else {
+            upcomingInstanceLabel.setVisibility(View.VISIBLE);
+            final String labelText = Alarm.isTomorrow(alarm, Calendar.getInstance()) ?
+                    context.getString(R.string.alarm_tomorrow) :
+                    context.getString(R.string.alarm_today);
+            upcomingInstanceLabel.setText(labelText);
+        }
+    }
+}
diff --git a/src/com/android/deskclock/alarms/dataadapter/ExpandedAlarmViewHolder.java b/src/com/android/deskclock/alarms/dataadapter/ExpandedAlarmViewHolder.java
new file mode 100644
index 0000000..c4c9bb0
--- /dev/null
+++ b/src/com/android/deskclock/alarms/dataadapter/ExpandedAlarmViewHolder.java
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2015 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.alarms.dataadapter;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+import com.android.deskclock.alarms.AlarmTimeClickHandler;
+import com.android.deskclock.alarms.utils.DayOrderUtils;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.provider.Alarm;
+import com.android.deskclock.provider.AlarmInstance;
+import com.android.deskclock.provider.DaysOfWeek;
+
+import java.util.HashSet;
+
+/**
+ * A ViewHolder containing views for an alarm item in expanded stated.
+ */
+public final class ExpandedAlarmViewHolder extends AlarmTimeViewHolder {
+
+    public final CheckBox repeat;
+    public final TextView editLabel;
+    public final LinearLayout repeatDays;
+    public final CompoundButton[] dayButtons = new CompoundButton[7];
+    public final CheckBox vibrate;
+    public final TextView ringtone;
+    public final Button delete;
+    public final View preemptiveDismissContainer;
+    public final TextView preemptiveDismissButton;
+
+    private final boolean mHasVibrator;
+    private final int[] mDayOrder;
+
+    public ExpandedAlarmViewHolder(View itemView,
+            final boolean hasVibrator,
+            final AlarmTimeClickHandler alarmTimeClickHandler,
+            final AlarmTimeAdapter alarmTimeAdapter) {
+        super(itemView, alarmTimeClickHandler);
+        final Context context = itemView.getContext();
+        mHasVibrator = hasVibrator;
+        mDayOrder = DayOrderUtils.getDayOrder(context);
+        final Resources.Theme theme = context.getTheme();
+        int[] attrs = new int[] { android.R.attr.selectableItemBackground };
+
+        final TypedArray typedArray = theme.obtainStyledAttributes(attrs);
+        final LayerDrawable background = new LayerDrawable(new Drawable[] {
+                context.getResources().getDrawable(R.drawable.alarm_background_expanded),
+                typedArray.getDrawable(0) });
+        itemView.setBackground(background);
+        typedArray.recycle();
+
+        final int firstDay = Utils.getZeroIndexedFirstDayOfWeek(context);
+
+        delete = (Button) itemView.findViewById(R.id.delete);
+
+        repeat = (CheckBox) itemView.findViewById(R.id.repeat_onoff);
+        vibrate = (CheckBox) itemView.findViewById(R.id.vibrate_onoff);
+        ringtone = (TextView) itemView.findViewById(R.id.choose_ringtone);
+        editLabel = (TextView) itemView.findViewById(R.id.edit_label);
+        repeatDays = (LinearLayout) itemView.findViewById(R.id.repeat_days);
+
+        // Build button for each day.
+        LayoutInflater mInflater = LayoutInflater.from(context);
+        for (int i = 0; i < DaysOfWeek.DAYS_IN_A_WEEK; i++) {
+            final CompoundButton dayButton = (CompoundButton) mInflater.inflate(
+                    R.layout.day_button, repeatDays, false /* attachToRoot */);
+            dayButton.setText(Utils.getShortWeekday(i, firstDay));
+            dayButton.setContentDescription(Utils.getLongWeekday(i, firstDay));
+            repeatDays.addView(dayButton);
+            dayButtons[i] = dayButton;
+        }
+
+        preemptiveDismissContainer = itemView.findViewById(R.id.preemptive_dismiss_container);
+        preemptiveDismissButton =
+                (TextView) itemView.findViewById(R.id.preemptive_dismiss_button);
+
+        // Collapse handler
+        itemView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                alarmTimeAdapter.collapse(getAdapterPosition());
+            }
+        });
+        arrow.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                alarmTimeAdapter.collapse(getAdapterPosition());
+            }
+        });
+        // Edit time handler
+        clock.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                alarmTimeClickHandler.onClockClicked(mAlarm);
+            }
+        });
+        // Edit label handler
+        editLabel.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                alarmTimeClickHandler.onEditLabelClicked(mAlarm);
+            }
+        });
+        // Vibrator checkbox handler
+        vibrate.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                alarmTimeClickHandler.setAlarmVibrationEnabled(mAlarm, ((CheckBox) v).isChecked());
+            }
+        });
+        // Ringtone editor handler
+        ringtone.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                alarmTimeClickHandler.onRingtoneClicked(mAlarm);
+            }
+        });
+        // Delete alarm handler
+        delete.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                alarmTimeClickHandler.onDeleteClicked(mAlarm);
+                v.announceForAccessibility(context.getString(R.string.alarm_deleted));
+            }
+        });
+        // Repeat checkbox handler
+        repeat.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                final boolean checked = ((CheckBox) view).isChecked();
+                alarmTimeClickHandler.setAlarmRepeatEnabled(mAlarm, checked);
+            }
+        });
+        // Day buttons handler
+        for (int i = 0; i < DaysOfWeek.DAYS_IN_A_WEEK; i++) {
+            final int buttonIndex = i;
+            dayButtons[i].setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    final boolean isChecked = ((CompoundButton) view).isChecked();
+                    alarmTimeClickHandler.setDayOfWeekEnabled(mAlarm, isChecked, buttonIndex);
+                }
+            });
+        }
+    }
+
+    @Override
+    public void bindAlarm(Context context, Alarm alarm, AlarmInstance alarmInstance) {
+        setData(alarm, alarmInstance);
+        bindOnOffSwitch(context, alarm);
+        bindClock(context, alarm);
+        bindEditLabel(alarm);
+        bindDaysOfWeekButtons(alarm);
+        bindVibrator(alarm);
+        bindRingtoneTitle(context, alarm);
+        bindPreemptiveDismissButton(context, alarm, alarmInstance);
+    }
+
+    private void bindRingtoneTitle(Context context, Alarm alarm) {
+        final String title = DataModel.getDataModel().getAlarmRingtoneTitle(alarm.alert);
+        final String description = context.getString(R.string.ringtone_description);
+
+        ringtone.setText(title);
+        ringtone.setContentDescription(description + " " + title);
+    }
+
+    private void bindDaysOfWeekButtons(Alarm alarm) {
+        HashSet<Integer> setDays = alarm.daysOfWeek.getSetDays();
+        for (int i = 0; i < DaysOfWeek.DAYS_IN_A_WEEK; i++) {
+            final CompoundButton dayButton = dayButtons[i];
+            if (setDays.contains(mDayOrder[i])) {
+                dayButton.setChecked(true);
+                dayButton.setTextColor(Utils.getCurrentHourColor());
+            } else {
+                dayButton.setChecked(false);
+                dayButton.setTextColor(itemView.getContext().getResources().getColor(R.color
+                        .white));
+            }
+        }
+        if (alarm.daysOfWeek.isRepeating()) {
+            repeat.setChecked(true);
+            repeatDays.setVisibility(View.VISIBLE);
+        } else {
+            repeat.setChecked(false);
+            repeatDays.setVisibility(View.GONE);
+        }
+    }
+
+    private void bindEditLabel(Alarm alarm) {
+        if (alarm.label != null && alarm.label.length() > 0) {
+            editLabel.setText(alarm.label);
+        } else {
+            editLabel.setText(R.string.label);
+        }
+    }
+
+    private void bindVibrator(Alarm alarm) {
+        if (!mHasVibrator) {
+            vibrate.setVisibility(View.INVISIBLE);
+        } else {
+            vibrate.setVisibility(View.VISIBLE);
+            vibrate.setChecked(alarm.vibrate);
+        }
+    }
+}
diff --git a/src/com/android/deskclock/alarms/utils/DayOrderUtils.java b/src/com/android/deskclock/alarms/utils/DayOrderUtils.java
new file mode 100644
index 0000000..6832ad0
--- /dev/null
+++ b/src/com/android/deskclock/alarms/utils/DayOrderUtils.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2015 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.alarms.utils;
+
+import android.content.Context;
+
+import com.android.deskclock.Utils;
+import com.android.deskclock.provider.DaysOfWeek;
+
+import java.util.Calendar;
+
+/**
+ * Contains information about the order that days of the week are shown in the UI.
+ */
+public final class DayOrderUtils {
+
+    // A reference used to create mDayOrder
+    private static final int[] DAY_ORDER = {
+            Calendar.SUNDAY,
+            Calendar.MONDAY,
+            Calendar.TUESDAY,
+            Calendar.WEDNESDAY,
+            Calendar.THURSDAY,
+            Calendar.FRIDAY,
+            Calendar.SATURDAY,
+    };
+
+    public static int[] getDayOrder(Context context) {
+        // Value from preferences corresponds to Calendar.<WEEKDAY> value
+        // -1 in order to correspond to DAY_ORDER indexing
+        final int startDay = Utils.getZeroIndexedFirstDayOfWeek(context);
+        final int[] dayOrder = new int[DaysOfWeek.DAYS_IN_A_WEEK];
+
+        for (int i = 0; i < DaysOfWeek.DAYS_IN_A_WEEK; ++i) {
+            dayOrder[i] = DAY_ORDER[(startDay + i) % DaysOfWeek.DAYS_IN_A_WEEK];
+        }
+        return dayOrder;
+    }
+
+}
diff --git a/src/com/android/deskclock/data/AlarmModel.java b/src/com/android/deskclock/data/AlarmModel.java
new file mode 100644
index 0000000..750b72b
--- /dev/null
+++ b/src/com/android/deskclock/data/AlarmModel.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Handler;
+import android.provider.Settings;
+import android.util.ArrayMap;
+
+import com.android.deskclock.LogUtils;
+import com.android.deskclock.R;
+import com.android.deskclock.provider.Alarm;
+
+import java.util.Map;
+
+/**
+ * All alarm data will eventually be accessed via this model.
+ */
+final class AlarmModel {
+
+    private final Context mContext;
+
+    /** The model from which settings are fetched. */
+    private final SettingsModel mSettingsModel;
+
+    /** The uri of the default ringtone to play for new alarms; mirrors last selection. */
+    private Uri mDefaultAlarmRingtoneUri;
+
+    /** Maps ringtone uri to ringtone title; looking up a title from scratch is expensive. */
+    private final Map<Uri, String> mRingtoneTitles = new ArrayMap<>(8);
+
+    AlarmModel(Context context, SettingsModel settingsModel) {
+        mContext = context;
+        mSettingsModel = settingsModel;
+
+        // Clear caches affected by system settings when system settings change.
+        final ContentResolver cr = mContext.getContentResolver();
+        final ContentObserver observer = new SystemAlarmAlertChangeObserver();
+        cr.registerContentObserver(Settings.System.DEFAULT_ALARM_ALERT_URI, false, observer);
+    }
+
+    Uri getDefaultAlarmRingtoneUri() {
+        if (mDefaultAlarmRingtoneUri == null) {
+            mDefaultAlarmRingtoneUri = mSettingsModel.getDefaultAlarmRingtoneUri();
+        }
+
+        return mDefaultAlarmRingtoneUri;
+    }
+
+    void setDefaultAlarmRingtoneUri(Uri uri) {
+        mSettingsModel.setDefaultAlarmRingtoneUri(uri);
+        mDefaultAlarmRingtoneUri = uri;
+    }
+
+    String getAlarmRingtoneTitle(Uri uri) {
+        // Special case: no ringtone has a title of "Silent".
+        if (Alarm.NO_RINGTONE_URI.equals(uri)) {
+            return mContext.getString(R.string.silent_ringtone_title);
+        }
+
+        // Check the cache.
+        String title = mRingtoneTitles.get(uri);
+
+        if (title == null) {
+            // This is slow because a media player is created during Ringtone object creation.
+            final Ringtone ringtone = RingtoneManager.getRingtone(mContext, uri);
+            if (ringtone == null) {
+                LogUtils.e("No ringtone for uri: %s", uri);
+                return mContext.getString(R.string.unknown_ringtone_title);
+            }
+
+            // Cache the title for later use.
+            title = ringtone.getTitle(mContext);
+            mRingtoneTitles.put(uri, title);
+        }
+        return title;
+    }
+
+    /**
+     * This receiver is notified when system settings change. Cached information built on
+     * those system settings must be cleared.
+     */
+    private final class SystemAlarmAlertChangeObserver extends ContentObserver {
+
+        private SystemAlarmAlertChangeObserver() {
+            super(new Handler());
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            super.onChange(selfChange);
+
+            LogUtils.i("Detected change to system default alarm ringtone; clearing caches");
+
+            mDefaultAlarmRingtoneUri = null;
+
+            // Titles such as "Default ringtone (Oxygen)" are wrong after default ringtone changes.
+            mRingtoneTitles.clear();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/City.java b/src/com/android/deskclock/data/City.java
new file mode 100644
index 0000000..a5fd850
--- /dev/null
+++ b/src/com/android/deskclock/data/City.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import java.text.Collator;
+import java.util.Comparator;
+import java.util.TimeZone;
+
+/**
+ * A read-only domain object representing a city of the world and associated time information. It
+ * also contains static comparators that can be instantiated to order cities in common sort orders.
+ */
+public final class City {
+
+    /** A unique identifier for the city. */
+    private final String mId;
+
+    /** An optional numeric index used to order cities for display; -1 if no such index exists. */
+    private final int mIndex;
+
+    /** An index string used to order cities for display. */
+    private final String mIndexString;
+
+    /** The display name of the city. */
+    private final String mName;
+
+    /** The phonetic name of the city used to order cities for display. */
+    private final String mPhoneticName;
+
+    /** The {@link TimeZone#getID() id} of the timezone in which the city is located. */
+    private final String mTimeZoneId;
+
+    /** The TimeZone corresponding to the {@link #mTimeZoneId}. */
+    private final TimeZone mTimeZone;
+
+    /** A cached upper case form of the {@link #mName} used in case-insensitive name comparisons. */
+    private String mNameUpperCase;
+
+    City(String id, int index, String indexString, String name, String phoneticName,
+            String timeZoneId) {
+        mId = id;
+        mIndex = index;
+        mIndexString = indexString;
+        mName = name;
+        mPhoneticName = phoneticName;
+        mTimeZoneId = timeZoneId;
+        mTimeZone = TimeZone.getTimeZone(mTimeZoneId);
+    }
+
+    public String getId() { return mId; }
+    public int getIndex() { return mIndex; }
+    public String getName() { return mName; }
+    public TimeZone getTimeZone() { return mTimeZone; }
+    public String getTimeZoneId() { return mTimeZoneId; }
+    public String getIndexString() { return mIndexString; }
+    public String getPhoneticName() { return mPhoneticName; }
+
+    public String getNameUpperCase() {
+        if (mNameUpperCase == null) {
+            mNameUpperCase = mName.toUpperCase();
+        }
+        return mNameUpperCase;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("City {id=%s, index=%d, indexString=%s, name=%s, phonetic=%s, tz=%s}",
+                mId, mIndex, mIndexString, mName, mPhoneticName, mTimeZoneId);
+    }
+
+    /**
+     * Orders by:
+     *
+     * <ol>
+     *     <li>UTC offset of {@link #getTimeZone() timezone}</li>
+     *     <li>{@link #getIndex() numeric index}</li>
+     *     <li>{@link #getIndexString()} alphabetic index}</li>
+     *     <li>{@link #getPhoneticName() phonetic name}</li>
+     * </ol>
+     */
+    public static final class UtcOffsetComparator implements Comparator<City> {
+
+        private final Comparator<City> mDelegate1 = new UtcOffsetIndexComparator();;
+
+        private final Comparator<City> mDelegate2 = new NameComparator();
+
+        public int compare(City c1, City c2) {
+            int result = mDelegate1.compare(c1, c2);
+
+            if (result == 0) {
+                result = mDelegate2.compare(c1, c2);
+            }
+
+            return result;
+        }
+    }
+
+    /**
+     * Orders by:
+     *
+     * <ol>
+     *     <li>UTC offset of {@link #getTimeZone() timezone}</li>
+     * </ol>
+     */
+    public static final class UtcOffsetIndexComparator implements Comparator<City> {
+
+        // Snapshot the current time when the Comparator is created to obtain consistent offsets.
+        private final long now = System.currentTimeMillis();
+
+        public int compare(City c1, City c2) {
+            final int utcOffset1 = c1.getTimeZone().getOffset(now);
+            final int utcOffset2 = c2.getTimeZone().getOffset(now);
+            return Integer.compare(utcOffset1, utcOffset2);
+        }
+    }
+
+    /**
+     * This comparator sorts using the city fields that influence natural name sort order:
+     *
+     * <ol>
+     *     <li>{@link #getIndex() numeric index}</li>
+     *     <li>{@link #getIndexString()} alphabetic index}</li>
+     *     <li>{@link #getPhoneticName() phonetic name}</li>
+     * </ol>
+     */
+    public static final class NameComparator implements Comparator<City> {
+
+        private final Comparator<City> mDelegate = new NameIndexComparator();
+
+        // Locale-sensitive comparator for phonetic names.
+        private final Collator mNameCollator = Collator.getInstance();
+
+        @Override
+        public int compare(City c1, City c2) {
+            int result = mDelegate.compare(c1, c2);
+
+            if (result == 0) {
+                result = mNameCollator.compare(c1.getPhoneticName(), c2.getPhoneticName());
+            }
+
+            return result;
+        }
+    }
+
+    /**
+     * Orders by:
+     *
+     * <ol>
+     *     <li>{@link #getIndex() numeric index}</li>
+     *     <li>{@link #getIndexString()} alphabetic index}</li>
+     * </ol>
+     */
+    public static final class NameIndexComparator implements Comparator<City> {
+
+        // Locale-sensitive comparator for index strings.
+        private final Collator mNameCollator = Collator.getInstance();
+
+        @Override
+        public int compare(City c1, City c2) {
+            int result = Integer.compare(c1.getIndex(), c2.getIndex());
+
+            if (result == 0) {
+                result = mNameCollator.compare(c1.getIndexString(), c2.getIndexString());
+            }
+
+            return result;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/CityDAO.java b/src/com/android/deskclock/data/CityDAO.java
new file mode 100644
index 0000000..544bc29
--- /dev/null
+++ b/src/com/android/deskclock/data/CityDAO.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.preference.PreferenceManager;
+import android.support.annotation.VisibleForTesting;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * This class encapsulates the transfer of data between {@link City} domain objects and their
+ * permanent storage in {@link Resources} and {@link SharedPreferences}.
+ */
+final class CityDAO {
+
+    // Regex to match natural index values when parsing city names.
+    private static final Pattern INDEX_REGEX = Pattern.compile("\\d+");
+
+    // Key to a preference that stores the number of selected cities.
+    private static final String NUMBER_OF_CITIES = "number_of_cities";
+
+    // Prefix for a key to a preference that stores the id of a selected city.
+    private static final String CITY_ID = "city_id_";
+
+    // Lazily instantiated and cached for the life of the application.
+    private static SharedPreferences sPrefs;
+
+    private CityDAO() {}
+
+    /**
+     * @param cityMap maps city ids to city instances
+     * @return the list of city ids selected for display by the user
+     */
+    public static List<City> getSelectedCities(Context context, Map<String, City> cityMap) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final int size = prefs.getInt(NUMBER_OF_CITIES, 0);
+        final List<City> selectedCities = new ArrayList<>(size);
+
+        for (int i = 0; i < size; i++) {
+            final String id = prefs.getString(CITY_ID + i, null);
+            final City city = cityMap.get(id);
+            if (city != null) {
+                selectedCities.add(city);
+            }
+        }
+
+        return selectedCities;
+    }
+
+    /**
+     * @param cities the collection of cities selected for display by the user
+     */
+    public static void setSelectedCities(Context context, Collection<City> cities) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final SharedPreferences.Editor editor = prefs.edit();
+        editor.putInt(NUMBER_OF_CITIES, cities.size());
+
+        int count = 0;
+        for (City city : cities) {
+            editor.putString(CITY_ID + count, city.getId());
+            count++;
+        }
+
+        editor.apply();
+    }
+
+    /**
+     * @return the domain of cities from which the user may choose a world clock
+     */
+    public static Map<String, City> getCities(Context context) {
+        final Resources resources = context.getResources();
+        final String[] ids = resources.getStringArray(R.array.cities_id);
+        final String[] names = resources.getStringArray(R.array.cities_names);
+        final String[] timezones = resources.getStringArray(R.array.cities_tz);
+
+        if (ids.length != names.length) {
+            final String locale = Locale.getDefault().toString();
+            final String format = "id count (%d) != name count (%d) for locale %s";
+            final String message = String.format(format, ids.length, names.length, locale);
+            throw new IllegalStateException(message);
+        }
+
+        if (ids.length != timezones.length) {
+            final String locale = Locale.getDefault().toString();
+            final String format = "id count (%d) != timezone count (%d) for locale %s";
+            final String message = String.format(format, ids.length, timezones.length, locale);
+            throw new IllegalStateException(message);
+        }
+
+        final Map<String, City> cities = new ArrayMap<>(ids.length);
+        for (int i = 0; i < ids.length; i++) {
+            final String id = ids[i];
+            if ("C0".equals(id)) {
+                continue;
+            }
+            cities.put(id, createCity(id, names[i], timezones[i]));
+        }
+        return Collections.unmodifiableMap(cities);
+    }
+
+    /**
+     * @param id unique identifier for city
+     * @param formattedName "[index string]=[name]" or "[index string]=[name]:[phonetic name]",
+     *                      If [index string] is empty, we use the first character of name as index,
+     *                      If phonetic name is empty, we use the name itself as phonetic.
+     * @param timeZoneId identifies the timezone in which the city is located
+     */
+    @VisibleForTesting
+    static City createCity(String id, String formattedName, String timeZoneId) {
+        final String[] parts = formattedName.split("[=:]");
+        final String name = parts[1];
+        // Extract index string from input, use the first character of city name as index string
+        // if it's not explicitly provided.
+        final String indexString = TextUtils.isEmpty(parts[0])
+                ? String.valueOf(name.charAt(0)) : parts[0];
+        final String phoneticName = parts.length == 3 ? parts[2] : name;
+
+        final Matcher matcher = INDEX_REGEX.matcher(indexString);
+        final int index = matcher.find() ? Integer.parseInt(matcher.group()) : -1;
+
+        return new City(id, index, indexString, name, phoneticName, timeZoneId);
+    }
+
+    private static SharedPreferences getSharedPreferences(Context context) {
+        if (sPrefs == null) {
+            sPrefs = Utils.getDefaultSharedPreferences(context.getApplicationContext());
+        }
+
+        return sPrefs;
+    }
+}
diff --git a/src/com/android/deskclock/data/CityModel.java b/src/com/android/deskclock/data/CityModel.java
new file mode 100644
index 0000000..5358672
--- /dev/null
+++ b/src/com/android/deskclock/data/CityModel.java
@@ -0,0 +1,272 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.preference.PreferenceManager;
+
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+import com.android.deskclock.data.DataModel.CitySort;
+import com.android.deskclock.settings.SettingsActivity;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
+
+/**
+ * All {@link City} data is accessed via this model.
+ */
+final class CityModel {
+
+    private final Context mContext;
+
+    /** The model from which settings are fetched. */
+    private final SettingsModel mSettingsModel;
+
+    /**
+     * Retain a hard reference to the shared preference observer to prevent it from being garbage
+     * collected. See {@link SharedPreferences#registerOnSharedPreferenceChangeListener} for detail.
+     */
+    private final OnSharedPreferenceChangeListener mPreferenceListener = new PreferenceListener();
+
+    /** Clears data structures containing data that is locale-sensitive. */
+    private final BroadcastReceiver mLocaleChangedReceiver = new LocaleChangedReceiver();
+
+    /** Maps city ID to city instance. */
+    private Map<String, City> mCityMap;
+
+    /** List of city instances in display order. */
+    private List<City> mAllCities;
+
+    /** List of selected city instances in display order. */
+    private List<City> mSelectedCities;
+
+    /** List of unselected city instances in display order. */
+    private List<City> mUnselectedCities;
+
+    /** A city instance representing the home timezone of the user. */
+    private City mHomeCity;
+
+    CityModel(Context context, SettingsModel settingsModel) {
+        mContext = context;
+        mSettingsModel = settingsModel;
+
+        // Clear caches affected by locale when locale changes.
+        final IntentFilter localeBroadcastFilter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
+        mContext.registerReceiver(mLocaleChangedReceiver, localeBroadcastFilter);
+
+        // Clear caches affected by preferences when preferences change.
+        final SharedPreferences prefs = Utils.getDefaultSharedPreferences(mContext);
+        prefs.registerOnSharedPreferenceChangeListener(mPreferenceListener);
+    }
+
+    /**
+     * @return a list of all cities in their display order
+     */
+    List<City> getAllCities() {
+        if (mAllCities == null) {
+            // Create a set of selections to identify the unselected cities.
+            final List<City> selected = new ArrayList<>(getSelectedCities());
+
+            // Sort the selected cities alphabetically by name.
+            Collections.sort(selected, new City.NameComparator());
+
+            // Combine selected and unselected cities into a single list.
+            final List<City> allCities = new ArrayList<>(getCityMap().size());
+            allCities.addAll(selected);
+            allCities.addAll(getUnselectedCities());
+            mAllCities = Collections.unmodifiableList(allCities);
+        }
+
+        return mAllCities;
+    }
+
+    /**
+     * @param cityName the case-insensitive city name to search for
+     * @return the city with the given {@code cityName}; {@code null} if no such city exists
+     */
+    City getCity(String cityName) {
+        cityName = cityName.toUpperCase();
+
+        for (City city : getAllCities()) {
+            if (cityName.equals(city.getNameUpperCase())) {
+                return city;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * @return a city representing the user's home timezone
+     */
+    City getHomeCity() {
+        if (mHomeCity == null) {
+            final String name = mContext.getString(R.string.home_label);
+            final TimeZone timeZone = mSettingsModel.getHomeTimeZone();
+            mHomeCity = new City(null, -1, null, name, name, timeZone.getID());
+        }
+
+        return mHomeCity;
+    }
+
+    /**
+     * @return a list of cities not selected for display
+     */
+    List<City> getUnselectedCities() {
+        if (mUnselectedCities == null) {
+            // Create a set of selections to identify the unselected cities.
+            final List<City> selected = new ArrayList<>(getSelectedCities());
+            final Set<City> selectedSet = Utils.newArraySet(selected);
+
+            final Collection<City> all = getCityMap().values();
+            final List<City> unselected = new ArrayList<>(all.size() - selectedSet.size());
+            for (City city : all) {
+                if (!selectedSet.contains(city)) {
+                    unselected.add(city);
+                }
+            }
+
+            // Sort the unselected cities according by the user's preferred sort.
+            Collections.sort(unselected, getCitySortComparator());
+            mUnselectedCities = Collections.unmodifiableList(unselected);
+        }
+
+        return mUnselectedCities;
+    }
+
+    /**
+     * @return a list of cities selected for display
+     */
+    List<City> getSelectedCities() {
+        if (mSelectedCities == null) {
+            final List<City> selectedCities = CityDAO.getSelectedCities(mContext, getCityMap());
+            Collections.sort(selectedCities, new City.UtcOffsetComparator());
+            mSelectedCities = Collections.unmodifiableList(selectedCities);
+        }
+
+        return mSelectedCities;
+    }
+
+    /**
+     * @param cities the new collection of cities selected for display by the user
+     */
+    void setSelectedCities(Collection<City> cities) {
+        CityDAO.setSelectedCities(mContext, cities);
+
+        // Clear caches affected by this update.
+        mAllCities = null;
+        mSelectedCities = null;
+        mUnselectedCities = null;
+
+        // Broadcast the change to the selected cities for the benefit of widgets.
+        sendCitiesChangedBroadcast();
+    }
+
+    /**
+     * @return a comparator used to locate index positions
+     */
+    Comparator<City> getCityIndexComparator() {
+        final CitySort citySort = mSettingsModel.getCitySort();
+        switch (citySort) {
+            case NAME: return new City.NameIndexComparator();
+            case UTC_OFFSET: return new City.UtcOffsetIndexComparator();
+        }
+        throw new IllegalStateException("unexpected city sort: " + citySort);
+    }
+
+    /**
+     * @return the order in which cities are sorted
+     */
+    CitySort getCitySort() {
+        return mSettingsModel.getCitySort();
+    }
+
+    /**
+     * Adjust the order in which cities are sorted.
+     */
+    void toggleCitySort() {
+        mSettingsModel.toggleCitySort();
+
+        // Clear caches affected by this update.
+        mAllCities = null;
+        mUnselectedCities = null;
+    }
+
+    private Map<String, City> getCityMap() {
+        if (mCityMap == null) {
+            mCityMap = CityDAO.getCities(mContext);
+        }
+
+        return mCityMap;
+    }
+
+    private Comparator<City> getCitySortComparator() {
+        final CitySort citySort = mSettingsModel.getCitySort();
+        switch (citySort) {
+            case NAME: return new City.NameComparator();
+            case UTC_OFFSET: return new City.UtcOffsetComparator();
+        }
+        throw new IllegalStateException("unexpected city sort: " + citySort);
+    }
+
+    private void sendCitiesChangedBroadcast() {
+        mContext.sendBroadcast(new Intent(DataModel.ACTION_DIGITAL_WIDGET_CHANGED));
+    }
+
+    /**
+     * Cached information that is locale-sensitive must be cleared in response to locale changes.
+     */
+    private final class LocaleChangedReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            mCityMap = null;
+            mHomeCity = null;
+            mAllCities = null;
+            mSelectedCities = null;
+            mUnselectedCities = null;
+        }
+    }
+
+    /**
+     * This receiver is notified when shared preferences change. Cached information built on
+     * preferences must be cleared.
+     */
+    private final class PreferenceListener implements OnSharedPreferenceChangeListener {
+        @Override
+        public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+            switch (key) {
+                case SettingsActivity.KEY_HOME_TZ:
+                    mHomeCity = null;
+                case SettingsActivity.KEY_AUTO_HOME_CLOCK:
+                    sendCitiesChangedBroadcast();
+                    break;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/DataModel.java b/src/com/android/deskclock/data/DataModel.java
new file mode 100644
index 0000000..382beb3
--- /dev/null
+++ b/src/com/android/deskclock/data/DataModel.java
@@ -0,0 +1,608 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.app.Service;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
+import android.support.annotation.StringRes;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.List;
+
+import static com.android.deskclock.Utils.enforceMainLooper;
+
+/**
+ * All application-wide data is accessible through this singleton.
+ */
+public final class DataModel {
+
+    /** Indicates the display style of clocks. */
+    public enum ClockStyle {ANALOG, DIGITAL}
+
+    /** Indicates the preferred sort order of cities. */
+    public enum CitySort {NAME, UTC_OFFSET}
+
+    public static final String ACTION_DIGITAL_WIDGET_CHANGED =
+            "com.android.deskclock.DIGITAL_WIDGET_CHANGED";
+
+    /** The single instance of this data model that exists for the life of the application. */
+    private static final DataModel sDataModel = new DataModel();
+
+    private Handler mHandler;
+
+    private Context mContext;
+
+    /** The model from which settings are fetched. */
+    private SettingsModel mSettingsModel;
+
+    /** The model from which city data are fetched. */
+    private CityModel mCityModel;
+
+    /** The model from which timer data are fetched. */
+    private TimerModel mTimerModel;
+
+    /** The model from which alarm data are fetched. */
+    private AlarmModel mAlarmModel;
+
+    /** The model from which stopwatch data are fetched. */
+    private StopwatchModel mStopwatchModel;
+
+    /** The model from which notification data are fetched. */
+    private NotificationModel mNotificationModel;
+
+    public static DataModel getDataModel() {
+        return sDataModel;
+    }
+
+    private DataModel() {}
+
+    /**
+     * The context may be set precisely once during the application life.
+     */
+    public void setContext(Context context) {
+        if (mContext != null) {
+            throw new IllegalStateException("context has already been set");
+        }
+        mContext = context.getApplicationContext();
+
+        mSettingsModel = new SettingsModel(mContext);
+        mNotificationModel = new NotificationModel();
+        mCityModel = new CityModel(mContext, mSettingsModel);
+        mAlarmModel = new AlarmModel(mContext, mSettingsModel);
+        mStopwatchModel = new StopwatchModel(mContext, mNotificationModel);
+        mTimerModel = new TimerModel(mContext, mSettingsModel, mNotificationModel);
+    }
+
+    /**
+     * Posts a runnable to the main thread and blocks until the runnable executes. Used to access
+     * the data model from the main thread.
+     */
+    public void run(Runnable runnable) {
+        if (Looper.myLooper() == Looper.getMainLooper()) {
+            runnable.run();
+            return;
+        }
+
+        final ExecutedRunnable er = new ExecutedRunnable(runnable);
+        getHandler().post(er);
+
+        // Wait for the data to arrive, if it has not.
+        synchronized (er) {
+            if (!er.isExecuted()) {
+                try {
+                    er.wait();
+                } catch (InterruptedException ignored) {
+                    // ignore
+                }
+            }
+        }
+    }
+
+    /**
+     * @return a handler associated with the main thread
+     */
+    private synchronized Handler getHandler() {
+        if (mHandler == null) {
+            mHandler = new Handler(Looper.getMainLooper());
+        }
+        return mHandler;
+    }
+
+    //
+    // Application
+    //
+
+    /**
+     * @param inForeground {@code true} to indicate the application is open in the foreground
+     */
+    public void setApplicationInForeground(boolean inForeground) {
+        enforceMainLooper();
+
+        if (mNotificationModel.isApplicationInForeground() != inForeground) {
+            mNotificationModel.setApplicationInForeground(inForeground);
+
+            // Refresh all notifications in response to a change in app open state.
+            mTimerModel.updateNotification();
+            mStopwatchModel.updateNotification();
+        }
+    }
+
+    /**
+     * @return {@code true} when the application is open in the foreground; {@code false} otherwise
+     */
+    public boolean isApplicationInForeground() {
+        return mNotificationModel.isApplicationInForeground();
+    }
+
+    /**
+     * Called when the notifications may be stale or absent from the notification manager and must
+     * be rebuilt. e.g. after upgrading the application
+     */
+    public void updateAllNotifications() {
+        mTimerModel.updateNotification();
+        mStopwatchModel.updateNotification();
+    }
+
+    //
+    // Cities
+    //
+
+    /**
+     * @return a list of all cities in their display order
+     */
+    public List<City> getAllCities() {
+        enforceMainLooper();
+        return mCityModel.getAllCities();
+    }
+
+    /**
+     * @param cityName the case-insensitive city name to search for
+     * @return the city with the given {@code cityName}; {@code null} if no such city exists
+     */
+    public City getCity(String cityName) {
+        enforceMainLooper();
+        return mCityModel.getCity(cityName);
+    }
+
+    /**
+     * @return a city representing the user's home timezone
+     */
+    public City getHomeCity() {
+        enforceMainLooper();
+        return mCityModel.getHomeCity();
+    }
+
+    /**
+     * @return a list of cities not selected for display
+     */
+    public List<City> getUnselectedCities() {
+        enforceMainLooper();
+        return mCityModel.getUnselectedCities();
+    }
+
+    /**
+     * @return a list of cities selected for display
+     */
+    public List<City> getSelectedCities() {
+        enforceMainLooper();
+        return mCityModel.getSelectedCities();
+    }
+
+    /**
+     * @param cities the new collection of cities selected for display by the user
+     */
+    public void setSelectedCities(Collection<City> cities) {
+        enforceMainLooper();
+        mCityModel.setSelectedCities(cities);
+    }
+
+    /**
+     * @return a comparator used to locate index positions
+     */
+    public Comparator<City> getCityIndexComparator() {
+        enforceMainLooper();
+        return mCityModel.getCityIndexComparator();
+    }
+
+    /**
+     * @return the order in which cities are sorted
+     */
+    public CitySort getCitySort() {
+        enforceMainLooper();
+        return mCityModel.getCitySort();
+    }
+
+    /**
+     * Adjust the order in which cities are sorted.
+     */
+    public void toggleCitySort() {
+        enforceMainLooper();
+        mCityModel.toggleCitySort();
+    }
+
+    //
+    // Timers
+    //
+
+    /**
+     * @param timerListener to be notified when timers are added, updated and removed
+     */
+    public void addTimerListener(TimerListener timerListener) {
+        enforceMainLooper();
+        mTimerModel.addTimerListener(timerListener);
+    }
+
+    /**
+     * @param timerListener to no longer be notified when timers are added, updated and removed
+     */
+    public void removeTimerListener(TimerListener timerListener) {
+        enforceMainLooper();
+        mTimerModel.removeTimerListener(timerListener);
+    }
+
+    /**
+     * @return a list of timers for display
+     */
+    public List<Timer> getTimers() {
+        enforceMainLooper();
+        return mTimerModel.getTimers();
+    }
+
+    /**
+     * @return a list of expired timers for display
+     */
+    public List<Timer> getExpiredTimers() {
+        enforceMainLooper();
+        return mTimerModel.getExpiredTimers();
+    }
+
+    /**
+     * @param timerId identifies the timer to return
+     * @return the timer with the given {@code timerId}
+     */
+    public Timer getTimer(int timerId) {
+        enforceMainLooper();
+        return mTimerModel.getTimer(timerId);
+    }
+
+    /**
+     * @return the timer that last expired and is still expired now; {@code null} if no timers are
+     *      expired
+     */
+    public Timer getMostRecentExpiredTimer() {
+        enforceMainLooper();
+        return mTimerModel.getMostRecentExpiredTimer();
+    }
+
+    /**
+     * @param length the length of the timer in milliseconds
+     * @param label describes the purpose of the timer
+     * @param deleteAfterUse {@code true} indicates the timer should be deleted when it is reset
+     * @return the newly added timer
+     */
+    public Timer addTimer(long length, String label, boolean deleteAfterUse) {
+        enforceMainLooper();
+        return mTimerModel.addTimer(length, label, deleteAfterUse);
+    }
+
+    /**
+     * @param timer the timer to be removed
+     */
+    public void removeTimer(Timer timer) {
+        enforceMainLooper();
+        mTimerModel.removeTimer(timer);
+    }
+
+    /**
+     * @param timer the timer to be started
+     */
+    public void startTimer(Timer timer) {
+        enforceMainLooper();
+        mTimerModel.updateTimer(timer.start());
+    }
+
+    /**
+     * @param timer the timer to be paused
+     */
+    public void pauseTimer(Timer timer) {
+        enforceMainLooper();
+        mTimerModel.updateTimer(timer.pause());
+    }
+
+    /**
+     * @param service used to start foreground notifications for expired timers
+     * @param timer the timer to be expired
+     */
+    public void expireTimer(Service service, Timer timer) {
+        enforceMainLooper();
+        mTimerModel.expireTimer(service, timer);
+    }
+
+    /**
+     * If the given {@code timer} is expired and marked for deletion after use then this method
+     * removes the the timer. The timer is otherwise transitioned to the reset state and continues
+     * to exist.
+     *
+     * @param timer the timer to be reset
+     * @param eventLabelId the label of the timer event to send; 0 if no event should be sent
+     */
+    public void resetOrDeleteTimer(Timer timer, @StringRes int eventLabelId) {
+        enforceMainLooper();
+        mTimerModel.resetOrDeleteTimer(timer, eventLabelId);
+    }
+
+    /**
+     * Resets all timers.
+     *
+     * @param eventLabelId the label of the timer event to send; 0 if no event should be sent
+     */
+    public void resetTimers(@StringRes int eventLabelId) {
+        enforceMainLooper();
+        mTimerModel.resetTimers(eventLabelId);
+    }
+
+    /**
+     * Resets all expired timers.
+     *
+     * @param eventLabelId the label of the timer event to send; 0 if no event should be sent
+     */
+    public void resetExpiredTimers(@StringRes int eventLabelId) {
+        enforceMainLooper();
+        mTimerModel.resetExpiredTimers(eventLabelId);
+    }
+
+    /**
+     * Resets all unexpired timers.
+     *
+     * @param eventLabelId the label of the timer event to send; 0 if no event should be sent
+     */
+    public void resetUnexpiredTimers(@StringRes int eventLabelId) {
+        enforceMainLooper();
+        mTimerModel.resetUnexpiredTimers(eventLabelId);
+    }
+
+    /**
+     * @param timer the timer to which a minute should be added to the remaining time
+     */
+    public void addTimerMinute(Timer timer) {
+        enforceMainLooper();
+        mTimerModel.updateTimer(timer.addMinute());
+    }
+
+    /**
+     * @param timer the timer to which the new {@code label} belongs
+     * @param label the new label to store for the {@code timer}
+     */
+    public void setTimerLabel(Timer timer, String label) {
+        enforceMainLooper();
+        mTimerModel.updateTimer(timer.setLabel(label));
+    }
+
+    /**
+     * Updates the timer notifications to be current.
+     */
+    public void updateTimerNotification() {
+        enforceMainLooper();
+        mTimerModel.updateNotification();
+    }
+
+    /**
+     * @return the uri of the default ringtone to play for all timers when no user selection exists
+     */
+    public Uri getDefaultTimerRingtoneUri() {
+        enforceMainLooper();
+        return mTimerModel.getDefaultTimerRingtoneUri();
+    }
+
+    /**
+     * @return {@code true} iff the ringtone to play for all timers is the silent ringtone
+     */
+    public boolean isTimerRingtoneSilent() {
+        enforceMainLooper();
+        return mTimerModel.isTimerRingtoneSilent();
+    }
+
+    /**
+     * @return the uri of the ringtone to play for all timers
+     */
+    public Uri getTimerRingtoneUri() {
+        enforceMainLooper();
+        return mTimerModel.getTimerRingtoneUri();
+    }
+
+    /**
+     * @return the title of the ringtone that is played for all timers
+     */
+    public String getTimerRingtoneTitle() {
+        enforceMainLooper();
+        return mTimerModel.getTimerRingtoneTitle();
+    }
+
+    //
+    // Alarms
+    //
+
+    /**
+     * @return the uri of the ringtone to which all new alarms default
+     */
+    public Uri getDefaultAlarmRingtoneUri() {
+        enforceMainLooper();
+        return mAlarmModel.getDefaultAlarmRingtoneUri();
+    }
+
+    /**
+     * @param uri the uri of the ringtone to which future new alarms will default
+     */
+    public void setDefaultAlarmRingtoneUri(Uri uri) {
+        enforceMainLooper();
+        mAlarmModel.setDefaultAlarmRingtoneUri(uri);
+    }
+
+    /**
+     * @param uri the uri of a ringtone
+     * @return the title of the ringtone with the {@code uri}; {@code null} if it cannot be fetched
+     */
+    public String getAlarmRingtoneTitle(Uri uri) {
+        enforceMainLooper();
+        return mAlarmModel.getAlarmRingtoneTitle(uri);
+    }
+
+    //
+    // Stopwatch
+    //
+
+    /**
+     * @return the current state of the stopwatch
+     */
+    public Stopwatch getStopwatch() {
+        enforceMainLooper();
+        return mStopwatchModel.getStopwatch();
+    }
+
+    /**
+     * @return the stopwatch after being started
+     */
+    public Stopwatch startStopwatch() {
+        enforceMainLooper();
+        return mStopwatchModel.setStopwatch(getStopwatch().start());
+    }
+
+    /**
+     * @return the stopwatch after being paused
+     */
+    public Stopwatch pauseStopwatch() {
+        enforceMainLooper();
+        return mStopwatchModel.setStopwatch(getStopwatch().pause());
+    }
+
+    /**
+     * @return the stopwatch after being reset
+     */
+    public Stopwatch resetStopwatch() {
+        enforceMainLooper();
+        return mStopwatchModel.setStopwatch(getStopwatch().reset());
+    }
+
+    /**
+     * @return the laps recorded for this stopwatch
+     */
+    public List<Lap> getLaps() {
+        enforceMainLooper();
+        return mStopwatchModel.getLaps();
+    }
+
+    /**
+     * @return a newly recorded lap completed now; {@code null} if no more laps can be added
+     */
+    public Lap addLap() {
+        enforceMainLooper();
+        return mStopwatchModel.addLap();
+    }
+
+    /**
+     * Clears the laps recorded for this stopwatch.
+     */
+    public void clearLaps() {
+        enforceMainLooper();
+        mStopwatchModel.clearLaps();
+    }
+
+    /**
+     * @return {@code true} iff more laps can be recorded
+     */
+    public boolean canAddMoreLaps() {
+        enforceMainLooper();
+        return mStopwatchModel.canAddMoreLaps();
+    }
+
+    /**
+     * @return the longest lap time of all recorded laps and the current lap
+     */
+    public long getLongestLapTime() {
+        enforceMainLooper();
+        return mStopwatchModel.getLongestLapTime();
+    }
+
+    /**
+     * @param time a point in time after the end of the last lap
+     * @return the elapsed time between the given {@code time} and the end of the previous lap
+     */
+    public long getCurrentLapTime(long time) {
+        enforceMainLooper();
+        return mStopwatchModel.getCurrentLapTime(time);
+    }
+
+    //
+    // Settings
+    //
+
+    /**
+     * @return the style of clock to display in the clock application
+     */
+    public ClockStyle getClockStyle() {
+        enforceMainLooper();
+        return mSettingsModel.getClockStyle();
+    }
+
+    /**
+     * @return the style of clock to display in the clock screensaver
+     */
+    public ClockStyle getScreensaverClockStyle() {
+        enforceMainLooper();
+        return mSettingsModel.getScreensaverClockStyle();
+    }
+
+    /**
+     * @return {@code true} if the users wants to automatically show a clock for their home timezone
+     *      when they have travelled outside of that timezone
+     */
+    public boolean getShowHomeClock() {
+        enforceMainLooper();
+        return mSettingsModel.getShowHomeClock();
+    }
+
+    /**
+     * Used to execute a delegate runnable and track its completion.
+     */
+    private static class ExecutedRunnable implements Runnable {
+
+        private final Runnable mDelegate;
+        private boolean mExecuted;
+
+        private ExecutedRunnable(Runnable delegate) {
+            this.mDelegate = delegate;
+        }
+
+        @Override
+        public void run() {
+            mDelegate.run();
+
+            synchronized (this) {
+                mExecuted = true;
+                notifyAll();
+            }
+        }
+
+        private boolean isExecuted() {
+            return mExecuted;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/Lap.java b/src/com/android/deskclock/data/Lap.java
new file mode 100644
index 0000000..1c42fd8
--- /dev/null
+++ b/src/com/android/deskclock/data/Lap.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+/**
+ * A read-only domain object representing a stopwatch lap.
+ */
+public final class Lap {
+
+    /** The 1-based position of the lap. */
+    private final int mLapNumber;
+
+    /** Elapsed time in ms since the lap was last started. */
+    private final long mLapTime;
+
+    /** Elapsed time in ms accumulated for all laps up to and including this one. */
+    private final long mAccumulatedTime;
+
+    Lap(int lapNumber, long lapTime, long accumulatedTime) {
+        mLapNumber = lapNumber;
+        mLapTime = lapTime;
+        mAccumulatedTime = accumulatedTime;
+    }
+
+    public int getLapNumber() { return mLapNumber; }
+    public long getLapTime() { return mLapTime; }
+    public long getAccumulatedTime() { return mAccumulatedTime; }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/NotificationModel.java b/src/com/android/deskclock/data/NotificationModel.java
new file mode 100644
index 0000000..30393e0
--- /dev/null
+++ b/src/com/android/deskclock/data/NotificationModel.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+/**
+ * Data that must be coordinated across all notifications is accessed via this model.
+ */
+final class NotificationModel {
+
+    private boolean mApplicationInForeground;
+
+    /**
+     * @param inForeground {@code true} to indicate the application is open in the foreground
+     */
+    void setApplicationInForeground(boolean inForeground) {
+        mApplicationInForeground = inForeground;
+    }
+
+    /**
+     * @return {@code true} while the application is open in the foreground
+     */
+    boolean isApplicationInForeground() {
+        return mApplicationInForeground;
+    }
+
+    /**
+     * @return a value that identifies the stopwatch notification
+     */
+    int getStopwatchNotificationId() {
+        return Integer.MAX_VALUE - 1;
+    }
+
+    /**
+     * @return a value that identifies the notification for running/paused timers
+     */
+    int getUnexpiredTimerNotificationId() {
+        return Integer.MAX_VALUE - 2;
+    }
+
+    /**
+     * @return a value that identifies the notification for expired timers
+     */
+    int getExpiredTimerNotificationId() {
+        return Integer.MAX_VALUE - 3;
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/SettingsDAO.java b/src/com/android/deskclock/data/SettingsDAO.java
new file mode 100644
index 0000000..cb18c5a
--- /dev/null
+++ b/src/com/android/deskclock/data/SettingsDAO.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.net.Uri;
+import android.preference.PreferenceManager;
+
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+import com.android.deskclock.data.DataModel.CitySort;
+import com.android.deskclock.data.DataModel.ClockStyle;
+import com.android.deskclock.settings.ScreensaverSettingsActivity;
+import com.android.deskclock.settings.SettingsActivity;
+
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * This class encapsulates the storage of application preferences in {@link SharedPreferences}.
+ */
+final class SettingsDAO {
+
+    private static final String KEY_SORT_PREFERENCE = "sort_preference";
+    private static final String KEY_DEFAULT_ALARM_RINGTONE_URI = "default_alarm_ringtone_uri";
+
+    // Lazily instantiated and cached for the life of the application.
+    private static SharedPreferences sPrefs;
+
+    private SettingsDAO() {}
+
+    /**
+     * @return an enumerated value indicating the order in which cities are ordered
+     */
+    static CitySort getCitySort(Context context) {
+        final int defaultSortOrdinal = CitySort.NAME.ordinal();
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final int citySortOrdinal = prefs.getInt(KEY_SORT_PREFERENCE, defaultSortOrdinal);
+        return CitySort.values()[citySortOrdinal];
+    }
+
+    /**
+     * Adjust the sort order of cities.
+     */
+    static void toggleCitySort(Context context) {
+        final CitySort oldSort = getCitySort(context);
+        final CitySort newSort = oldSort == CitySort.NAME ? CitySort.UTC_OFFSET : CitySort.NAME;
+        final SharedPreferences prefs = getSharedPreferences(context);
+        prefs.edit().putInt(KEY_SORT_PREFERENCE, newSort.ordinal()).apply();
+    }
+
+    /**
+     * @return {@code true} if a clock for the user's home timezone should be automatically
+     *      displayed when it doesn't match the current timezone
+     */
+    static boolean getAutoShowHomeClock(Context context) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        return prefs.getBoolean(SettingsActivity.KEY_AUTO_HOME_CLOCK, false);
+    }
+
+    /**
+     * @return the user's home timezone
+     */
+    static TimeZone getHomeTimeZone(Context context) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final String defaultTimeZoneId = TimeZone.getDefault().getID();
+        final String timeZoneId = prefs.getString(SettingsActivity.KEY_HOME_TZ, defaultTimeZoneId);
+        return TimeZone.getTimeZone(timeZoneId);
+    }
+
+    /**
+     * Sets the user's home timezone to the current system timezone if no home timezone is yet set.
+     *
+     * @param homeTimeZone the timezone to set as the user's home timezone if necessary
+     */
+    static void setDefaultHomeTimeZone(Context context, TimeZone homeTimeZone) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final String homeTimeZoneId = prefs.getString(SettingsActivity.KEY_HOME_TZ, null);
+        if (homeTimeZoneId == null) {
+            prefs.edit().putString(SettingsActivity.KEY_HOME_TZ, homeTimeZone.getID()).apply();
+        }
+    }
+
+    /**
+     * @return a value indicating whether analog or digital clocks are displayed in the app
+     */
+    static ClockStyle getClockStyle(Context context) {
+        return getClockStyle(context, SettingsActivity.KEY_CLOCK_STYLE);
+    }
+
+    /**
+     * @return a value indicating whether analog or digital clocks are displayed on the screensaver
+     */
+    static ClockStyle getScreensaverClockStyle(Context context) {
+        return getClockStyle(context, ScreensaverSettingsActivity.KEY_CLOCK_STYLE);
+    }
+
+    /**
+     * @return the uri of the selected ringtone or the {@code defaultUri} if no explicit selection
+     *      has yet been made
+     */
+    static Uri getTimerRingtoneUri(Context context, Uri defaultUri) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final String uriString = prefs.getString(SettingsActivity.KEY_TIMER_RINGTONE, null);
+        return uriString == null ? defaultUri : Uri.parse(uriString);
+    }
+
+    /**
+     * @return the uri of the selected ringtone or the {@code defaultUri} if no explicit selection
+     *      has yet been made
+     */
+    static Uri getDefaultAlarmRingtoneUri(Context context, Uri defaultUri) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final String uriString = prefs.getString(KEY_DEFAULT_ALARM_RINGTONE_URI, null);
+        return uriString == null ? defaultUri : Uri.parse(uriString);
+    }
+
+    /**
+     * @param uri identifies the default ringtone to play for new alarms
+     */
+    static void setDefaultAlarmRingtoneUri(Context context, Uri uri) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        prefs.edit().putString(KEY_DEFAULT_ALARM_RINGTONE_URI, uri.toString()).apply();
+    }
+
+    private static ClockStyle getClockStyle(Context context, String prefKey) {
+        final String defaultStyle = context.getString(R.string.default_clock_style);
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final String clockStyle = prefs.getString(prefKey, defaultStyle);
+        // Use hardcoded locale to perform toUpperCase, because in some languages toUpperCase adds
+        // accent to character, which breaks the enum conversion.
+        return ClockStyle.valueOf(clockStyle.toUpperCase(Locale.US));
+    }
+
+    private static SharedPreferences getSharedPreferences(Context context) {
+        if (sPrefs == null) {
+            sPrefs = Utils.getDefaultSharedPreferences(context.getApplicationContext());
+        }
+
+        return sPrefs;
+    }
+}
diff --git a/src/com/android/deskclock/data/SettingsModel.java b/src/com/android/deskclock/data/SettingsModel.java
new file mode 100644
index 0000000..224f190
--- /dev/null
+++ b/src/com/android/deskclock/data/SettingsModel.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.content.Context;
+import android.net.Uri;
+import android.provider.Settings;
+
+import com.android.deskclock.R;
+import com.android.deskclock.data.DataModel.CitySort;
+import com.android.deskclock.data.DataModel.ClockStyle;
+
+import java.util.TimeZone;
+
+/**
+ * All settings data is accessed via this model.
+ */
+final class SettingsModel {
+
+    private final Context mContext;
+
+    /** The uri of the default ringtone to use for timers until the user explicitly chooses one. */
+    private Uri mDefaultTimerRingtoneUri;
+
+    SettingsModel(Context context) {
+        mContext = context;
+
+        // Set the user's default home timezone if one has not yet been chosen.
+        SettingsDAO.setDefaultHomeTimeZone(mContext, TimeZone.getDefault());
+    }
+
+    CitySort getCitySort() {
+        return SettingsDAO.getCitySort(mContext);
+    }
+
+    void toggleCitySort() {
+        SettingsDAO.toggleCitySort(mContext);
+    }
+
+    TimeZone getHomeTimeZone() {
+        return SettingsDAO.getHomeTimeZone(mContext);
+    }
+
+    ClockStyle getClockStyle() {
+        return SettingsDAO.getClockStyle(mContext);
+    }
+
+    ClockStyle getScreensaverClockStyle() {
+        return SettingsDAO.getScreensaverClockStyle(mContext);
+    }
+
+    boolean getShowHomeClock() {
+        if (!SettingsDAO.getAutoShowHomeClock(mContext)) {
+            return false;
+        }
+
+        // Show the home clock if the current time and home time differ.
+        // (By using UTC offset for this comparison the various DST rules are considered)
+        final TimeZone homeTimeZone = SettingsDAO.getHomeTimeZone(mContext);
+        final long now = System.currentTimeMillis();
+        return homeTimeZone.getOffset(now) != TimeZone.getDefault().getOffset(now);
+    }
+
+    Uri getDefaultTimerRingtoneUri() {
+        if (mDefaultTimerRingtoneUri == null) {
+            final String packageName = mContext.getPackageName();
+            final int resId = R.raw.timer_expire;
+            final String uriString = String.format("android.resource://%s/%d", packageName, resId);
+            mDefaultTimerRingtoneUri = Uri.parse(uriString);
+        }
+
+        return mDefaultTimerRingtoneUri;
+    }
+
+    Uri getTimerRingtoneUri() {
+        return SettingsDAO.getTimerRingtoneUri(mContext, getDefaultTimerRingtoneUri());
+    }
+
+    Uri getDefaultAlarmRingtoneUri() {
+        return SettingsDAO.getDefaultAlarmRingtoneUri(mContext,
+                Settings.System.DEFAULT_ALARM_ALERT_URI);
+    }
+
+    void setDefaultAlarmRingtoneUri(Uri uri) {
+        SettingsDAO.setDefaultAlarmRingtoneUri(mContext, uri);
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/Stopwatch.java b/src/com/android/deskclock/data/Stopwatch.java
new file mode 100644
index 0000000..a08cc1f
--- /dev/null
+++ b/src/com/android/deskclock/data/Stopwatch.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.os.SystemClock;
+
+import static com.android.deskclock.data.Stopwatch.State.PAUSED;
+import static com.android.deskclock.data.Stopwatch.State.RESET;
+import static com.android.deskclock.data.Stopwatch.State.RUNNING;
+
+/**
+ * A read-only domain object representing a stopwatch.
+ */
+public final class Stopwatch {
+
+    public enum State { RESET, RUNNING, PAUSED }
+
+    /** The single, immutable instance of a reset stopwatch. */
+    private static final Stopwatch RESET_STOPWATCH = new Stopwatch(RESET, Long.MIN_VALUE, 0);
+
+    /** Current state of this stopwatch. */
+    private final State mState;
+
+    /** Elapsed time in ms the stopwatch was last started; {@link Long#MIN_VALUE} if not running. */
+    private final long mLastStartTime;
+
+    /** Elapsed time in ms this stopwatch has accumulated while running. */
+    private final long mAccumulatedTime;
+
+    Stopwatch(State state, long lastStartTime, long accumulatedTime) {
+        mState = state;
+        mLastStartTime = lastStartTime;
+        mAccumulatedTime = accumulatedTime;
+    }
+
+    public State getState() { return mState; }
+    public long getLastStartTime() { return mLastStartTime; }
+    public boolean isReset() { return mState == RESET; }
+    public boolean isPaused() { return mState == PAUSED; }
+    public boolean isRunning() { return mState == RUNNING; }
+
+    /**
+     * @return the total amount of time accumulated up to this moment
+     */
+    public long getTotalTime() {
+        if (mState != RUNNING) {
+            return mAccumulatedTime;
+        }
+
+        // In practice, "now" can be any value due to device reboots. When the real-time clock
+        // is reset, there is no more guarantee that "now" falls after the last start time. To
+        // ensure the stopwatch is monotonically increasing, normalize negative time segments to 0,
+        final long timeSinceStart = now() - mLastStartTime;
+        return mAccumulatedTime + Math.max(0, timeSinceStart);
+    }
+
+    /**
+     * @return the amount of time accumulated up to the last time the stopwatch was started
+     */
+    long getAccumulatedTime() {
+        return mAccumulatedTime;
+    }
+
+    /**
+     * @return a copy of this stopwatch that is running
+     */
+    Stopwatch start() {
+        if (mState == RUNNING) {
+            return this;
+        }
+
+        return new Stopwatch(RUNNING, now(), getTotalTime());
+    }
+
+    /**
+     * @return a copy of this stopwatch that is paused
+     */
+    Stopwatch pause() {
+        if (mState != RUNNING) {
+            return this;
+        }
+
+        return new Stopwatch(PAUSED, Long.MIN_VALUE, getTotalTime());
+    }
+
+    /**
+     * @return a copy of this stopwatch that is reset
+     */
+    Stopwatch reset() {
+        return RESET_STOPWATCH;
+    }
+
+    private static long now() {
+        return SystemClock.elapsedRealtime();
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/StopwatchDAO.java b/src/com/android/deskclock/data/StopwatchDAO.java
new file mode 100644
index 0000000..bd40712
--- /dev/null
+++ b/src/com/android/deskclock/data/StopwatchDAO.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+import com.android.deskclock.Utils;
+import com.android.deskclock.data.Stopwatch.State;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static com.android.deskclock.data.Stopwatch.State.RESET;
+
+/**
+ * This class encapsulates the transfer of data between {@link Stopwatch} and {@link Lap} domain
+ * objects and their permanent storage in {@link SharedPreferences}.
+ */
+final class StopwatchDAO {
+
+    // Key to a preference that stores the state of the stopwatch.
+    private static final String STATE = "sw_state";
+
+    // Key to a preference that stores the last start time of the stopwatch.
+    private static final String LAST_START_TIME = "sw_start_time";
+
+    // Key to a preference that stores the accumulated elapsed time of the stopwatch.
+    private static final String ACCUMULATED_TIME = "sw_accum_time";
+
+    // Key to a preference that stores the number of recorded laps.
+    private static final String LAP_COUNT = "sw_lap_num";
+
+    // Prefix for a key to a preference that stores accumulated time at the end of a particular lap.
+    private static final String LAP_ACCUMULATED_TIME = "sw_lap_time_";
+
+    // Lazily instantiated and cached for the life of the application.
+    private static SharedPreferences sPrefs;
+
+    private StopwatchDAO() {}
+
+    /**
+     * @return the stopwatch from permanent storage or a reset stopwatch if none exists
+     */
+    public static Stopwatch getStopwatch(Context context) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final int stateIndex = prefs.getInt(STATE, RESET.ordinal());
+        final State state = State.values()[stateIndex];
+        final long lastStartTime = prefs.getLong(LAST_START_TIME, Long.MIN_VALUE);
+        final long accumulatedTime = prefs.getLong(ACCUMULATED_TIME, 0);
+        return new Stopwatch(state, lastStartTime, accumulatedTime);
+    }
+
+    /**
+     * @param stopwatch the last state of the stopwatch
+     */
+    public static void setStopwatch(Context context, Stopwatch stopwatch) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final SharedPreferences.Editor editor = prefs.edit();
+
+        if (stopwatch.isReset()) {
+            editor.remove(STATE)
+                    .remove(LAST_START_TIME)
+                    .remove(ACCUMULATED_TIME);
+        } else {
+            editor.putInt(STATE, stopwatch.getState().ordinal())
+                    .putLong(LAST_START_TIME, stopwatch.getLastStartTime())
+                    .putLong(ACCUMULATED_TIME, stopwatch.getAccumulatedTime());
+        }
+
+        editor.apply();
+    }
+
+    /**
+     * @return a list of recorded laps for the stopwatch
+     */
+    public static List<Lap> getLaps(Context context) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+
+        // Prepare the container to be filled with laps.
+        final int lapCount = prefs.getInt(LAP_COUNT, 0);
+        final List<Lap> laps = new ArrayList<>(lapCount);
+
+        long prevAccumulatedTime = 0;
+
+        // Lap numbers are 1-based and so the are corresponding shared preference keys.
+        for (int lapNumber = 1; lapNumber <= lapCount; lapNumber++) {
+            // Look up the accumulated time for the lap.
+            final String lapAccumulatedTimeKey = LAP_ACCUMULATED_TIME + lapNumber;
+            final long accumulatedTime = prefs.getLong(lapAccumulatedTimeKey, 0);
+
+            // Lap time is the delta between accumulated time of this lap and prior lap.
+            final long lapTime = accumulatedTime - prevAccumulatedTime;
+
+            // Create the lap instance from the data.
+            laps.add(new Lap(lapNumber, lapTime, accumulatedTime));
+
+            // Update the accumulated time of the previous lap.
+            prevAccumulatedTime = accumulatedTime;
+        }
+
+        // Laps are stored in the order they were recorded; display order is the reverse.
+        Collections.reverse(laps);
+
+        return laps;
+    }
+
+    /**
+     * @param newLapCount the number of laps including the new lap
+     * @param accumulatedTime the amount of time accumulate by the stopwatch at the end of the lap
+     */
+    public static void addLap(Context context, int newLapCount, long accumulatedTime) {
+        getSharedPreferences(context).edit()
+                .putInt(LAP_COUNT, newLapCount)
+                .putLong(LAP_ACCUMULATED_TIME + newLapCount, accumulatedTime)
+                .apply();
+    }
+
+    /**
+     * Remove the recorded laps for the stopwatch
+     */
+    public static void clearLaps(Context context) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final SharedPreferences.Editor editor = prefs.edit();
+
+        final int lapCount = prefs.getInt(LAP_COUNT, 0);
+        for (int lapNumber = 1; lapNumber <= lapCount; lapNumber++) {
+            editor.remove(LAP_ACCUMULATED_TIME + lapNumber);
+        }
+        editor.remove(LAP_COUNT);
+
+        editor.apply();
+    }
+
+    private static SharedPreferences getSharedPreferences(Context context) {
+        if (sPrefs == null) {
+            sPrefs = Utils.getDefaultSharedPreferences(context.getApplicationContext());
+        }
+
+        return sPrefs;
+    }
+}
diff --git a/src/com/android/deskclock/data/StopwatchModel.java b/src/com/android/deskclock/data/StopwatchModel.java
new file mode 100644
index 0000000..a536c1f
--- /dev/null
+++ b/src/com/android/deskclock/data/StopwatchModel.java
@@ -0,0 +1,340 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources;
+import android.os.SystemClock;
+import android.support.annotation.IdRes;
+import android.support.annotation.StringRes;
+import android.support.v4.app.NotificationCompat;
+import android.support.v4.app.NotificationManagerCompat;
+import android.widget.RemoteViews;
+
+import com.android.deskclock.HandleDeskClockApiCalls;
+import com.android.deskclock.R;
+import com.android.deskclock.stopwatch.StopwatchService;
+
+import java.util.Collections;
+import java.util.List;
+
+import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
+import static android.view.View.GONE;
+import static android.view.View.INVISIBLE;
+import static android.view.View.VISIBLE;
+
+/**
+ * All {@link Stopwatch} data is accessed via this model.
+ */
+final class StopwatchModel {
+
+    private final Context mContext;
+
+    /** The model from which notification data are fetched. */
+    private final NotificationModel mNotificationModel;
+
+    /** Used to create and destroy system notifications related to the stopwatch. */
+    private final NotificationManagerCompat mNotificationManager;
+
+    /** Update stopwatch notification when locale changes. */
+    private final BroadcastReceiver mLocaleChangedReceiver = new LocaleChangedReceiver();
+
+    /** The current state of the stopwatch. */
+    private Stopwatch mStopwatch;
+
+    /** A mutable copy of the recorded stopwatch laps. */
+    private List<Lap> mLaps;
+
+    StopwatchModel(Context context, NotificationModel notificationModel) {
+        mContext = context;
+        mNotificationModel = notificationModel;
+        mNotificationManager = NotificationManagerCompat.from(context);
+
+        // Update stopwatch notification when locale changes.
+        final IntentFilter localeBroadcastFilter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
+        mContext.registerReceiver(mLocaleChangedReceiver, localeBroadcastFilter);
+    }
+
+    /**
+     * @return the current state of the stopwatch
+     */
+    Stopwatch getStopwatch() {
+        if (mStopwatch == null) {
+            mStopwatch = StopwatchDAO.getStopwatch(mContext);
+        }
+
+        return mStopwatch;
+    }
+
+    /**
+     * @param stopwatch the new state of the stopwatch
+     */
+    Stopwatch setStopwatch(Stopwatch stopwatch) {
+        if (mStopwatch != stopwatch) {
+            StopwatchDAO.setStopwatch(mContext, stopwatch);
+            mStopwatch = stopwatch;
+
+            // Refresh the stopwatch notification to reflect the latest stopwatch state.
+            if (!mNotificationModel.isApplicationInForeground()) {
+                updateNotification();
+            }
+        }
+
+        return stopwatch;
+    }
+
+    /**
+     * @return the laps recorded for this stopwatch
+     */
+    List<Lap> getLaps() {
+        return Collections.unmodifiableList(getMutableLaps());
+    }
+
+    /**
+     * @return a newly recorded lap completed now; {@code null} if no more laps can be added
+     */
+    Lap addLap() {
+        if (!canAddMoreLaps()) {
+            return null;
+        }
+
+        final long totalTime = getStopwatch().getTotalTime();
+        final List<Lap> laps = getMutableLaps();
+
+        final int lapNumber = laps.size() + 1;
+        StopwatchDAO.addLap(mContext, lapNumber, totalTime);
+
+        final long prevAccumulatedTime = laps.isEmpty() ? 0 : laps.get(0).getAccumulatedTime();
+        final long lapTime = totalTime - prevAccumulatedTime;
+
+        final Lap lap = new Lap(lapNumber, lapTime, totalTime);
+        laps.add(0, lap);
+
+        // Refresh the stopwatch notification to reflect the latest stopwatch state.
+        if (!mNotificationModel.isApplicationInForeground()) {
+            updateNotification();
+        }
+
+        return lap;
+    }
+
+    /**
+     * Clears the laps recorded for this stopwatch.
+     */
+    void clearLaps() {
+        StopwatchDAO.clearLaps(mContext);
+        getMutableLaps().clear();
+    }
+
+    /**
+     * @return {@code true} iff more laps can be recorded
+     */
+    boolean canAddMoreLaps() {
+        return getLaps().size() < 98;
+    }
+
+    /**
+     * @return the longest lap time of all recorded laps and the current lap
+     */
+    long getLongestLapTime() {
+        long maxLapTime = 0;
+
+        final List<Lap> laps = getLaps();
+        if (!laps.isEmpty()) {
+            // Compute the maximum lap time across all recorded laps.
+            for (Lap lap : getLaps()) {
+                maxLapTime = Math.max(maxLapTime, lap.getLapTime());
+            }
+
+            // Compare with the maximum lap time for the current lap.
+            final Stopwatch stopwatch = getStopwatch();
+            final long currentLapTime = stopwatch.getTotalTime() - laps.get(0).getAccumulatedTime();
+            maxLapTime = Math.max(maxLapTime, currentLapTime);
+        }
+
+        return maxLapTime;
+    }
+
+    /**
+     * In practice, {@code time} can be any value due to device reboots. When the real-time clock is
+     * reset, there is no more guarantee that this time falls after the last recorded lap.
+     *
+     * @param time a point in time expected, but not required, to be after the end of the prior lap
+     * @return the elapsed time between the given {@code time} and the end of the prior lap;
+     *      negative elapsed times are normalized to {@code 0}
+     */
+    long getCurrentLapTime(long time) {
+        final Lap previousLap = getLaps().get(0);
+        final long currentLapTime = time - previousLap.getAccumulatedTime();
+        return Math.max(0, currentLapTime);
+    }
+
+    /**
+     * Updates the notification to reflect the latest state of the stopwatch and recorded laps.
+     */
+    void updateNotification() {
+        final Stopwatch stopwatch = getStopwatch();
+
+        // Notification should be hidden if the stopwatch has no time or the app is open.
+        if (stopwatch.isReset() || mNotificationModel.isApplicationInForeground()) {
+            mNotificationManager.cancel(mNotificationModel.getStopwatchNotificationId());
+            return;
+        }
+
+        @StringRes final int eventLabel = R.string.label_notification;
+
+        // Intent to load the app when the notification is tapped.
+        final Intent showApp = new Intent(mContext, HandleDeskClockApiCalls.class)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+                .setAction(HandleDeskClockApiCalls.ACTION_SHOW_STOPWATCH)
+                .putExtra(HandleDeskClockApiCalls.EXTRA_EVENT_LABEL, eventLabel);
+
+        final PendingIntent pendingShowApp = PendingIntent.getActivity(mContext, 0, showApp,
+                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
+
+        // Compute some values required below.
+        final boolean running = stopwatch.isRunning();
+        final String pname = mContext.getPackageName();
+        final Resources res = mContext.getResources();
+        final long base = SystemClock.elapsedRealtime() - stopwatch.getTotalTime();
+
+        final RemoteViews collapsed = new RemoteViews(pname, R.layout.stopwatch_notif_collapsed);
+        collapsed.setChronometer(R.id.swn_collapsed_chronometer, base, null, running);
+        collapsed.setOnClickPendingIntent(R.id.swn_collapsed_hitspace, pendingShowApp);
+        collapsed.setImageViewResource(R.id.notification_icon, R.drawable.stat_notify_stopwatch);
+
+        final RemoteViews expanded = new RemoteViews(pname, R.layout.stopwatch_notif_expanded);
+        expanded.setChronometer(R.id.swn_expanded_chronometer, base, null, running);
+        expanded.setOnClickPendingIntent(R.id.swn_expanded_hitspace, pendingShowApp);
+        expanded.setImageViewResource(R.id.notification_icon, R.drawable.stat_notify_stopwatch);
+
+        @IdRes final int leftButtonId = R.id.swn_left_button;
+        @IdRes final int rightButtonId = R.id.swn_right_button;
+        if (running) {
+            // Left button: Pause
+            expanded.setTextViewText(leftButtonId, res.getText(R.string.sw_pause_button));
+            setTextViewDrawable(expanded, leftButtonId, R.drawable.ic_pause_24dp);
+            final Intent pause = new Intent(mContext, StopwatchService.class)
+                    .setAction(HandleDeskClockApiCalls.ACTION_PAUSE_STOPWATCH)
+                    .putExtra(HandleDeskClockApiCalls.EXTRA_EVENT_LABEL, eventLabel);
+            expanded.setOnClickPendingIntent(leftButtonId, pendingServiceIntent(pause));
+
+            // Right button: Add Lap
+            if (canAddMoreLaps()) {
+                expanded.setTextViewText(rightButtonId, res.getText(R.string.sw_lap_button));
+                setTextViewDrawable(expanded, rightButtonId, R.drawable.ic_sw_lap_24dp);
+
+                final Intent lap = new Intent(mContext, StopwatchService.class)
+                        .setAction(HandleDeskClockApiCalls.ACTION_LAP_STOPWATCH)
+                        .putExtra(HandleDeskClockApiCalls.EXTRA_EVENT_LABEL, eventLabel);
+                expanded.setOnClickPendingIntent(rightButtonId, pendingServiceIntent(lap));
+                expanded.setViewVisibility(rightButtonId, VISIBLE);
+            } else {
+                expanded.setViewVisibility(rightButtonId, INVISIBLE);
+            }
+
+            // Show the current lap number if any laps have been recorded.
+            final int lapCount = getLaps().size();
+            if (lapCount > 0) {
+                final int lapNumber = lapCount + 1;
+                final String lap = res.getString(R.string.sw_notification_lap_number, lapNumber);
+                collapsed.setTextViewText(R.id.swn_collapsed_laps, lap);
+                collapsed.setViewVisibility(R.id.swn_collapsed_laps, VISIBLE);
+                expanded.setTextViewText(R.id.swn_expanded_laps, lap);
+                expanded.setViewVisibility(R.id.swn_expanded_laps, VISIBLE);
+            } else {
+                collapsed.setViewVisibility(R.id.swn_collapsed_laps, GONE);
+                expanded.setViewVisibility(R.id.swn_expanded_laps, GONE);
+            }
+        } else {
+            // Left button: Start
+            expanded.setTextViewText(leftButtonId, res.getText(R.string.sw_start_button));
+            setTextViewDrawable(expanded, leftButtonId, R.drawable.ic_start_24dp);
+            final Intent start = new Intent(mContext, StopwatchService.class)
+                    .setAction(HandleDeskClockApiCalls.ACTION_START_STOPWATCH)
+                    .putExtra(HandleDeskClockApiCalls.EXTRA_EVENT_LABEL, eventLabel);
+            expanded.setOnClickPendingIntent(leftButtonId, pendingServiceIntent(start));
+
+            // Right button: Reset (HandleDeskClockApiCalls will also bring forward the app)
+            expanded.setViewVisibility(rightButtonId, VISIBLE);
+            expanded.setTextViewText(rightButtonId, res.getText(R.string.sw_reset_button));
+            setTextViewDrawable(expanded, rightButtonId, R.drawable.ic_reset_24dp);
+            final Intent reset = new Intent(mContext, HandleDeskClockApiCalls.class)
+                    .setAction(HandleDeskClockApiCalls.ACTION_RESET_STOPWATCH)
+                    .putExtra(HandleDeskClockApiCalls.EXTRA_EVENT_LABEL, eventLabel);
+            expanded.setOnClickPendingIntent(rightButtonId, pendingActivityIntent(reset));
+
+            // Indicate the stopwatch is paused.
+            collapsed.setTextViewText(R.id.swn_collapsed_laps, res.getString(R.string.swn_paused));
+            collapsed.setViewVisibility(R.id.swn_collapsed_laps, VISIBLE);
+            expanded.setTextViewText(R.id.swn_expanded_laps, res.getString(R.string.swn_paused));
+            expanded.setViewVisibility(R.id.swn_expanded_laps, VISIBLE);
+        }
+
+        // Swipe away will reset the stopwatch without bringing forward the app.
+        final Intent reset = new Intent(mContext, StopwatchService.class)
+                .setAction(HandleDeskClockApiCalls.ACTION_RESET_STOPWATCH)
+                .putExtra(HandleDeskClockApiCalls.EXTRA_EVENT_LABEL, eventLabel);
+
+        final Notification notification = new NotificationCompat.Builder(mContext)
+                .setLocalOnly(true)
+                .setOngoing(running)
+                .setContent(collapsed)
+                .setAutoCancel(stopwatch.isPaused())
+                .setPriority(Notification.PRIORITY_MAX)
+                .setDeleteIntent(pendingServiceIntent(reset))
+                .setSmallIcon(R.drawable.ic_tab_stopwatch_activated)
+                .build();
+        notification.bigContentView = expanded;
+        mNotificationManager.notify(mNotificationModel.getStopwatchNotificationId(), notification);
+    }
+
+    private PendingIntent pendingServiceIntent(Intent intent) {
+        return PendingIntent.getService(mContext, 0, intent, FLAG_UPDATE_CURRENT);
+    }
+
+    private PendingIntent pendingActivityIntent(Intent intent) {
+        return PendingIntent.getActivity(mContext, 0, intent, FLAG_UPDATE_CURRENT);
+    }
+
+    private static void setTextViewDrawable(RemoteViews rv, int viewId, int drawableId) {
+        rv.setTextViewCompoundDrawablesRelative(viewId, drawableId, 0, 0, 0);
+    }
+
+    private List<Lap> getMutableLaps() {
+        if (mLaps == null) {
+            mLaps = StopwatchDAO.getLaps(mContext);
+        }
+
+        return mLaps;
+    }
+
+    /**
+     * Update the stopwatch notification in response to a locale change.
+     */
+    private final class LocaleChangedReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            updateNotification();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/Timer.java b/src/com/android/deskclock/data/Timer.java
new file mode 100644
index 0000000..862e8e0
--- /dev/null
+++ b/src/com/android/deskclock/data/Timer.java
@@ -0,0 +1,313 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.os.SystemClock;
+import android.text.TextUtils;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+import static android.text.format.DateUtils.HOUR_IN_MILLIS;
+import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
+import static android.text.format.DateUtils.SECOND_IN_MILLIS;
+import static com.android.deskclock.data.Timer.State.EXPIRED;
+import static com.android.deskclock.data.Timer.State.PAUSED;
+import static com.android.deskclock.data.Timer.State.RESET;
+import static com.android.deskclock.data.Timer.State.RUNNING;
+
+/**
+ * A read-only domain object representing a countdown timer.
+ */
+public final class Timer {
+
+    public enum State {
+        RUNNING(1), PAUSED(2), EXPIRED(3), RESET(4);
+
+        /** The value assigned to this State in prior releases. */
+        private final int mValue;
+
+        State(int value) {
+            mValue = value;
+        }
+
+        /**
+         * @return the numeric value assigned to this state
+         */
+        public int getValue() {
+            return mValue;
+        }
+
+        /**
+         * @return the state corresponding to the given {@code value}
+         */
+        public static State fromValue(int value) {
+            for (State state : values()) {
+                if (state.getValue() == value) {
+                    return state;
+                }
+            }
+
+            return null;
+        }
+    }
+
+    /** The minimum duration of a timer. */
+    public static final long MIN_LENGTH = SECOND_IN_MILLIS;
+
+    /** The maximum duration of a timer. */
+    public static final long MAX_LENGTH =
+            99 * HOUR_IN_MILLIS + 99 * MINUTE_IN_MILLIS + 99 * SECOND_IN_MILLIS;
+
+    /** A unique identifier for the city. */
+    private final int mId;
+
+    /** The current state of the timer. */
+    private final State mState;
+
+    /** The original length of the timer in milliseconds when it was created. */
+    private final long mLength;
+
+    /** The length of the timer in milliseconds including additional time added by the user. */
+    private final long mTotalLength;
+
+    /** The time at which the timer was last started; {@link Long#MIN_VALUE} when not running. */
+    private final long mLastStartTime;
+
+    /** The time at which the timer is scheduled to expire; negative if it is already expired. */
+    private final long mRemainingTime;
+
+    /** A message describing the meaning of the timer. */
+    private final String mLabel;
+
+    /** A flag indicating the timer should be deleted when it is reset. */
+    private final boolean mDeleteAfterUse;
+
+    Timer(int id, State state, long length, long totalLength, long lastStartTime,
+            long remainingTime, String label, boolean deleteAfterUse) {
+        mId = id;
+        mState = state;
+        mLength = length;
+        mTotalLength = totalLength;
+        mLastStartTime = lastStartTime;
+        mRemainingTime = remainingTime;
+        mLabel = label;
+        mDeleteAfterUse = deleteAfterUse;
+    }
+
+    public int getId() { return mId; }
+    public State getState() { return mState; }
+    public String getLabel() { return mLabel; }
+    public long getLength() { return mLength; }
+    public long getTotalLength() { return mTotalLength; }
+    public boolean getDeleteAfterUse() { return mDeleteAfterUse; }
+    public boolean isReset() { return mState == RESET; }
+    public boolean isRunning() { return mState == RUNNING; }
+    public boolean isPaused() { return mState == PAUSED; }
+    public boolean isExpired() { return mState == EXPIRED; }
+
+    /**
+     * @return the total amount of time remaining up to this moment; expired timers will return a
+     *      negative amount
+     */
+    public long getRemainingTime() {
+        if (mState == RUNNING || mState == EXPIRED) {
+            return mRemainingTime - (now() - mLastStartTime);
+        }
+
+        return mRemainingTime;
+    }
+
+    /**
+     * @return the time at which this timer will or did expire
+     */
+    public long getExpirationTime() {
+        if (mState != RUNNING && mState != EXPIRED) {
+            throw new IllegalStateException("cannot compute expiration time in state " + mState);
+        }
+
+        return mLastStartTime + mRemainingTime;
+    }
+
+    /**
+     *
+     * @return the total amount of time elapsed up to this moment; expired timers will report more
+     *      than the {@link #getTotalLength() total length}
+     */
+    public long getElapsedTime() {
+        return getTotalLength() - getRemainingTime();
+    }
+
+    long getLastStartTime() { return mLastStartTime; }
+
+    /**
+     * @return a copy of this timer that is running or expired
+     */
+    Timer start() {
+        if (mState == RUNNING || mState == EXPIRED) {
+            return this;
+        }
+
+        return new Timer(mId, RUNNING, mLength, mTotalLength, now(), mRemainingTime, mLabel,
+                mDeleteAfterUse);
+    }
+
+    /**
+     * @return a copy of this timer that is paused or reset
+     */
+    Timer pause() {
+        if (mState == PAUSED || mState == RESET) {
+            return this;
+        } else if (mState == EXPIRED) {
+            return reset();
+        }
+
+        final long remainingTime = getRemainingTime();
+        return new Timer(mId, PAUSED, mLength, mTotalLength, Long.MIN_VALUE, remainingTime, mLabel,
+                mDeleteAfterUse);
+    }
+
+    /**
+     * @return a copy of this timer that is expired or reset
+     */
+    Timer expire() {
+        if (mState == EXPIRED || mState == RESET) {
+            return this;
+        }
+
+        return new Timer(mId, EXPIRED, mLength, mTotalLength, mLastStartTime, mRemainingTime,
+                mLabel, mDeleteAfterUse);
+    }
+
+    /**
+     * @return a copy of this timer that is reset
+     */
+    Timer reset() {
+        if (mState == RESET) {
+            return this;
+        }
+
+        return new Timer(mId, RESET, mLength, mLength, Long.MIN_VALUE, mLength, mLabel,
+                mDeleteAfterUse);
+    }
+
+    /**
+     * @return a copy of this timer with the given {@code label}
+     */
+    Timer setLabel(String label) {
+        if (TextUtils.equals(mLabel, label)) {
+            return this;
+        }
+
+        return new Timer(mId, mState, mLength, mTotalLength, mLastStartTime, mRemainingTime, label,
+                mDeleteAfterUse);
+    }
+
+    /**
+     * @return a copy of this timer with an additional minute added to the remaining time and total
+     *      length, or this Timer if adding a minute would exceed the maximum timer duration
+     */
+    Timer addMinute() {
+        final long lastStartTime;
+        final long remainingTime;
+        final long totalLength;
+        final State state;
+        if (mState == EXPIRED) {
+            state = RUNNING;
+            lastStartTime = now();
+            totalLength = MINUTE_IN_MILLIS;
+            remainingTime = MINUTE_IN_MILLIS;
+        } else {
+            state = mState;
+            lastStartTime = mLastStartTime;
+            totalLength = mRemainingTime + MINUTE_IN_MILLIS;
+            remainingTime = mRemainingTime + MINUTE_IN_MILLIS;
+        }
+
+        // Do not allow the remaining time to exceed the maximum.
+        if (remainingTime > MAX_LENGTH) {
+            return this;
+        }
+
+        return new Timer(mId, state, mLength, totalLength, lastStartTime, remainingTime, mLabel,
+                mDeleteAfterUse);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        final Timer timer = (Timer) o;
+
+        return mId == timer.mId;
+
+    }
+
+    @Override
+    public int hashCode() {
+        return mId;
+    }
+
+    private static long now() {
+        return SystemClock.elapsedRealtime();
+    }
+
+    /**
+     * Orders timers by their IDs. Oldest timers are at the bottom. Newest timers are at the top.
+     */
+    public static Comparator<Timer> ID_COMPARATOR = new Comparator<Timer>() {
+        @Override
+        public int compare(Timer timer1, Timer timer2) {
+            return Integer.compare(timer2.getId(), timer1.getId());
+        }
+    };
+
+    /**
+     * Orders timers by their expected/actual expiration time. The general order is:
+     *
+     * <ol>
+     *     <li>{@link State#EXPIRED EXPIRED} timers; ties broken by {@link #getRemainingTime()}</li>
+     *     <li>{@link State#RUNNING RUNNING} timers; ties broken by {@link #getRemainingTime()}</li>
+     *     <li>{@link State#PAUSED PAUSED} timers; ties broken by {@link #getRemainingTime()}</li>
+     *     <li>{@link State#RESET RESET} timers; ties broken by {@link #getLength()}</li>
+     * </ol>
+     */
+    public static Comparator<Timer> EXPIRY_COMPARATOR = new Comparator<Timer>() {
+
+        private final List<State> stateExpiryOrder = Arrays.asList(EXPIRED, RUNNING, PAUSED, RESET);
+
+        @Override
+        public int compare(Timer timer1, Timer timer2) {
+            final int stateIndex1 = stateExpiryOrder.indexOf(timer1.getState());
+            final int stateIndex2 = stateExpiryOrder.indexOf(timer2.getState());
+
+            int order = Integer.compare(stateIndex1, stateIndex2);
+            if (order == 0) {
+                final State state = timer1.getState();
+                if (state == RESET) {
+                    order = Long.compare(timer1.getLength(), timer2.getLength());
+                } else {
+                    order = Long.compare(timer1.getRemainingTime(), timer2.getRemainingTime());
+                }
+            }
+
+            return order;
+        }
+    };
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/TimerDAO.java b/src/com/android/deskclock/data/TimerDAO.java
new file mode 100644
index 0000000..3d90ac9
--- /dev/null
+++ b/src/com/android/deskclock/data/TimerDAO.java
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+import com.android.deskclock.Utils;
+import com.android.deskclock.data.Timer.State;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static com.android.deskclock.data.Timer.State.RESET;
+
+/**
+ * This class encapsulates the transfer of data between {@link Timer} domain objects and their
+ * permanent storage in {@link SharedPreferences}.
+ */
+final class TimerDAO {
+
+    // Key to a preference that stores the set of timer ids.
+    private static final String TIMER_IDS = "timers_list";
+
+    // Key to a preference that stores the id to assign to the next timer.
+    private static final String NEXT_TIMER_ID = "next_timer_id";
+
+    // Prefix for a key to a preference that stores the state of the timer.
+    private static final String STATE = "timer_state_";
+
+    // Prefix for a key to a preference that stores the length of the timer when it was created.
+    private static final String LENGTH = "timer_setup_timet_";
+
+    // Prefix for a key to a preference that stores the total length of the timer with additions.
+    private static final String TOTAL_LENGTH = "timer_original_timet_";
+
+    // Prefix for a key to a preference that stores the last start time of the timer.
+    private static final String LAST_START_TIME = "timer_start_time_";
+
+    // Prefix for a key to a preference that stores the remaining time before expiry.
+    private static final String REMAINING_TIME = "timer_time_left_";
+
+    // Prefix for a key to a preference that stores the label of the timer.
+    private static final String LABEL = "timer_label_";
+
+    // Prefix for a key to a preference that signals the timer should be deleted on first reset.
+    private static final String DELETE_AFTER_USE = "delete_after_use_";
+
+    // Lazily instantiated and cached for the life of the application.
+    private static SharedPreferences sPrefs;
+
+    private TimerDAO() {}
+
+    /**
+     * @return the timers from permanent storage
+     */
+    public static List<Timer> getTimers(Context context) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+
+        // Read the set of timer ids.
+        final Set<String> timerIds = prefs.getStringSet(TIMER_IDS, Collections.<String>emptySet());
+        final List<Timer> timers = new ArrayList<>(timerIds.size());
+
+        // Build a timer using the data associated with each timer id.
+        for (String timerId : timerIds) {
+            final int id = Integer.parseInt(timerId);
+            final int stateValue = prefs.getInt(STATE + id, RESET.getValue());
+            final State state = State.fromValue(stateValue);
+
+            // Timer state may be null when migrating timers from prior releases which defined a
+            // "deleted" state. Such a state is no longer required.
+            if (state != null) {
+                final long length = prefs.getLong(LENGTH + id, Long.MIN_VALUE);
+                final long totalLength = prefs.getLong(TOTAL_LENGTH + id, Long.MIN_VALUE);
+                final long lastStartTime = prefs.getLong(LAST_START_TIME + id, Long.MIN_VALUE);
+                final long remainingTime = prefs.getLong(REMAINING_TIME + id, totalLength);
+                final String label = prefs.getString(LABEL + id, null);
+                final boolean deleteAfterUse = prefs.getBoolean(DELETE_AFTER_USE + id, false);
+                timers.add(new Timer(id, state, length, totalLength, lastStartTime, remainingTime,
+                        label, deleteAfterUse));
+            }
+        }
+
+        return timers;
+    }
+
+    /**
+     * @param timer the timer to be added
+     */
+    public static Timer addTimer(Context context, Timer timer) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final SharedPreferences.Editor editor = prefs.edit();
+
+        // Fetch the next timer id.
+        final int id = prefs.getInt(NEXT_TIMER_ID, 0);
+        editor.putInt(NEXT_TIMER_ID, id + 1);
+
+        // Add the new timer id to the set of all timer ids.
+        final Set<String> timerIds = new HashSet<>(getTimerIds(context));
+        timerIds.add(String.valueOf(id));
+        editor.putStringSet(TIMER_IDS, timerIds);
+
+        // Record the fields of the timer.
+        editor.putInt(STATE + id, timer.getState().getValue());
+        editor.putLong(LENGTH + id, timer.getLength());
+        editor.putLong(TOTAL_LENGTH + id, timer.getTotalLength());
+        editor.putLong(LAST_START_TIME + id, timer.getLastStartTime());
+        editor.putLong(REMAINING_TIME + id, timer.getRemainingTime());
+        editor.putString(LABEL + id, timer.getLabel());
+        editor.putBoolean(DELETE_AFTER_USE + id, timer.getDeleteAfterUse());
+
+        editor.apply();
+
+        // Return a new timer with the generated timer id present.
+        return new Timer(id, timer.getState(), timer.getLength(), timer.getTotalLength(),
+                timer.getLastStartTime(), timer.getRemainingTime(), timer.getLabel(),
+                timer.getDeleteAfterUse());
+    }
+
+    /**
+     * @param timer the timer to be updated
+     */
+    public static void updateTimer(Context context, Timer timer) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final SharedPreferences.Editor editor = prefs.edit();
+
+        // Record the fields of the timer.
+        final int id = timer.getId();
+        editor.putInt(STATE + id, timer.getState().getValue());
+        editor.putLong(LENGTH + id, timer.getLength());
+        editor.putLong(TOTAL_LENGTH + id, timer.getTotalLength());
+        editor.putLong(LAST_START_TIME + id, timer.getLastStartTime());
+        editor.putLong(REMAINING_TIME + id, timer.getRemainingTime());
+        editor.putString(LABEL + id, timer.getLabel());
+        editor.putBoolean(DELETE_AFTER_USE + id, timer.getDeleteAfterUse());
+
+        editor.apply();
+    }
+
+    /**
+     * @param timer the timer to be removed
+     */
+    public static void removeTimer(Context context, Timer timer) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        final SharedPreferences.Editor editor = prefs.edit();
+
+        final int id = timer.getId();
+
+        // Remove the timer id from the set of all timer ids.
+        final Set<String> timerIds = new HashSet<>(getTimerIds(context));
+        timerIds.remove(String.valueOf(id));
+        if (timerIds.isEmpty()) {
+            editor.remove(TIMER_IDS);
+            editor.remove(NEXT_TIMER_ID);
+        } else {
+            editor.putStringSet(TIMER_IDS, timerIds);
+        }
+
+        // Record the fields of the timer.
+        editor.remove(STATE + id);
+        editor.remove(LENGTH + id);
+        editor.remove(TOTAL_LENGTH + id);
+        editor.remove(LAST_START_TIME + id);
+        editor.remove(REMAINING_TIME + id);
+        editor.remove(LABEL + id);
+        editor.remove(DELETE_AFTER_USE + id);
+
+        editor.apply();
+    }
+
+    private static Set<String> getTimerIds(Context context) {
+        final SharedPreferences prefs = getSharedPreferences(context);
+        return prefs.getStringSet(TIMER_IDS, Collections.<String>emptySet());
+    }
+
+    private static SharedPreferences getSharedPreferences(Context context) {
+        if (sPrefs == null) {
+            sPrefs = Utils.getDefaultSharedPreferences(context.getApplicationContext());
+        }
+
+        return sPrefs;
+    }
+}
diff --git a/src/com/android/deskclock/data/TimerListener.java b/src/com/android/deskclock/data/TimerListener.java
new file mode 100644
index 0000000..a2f1d80
--- /dev/null
+++ b/src/com/android/deskclock/data/TimerListener.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+/**
+ * The interface through which interested parties are notified of changes to one of the timers.
+ */
+public interface TimerListener {
+
+    /**
+     * @param timer the timer that was added
+     */
+    void timerAdded(Timer timer);
+
+    /**
+     * @param before the timer state before the update
+     * @param after the timer state after the update
+     */
+    void timerUpdated(Timer before, Timer after);
+
+    /**
+     * @param timer the timer that was removed
+     */
+    void timerRemoved(Timer timer);
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/data/TimerModel.java b/src/com/android/deskclock/data/TimerModel.java
new file mode 100644
index 0000000..9b2b0a6
--- /dev/null
+++ b/src/com/android/deskclock/data/TimerModel.java
@@ -0,0 +1,896 @@
+/*
+ * Copyright (C) 2015 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.data;
+
+import android.app.AlarmManager;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.SystemClock;
+import android.preference.PreferenceManager;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.StringRes;
+import android.support.annotation.VisibleForTesting;
+import android.support.v4.app.NotificationCompat;
+import android.support.v4.app.NotificationManagerCompat;
+import android.text.TextUtils;
+import android.util.ArraySet;
+
+import com.android.deskclock.AlarmAlertWakeLock;
+import com.android.deskclock.HandleDeskClockApiCalls;
+import com.android.deskclock.LogUtils;
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+import com.android.deskclock.events.Events;
+import com.android.deskclock.settings.SettingsActivity;
+import com.android.deskclock.timer.ExpiredTimersActivity;
+import com.android.deskclock.timer.TimerKlaxon;
+import com.android.deskclock.timer.TimerService;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import static android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP;
+import static android.text.format.DateUtils.HOUR_IN_MILLIS;
+import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
+import static com.android.deskclock.data.Timer.State.EXPIRED;
+import static com.android.deskclock.data.Timer.State.RESET;
+
+/**
+ * All {@link Timer} data is accessed via this model.
+ */
+final class TimerModel {
+
+    private final Context mContext;
+
+    /** The alarm manager system service that calls back when timers expire. */
+    private final AlarmManager mAlarmManager;
+
+    /** The model from which settings are fetched. */
+    private final SettingsModel mSettingsModel;
+
+    /** The model from which notification data are fetched. */
+    private final NotificationModel mNotificationModel;
+
+    /** Used to create and destroy system notifications related to timers. */
+    private final NotificationManagerCompat mNotificationManager;
+
+    /** Update timer notification when locale changes. */
+    private final BroadcastReceiver mLocaleChangedReceiver = new LocaleChangedReceiver();
+
+    /**
+     * Retain a hard reference to the shared preference observer to prevent it from being garbage
+     * collected. See {@link SharedPreferences#registerOnSharedPreferenceChangeListener} for detail.
+     */
+    private final OnSharedPreferenceChangeListener mPreferenceListener = new PreferenceListener();
+
+    /** The listeners to notify when a timer is added, updated or removed. */
+    private final List<TimerListener> mTimerListeners = new ArrayList<>();
+
+    /**
+     * The ids of expired timers for which the ringer is ringing. Not all expired timers have their
+     * ids in this collection. If a timer was already expired when the app was started its id will
+     * be absent from this collection.
+     */
+    private final Set<Integer> mRingingIds = new ArraySet<>();
+
+    /** The uri of the ringtone to play for timers. */
+    private Uri mTimerRingtoneUri;
+
+    /** The title of the ringtone to play for timers. */
+    private String mTimerRingtoneTitle;
+
+    /** A mutable copy of the timers. */
+    private List<Timer> mTimers;
+
+    /** A mutable copy of the expired timers. */
+    private List<Timer> mExpiredTimers;
+
+    /**
+     * The service that keeps this application in the foreground while a heads-up timer
+     * notification is displayed. Marking the service as foreground prevents the operating system
+     * from killing this application while expired timers are actively firing.
+     */
+    private Service mService;
+
+    TimerModel(Context context, SettingsModel settingsModel, NotificationModel notificationModel) {
+        mContext = context;
+        mSettingsModel = settingsModel;
+        mNotificationModel = notificationModel;
+        mNotificationManager = NotificationManagerCompat.from(context);
+
+        mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
+
+        // Clear caches affected by preferences when preferences change.
+        final SharedPreferences prefs = Utils.getDefaultSharedPreferences(mContext);
+        prefs.registerOnSharedPreferenceChangeListener(mPreferenceListener);
+
+        // Update stopwatch notification when locale changes.
+        final IntentFilter localeBroadcastFilter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
+        mContext.registerReceiver(mLocaleChangedReceiver, localeBroadcastFilter);
+    }
+
+    /**
+     * @param timerListener to be notified when timers are added, updated and removed
+     */
+    void addTimerListener(TimerListener timerListener) {
+        mTimerListeners.add(timerListener);
+    }
+
+    /**
+     * @param timerListener to no longer be notified when timers are added, updated and removed
+     */
+    void removeTimerListener(TimerListener timerListener) {
+        mTimerListeners.remove(timerListener);
+    }
+
+    /**
+     * @return all defined timers in their creation order
+     */
+    List<Timer> getTimers() {
+        return Collections.unmodifiableList(getMutableTimers());
+    }
+
+    /**
+     * @return all expired timers in their expiration order
+     */
+    List<Timer> getExpiredTimers() {
+        return Collections.unmodifiableList(getMutableExpiredTimers());
+    }
+
+    /**
+     * @param timerId identifies the timer to return
+     * @return the timer with the given {@code timerId}
+     */
+    Timer getTimer(int timerId) {
+        for (Timer timer : getMutableTimers()) {
+            if (timer.getId() == timerId) {
+                return timer;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * @return the timer that last expired and is still expired now; {@code null} if no timers are
+     *      expired
+     */
+    Timer getMostRecentExpiredTimer() {
+        final List<Timer> timers = getMutableExpiredTimers();
+        return timers.isEmpty() ? null : timers.get(timers.size() - 1);
+    }
+
+    /**
+     * @param length the length of the timer in milliseconds
+     * @param label describes the purpose of the timer
+     * @param deleteAfterUse {@code true} indicates the timer should be deleted when it is reset
+     * @return the newly added timer
+     */
+    Timer addTimer(long length, String label, boolean deleteAfterUse) {
+        // Create the timer instance.
+        Timer timer = new Timer(-1, RESET, length, length, Long.MIN_VALUE, length, label,
+                deleteAfterUse);
+
+        // Add the timer to permanent storage.
+        timer = TimerDAO.addTimer(mContext, timer);
+
+        // Add the timer to the cache.
+        getMutableTimers().add(0, timer);
+
+        // Update the timer notification.
+        updateNotification();
+        // Heads-Up notification is unaffected by this change
+
+        // Notify listeners of the change.
+        for (TimerListener timerListener : mTimerListeners) {
+            timerListener.timerAdded(timer);
+        }
+
+        return timer;
+    }
+
+    /**
+     * @param service used to start foreground notifications related to expired timers
+     * @param timer the timer to be expired
+     */
+    void expireTimer(Service service, Timer timer) {
+        if (mService == null) {
+            // If this is the first expired timer, retain the service that will be used to start
+            // the heads-up notification in the foreground.
+            mService = service;
+        } else if (mService != service) {
+            // If this is not the first expired timer, the service should match the one given when
+            // the first timer expired.
+            LogUtils.wtf("Expected TimerServices to be identical");
+        }
+
+        updateTimer(timer.expire());
+    }
+
+    /**
+     * @param timer an updated timer to store
+     */
+    void updateTimer(Timer timer) {
+        final Timer before = doUpdateTimer(timer);
+
+        // Update the notification after updating the timer data.
+        updateNotification();
+
+        // If the timer started or stopped being expired, update the heads-up notification.
+        if (before.getState() != timer.getState()) {
+            if (before.isExpired() || timer.isExpired()) {
+                updateHeadsUpNotification();
+            }
+        }
+    }
+
+    /**
+     * @param timer an existing timer to be removed
+     */
+    void removeTimer(Timer timer) {
+        doRemoveTimer(timer);
+
+        // Update the timer notifications after removing the timer data.
+        updateNotification();
+        if (timer.isExpired()) {
+            updateHeadsUpNotification();
+        }
+    }
+
+    /**
+     * If the given {@code timer} is expired and marked for deletion after use then this method
+     * removes the the timer. The timer is otherwise transitioned to the reset state and continues
+     * to exist.
+     *
+     * @param timer the timer to be reset
+     * @param eventLabelId the label of the timer event to send; 0 if no event should be sent
+     */
+    void resetOrDeleteTimer(Timer timer, @StringRes int eventLabelId) {
+        doResetOrDeleteTimer(timer, eventLabelId);
+
+        // Update the notification after updating the timer data.
+        updateNotification();
+
+        // If the timer stopped being expired, update the heads-up notification.
+        if (timer.isExpired()) {
+            updateHeadsUpNotification();
+        }
+    }
+
+    /**
+     * Reset all timers.
+     *
+     * @param eventLabelId the label of the timer event to send; 0 if no event should be sent
+     */
+    void resetTimers(@StringRes int eventLabelId) {
+        final List<Timer> timers = new ArrayList<>(getTimers());
+        for (Timer timer : timers) {
+            doResetOrDeleteTimer(timer, eventLabelId);
+        }
+
+        // Update the notifications once after all timers are reset.
+        updateNotification();
+        updateHeadsUpNotification();
+    }
+
+    /**
+     * Reset all expired timers.
+     *
+     * @param eventLabelId the label of the timer event to send; 0 if no event should be sent
+     */
+    void resetExpiredTimers(@StringRes int eventLabelId) {
+        final List<Timer> timers = new ArrayList<>(getTimers());
+        for (Timer timer : timers) {
+            if (timer.isExpired()) {
+                doResetOrDeleteTimer(timer, eventLabelId);
+            }
+        }
+
+        // Update the notifications once after all timers are updated.
+        updateNotification();
+        updateHeadsUpNotification();
+    }
+
+    /**
+     * Reset all unexpired timers.
+     *
+     * @param eventLabelId the label of the timer event to send; 0 if no event should be sent
+     */
+    void resetUnexpiredTimers(@StringRes int eventLabelId) {
+        final List<Timer> timers = new ArrayList<>(getTimers());
+        for (Timer timer : timers) {
+            if (timer.isRunning() || timer.isPaused()) {
+                doResetOrDeleteTimer(timer, eventLabelId);
+            }
+        }
+
+        // Update the notification once after all timers are updated.
+        updateNotification();
+        // Heads-Up notification is unaffected by this change
+    }
+
+    /**
+     * @return the uri of the default ringtone to play for all timers when no user selection exists
+     */
+    Uri getDefaultTimerRingtoneUri() {
+        return mSettingsModel.getDefaultTimerRingtoneUri();
+    }
+
+    /**
+     * @return {@code true} iff the ringtone to play for all timers is the silent ringtone
+     */
+    boolean isTimerRingtoneSilent() {
+        return Uri.EMPTY.equals(getTimerRingtoneUri());
+    }
+
+    /**
+     * @return the uri of the ringtone to play for all timers
+     */
+    Uri getTimerRingtoneUri() {
+        if (mTimerRingtoneUri == null) {
+            mTimerRingtoneUri = mSettingsModel.getTimerRingtoneUri();
+        }
+
+        return mTimerRingtoneUri;
+    }
+
+    /**
+     * @return the title of the ringtone that is played for all timers
+     */
+    String getTimerRingtoneTitle() {
+        if (mTimerRingtoneTitle == null) {
+            if (isTimerRingtoneSilent()) {
+                // Special case: no ringtone has a title of "Silent".
+                mTimerRingtoneTitle = mContext.getString(R.string.silent_timer_ringtone_title);
+            } else {
+                final Uri defaultUri = getDefaultTimerRingtoneUri();
+                final Uri uri = getTimerRingtoneUri();
+
+                if (defaultUri.equals(uri)) {
+                    // Special case: default ringtone has a title of "Timer Expired".
+                    mTimerRingtoneTitle = mContext.getString(R.string.default_timer_ringtone_title);
+                } else {
+                    final Ringtone ringtone = RingtoneManager.getRingtone(mContext, uri);
+                    mTimerRingtoneTitle = ringtone.getTitle(mContext);
+                }
+            }
+        }
+
+        return mTimerRingtoneTitle;
+    }
+
+    private List<Timer> getMutableTimers() {
+        if (mTimers == null) {
+            mTimers = TimerDAO.getTimers(mContext);
+            Collections.sort(mTimers, Timer.ID_COMPARATOR);
+        }
+
+        return mTimers;
+    }
+
+    private List<Timer> getMutableExpiredTimers() {
+        if (mExpiredTimers == null) {
+            mExpiredTimers = new ArrayList<>();
+
+            for (Timer timer : getMutableTimers()) {
+                if (timer.isExpired()) {
+                    mExpiredTimers.add(timer);
+                }
+            }
+            Collections.sort(mExpiredTimers, Timer.EXPIRY_COMPARATOR);
+        }
+
+        return mExpiredTimers;
+    }
+
+    /**
+     * This method updates timer data without updating notifications. This is useful in bulk-update
+     * scenarios so the notifications are only rebuilt once.
+     *
+     * @param timer an updated timer to store
+     * @return the state of the timer prior to the update
+     */
+    private Timer doUpdateTimer(Timer timer) {
+        // Retrieve the cached form of the timer.
+        final List<Timer> timers = getMutableTimers();
+        final int index = timers.indexOf(timer);
+        final Timer before = timers.get(index);
+
+        // If no change occurred, ignore this update.
+        if (timer == before) {
+            return timer;
+        }
+
+        // Update the timer in permanent storage.
+        TimerDAO.updateTimer(mContext, timer);
+
+        // Update the timer in the cache.
+        final Timer oldTimer = timers.set(index, timer);
+
+        // Clear the cache of expired timers if the timer changed to/from expired.
+        if (before.isExpired() || timer.isExpired()) {
+            mExpiredTimers = null;
+        }
+
+        // Update the timer expiration callback.
+        updateAlarmManager();
+
+        // Update the timer ringer.
+        updateRinger(before, timer);
+
+        // Notify listeners of the change.
+        for (TimerListener timerListener : mTimerListeners) {
+            timerListener.timerUpdated(before, timer);
+        }
+
+        return oldTimer;
+    }
+
+    /**
+     * This method removes timer data without updating notifications. This is useful in bulk-remove
+     * scenarios so the notifications are only rebuilt once.
+     *
+     * @param timer an existing timer to be removed
+     */
+    void doRemoveTimer(Timer timer) {
+        // Remove the timer from permanent storage.
+        TimerDAO.removeTimer(mContext, timer);
+
+        // Remove the timer from the cache.
+        final List<Timer> timers = getMutableTimers();
+        final int index = timers.indexOf(timer);
+
+        // If the timer cannot be located there is nothing to remove.
+        if (index == -1) {
+            return;
+        }
+
+        timer = timers.remove(index);
+
+        // Clear the cache of expired timers if a new expired timer was added.
+        if (timer.isExpired()) {
+            mExpiredTimers = null;
+        }
+
+        // Update the timer expiration callback.
+        updateAlarmManager();
+
+        // Update the timer ringer.
+        updateRinger(timer, null);
+
+        // Notify listeners of the change.
+        for (TimerListener timerListener : mTimerListeners) {
+            timerListener.timerRemoved(timer);
+        }
+    }
+
+    /**
+     * This method updates/removes timer data without updating notifications. This is useful in
+     * bulk-update scenarios so the notifications are only rebuilt once.
+     *
+     * If the given {@code timer} is expired and marked for deletion after use then this method
+     * removes the the timer. The timer is otherwise transitioned to the reset state and continues
+     * to exist.
+     *
+     * @param timer the timer to be reset
+     * @param eventLabelId the label of the timer event to send; 0 if no event should be sent
+     */
+    private void doResetOrDeleteTimer(Timer timer, @StringRes int eventLabelId) {
+        if (timer.isExpired() && timer.getDeleteAfterUse()) {
+            doRemoveTimer(timer);
+            if (eventLabelId != 0) {
+                Events.sendTimerEvent(R.string.action_delete, eventLabelId);
+            }
+        } else if (!timer.isReset()) {
+            doUpdateTimer(timer.reset());
+            if (eventLabelId != 0) {
+                Events.sendTimerEvent(R.string.action_reset, eventLabelId);
+            }
+        }
+    }
+
+    /**
+     * Updates the callback given to this application from the {@link AlarmManager} that signals the
+     * expiration of the next timer. If no timers are currently set to expire (i.e. no running
+     * timers exist) then this method clears the expiration callback from AlarmManager.
+     */
+    private void updateAlarmManager() {
+        // Locate the next firing timer if one exists.
+        Timer nextExpiringTimer = null;
+        for (Timer timer : getMutableTimers()) {
+            if (timer.isRunning()) {
+                if (nextExpiringTimer == null) {
+                    nextExpiringTimer = timer;
+                } else if (timer.getExpirationTime() < nextExpiringTimer.getExpirationTime()) {
+                    nextExpiringTimer = timer;
+                }
+            }
+        }
+
+        // Build the intent that signals the timer expiration.
+        final Intent intent = TimerService.createTimerExpiredIntent(mContext, nextExpiringTimer);
+
+        if (nextExpiringTimer == null) {
+            // Cancel the existing timer expiration callback.
+            final PendingIntent pi = PendingIntent.getService(mContext,
+                    0, intent, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_NO_CREATE);
+            if (pi != null) {
+                mAlarmManager.cancel(pi);
+                pi.cancel();
+            }
+        } else {
+            // Update the existing timer expiration callback.
+            final PendingIntent pi = PendingIntent.getService(mContext,
+                    0, intent, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
+            schedulePendingIntent(nextExpiringTimer.getExpirationTime(), pi);
+        }
+    }
+
+    /**
+     * Starts and stops the ringer for timers if the change to the timer demands it.
+     *
+     * @param before the state of the timer before the change; {@code null} indicates added
+     * @param after the state of the timer after the change; {@code null} indicates delete
+     */
+    private void updateRinger(Timer before, Timer after) {
+        // Retrieve the states before and after the change.
+        final Timer.State beforeState = before == null ? null : before.getState();
+        final Timer.State afterState = after == null ? null : after.getState();
+
+        // If the timer state did not change, the ringer state is unchanged.
+        if (beforeState == afterState) {
+            return;
+        }
+
+        // If the timer is the first to expire, start ringing.
+        if (afterState == EXPIRED && mRingingIds.add(after.getId()) && mRingingIds.size() == 1) {
+            AlarmAlertWakeLock.acquireScreenCpuWakeLock(mContext);
+            TimerKlaxon.start(mContext);
+        }
+
+        // If the expired timer was the last to reset, stop ringing.
+        if (beforeState == EXPIRED && mRingingIds.remove(before.getId()) && mRingingIds.isEmpty()) {
+            TimerKlaxon.stop(mContext);
+            AlarmAlertWakeLock.releaseCpuLock();
+        }
+    }
+
+    /**
+     * Updates the notification controlling unexpired timers. This notification is only displayed
+     * when the application is not open.
+     */
+    void updateNotification() {
+        // Notifications should be hidden if the app is open.
+        if (mNotificationModel.isApplicationInForeground()) {
+            mNotificationManager.cancel(mNotificationModel.getUnexpiredTimerNotificationId());
+            return;
+        }
+
+        // Filter the timers to just include unexpired ones.
+        final List<Timer> unexpired = new ArrayList<>();
+        for (Timer timer : getMutableTimers()) {
+            if (timer.isRunning() || timer.isPaused()) {
+                unexpired.add(timer);
+            }
+        }
+
+        // If no unexpired timers exist, cancel the notification.
+        if (unexpired.isEmpty()) {
+            mNotificationManager.cancel(mNotificationModel.getUnexpiredTimerNotificationId());
+            return;
+        }
+
+        // Sort the unexpired timers to locate the next one scheduled to expire.
+        Collections.sort(unexpired, Timer.EXPIRY_COMPARATOR);
+        final Timer timer = unexpired.get(0);
+        final long remainingTime = timer.getRemainingTime();
+
+        // Generate some descriptive text, a title, and some actions based on timer states.
+        final String contentText;
+        final String contentTitle;
+        @DrawableRes int firstActionIconId, secondActionIconId = 0;
+        @StringRes int firstActionTitleId, secondActionTitleId = 0;
+        Intent firstActionIntent, secondActionIntent = null;
+
+        if (unexpired.size() == 1) {
+            contentText = formatElapsedTimeUntilExpiry(remainingTime);
+
+            if (timer.isRunning()) {
+                // Single timer is running.
+                if (TextUtils.isEmpty(timer.getLabel())) {
+                    contentTitle = mContext.getString(R.string.timer_notification_label);
+                } else {
+                    contentTitle = timer.getLabel();
+                }
+
+                firstActionIconId = R.drawable.ic_pause_24dp;
+                firstActionTitleId = R.string.timer_pause;
+                firstActionIntent = new Intent(mContext, TimerService.class)
+                        .setAction(HandleDeskClockApiCalls.ACTION_PAUSE_TIMER)
+                        .putExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID, timer.getId());
+
+                secondActionIconId = R.drawable.ic_add_24dp;
+                secondActionTitleId = R.string.timer_plus_1_min;
+                secondActionIntent = new Intent(mContext, TimerService.class)
+                        .setAction(HandleDeskClockApiCalls.ACTION_ADD_MINUTE_TIMER)
+                        .putExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID, timer.getId());
+            } else {
+                // Single timer is paused.
+                contentTitle = mContext.getString(R.string.timer_paused);
+
+                firstActionIconId = R.drawable.ic_start_24dp;
+                firstActionTitleId = R.string.sw_resume_button;
+                firstActionIntent = new Intent(mContext, TimerService.class)
+                        .setAction(HandleDeskClockApiCalls.ACTION_START_TIMER)
+                        .putExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID, timer.getId());
+
+                secondActionIconId = R.drawable.ic_reset_24dp;
+                secondActionTitleId = R.string.sw_reset_button;
+                secondActionIntent = new Intent(mContext, TimerService.class)
+                        .setAction(HandleDeskClockApiCalls.ACTION_RESET_TIMER)
+                        .putExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID, timer.getId());
+            }
+        } else {
+            if (timer.isRunning()) {
+                // At least one timer is running.
+                final String timeRemaining = formatElapsedTimeUntilExpiry(remainingTime);
+                contentText = mContext.getString(R.string.next_timer_notif, timeRemaining);
+                contentTitle = mContext.getString(R.string.timers_in_use, unexpired.size());
+            } else {
+                // All timers are paused.
+                contentText = mContext.getString(R.string.all_timers_stopped_notif);
+                contentTitle = mContext.getString(R.string.timers_stopped, unexpired.size());
+            }
+
+            firstActionIconId = R.drawable.ic_reset_24dp;
+            firstActionTitleId = R.string.timer_reset_all;
+            firstActionIntent = TimerService.createResetUnexpiredTimersIntent(mContext);
+        }
+
+        // Intent to load the app and show the timer when the notification is tapped.
+        final Intent showApp = new Intent(mContext, HandleDeskClockApiCalls.class)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+                .setAction(HandleDeskClockApiCalls.ACTION_SHOW_TIMERS)
+                .putExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID, timer.getId())
+                .putExtra(HandleDeskClockApiCalls.EXTRA_EVENT_LABEL, R.string.label_notification);
+
+        final PendingIntent pendingShowApp = PendingIntent.getActivity(mContext, 0, showApp,
+                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
+
+        final NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext)
+                .setOngoing(true)
+                .setLocalOnly(true)
+                .setShowWhen(false)
+                .setAutoCancel(false)
+                .setContentText(contentText)
+                .setContentTitle(contentTitle)
+                .setContentIntent(pendingShowApp)
+                .setSmallIcon(R.drawable.stat_notify_timer)
+                .setPriority(NotificationCompat.PRIORITY_HIGH)
+                .setCategory(NotificationCompat.CATEGORY_ALARM)
+                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
+
+        final PendingIntent firstAction = PendingIntent.getService(mContext, 0,
+                firstActionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+        final String firstActionTitle = mContext.getString(firstActionTitleId);
+        builder.addAction(firstActionIconId, firstActionTitle, firstAction);
+
+        if (secondActionIntent != null) {
+            final PendingIntent secondAction = PendingIntent.getService(mContext, 0,
+                    secondActionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+            final String secondActionTitle = mContext.getString(secondActionTitleId);
+            builder.addAction(secondActionIconId, secondActionTitle, secondAction);
+        }
+
+        // Update the notification.
+        final Notification notification = builder.build();
+        final int notificationId = mNotificationModel.getUnexpiredTimerNotificationId();
+        mNotificationManager.notify(notificationId, notification);
+
+        final Intent updateNotification = TimerService.createUpdateNotificationIntent(mContext);
+        if (timer.isRunning() && remainingTime > MINUTE_IN_MILLIS) {
+            // Schedule a callback to update the time-sensitive information of the running timer.
+            final PendingIntent pi = PendingIntent.getService(mContext, 0, updateNotification,
+                    PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
+
+            final long nextMinuteChange = remainingTime % MINUTE_IN_MILLIS;
+            final long triggerTime = SystemClock.elapsedRealtime() + nextMinuteChange;
+
+            schedulePendingIntent(triggerTime, pi);
+        } else {
+            // Cancel the update notification callback.
+            final PendingIntent pi = PendingIntent.getService(mContext, 0, updateNotification,
+                    PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_NO_CREATE);
+            if (pi != null) {
+                mAlarmManager.cancel(pi);
+                pi.cancel();
+            }
+        }
+    }
+
+    /**
+     * Updates the heads-up notification controlling expired timers. This heads-up notification is
+     * displayed whether the application is open or not.
+     */
+    private void updateHeadsUpNotification() {
+        // Nothing can be done with the heads-up notification without a valid service reference.
+        if (mService == null) {
+            return;
+        }
+
+        final List<Timer> expired = getExpiredTimers();
+
+        // If no expired timers exist, stop the service (which cancels the foreground notification).
+        if (expired.isEmpty()) {
+            mService.stopSelf();
+            mService = null;
+            return;
+        }
+
+        // Generate some descriptive text, a title, and an action name based on the timer count.
+        final int timerId;
+        final String contentText;
+        final String contentTitle;
+        final String resetActionTitle;
+        if (expired.size() > 1) {
+            timerId = -1;
+            contentText = mContext.getString(R.string.timer_multi_times_up, expired.size());
+            contentTitle = mContext.getString(R.string.timer_notification_label);
+            resetActionTitle = mContext.getString(R.string.timer_stop_all);
+        } else {
+            final Timer timer = expired.get(0);
+            timerId = timer.getId();
+            resetActionTitle = mContext.getString(R.string.timer_stop);
+            contentText = mContext.getString(R.string.timer_times_up);
+
+            final String label = timer.getLabel();
+            if (TextUtils.isEmpty(label)) {
+                contentTitle = mContext.getString(R.string.timer_notification_label);
+            } else {
+                contentTitle = label;
+            }
+        }
+
+        // Content intent shows the timer full screen when clicked.
+        final Intent content = new Intent(mContext, ExpiredTimersActivity.class);
+        final PendingIntent pendingContent = PendingIntent.getActivity(mContext, 0, content,
+                PendingIntent.FLAG_UPDATE_CURRENT);
+
+        // Full screen intent has flags so it is different than the content intent.
+        final Intent fullScreen = new Intent(mContext, ExpiredTimersActivity.class)
+                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
+        final PendingIntent pendingFullScreen = PendingIntent.getActivity(mContext, 0, fullScreen,
+                PendingIntent.FLAG_UPDATE_CURRENT);
+
+        // First action intent is either reset single timer or reset all timers.
+        final Intent reset = TimerService.createResetExpiredTimersIntent(mContext);
+        final PendingIntent pendingReset = PendingIntent.getService(mContext, 0, reset,
+                PendingIntent.FLAG_UPDATE_CURRENT);
+
+        final NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext)
+                .setWhen(0)
+                .setOngoing(true)
+                .setLocalOnly(true)
+                .setAutoCancel(false)
+                .setContentText(contentText)
+                .setContentTitle(contentTitle)
+                .setContentIntent(pendingContent)
+                .setSmallIcon(R.drawable.stat_notify_timer)
+                .setFullScreenIntent(pendingFullScreen, true)
+                .setPriority(NotificationCompat.PRIORITY_MAX)
+                .setDefaults(NotificationCompat.DEFAULT_LIGHTS)
+                .addAction(R.drawable.ic_stop_24dp, resetActionTitle, pendingReset);
+
+        // Add a second action if only a single timer is expired.
+        if (expired.size() == 1) {
+            // Second action intent adds a minute to a single timer.
+            final Intent addMinute = TimerService.createAddMinuteTimerIntent(mContext, timerId);
+            final PendingIntent pendingAddMinute = PendingIntent.getService(mContext, 0, addMinute,
+                    PendingIntent.FLAG_UPDATE_CURRENT);
+            final String addMinuteTitle = mContext.getString(R.string.timer_plus_1_min);
+            builder.addAction(R.drawable.ic_add_24dp, addMinuteTitle, pendingAddMinute);
+        }
+
+        // Update the notification.
+        final Notification notification = builder.build();
+        final int notificationId = mNotificationModel.getExpiredTimerNotificationId();
+        mService.startForeground(notificationId, notification);
+    }
+
+    /**
+     * Format "7 hours 52 minutes remaining"
+     */
+    @VisibleForTesting
+    String formatElapsedTimeUntilExpiry(long remainingTime) {
+        final int hours = (int) remainingTime / (int) HOUR_IN_MILLIS;
+        final int minutes = (int) remainingTime / ((int) MINUTE_IN_MILLIS) % 60;
+
+        String minSeq = Utils.getNumberFormattedQuantityString(mContext, R.plurals.minutes, minutes);
+        String hourSeq = Utils.getNumberFormattedQuantityString(mContext, R.plurals.hours, hours);
+
+        // The verb "remaining" may have to change tense for singular subjects in some languages.
+        final String verb = mContext.getString((minutes > 1 || hours > 1)
+                ? R.string.timer_remaining_multiple
+                : R.string.timer_remaining_single);
+
+        final boolean showHours = hours > 0;
+        final boolean showMinutes = minutes > 0;
+
+        int formatStringId;
+        if (showHours) {
+            if (showMinutes) {
+                formatStringId = R.string.timer_notifications_hours_minutes;
+            } else {
+                formatStringId = R.string.timer_notifications_hours;
+            }
+        } else if (showMinutes) {
+            formatStringId = R.string.timer_notifications_minutes;
+        } else {
+            formatStringId = R.string.timer_notifications_less_min;
+        }
+        return String.format(mContext.getString(formatStringId), hourSeq, minSeq, verb);
+    }
+
+    private void schedulePendingIntent(long triggerTime, PendingIntent pi) {
+        if (Utils.isMOrLater()) {
+            // Make sure the timer fires when the device is in doze mode. The timer is not
+            // guaranteed to fire at the requested time. It may be delayed up to 15 minutes.
+            mAlarmManager.setExactAndAllowWhileIdle(ELAPSED_REALTIME_WAKEUP, triggerTime, pi);
+        } else {
+            mAlarmManager.setExact(ELAPSED_REALTIME_WAKEUP, triggerTime, pi);
+        }
+    }
+
+    /**
+     * Update the stopwatch notification in response to a locale change.
+     */
+    private final class LocaleChangedReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            updateNotification();
+            updateHeadsUpNotification();
+        }
+    }
+
+    /**
+     * This receiver is notified when shared preferences change. Cached information built on
+     * preferences must be cleared.
+     */
+    private final class PreferenceListener implements OnSharedPreferenceChangeListener {
+        @Override
+        public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+            switch (key) {
+                case SettingsActivity.KEY_TIMER_RINGTONE:
+                    mTimerRingtoneUri = null;
+                    mTimerRingtoneTitle = null;
+                    break;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/provider/Alarm.java b/src/com/android/deskclock/provider/Alarm.java
index 54389e1..7fac18b 100644
--- a/src/com/android/deskclock/provider/Alarm.java
+++ b/src/com/android/deskclock/provider/Alarm.java
@@ -29,6 +29,7 @@
 import android.os.Parcelable;
 
 import com.android.deskclock.R;
+import com.android.deskclock.data.DataModel;
 
 import java.util.Calendar;
 import java.util.LinkedList;
@@ -44,9 +45,9 @@
      * The default sort order for this table
      */
     private static final String DEFAULT_SORT_ORDER =
-            HOUR + ", " +
-            MINUTES + " ASC" + ", " +
-            _ID + " DESC";
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + HOUR + ", " +
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." +  MINUTES + " ASC" + ", " +
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + ClockContract.AlarmsColumns._ID + " DESC";
 
     private static final String[] QUERY_COLUMNS = {
             _ID,
@@ -60,6 +61,28 @@
             DELETE_AFTER_USE
     };
 
+    private static final String[] QUERY_ALARMS_WITH_INSTANCES_COLUMNS = {
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + _ID,
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + HOUR,
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + MINUTES,
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + DAYS_OF_WEEK,
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + ENABLED,
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + VIBRATE,
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + LABEL,
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + RINGTONE,
+            ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + DELETE_AFTER_USE,
+            ClockDatabaseHelper.INSTANCES_TABLE_NAME + "."
+                    + ClockContract.InstancesColumns.ALARM_STATE,
+            ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns._ID,
+            ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns.YEAR,
+            ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns.MONTH,
+            ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns.DAY,
+            ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns.HOUR,
+            ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns.MINUTES,
+            ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns.LABEL,
+            ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns.VIBRATE
+    };
+
     /**
      * These save calls to cursor.getColumnIndexOrThrow()
      * THEY MUST BE KEPT IN SYNC WITH ABOVE QUERY COLUMNS
@@ -73,8 +96,18 @@
     private static final int LABEL_INDEX = 6;
     private static final int RINGTONE_INDEX = 7;
     private static final int DELETE_AFTER_USE_INDEX = 8;
+    private static final int INSTANCE_STATE_INDEX = 9;
+    public static final int INSTANCE_ID_INDEX = 10;
+    public static final int INSTANCE_YEAR_INDEX = 11;
+    public static final int INSTANCE_MONTH_INDEX = 12;
+    public static final int INSTANCE_DAY_INDEX = 13;
+    public static final int INSTANCE_HOUR_INDEX = 14;
+    public static final int INSTANCE_MINUTE_INDEX = 15;
+    public static final int INSTANCE_LABEL_INDEX = 16;
+    public static final int INSTANCE_VIBRATE_INDEX = 17;
 
     private static final int COLUMN_COUNT = DELETE_AFTER_USE_INDEX + 1;
+    private static final int ALARM_JOIN_INSTANCE_COLUMN_COUNT = INSTANCE_VIBRATE_INDEX + 1;
 
     public static ContentValues createContentValues(Alarm alarm) {
         ContentValues values = new ContentValues(COLUMN_COUNT);
@@ -99,10 +132,6 @@
         return values;
     }
 
-    public static Intent createIntent(String action, long alarmId) {
-        return new Intent(action).setData(getUri(alarmId));
-    }
-
     public static Intent createIntent(Context context, Class<?> cls, long alarmId) {
         return new Intent(context, cls).setData(getUri(alarmId));
     }
@@ -122,39 +151,31 @@
      * @return cursor loader with all the alarms.
      */
     public static CursorLoader getAlarmsCursorLoader(Context context) {
-        return new CursorLoader(context, ClockContract.AlarmsColumns.CONTENT_URI,
-                QUERY_COLUMNS, null, null, DEFAULT_SORT_ORDER);
+        return new CursorLoader(context, ALARMS_WITH_INSTANCES_URI,
+                QUERY_ALARMS_WITH_INSTANCES_COLUMNS, null, null, DEFAULT_SORT_ORDER);
     }
 
     /**
      * Get alarm by id.
      *
-     * @param contentResolver to perform the query on.
+     * @param cr to perform the query on.
      * @param alarmId for the desired alarm.
      * @return alarm if found, null otherwise
      */
-    public static Alarm getAlarm(ContentResolver contentResolver, long alarmId) {
-        Cursor cursor = contentResolver.query(getUri(alarmId), QUERY_COLUMNS, null, null, null);
-        Alarm result = null;
-        if (cursor == null) {
-            return result;
-        }
-
-        try {
+    public static Alarm getAlarm(ContentResolver cr, long alarmId) {
+        try (Cursor cursor = cr.query(getUri(alarmId), QUERY_COLUMNS, null, null, null)) {
             if (cursor.moveToFirst()) {
-                result = new Alarm(cursor);
+                return new Alarm(cursor);
             }
-        } finally {
-            cursor.close();
         }
 
-        return result;
+        return null;
     }
 
     /**
      * Get all alarms given conditions.
      *
-     * @param contentResolver to perform the query on.
+     * @param cr to perform the query on.
      * @param selection A filter declaring which rows to return, formatted as an
      *         SQL WHERE clause (excluding the WHERE itself). Passing null will
      *         return all rows for the given URI.
@@ -163,34 +184,31 @@
      *         appear in the selection. The values will be bound as Strings.
      * @return list of alarms matching where clause or empty list if none found.
      */
-    public static List<Alarm> getAlarms(ContentResolver contentResolver,
-            String selection, String ... selectionArgs) {
-        Cursor cursor  = contentResolver.query(CONTENT_URI, QUERY_COLUMNS,
-                selection, selectionArgs, null);
-        List<Alarm> result = new LinkedList<Alarm>();
-        if (cursor == null) {
-            return result;
-        }
-
-        try {
-            if (cursor.moveToFirst()) {
+    public static List<Alarm> getAlarms(ContentResolver cr, String selection,
+            String... selectionArgs) {
+        final List<Alarm> result = new LinkedList<>();
+        try (Cursor cursor = cr.query(CONTENT_URI, QUERY_COLUMNS, selection, selectionArgs, null)) {
+            if (cursor != null && cursor.moveToFirst()) {
                 do {
                     result.add(new Alarm(cursor));
                 } while (cursor.moveToNext());
             }
-        } finally {
-            cursor.close();
         }
 
         return result;
     }
 
-    public static boolean isTomorrow(Alarm alarm) {
-        final Calendar now = Calendar.getInstance();
+    public static boolean isTomorrow(Alarm alarm, Calendar now) {
         final int alarmHour = alarm.hour;
         final int currHour = now.get(Calendar.HOUR_OF_DAY);
-        return alarmHour < currHour ||
-                (alarmHour == currHour && alarm.minutes <= now.get(Calendar.MINUTE));
+        // If the alarm is not snoozed and the time is less than the current time, it must be
+        // firing tomorrow.
+        // If the alarm is snoozed, return "false" to indicate that this alarm is firing today.
+        // (The alarm must have already rung today in order to be snoozed, and this function is only
+        // called on non-repeating alarms.)
+        return alarm.instanceState != AlarmInstance.SNOOZE_STATE
+                && (alarmHour < currHour
+                || (alarmHour == currHour && alarm.minutes <= now.get(Calendar.MINUTE)));
     }
 
     public static Alarm addAlarm(ContentResolver contentResolver, Alarm alarm) {
@@ -234,6 +252,8 @@
     public String label;
     public Uri alert;
     public boolean deleteAfterUse;
+    public int instanceState;
+    public int instanceId;
 
     // Creates a default alarm at the current time.
     public Alarm() {
@@ -247,7 +267,7 @@
         this.vibrate = true;
         this.daysOfWeek = new DaysOfWeek(0);
         this.label = "";
-        this.alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
+        this.alert = DataModel.getDataModel().getDefaultAlarmRingtoneUri();
         this.deleteAfterUse = false;
     }
 
@@ -261,6 +281,11 @@
         label = c.getString(LABEL_INDEX);
         deleteAfterUse = c.getInt(DELETE_AFTER_USE_INDEX) == 1;
 
+        if (c.getColumnCount() == ALARM_JOIN_INSTANCE_COLUMN_COUNT) {
+            instanceState = c.getInt(INSTANCE_STATE_INDEX);
+            instanceId = c.getInt(INSTANCE_ID_INDEX);
+        }
+
         if (c.isNull(RINGTONE_INDEX)) {
             // Should we be saving this with the current ringtone or leave it null
             // so it changes when user changes default ringtone?
@@ -278,15 +303,23 @@
         daysOfWeek = new DaysOfWeek(p.readInt());
         vibrate = p.readInt() == 1;
         label = p.readString();
-        alert = (Uri) p.readParcelable(null);
+        alert = p.readParcelable(null);
         deleteAfterUse = p.readInt() == 1;
     }
 
     public String getLabelOrDefault(Context context) {
-        if (label == null || label.length() == 0) {
-            return context.getString(R.string.default_label);
-        }
-        return label;
+        return label.isEmpty() ? context.getString(R.string.default_label) : label;
+    }
+
+    /**
+     * Whether the alarm is in a state to show preemptive dismiss. Valid states are SNOOZE_STATE
+     * HIGH_NOTIFICATION, LOW_NOTIFICATION, and HIDE_NOTIFICATION.
+     */
+    public boolean canPreemptivelyDismiss() {
+        return instanceState == AlarmInstance.SNOOZE_STATE
+                || instanceState == AlarmInstance.HIGH_NOTIFICATION_STATE
+                || instanceState == AlarmInstance.LOW_NOTIFICATION_STATE
+                || instanceState == AlarmInstance.HIDE_NOTIFICATION_STATE;
     }
 
     public void writeToParcel(Parcel p, int flags) {
@@ -358,6 +391,12 @@
         if (addDays > 0) {
             nextInstanceTime.add(Calendar.DAY_OF_WEEK, addDays);
         }
+
+        // Daylight Savings Time can alter the hours and minutes when adjusting the day above.
+        // Reset the desired hour and minute now that the correct day has been chosen.
+        nextInstanceTime.set(Calendar.HOUR_OF_DAY, hour);
+        nextInstanceTime.set(Calendar.MINUTE, minutes);
+
         return nextInstanceTime;
     }
 
diff --git a/src/com/android/deskclock/provider/AlarmInstance.java b/src/com/android/deskclock/provider/AlarmInstance.java
index ed04450..5be3c03 100644
--- a/src/com/android/deskclock/provider/AlarmInstance.java
+++ b/src/com/android/deskclock/provider/AlarmInstance.java
@@ -24,11 +24,13 @@
 import android.database.Cursor;
 import android.media.RingtoneManager;
 import android.net.Uri;
+import android.preference.PreferenceManager;
 
 import com.android.deskclock.LogUtils;
 import com.android.deskclock.R;
-import com.android.deskclock.SettingsActivity;
 import com.android.deskclock.Utils;
+import com.android.deskclock.alarms.AlarmStateManager;
+import com.android.deskclock.settings.SettingsActivity;
 
 import java.util.Calendar;
 import java.util.LinkedList;
@@ -136,26 +138,18 @@
     /**
      * Get alarm instance from instanceId.
      *
-     * @param contentResolver to perform the query on.
+     * @param cr to perform the query on.
      * @param instanceId for the desired instance.
      * @return instance if found, null otherwise
      */
-    public static AlarmInstance getInstance(ContentResolver contentResolver, long instanceId) {
-        Cursor cursor = contentResolver.query(getUri(instanceId), QUERY_COLUMNS, null, null, null);
-        AlarmInstance result = null;
-        if (cursor == null) {
-            return result;
-        }
-
-        try {
-            if (cursor.moveToFirst()) {
-                result = new AlarmInstance(cursor);
+    public static AlarmInstance getInstance(ContentResolver cr, long instanceId) {
+        try (Cursor cursor = cr.query(getUri(instanceId), QUERY_COLUMNS, null, null, null)) {
+            if (cursor != null && cursor.moveToFirst()) {
+                return new AlarmInstance(cursor, false /* joinedTable */);
             }
-        } finally {
-            cursor.close();
         }
 
-        return result;
+        return null;
     }
 
     /**
@@ -211,7 +205,7 @@
     /**
      * Get a list of instances given selection.
      *
-     * @param contentResolver to perform the query on.
+     * @param cr to perform the query on.
      * @param selection A filter declaring which rows to return, formatted as an
      *         SQL WHERE clause (excluding the WHERE itself). Passing null will
      *         return all rows for the given URI.
@@ -220,23 +214,15 @@
      *         appear in the selection. The values will be bound as Strings.
      * @return list of alarms matching where clause or empty list if none found.
      */
-    public static List<AlarmInstance> getInstances(ContentResolver contentResolver,
-            String selection, String ... selectionArgs) {
-        Cursor cursor  = contentResolver.query(CONTENT_URI, QUERY_COLUMNS,
-                selection, selectionArgs, null);
-        List<AlarmInstance> result = new LinkedList<>();
-        if (cursor == null) {
-            return result;
-        }
-
-        try {
+    public static List<AlarmInstance> getInstances(ContentResolver cr, String selection,
+                                                   String... selectionArgs) {
+        final List<AlarmInstance> result = new LinkedList<>();
+        try (Cursor cursor = cr.query(CONTENT_URI, QUERY_COLUMNS, selection, selectionArgs, null)) {
             if (cursor.moveToFirst()) {
                 do {
-                    result.add(new AlarmInstance(cursor));
+                    result.add(new AlarmInstance(cursor, false /* joinedTable */));
                 } while (cursor.moveToNext());
             }
-        } finally {
-            cursor.close();
         }
 
         return result;
@@ -279,15 +265,17 @@
     }
 
     /**
+     * @param context
      * @param contentResolver to access the content provider
      * @param alarmId identifies the alarm in question
      * @param instanceId identifies the instance to keep; all other instances will be removed
      */
-    public static void deleteOtherInstances(ContentResolver contentResolver, long alarmId,
-            long instanceId) {
+    public static void deleteOtherInstances(Context context, ContentResolver contentResolver,
+            long alarmId, long instanceId) {
         final List<AlarmInstance> instances = getInstancesByAlarmId(contentResolver, alarmId);
         for (AlarmInstance instance : instances) {
             if (instance.mId != instanceId) {
+                AlarmStateManager.unregisterInstance(context, instance);
                 deleteInstance(contentResolver, instance.mId);
             }
         }
@@ -320,15 +308,40 @@
         mAlarmState = SILENT_STATE;
     }
 
-    public AlarmInstance(Cursor c) {
-        mId = c.getLong(ID_INDEX);
-        mYear = c.getInt(YEAR_INDEX);
-        mMonth = c.getInt(MONTH_INDEX);
-        mDay = c.getInt(DAY_INDEX);
-        mHour = c.getInt(HOUR_INDEX);
-        mMinute = c.getInt(MINUTES_INDEX);
-        mLabel = c.getString(LABEL_INDEX);
-        mVibrate = c.getInt(VIBRATE_INDEX) == 1;
+    public AlarmInstance(AlarmInstance instance) {
+         this.mId = instance.mId;
+         this.mYear = instance.mYear;
+         this.mMonth = instance.mMonth;
+         this.mDay = instance.mDay;
+         this.mHour = instance.mHour;
+         this.mMinute = instance.mMinute;
+         this.mLabel = instance.mLabel;
+         this.mVibrate = instance.mVibrate;
+         this.mRingtone = instance.mRingtone;
+         this.mAlarmId = instance.mAlarmId;
+         this.mAlarmState = instance.mAlarmState;
+    }
+
+    public AlarmInstance(Cursor c, boolean joinedTable) {
+        if (joinedTable) {
+            mId = c.getLong(Alarm.INSTANCE_ID_INDEX);
+            mYear = c.getInt(Alarm.INSTANCE_YEAR_INDEX);
+            mMonth = c.getInt(Alarm.INSTANCE_MONTH_INDEX);
+            mDay = c.getInt(Alarm.INSTANCE_DAY_INDEX);
+            mHour = c.getInt(Alarm.INSTANCE_HOUR_INDEX);
+            mMinute = c.getInt(Alarm.INSTANCE_MINUTE_INDEX);
+            mLabel = c.getString(Alarm.INSTANCE_LABEL_INDEX);
+            mVibrate = c.getInt(Alarm.INSTANCE_VIBRATE_INDEX) == 1;
+        } else {
+            mId = c.getLong(ID_INDEX);
+            mYear = c.getInt(YEAR_INDEX);
+            mMonth = c.getInt(MONTH_INDEX);
+            mDay = c.getInt(DAY_INDEX);
+            mHour = c.getInt(HOUR_INDEX);
+            mMinute = c.getInt(MINUTES_INDEX);
+            mLabel = c.getString(LABEL_INDEX);
+            mVibrate = c.getInt(VIBRATE_INDEX) == 1;
+        }
         if (c.isNull(RINGTONE_INDEX)) {
             // Should we be saving this with the current ringtone or leave it null
             // so it changes when user changes default ringtone?
diff --git a/src/com/android/deskclock/provider/City.java b/src/com/android/deskclock/provider/City.java
deleted file mode 100644
index 761dc39..0000000
--- a/src/com/android/deskclock/provider/City.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright (C) 2013 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.provider;
-
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-
-import java.util.Calendar;
-import java.util.LinkedList;
-import java.util.List;
-
-public final class City implements ClockContract.CitiesColumns {
-    private static final String[] QUERY_COLUMNS = {
-            CITY_ID,
-            CITY_NAME,
-            TIMEZONE_NAME,
-            TIMEZONE_OFFSET
-    };
-
-    /**
-     * These save calls to cursor.getColumnIndexOrThrow()
-     * THEY MUST BE KEPT IN SYNC WITH ABOVE QUERY COLUMNS
-     */
-    private static final int CITY_ID_INDEX = 0;
-    private static final int CITY_NAME_INDEX = 1;
-    private static final int TIMEZONE_NAME_INDEX = 2;
-    private static final int TIMEZONE_OFFSET_INDEX = 3;
-
-    private static final int COLUMN_COUNT = TIMEZONE_OFFSET_INDEX + 1;
-
-    public static ContentValues createContentValues(City city) {
-        ContentValues values = new ContentValues(COLUMN_COUNT);
-        values.put(CITY_ID, city.mCityId);
-        values.put(CITY_NAME, city.mCityName);
-        values.put(TIMEZONE_NAME, city.mTimezoneName);
-        values.put(TIMEZONE_OFFSET, city.mTimezoneOffset);
-        return values;
-    }
-
-    public static String getCityId(Uri contentUri) {
-        return contentUri.getLastPathSegment();
-    }
-
-    /**
-     * Return content uri for specific city id.
-     *
-     * @param cityId to append to content uri
-     *
-     * @return a new city content uri with the given ID appended to the end of the path
-     */
-    public static Uri getContentUriForId(String cityId) {
-        return CONTENT_URI.buildUpon().appendEncodedPath(cityId).build();
-    }
-
-
-    /**
-     * Get city from cityId.
-     *
-     * @param contentResolver to perform the query on.
-     * @param cityId for the desired city.
-     * @return city if found, null otherwise
-     */
-    public static City getCity(ContentResolver contentResolver, String cityId) {
-        Cursor cursor = contentResolver.query(getContentUriForId(cityId),
-                QUERY_COLUMNS, null, null, null);
-        City result = null;
-        if (cursor == null) {
-            return result;
-        }
-
-        try {
-            if (cursor.moveToFirst()) {
-                result = new City(cursor);
-            }
-        } finally {
-            cursor.close();
-        }
-
-        return result;
-    }
-
-    /**
-     * Get a list of cities given selection.
-     *
-     * @param contentResolver to perform the query on.
-     * @param selection A filter declaring which rows to return, formatted as an
-     *         SQL WHERE clause (excluding the WHERE itself). Passing null will
-     *         return all rows for the given URI.
-     * @param selectionArgs You may include ?s in selection, which will be
-     *         replaced by the values from selectionArgs, in the order that they
-     *         appear in the selection. The values will be bound as Strings.
-     * @return list of alarms matching where clause or empty list if none found.
-     */
-    public static List<City> getCities(ContentResolver contentResolver,
-            String selection, String... selectionArgs) {
-        Cursor cursor  = contentResolver.query(CONTENT_URI, QUERY_COLUMNS,
-                selection, selectionArgs, null);
-        List<City> result = new LinkedList<City>();
-        if (cursor == null) {
-            return result;
-        }
-
-        try {
-            if (cursor.moveToFirst()) {
-                do {
-                    result.add(new City(cursor));
-                } while (cursor.moveToNext());
-            }
-        } finally {
-            cursor.close();
-        }
-
-        return result;
-    }
-
-    public static City addCity(ContentResolver contentResolver, City city) {
-        ContentValues values = createContentValues(city);
-        Uri uri = contentResolver.insert(CONTENT_URI, values);
-        city.mCityId = getCityId(uri);
-        return city;
-    }
-
-    public static boolean updateCity(ContentResolver contentResolver, City city) {
-        ContentValues values = createContentValues(city);
-        Uri updateUri = getContentUriForId(city.mCityId);
-        long rowsUpdated = contentResolver.update(updateUri, values, null, null);
-        return rowsUpdated == 1;
-    }
-
-    public static boolean deleteCity(ContentResolver contentResolver, String cityId) {
-        Uri uri = getContentUriForId(cityId);
-        int deletedRows = contentResolver.delete(uri, "", null);
-        return deletedRows == 1;
-    }
-
-    // Public fields
-    public String mCityId;
-    public String mCityName;
-    public String mTimezoneName;
-    public int mTimezoneOffset;
-
-    public City(String cityId, String cityName, String timezoneName, int timezoneOffset) {
-        mCityId = cityId;
-        mCityName = cityName;
-        mTimezoneName = timezoneName;
-        mTimezoneOffset = timezoneOffset;
-    }
-
-    public City(Cursor c) {
-        mCityId = c.getString(CITY_ID_INDEX);
-        mCityName = c.getString(CITY_NAME_INDEX);
-        mTimezoneName = c.getString(TIMEZONE_NAME_INDEX);
-        mTimezoneOffset = c.getInt(TIMEZONE_OFFSET_INDEX);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (!(o instanceof City)) return false;
-        final City other = (City) o;
-        return mCityId.equals(other.mCityId);
-    }
-
-    @Override
-    public int hashCode() {
-        return mCityId.hashCode();
-    }
-
-    @Override
-    public String toString() {
-        return "Instance{" +
-                "mCityId=" + mCityId +
-                ", mCityName=" + mCityName +
-                ", mTimezoneName=" + mTimezoneName +
-                ", mTimezoneOffset=" + mTimezoneOffset +
-                '}';
-    }
-}
diff --git a/src/com/android/deskclock/provider/ClockContract.java b/src/com/android/deskclock/provider/ClockContract.java
index 20aed2a..bb22af3 100644
--- a/src/com/android/deskclock/provider/ClockContract.java
+++ b/src/com/android/deskclock/provider/ClockContract.java
@@ -18,6 +18,8 @@
 import android.net.Uri;
 import android.provider.BaseColumns;
 
+import com.android.deskclock.BuildConfig;
+
 /**
  * <p>
  * The contract between the clock provider and desk clock. Contains
@@ -33,7 +35,6 @@
  * <li>The {@link InstancesColumns} table holds the current state of each
  * alarm in the AlarmsColumn table.
  * </li>
- * <li>The {@link CitiesColumns} table holds all user selectable cities</li>
  * </ul>
  */
 public final class ClockContract {
@@ -41,7 +42,7 @@
      * This authority is used for writing to or querying from the clock
      * provider.
      */
-    public static final String AUTHORITY = "com.android.deskclock";
+    public static final String AUTHORITY = BuildConfig.APPLICATION_ID;
 
     /**
      * This utility class cannot be instantiated
@@ -55,25 +56,25 @@
         /**
          * This string is used to indicate no ringtone.
          */
-        public static final Uri NO_RINGTONE_URI = Uri.EMPTY;
+        Uri NO_RINGTONE_URI = Uri.EMPTY;
 
         /**
          * This string is used to indicate no ringtone.
          */
-        public static final String NO_RINGTONE = NO_RINGTONE_URI.toString();
+        String NO_RINGTONE = NO_RINGTONE_URI.toString();
 
         /**
          * True if alarm should vibrate
          * <p>Type: BOOLEAN</p>
          */
-        public static final String VIBRATE = "vibrate";
+        String VIBRATE = "vibrate";
 
         /**
          * Alarm label.
          *
          * <p>Type: STRING</p>
          */
-        public static final String LABEL = "label";
+        String LABEL = "label";
 
         /**
          * Audio alert to play when alarm triggers. Null entry
@@ -82,7 +83,7 @@
          *
          * <p>Type: STRING</p>
          */
-        public static final String RINGTONE = "ringtone";
+        String RINGTONE = "ringtone";
     }
 
     /**
@@ -92,19 +93,26 @@
         /**
          * The content:// style URL for this table.
          */
-        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/alarms");
+        Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/alarms");
+
+        /**
+         * The content:// style URL for the alarms with instance tables, which is used to get the
+         * next firing instance and the current state of an alarm.
+         */
+        Uri ALARMS_WITH_INSTANCES_URI = Uri.parse("content://" + AUTHORITY
+                + "/alarms_with_instances");
 
         /**
          * Hour in 24-hour localtime 0 - 23.
          * <p>Type: INTEGER</p>
          */
-        public static final String HOUR = "hour";
+        String HOUR = "hour";
 
         /**
          * Minutes in localtime 0 - 59.
          * <p>Type: INTEGER</p>
          */
-        public static final String MINUTES = "minutes";
+        String MINUTES = "minutes";
 
         /**
          * Days of the week encoded as a bit set.
@@ -112,19 +120,19 @@
          *
          * {@link DaysOfWeek}
          */
-        public static final String DAYS_OF_WEEK = "daysofweek";
+        String DAYS_OF_WEEK = "daysofweek";
 
         /**
          * True if alarm is active.
          * <p>Type: BOOLEAN</p>
          */
-        public static final String ENABLED = "enabled";
+        String ENABLED = "enabled";
 
         /**
          * Determine if alarm is deleted after it has been used.
          * <p>Type: INTEGER</p>
          */
-        public static final String DELETE_AFTER_USE = "delete_after_use";
+        String DELETE_AFTER_USE = "delete_after_use";
     }
 
     /**
@@ -134,7 +142,7 @@
         /**
          * The content:// style URL for this table.
          */
-        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/instances");
+        Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/instances");
 
         /**
          * Alarm state when to show no notification.
@@ -142,7 +150,7 @@
          * Can transitions to:
          * LOW_NOTIFICATION_STATE
          */
-        public static final int SILENT_STATE = 0;
+        int SILENT_STATE = 0;
 
         /**
          * Alarm state to show low priority alarm notification.
@@ -152,7 +160,7 @@
          * HIGH_NOTIFICATION_STATE
          * DISMISSED_STATE
          */
-        public static final int LOW_NOTIFICATION_STATE = 1;
+        int LOW_NOTIFICATION_STATE = 1;
 
         /**
          * Alarm state to hide low priority alarm notification.
@@ -160,7 +168,7 @@
          * Can transitions to:
          * HIGH_NOTIFICATION_STATE
          */
-        public static final int HIDE_NOTIFICATION_STATE = 2;
+        int HIDE_NOTIFICATION_STATE = 2;
 
         /**
          * Alarm state to show high priority alarm notification.
@@ -169,7 +177,7 @@
          * DISMISSED_STATE
          * FIRED_STATE
          */
-        public static final int HIGH_NOTIFICATION_STATE = 3;
+        int HIGH_NOTIFICATION_STATE = 3;
 
         /**
          * Alarm state when alarm is in snooze.
@@ -178,7 +186,7 @@
          * DISMISSED_STATE
          * FIRED_STATE
          */
-        public static final int SNOOZE_STATE = 4;
+        int SNOOZE_STATE = 4;
 
         /**
          * Alarm state when alarm is being fired.
@@ -188,7 +196,7 @@
          * SNOOZED_STATE
          * MISSED_STATE
          */
-        public static final int FIRED_STATE = 5;
+        int FIRED_STATE = 5;
 
         /**
          * Alarm state when alarm has been missed.
@@ -196,95 +204,61 @@
          * Can transitions to:
          * DISMISSED_STATE
          */
-        public static final int MISSED_STATE = 6;
+        int MISSED_STATE = 6;
 
         /**
          * Alarm state when alarm is done.
          */
-        public static final int DISMISSED_STATE = 7;
+        int DISMISSED_STATE = 7;
 
         /**
          * Alarm state when alarm has been dismissed before its intended firing time.
          */
-        public static final int PREDISMISSED_STATE = 8;
+        int PREDISMISSED_STATE = 8;
 
         /**
          * Alarm year.
          *
          * <p>Type: INTEGER</p>
          */
-        public static final String YEAR = "year";
+        String YEAR = "year";
 
         /**
          * Alarm month in year.
          *
          * <p>Type: INTEGER</p>
          */
-        public static final String MONTH = "month";
+        String MONTH = "month";
 
         /**
          * Alarm day in month.
          *
          * <p>Type: INTEGER</p>
          */
-        public static final String DAY = "day";
+        String DAY = "day";
 
         /**
          * Alarm hour in 24-hour localtime 0 - 23.
          * <p>Type: INTEGER</p>
          */
-        public static final String HOUR = "hour";
+        String HOUR = "hour";
 
         /**
          * Alarm minutes in localtime 0 - 59
          * <p>Type: INTEGER</p>
          */
-        public static final String MINUTES = "minutes";
+        String MINUTES = "minutes";
 
         /**
          * Foreign key to Alarms table
          * <p>Type: INTEGER (long)</p>
          */
-        public static final String ALARM_ID = "alarm_id";
+        String ALARM_ID = "alarm_id";
 
         /**
          * Alarm state
          * <p>Type: INTEGER</p>
          */
-        public static final String ALARM_STATE = "alarm_state";
-    }
-
-    /**
-     * Constants for the Cities table, which contains all selectable cities.
-     */
-    protected interface CitiesColumns {
-        /**
-         * The content:// style URL for this table.
-         */
-        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/cities");
-
-        /**
-         * Primary id for city.
-         * <p>Type: STRING</p>
-         */
-        public static final String CITY_ID = "city_id";
-
-        /**
-         * City name.
-         * <p>Type: STRING</p>
-         */
-        public static final String CITY_NAME = "city_name";
-
-        /**
-         * Timezone name of city.
-         * <p>Type: STRING</p>
-         */
-        public static final String TIMEZONE_NAME = "timezone_name";
-
-        /**
-         * Timezone offset.
-         * <p>Type: INTEGER</p>
-         */
-        public static final String TIMEZONE_OFFSET = "timezone_offset";
+        String ALARM_STATE = "alarm_state";
     }
 }
diff --git a/src/com/android/deskclock/provider/ClockDatabaseHelper.java b/src/com/android/deskclock/provider/ClockDatabaseHelper.java
index 9004471..b75670d 100644
--- a/src/com/android/deskclock/provider/ClockDatabaseHelper.java
+++ b/src/com/android/deskclock/provider/ClockDatabaseHelper.java
@@ -40,7 +40,6 @@
     private static final int VERSION_5 = 5;
 
     /**
-     * Introduce:
      * Added alarm_instances table
      * Added selected_cities table
      * Added DELETE_AFTER_USE column to alarms table
@@ -52,18 +51,23 @@
      */
     private static final int VERSION_7 = 7;
 
+    /**
+     * Removed selected_cities table.
+     */
+    private static final int VERSION_8 = 8;
+
     // This creates a default alarm at 8:30 for every Mon,Tue,Wed,Thu,Fri
-    private static final String DEFAULT_ALARM_1 = "(8, 30, 31, 0, 0, '', NULL, 0);";
+    private static final String DEFAULT_ALARM_1 = "(8, 30, 31, 0, 1, '', NULL, 0);";
 
     // This creates a default alarm at 9:30 for every Sat,Sun
-    private static final String DEFAULT_ALARM_2 = "(9, 00, 96, 0, 0, '', NULL, 0);";
+    private static final String DEFAULT_ALARM_2 = "(9, 00, 96, 0, 1, '', NULL, 0);";
 
     // Database and table names
     static final String DATABASE_NAME = "alarms.db";
     static final String OLD_ALARMS_TABLE_NAME = "alarms";
     static final String ALARMS_TABLE_NAME = "alarm_templates";
     static final String INSTANCES_TABLE_NAME = "alarm_instances";
-    static final String CITIES_TABLE_NAME = "selected_cities";
+    private static final String SELECTED_CITIES_TABLE_NAME = "selected_cities";
 
     private static void createAlarmsTable(SQLiteDatabase db) {
         db.execSQL("CREATE TABLE " + ALARMS_TABLE_NAME + " (" +
@@ -98,27 +102,14 @@
         LogUtils.i("Instance table created");
     }
 
-    private static void createCitiesTable(SQLiteDatabase db) {
-        db.execSQL("CREATE TABLE " + CITIES_TABLE_NAME + " (" +
-                ClockContract.CitiesColumns.CITY_ID + " TEXT PRIMARY KEY," +
-                ClockContract.CitiesColumns.CITY_NAME + " TEXT NOT NULL, " +
-                ClockContract.CitiesColumns.TIMEZONE_NAME + " TEXT NOT NULL, " +
-                ClockContract.CitiesColumns.TIMEZONE_OFFSET + " INTEGER NOT NULL);");
-        LogUtils.i("Cities table created");
-    }
-
-    private Context mContext;
-
     public ClockDatabaseHelper(Context context) {
-        super(context, DATABASE_NAME, null, VERSION_7);
-        mContext = context;
+        super(context, DATABASE_NAME, null, VERSION_8);
     }
 
     @Override
     public void onCreate(SQLiteDatabase db) {
         createAlarmsTable(db);
         createInstanceTable(db);
-        createCitiesTable(db);
 
         // insert default alarms
         LogUtils.i("Inserting default alarms");
@@ -138,21 +129,23 @@
 
     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
-        LogUtils.v("Upgrading alarms database from version "
-                + oldVersion + " to " + currentVersion);
+        LogUtils.v("Upgrading alarms database from version %d to %d", oldVersion, currentVersion);
+
+        if (oldVersion <= VERSION_7) {
+            // This was not used in VERSION_7 or prior, so we can just drop it.
+            db.execSQL("DROP TABLE IF EXISTS " + SELECTED_CITIES_TABLE_NAME + ";");
+        }
 
         if (oldVersion <= VERSION_6) {
-            // These were not used in DB_VERSION_6, so we can just drop them.
+            // This was not used in VERSION_6 or prior, so we can just drop it.
             db.execSQL("DROP TABLE IF EXISTS " + INSTANCES_TABLE_NAME + ";");
-            db.execSQL("DROP TABLE IF EXISTS " + CITIES_TABLE_NAME + ";");
 
             // Create new alarms table and copy over the data
             createAlarmsTable(db);
             createInstanceTable(db);
-            createCitiesTable(db);
 
             LogUtils.i("Copying old alarms to new table");
-            String[] OLD_TABLE_COLUMNS = {
+            final String[] OLD_TABLE_COLUMNS = {
                     "_id",
                     "hour",
                     "minutes",
@@ -162,35 +155,36 @@
                     "message",
                     "alert",
             };
-            Cursor cursor = db.query(OLD_ALARMS_TABLE_NAME, OLD_TABLE_COLUMNS,
-                    null, null, null, null, null);
-            Calendar currentTime = Calendar.getInstance();
-            while (cursor.moveToNext()) {
-                Alarm alarm = new Alarm();
-                alarm.id = cursor.getLong(0);
-                alarm.hour = cursor.getInt(1);
-                alarm.minutes = cursor.getInt(2);
-                alarm.daysOfWeek = new DaysOfWeek(cursor.getInt(3));
-                alarm.enabled = cursor.getInt(4) == 1;
-                alarm.vibrate = cursor.getInt(5) == 1;
-                alarm.label = cursor.getString(6);
+            try (Cursor cursor = db.query(OLD_ALARMS_TABLE_NAME, OLD_TABLE_COLUMNS,
+                    null, null, null, null, null)) {
+                final Calendar currentTime = Calendar.getInstance();
+                while (cursor != null && cursor.moveToNext()) {
+                    final Alarm alarm = new Alarm();
+                    alarm.id = cursor.getLong(0);
+                    alarm.hour = cursor.getInt(1);
+                    alarm.minutes = cursor.getInt(2);
+                    alarm.daysOfWeek = new DaysOfWeek(cursor.getInt(3));
+                    alarm.enabled = cursor.getInt(4) == 1;
+                    alarm.vibrate = cursor.getInt(5) == 1;
+                    alarm.label = cursor.getString(6);
 
-                String alertString = cursor.getString(7);
-                if ("silent".equals(alertString)) {
-                    alarm.alert = Alarm.NO_RINGTONE_URI;
-                } else {
-                    alarm.alert = TextUtils.isEmpty(alertString) ? null : Uri.parse(alertString);
-                }
+                    final String alertString = cursor.getString(7);
+                    if ("silent".equals(alertString)) {
+                        alarm.alert = Alarm.NO_RINGTONE_URI;
+                    } else {
+                        alarm.alert =
+                                TextUtils.isEmpty(alertString) ? null : Uri.parse(alertString);
+                    }
 
-                // Save new version of alarm and create alarminstance for it
-                db.insert(ALARMS_TABLE_NAME, null, Alarm.createContentValues(alarm));
-                if (alarm.enabled) {
-                    AlarmInstance newInstance = alarm.createInstanceAfter(currentTime);
-                    db.insert(INSTANCES_TABLE_NAME, null,
-                            AlarmInstance.createContentValues(newInstance));
+                    // Save new version of alarm and create alarm instance for it
+                    db.insert(ALARMS_TABLE_NAME, null, Alarm.createContentValues(alarm));
+                    if (alarm.enabled) {
+                        AlarmInstance newInstance = alarm.createInstanceAfter(currentTime);
+                        db.insert(INSTANCES_TABLE_NAME, null,
+                                AlarmInstance.createContentValues(newInstance));
+                    }
                 }
             }
-            cursor.close();
 
             LogUtils.i("Dropping old alarm table");
             db.execSQL("DROP TABLE IF EXISTS " + OLD_ALARMS_TABLE_NAME + ";");
@@ -200,22 +194,24 @@
     long fixAlarmInsert(ContentValues values) {
         // Why are we doing this? Is this not a programming bug if we try to
         // insert an already used id?
-        SQLiteDatabase db = getWritableDatabase();
+        final SQLiteDatabase db = getWritableDatabase();
         db.beginTransaction();
         long rowId = -1;
         try {
             // Check if we are trying to re-use an existing id.
-            Object value = values.get(ClockContract.AlarmsColumns._ID);
+            final Object value = values.get(ClockContract.AlarmsColumns._ID);
             if (value != null) {
                 long id = (Long) value;
                 if (id > -1) {
-                    final Cursor cursor = db.query(ALARMS_TABLE_NAME,
-                            new String[]{ClockContract.AlarmsColumns._ID},
-                            ClockContract.AlarmsColumns._ID + " = ?",
-                            new String[]{id + ""}, null, null, null);
-                    if (cursor.moveToFirst()) {
-                        // Record exists. Remove the id so sqlite can generate a new one.
-                        values.putNull(ClockContract.AlarmsColumns._ID);
+                    final String[] columns = {ClockContract.AlarmsColumns._ID};
+                    final String selection = ClockContract.AlarmsColumns._ID + " = ?";
+                    final String[] selectionArgs = {String.valueOf(id)};
+                    try (Cursor cursor = db.query(ALARMS_TABLE_NAME, columns, selection,
+                            selectionArgs, null, null, null)) {
+                        if (cursor.moveToFirst()) {
+                            // Record exists. Remove the id so sqlite can generate a new one.
+                            values.putNull(ClockContract.AlarmsColumns._ID);
+                        }
                     }
                 }
             }
diff --git a/src/com/android/deskclock/provider/ClockProvider.java b/src/com/android/deskclock/provider/ClockProvider.java
index 727f051..c4ee7cc 100644
--- a/src/com/android/deskclock/provider/ClockProvider.java
+++ b/src/com/android/deskclock/provider/ClockProvider.java
@@ -17,6 +17,7 @@
 package com.android.deskclock.provider;
 
 import android.content.ContentProvider;
+import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
@@ -27,28 +28,89 @@
 import android.net.Uri;
 import android.preference.PreferenceManager;
 import android.text.TextUtils;
+import android.util.ArrayMap;
 
 import com.android.deskclock.LogUtils;
 import com.android.deskclock.Utils;
 
+import java.util.Map;
+
+import static com.android.deskclock.provider.ClockContract.AlarmsColumns;
+import static com.android.deskclock.provider.ClockContract.InstancesColumns;
+import static com.android.deskclock.provider.ClockDatabaseHelper.ALARMS_TABLE_NAME;
+import static com.android.deskclock.provider.ClockDatabaseHelper.INSTANCES_TABLE_NAME;
+
 public class ClockProvider extends ContentProvider {
+
     private ClockDatabaseHelper mOpenHelper;
 
     private static final int ALARMS = 1;
     private static final int ALARMS_ID = 2;
     private static final int INSTANCES = 3;
     private static final int INSTANCES_ID = 4;
-    private static final int CITIES = 5;
-    private static final int CITIES_ID = 6;
+    private static final int ALARMS_WITH_INSTANCES = 5;
 
-    private static final UriMatcher sURLMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+    /**
+     * Projection map used by query for snoozed alarms.
+     */
+    private static final Map<String, String> sAlarmsWithInstancesProjection = new ArrayMap<>();
     static {
-        sURLMatcher.addURI(ClockContract.AUTHORITY, "alarms", ALARMS);
-        sURLMatcher.addURI(ClockContract.AUTHORITY, "alarms/#", ALARMS_ID);
-        sURLMatcher.addURI(ClockContract.AUTHORITY, "instances", INSTANCES);
-        sURLMatcher.addURI(ClockContract.AUTHORITY, "instances/#", INSTANCES_ID);
-        sURLMatcher.addURI(ClockContract.AUTHORITY, "cities", CITIES);
-        sURLMatcher.addURI(ClockContract.AUTHORITY, "cities/*", CITIES_ID);
+        sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns._ID,
+                ALARMS_TABLE_NAME + "." + AlarmsColumns._ID);
+        sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns.HOUR,
+                ALARMS_TABLE_NAME + "." + AlarmsColumns.HOUR);
+        sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns.MINUTES,
+                ALARMS_TABLE_NAME + "." + AlarmsColumns.MINUTES);
+        sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns.DAYS_OF_WEEK,
+                ALARMS_TABLE_NAME + "." + AlarmsColumns.DAYS_OF_WEEK);
+        sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns.ENABLED,
+                ALARMS_TABLE_NAME + "." + AlarmsColumns.ENABLED);
+        sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns.VIBRATE,
+                ALARMS_TABLE_NAME + "." + AlarmsColumns.VIBRATE);
+        sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns.LABEL,
+                ALARMS_TABLE_NAME + "." + AlarmsColumns.LABEL);
+        sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns.RINGTONE,
+                ALARMS_TABLE_NAME + "." + AlarmsColumns.RINGTONE);
+        sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns.DELETE_AFTER_USE,
+                ALARMS_TABLE_NAME + "." + AlarmsColumns.DELETE_AFTER_USE);
+        sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "."
+                + InstancesColumns.ALARM_STATE,
+                INSTANCES_TABLE_NAME + "." + InstancesColumns.ALARM_STATE);
+        sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "." + InstancesColumns._ID,
+                INSTANCES_TABLE_NAME + "." + InstancesColumns._ID);
+        sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "." + InstancesColumns.YEAR,
+                INSTANCES_TABLE_NAME + "." + InstancesColumns.YEAR);
+        sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "." + InstancesColumns.MONTH,
+                INSTANCES_TABLE_NAME + "." + InstancesColumns.MONTH);
+        sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "." + InstancesColumns.DAY,
+                INSTANCES_TABLE_NAME + "." + InstancesColumns.DAY);
+        sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "." + InstancesColumns.HOUR,
+                INSTANCES_TABLE_NAME + "." + InstancesColumns.HOUR);
+        sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "." + InstancesColumns.MINUTES,
+                INSTANCES_TABLE_NAME + "." + InstancesColumns.MINUTES);
+        sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "." + InstancesColumns.LABEL,
+                INSTANCES_TABLE_NAME + "." + InstancesColumns.LABEL);
+        sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "." + InstancesColumns.VIBRATE,
+                INSTANCES_TABLE_NAME + "." + InstancesColumns.VIBRATE);
+    }
+
+    private static final String ALARM_JOIN_INSTANCE_TABLE_STATEMENT =
+            ALARMS_TABLE_NAME + " LEFT JOIN " + INSTANCES_TABLE_NAME + " ON (" +
+            ALARMS_TABLE_NAME + "." + AlarmsColumns._ID + " = " + InstancesColumns.ALARM_ID + ")";
+
+    private static final String ALARM_JOIN_INSTANCE_WHERE_STATEMENT =
+            InstancesColumns.ALARM_STATE + " IS NULL OR " +
+            InstancesColumns.ALARM_STATE + " = (SELECT MIN(" + InstancesColumns.ALARM_STATE +
+                    ") FROM " + INSTANCES_TABLE_NAME + " WHERE " + InstancesColumns.ALARM_ID +
+                    " = " + ALARMS_TABLE_NAME + "." + AlarmsColumns._ID + ")";
+
+    private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+    static {
+        sURIMatcher.addURI(ClockContract.AUTHORITY, "alarms", ALARMS);
+        sURIMatcher.addURI(ClockContract.AUTHORITY, "alarms/#", ALARMS_ID);
+        sURIMatcher.addURI(ClockContract.AUTHORITY, "instances", INSTANCES);
+        sURIMatcher.addURI(ClockContract.AUTHORITY, "instances/#", INSTANCES_ID);
+        sURIMatcher.addURI(ClockContract.AUTHORITY, "alarms_with_instances", ALARMS_WITH_INSTANCES);
     }
 
     public ClockProvider() {
@@ -79,41 +141,37 @@
     public Cursor query(Uri uri, String[] projectionIn, String selection, String[] selectionArgs,
             String sort) {
         SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
+        SQLiteDatabase db = mOpenHelper.getReadableDatabase();
 
         // Generate the body of the query
-        int match = sURLMatcher.match(uri);
+        int match = sURIMatcher.match(uri);
         switch (match) {
             case ALARMS:
-                qb.setTables(ClockDatabaseHelper.ALARMS_TABLE_NAME);
+                qb.setTables(ALARMS_TABLE_NAME);
                 break;
             case ALARMS_ID:
-                qb.setTables(ClockDatabaseHelper.ALARMS_TABLE_NAME);
-                qb.appendWhere(ClockContract.AlarmsColumns._ID + "=");
+                qb.setTables(ALARMS_TABLE_NAME);
+                qb.appendWhere(AlarmsColumns._ID + "=");
                 qb.appendWhere(uri.getLastPathSegment());
                 break;
             case INSTANCES:
-                qb.setTables(ClockDatabaseHelper.INSTANCES_TABLE_NAME);
+                qb.setTables(INSTANCES_TABLE_NAME);
                 break;
             case INSTANCES_ID:
-                qb.setTables(ClockDatabaseHelper.INSTANCES_TABLE_NAME);
-                qb.appendWhere(ClockContract.InstancesColumns._ID + "=");
+                qb.setTables(INSTANCES_TABLE_NAME);
+                qb.appendWhere(InstancesColumns._ID + "=");
                 qb.appendWhere(uri.getLastPathSegment());
                 break;
-            case CITIES:
-                qb.setTables(ClockDatabaseHelper.CITIES_TABLE_NAME);
-                break;
-            case CITIES_ID:
-                qb.setTables(ClockDatabaseHelper.CITIES_TABLE_NAME);
-                qb.appendWhere(ClockContract.CitiesColumns.CITY_ID + "=");
-                qb.appendWhere(uri.getLastPathSegment());
+            case ALARMS_WITH_INSTANCES:
+                qb.setTables(ALARM_JOIN_INSTANCE_TABLE_STATEMENT);
+                qb.appendWhere(ALARM_JOIN_INSTANCE_WHERE_STATEMENT);
+                qb.setProjectionMap(sAlarmsWithInstancesProjection);
                 break;
             default:
-                throw new IllegalArgumentException("Unknown URL " + uri);
+                throw new IllegalArgumentException("Unknown URI " + uri);
         }
 
-        SQLiteDatabase db = mOpenHelper.getReadableDatabase();
-        Cursor ret = qb.query(db, projectionIn, selection, selectionArgs,
-                              null, null, sort);
+        Cursor ret = qb.query(db, projectionIn, selection, selectionArgs, null, null, sort);
 
         if (ret == null) {
             LogUtils.e("Alarms.query: failed");
@@ -126,7 +184,7 @@
 
     @Override
     public String getType(Uri uri) {
-        int match = sURLMatcher.match(uri);
+        int match = sURIMatcher.match(uri);
         switch (match) {
             case ALARMS:
                 return "vnd.android.cursor.dir/alarms";
@@ -136,12 +194,8 @@
                 return "vnd.android.cursor.dir/instances";
             case INSTANCES_ID:
                 return "vnd.android.cursor.item/instances";
-            case CITIES:
-                return "vnd.android.cursor.dir/cities";
-            case CITIES_ID:
-                return "vnd.android.cursor.item/cities";
             default:
-                throw new IllegalArgumentException("Unknown URL");
+                throw new IllegalArgumentException("Unknown URI");
         }
     }
 
@@ -150,32 +204,25 @@
         int count;
         String alarmId;
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
-        switch (sURLMatcher.match(uri)) {
+        switch (sURIMatcher.match(uri)) {
             case ALARMS_ID:
                 alarmId = uri.getLastPathSegment();
-                count = db.update(ClockDatabaseHelper.ALARMS_TABLE_NAME, values,
-                        ClockContract.AlarmsColumns._ID + "=" + alarmId,
+                count = db.update(ALARMS_TABLE_NAME, values,
+                        AlarmsColumns._ID + "=" + alarmId,
                         null);
                 break;
             case INSTANCES_ID:
                 alarmId = uri.getLastPathSegment();
-                count = db.update(ClockDatabaseHelper.INSTANCES_TABLE_NAME, values,
-                        ClockContract.InstancesColumns._ID + "=" + alarmId,
-                        null);
-                break;
-            case CITIES_ID:
-                alarmId = uri.getLastPathSegment();
-                count = db.update(ClockDatabaseHelper.CITIES_TABLE_NAME, values,
-                        ClockContract.CitiesColumns.CITY_ID + "=" + alarmId,
+                count = db.update(INSTANCES_TABLE_NAME, values,
+                        InstancesColumns._ID + "=" + alarmId,
                         null);
                 break;
             default: {
-                throw new UnsupportedOperationException(
-                        "Cannot update URL: " + uri);
+                throw new UnsupportedOperationException("Cannot update URI: " + uri);
             }
         }
         LogUtils.v("*** notifyChange() id: " + alarmId + " url " + uri);
-        getContext().getContentResolver().notifyChange(uri, null);
+        notifyChange(getContext().getContentResolver(), uri);
         return count;
     }
 
@@ -183,22 +230,19 @@
     public Uri insert(Uri uri, ContentValues initialValues) {
         long rowId;
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
-        switch (sURLMatcher.match(uri)) {
+        switch (sURIMatcher.match(uri)) {
             case ALARMS:
                 rowId = mOpenHelper.fixAlarmInsert(initialValues);
                 break;
             case INSTANCES:
-                rowId = db.insert(ClockDatabaseHelper.INSTANCES_TABLE_NAME, null, initialValues);
-                break;
-            case CITIES:
-                rowId = db.insert(ClockDatabaseHelper.CITIES_TABLE_NAME, null, initialValues);
+                rowId = db.insert(INSTANCES_TABLE_NAME, null, initialValues);
                 break;
             default:
-                throw new IllegalArgumentException("Cannot insert from URL: " + uri);
+                throw new IllegalArgumentException("Cannot insert from URI: " + uri);
         }
 
-        Uri uriResult = ContentUris.withAppendedId(ClockContract.AlarmsColumns.CONTENT_URI, rowId);
-        getContext().getContentResolver().notifyChange(uriResult, null);
+        Uri uriResult = ContentUris.withAppendedId(AlarmsColumns.CONTENT_URI, rowId);
+        notifyChange(getContext().getContentResolver(), uriResult);
         return uriResult;
     }
 
@@ -207,51 +251,49 @@
         int count;
         String primaryKey;
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
-        switch (sURLMatcher.match(uri)) {
+        switch (sURIMatcher.match(uri)) {
             case ALARMS:
-                count = db.delete(ClockDatabaseHelper.ALARMS_TABLE_NAME, where, whereArgs);
+                count = db.delete(ALARMS_TABLE_NAME, where, whereArgs);
                 break;
             case ALARMS_ID:
                 primaryKey = uri.getLastPathSegment();
                 if (TextUtils.isEmpty(where)) {
-                    where = ClockContract.AlarmsColumns._ID + "=" + primaryKey;
+                    where = AlarmsColumns._ID + "=" + primaryKey;
                 } else {
-                    where = ClockContract.AlarmsColumns._ID + "=" + primaryKey +
-                            " AND (" + where + ")";
+                    where = AlarmsColumns._ID + "=" + primaryKey + " AND (" + where + ")";
                 }
-                count = db.delete(ClockDatabaseHelper.ALARMS_TABLE_NAME, where, whereArgs);
+                count = db.delete(ALARMS_TABLE_NAME, where, whereArgs);
                 break;
             case INSTANCES:
-                count = db.delete(ClockDatabaseHelper.INSTANCES_TABLE_NAME, where, whereArgs);
+                count = db.delete(INSTANCES_TABLE_NAME, where, whereArgs);
                 break;
             case INSTANCES_ID:
                 primaryKey = uri.getLastPathSegment();
                 if (TextUtils.isEmpty(where)) {
-                    where = ClockContract.InstancesColumns._ID + "=" + primaryKey;
+                    where = InstancesColumns._ID + "=" + primaryKey;
                 } else {
-                    where = ClockContract.InstancesColumns._ID + "=" + primaryKey +
-                            " AND (" + where + ")";
+                    where = InstancesColumns._ID + "=" + primaryKey + " AND (" + where + ")";
                 }
-                count = db.delete(ClockDatabaseHelper.INSTANCES_TABLE_NAME, where, whereArgs);
-                break;
-            case CITIES:
-                count = db.delete(ClockDatabaseHelper.CITIES_TABLE_NAME, where, whereArgs);
-                break;
-            case CITIES_ID:
-                primaryKey = uri.getLastPathSegment();
-                if (TextUtils.isEmpty(where)) {
-                    where = ClockContract.CitiesColumns.CITY_ID + "=" + primaryKey;
-                } else {
-                    where = ClockContract.CitiesColumns.CITY_ID +"=" + primaryKey +
-                            " AND (" + where + ")";
-                }
-                count = db.delete(ClockDatabaseHelper.CITIES_TABLE_NAME, where, whereArgs);
+                count = db.delete(INSTANCES_TABLE_NAME, where, whereArgs);
                 break;
             default:
-                throw new IllegalArgumentException("Cannot delete from URL: " + uri);
+                throw new IllegalArgumentException("Cannot delete from URI: " + uri);
         }
 
-        getContext().getContentResolver().notifyChange(uri, null);
+        notifyChange(getContext().getContentResolver(), uri);
         return count;
     }
+
+    /**
+     * Notify affected URIs of changes.
+     */
+    private void notifyChange(ContentResolver resolver, Uri uri) {
+        resolver.notifyChange(uri, null);
+
+        final int match = sURIMatcher.match(uri);
+        // Also notify the joined table of changes to instances or alarms.
+        if (match == ALARMS || match == INSTANCES || match == ALARMS_ID || match == INSTANCES_ID) {
+            resolver.notifyChange(AlarmsColumns.ALARMS_WITH_INSTANCES_URI, null);
+        }
+    }
 }
diff --git a/src/com/android/deskclock/settings/CrescendoLengthDialog.java b/src/com/android/deskclock/settings/CrescendoLengthDialog.java
new file mode 100644
index 0000000..8b8b6f3
--- /dev/null
+++ b/src/com/android/deskclock/settings/CrescendoLengthDialog.java
@@ -0,0 +1,140 @@
+package com.android.deskclock.settings;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.os.Parcelable;
+import android.preference.DialogPreference;
+import android.support.annotation.NonNull;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.NumberPicker;
+import android.widget.TextView;
+
+import com.android.deskclock.NumberPickerCompat;
+import com.android.deskclock.R;
+
+/**
+ * A dialog preference that shows a number picker for selecting crescendo length
+ */
+public final class CrescendoLengthDialog extends DialogPreference {
+
+    private static final String DEFAULT_CRESCENDO_TIME = "0";
+    private static final int CRESCENDO_TIME_STEP = 5;
+
+    private NumberPickerCompat mNumberPickerView;
+    private TextView mNumberPickerSecondsView;
+    private int mCrescendoSeconds;
+
+    public CrescendoLengthDialog(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setDialogLayoutResource(R.layout.crescendo_length_picker);
+        setTitle(R.string.crescendo_duration_title);
+    }
+
+    @Override
+    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+        super.onPrepareDialogBuilder(builder);
+        builder.setTitle(getContext().getString(R.string.crescendo_duration_title))
+                .setCancelable(true);
+    }
+
+    @Override
+    protected void onBindDialogView(@NonNull View view) {
+        super.onBindDialogView(view);
+
+        final String[] displayedValues = new String[13];
+        displayedValues[0] = getContext().getString(R.string.no_crescendo_duration);
+        for (int i = 1; i < displayedValues.length; i++) {
+            displayedValues[i] = String.valueOf(i * CRESCENDO_TIME_STEP);
+        }
+
+        mNumberPickerSecondsView = (TextView) view.findViewById(R.id.title);
+        mNumberPickerSecondsView.setText(getContext().getString(R.string.crescendo_picker_label));
+        mNumberPickerView = (NumberPickerCompat) view.findViewById(R.id.seconds_picker);
+        mNumberPickerView.setDisplayedValues(displayedValues);
+        mNumberPickerView.setMinValue(0);
+        mNumberPickerView.setMaxValue(displayedValues.length - 1);
+        mNumberPickerView.setValue(mCrescendoSeconds / CRESCENDO_TIME_STEP);
+        updateUnits();
+
+        mNumberPickerView.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
+            @Override
+            public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
+                updateUnits();
+            }
+        });
+        mNumberPickerView.setOnAnnounceValueChangedListener(
+                new NumberPickerCompat.OnAnnounceValueChangedListener() {
+            @Override
+            public void onAnnounceValueChanged(NumberPicker picker, int value,
+                    String displayedValue) {
+                final String announceString;
+                if (value == 0) {
+                    announceString = getContext().getString(R.string.no_crescendo_duration);
+                } else {
+                    announceString = getContext().getString(
+                            R.string.crescendo_duration, displayedValue);
+                }
+                picker.announceForAccessibility(announceString);
+            }
+        });
+    }
+
+    @Override
+    protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
+        String val;
+        if (restorePersistedValue) {
+            val = getPersistedString(DEFAULT_CRESCENDO_TIME);
+            if (val != null) {
+                mCrescendoSeconds = Integer.parseInt(val);
+            }
+        } else {
+            val = (String) defaultValue;
+            if (val != null) {
+                mCrescendoSeconds = Integer.parseInt(val);
+            }
+            persistString(val);
+        }
+    }
+
+    @Override
+    protected Object onGetDefaultValue(TypedArray a, int index) {
+        return a.getString(index);
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Parcelable state) {
+        // Restore the value to the NumberPicker.
+        super.onRestoreInstanceState(state);
+
+        // Update the unit display in response to the new value.
+        updateUnits();
+    }
+
+    private void updateUnits() {
+        if (mNumberPickerView != null) {
+            final int value = mNumberPickerView.getValue();
+            final int visibility = value == 0 ? View.INVISIBLE : View.VISIBLE;
+            mNumberPickerSecondsView.setVisibility(visibility);
+        }
+    }
+
+    @Override
+    protected void onDialogClosed(boolean positiveResult) {
+        if (positiveResult) {
+            mNumberPickerView.clearFocus();
+            mCrescendoSeconds = mNumberPickerView.getValue() * CRESCENDO_TIME_STEP;
+            persistString(Integer.toString(mCrescendoSeconds));
+            setSummary();
+        }
+    }
+
+    public void setSummary() {
+        if (mCrescendoSeconds == 0) {
+            setSummary(getContext().getString(R.string.no_crescendo_duration));
+        } else {
+            setSummary(getContext().getString(R.string.crescendo_duration, mCrescendoSeconds));
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/ScreensaverSettingsActivity.java b/src/com/android/deskclock/settings/ScreensaverSettingsActivity.java
similarity index 89%
rename from src/com/android/deskclock/ScreensaverSettingsActivity.java
rename to src/com/android/deskclock/settings/ScreensaverSettingsActivity.java
index 0e61bf0..3f64379 100644
--- a/src/com/android/deskclock/ScreensaverSettingsActivity.java
+++ b/src/com/android/deskclock/settings/ScreensaverSettingsActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.deskclock;
+package com.android.deskclock.settings;
 
 import android.os.Bundle;
 import android.preference.ListPreference;
@@ -23,13 +23,15 @@
 import android.support.v7.app.AppCompatActivity;
 import android.view.MenuItem;
 
+import com.android.deskclock.R;
+
 /**
  * Settings for Clock Daydream
  */
-public class ScreensaverSettingsActivity extends AppCompatActivity {
+public final class ScreensaverSettingsActivity extends AppCompatActivity {
 
-    static final String KEY_CLOCK_STYLE = "screensaver_clock_style";
-    static final String KEY_NIGHT_MODE = "screensaver_night_mode";
+    public static final String KEY_CLOCK_STYLE = "screensaver_clock_style";
+    public static final String KEY_NIGHT_MODE = "screensaver_night_mode";
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
diff --git a/src/com/android/deskclock/settings/SettingsActivity.java b/src/com/android/deskclock/settings/SettingsActivity.java
new file mode 100644
index 0000000..c5d2284
--- /dev/null
+++ b/src/com/android/deskclock/settings/SettingsActivity.java
@@ -0,0 +1,362 @@
+/*
+ * 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.settings;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.media.AudioManager;
+import android.os.Bundle;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.preference.RingtonePreference;
+import android.preference.SwitchPreference;
+import android.provider.Settings;
+import android.text.format.DateUtils;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.deskclock.BaseActivity;
+import com.android.deskclock.LogUtils;
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+import com.android.deskclock.actionbarmenu.ActionBarMenuManager;
+import com.android.deskclock.actionbarmenu.MenuItemControllerFactory;
+import com.android.deskclock.actionbarmenu.NavUpMenuItemController;
+import com.android.deskclock.data.DataModel;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * Settings for the Alarm Clock.
+ */
+public final class SettingsActivity extends BaseActivity {
+
+    public static final String KEY_ALARM_SNOOZE = "snooze_duration";
+    public static final String KEY_ALARM_VOLUME = "volume_setting";
+    public static final String KEY_ALARM_CRESCENDO = "alarm_crescendo_duration";
+    public static final String KEY_TIMER_CRESCENDO = "timer_crescendo_duration";
+    public static final String KEY_TIMER_RINGTONE = "timer_ringtone";
+    public static final String KEY_AUTO_SILENCE = "auto_silence";
+    public static final String KEY_CLOCK_STYLE = "clock_style";
+    public static final String KEY_HOME_TZ = "home_time_zone";
+    public static final String KEY_AUTO_HOME_CLOCK = "automatic_home_clock";
+    public static final String KEY_DATE_TIME = "date_time";
+    public static final String KEY_VOLUME_BUTTONS = "volume_button_setting";
+    public static final String KEY_WEEK_START = "week_start";
+
+    public static final String TIMEZONE_LOCALE = "tz_locale";
+
+    public static final String DEFAULT_VOLUME_BEHAVIOR = "0";
+    public static final String VOLUME_BEHAVIOR_SNOOZE = "1";
+    public static final String VOLUME_BEHAVIOR_DISMISS = "2";
+
+    private final ActionBarMenuManager mActionBarMenuManager = new ActionBarMenuManager(this);
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setVolumeControlStream(AudioManager.STREAM_ALARM);
+        setContentView(R.layout.settings);
+        mActionBarMenuManager.addMenuItemController(new NavUpMenuItemController(this))
+            .addMenuItemController(MenuItemControllerFactory.getInstance()
+                    .buildMenuItemControllers(this));
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        mActionBarMenuManager.createOptionsMenu(menu, getMenuInflater());
+        return true;
+    }
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        mActionBarMenuManager.prepareShowMenu(menu);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (mActionBarMenuManager.handleMenuItemClick(item)) {
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    public static class PrefsFragment extends PreferenceFragment
+            implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
+        @Override
+        public void onCreate(Bundle savedInstanceState) {
+            super.onCreate(savedInstanceState);
+
+            addPreferencesFromResource(R.xml.settings);
+            loadTimeZoneList();
+        }
+
+        @Override
+        public void onActivityCreated(Bundle savedInstanceState) {
+            super.onActivityCreated(savedInstanceState);
+
+            // By default, do not recreate the DeskClock activity
+            getActivity().setResult(RESULT_CANCELED);
+
+        }
+
+        @Override
+        public void onResume() {
+            super.onResume();
+
+            refresh();
+        }
+
+        @Override
+        public boolean onPreferenceChange(Preference pref, Object newValue) {
+            final int idx;
+            switch (pref.getKey()) {
+                case KEY_AUTO_SILENCE:
+                    final ListPreference autoSilencePref = (ListPreference) pref;
+                    String delay = (String) newValue;
+                    updateAutoSnoozeSummary(autoSilencePref, delay);
+                    break;
+                case KEY_CLOCK_STYLE:
+                    final ListPreference clockStylePref = (ListPreference) pref;
+                    idx = clockStylePref.findIndexOfValue((String) newValue);
+                    clockStylePref.setSummary(clockStylePref.getEntries()[idx]);
+                    break;
+                case KEY_HOME_TZ:
+                    final ListPreference homeTimezonePref = (ListPreference) pref;
+                    idx = homeTimezonePref.findIndexOfValue((String) newValue);
+                    homeTimezonePref.setSummary(homeTimezonePref.getEntries()[idx]);
+                    break;
+                case KEY_AUTO_HOME_CLOCK:
+                    final boolean autoHomeClockEnabled = ((SwitchPreference) pref).isChecked();
+                    final Preference homeTimeZonePref = findPreference(KEY_HOME_TZ);
+                    homeTimeZonePref.setEnabled(!autoHomeClockEnabled);
+                    break;
+                case KEY_VOLUME_BUTTONS:
+                    final ListPreference volumeButtonsPref = (ListPreference) pref;
+                    final int index = volumeButtonsPref.findIndexOfValue((String) newValue);
+                    volumeButtonsPref.setSummary(volumeButtonsPref.getEntries()[index]);
+                    break;
+                case KEY_WEEK_START:
+                    final ListPreference weekStartPref = (ListPreference)
+                            findPreference(KEY_WEEK_START);
+                    idx = weekStartPref.findIndexOfValue((String) newValue);
+                    weekStartPref.setSummary(weekStartPref.getEntries()[idx]);
+                    break;
+                case KEY_TIMER_RINGTONE:
+                    final RingtonePreference timerRingtonePref = (RingtonePreference)
+                            findPreference(KEY_TIMER_RINGTONE);
+                    timerRingtonePref.setSummary(DataModel.getDataModel().getTimerRingtoneTitle());
+                    break;
+            }
+            // Set result so DeskClock knows to refresh itself
+            getActivity().setResult(RESULT_OK);
+            return true;
+        }
+
+        @Override
+        public boolean onPreferenceClick(Preference pref) {
+            final Activity activity = getActivity();
+            if (activity == null) {
+                return false;
+            }
+
+            switch (pref.getKey()) {
+                case KEY_DATE_TIME:
+                    final Intent dialogIntent = new Intent(Settings.ACTION_DATE_SETTINGS);
+                    dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                    startActivity(dialogIntent);
+                    return true;
+                case KEY_ALARM_VOLUME:
+                    final AudioManager audioManager =
+                            (AudioManager) activity.getSystemService(Context.AUDIO_SERVICE);
+                    audioManager.adjustStreamVolume(AudioManager.STREAM_ALARM,
+                            AudioManager.ADJUST_SAME, AudioManager.FLAG_SHOW_UI);
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        /**
+         * Reconstruct the timezone list.
+         */
+        private void loadTimeZoneList() {
+            final CharSequence[][] timezones = getAllTimezones();
+            final ListPreference homeTimezonePref = (ListPreference) findPreference(KEY_HOME_TZ);
+            homeTimezonePref.setEntryValues(timezones[0]);
+            homeTimezonePref.setEntries(timezones[1]);
+            homeTimezonePref.setSummary(homeTimezonePref.getEntry());
+            homeTimezonePref.setOnPreferenceChangeListener(this);
+        }
+
+        /**
+         * Returns an array of ids/time zones. This returns a double indexed array
+         * of ids and time zones for Calendar. It is an inefficient method and
+         * shouldn't be called often, but can be used for one time generation of
+         * this list.
+         *
+         * @return double array of tz ids and tz names
+         */
+        public CharSequence[][] getAllTimezones() {
+            final Resources res = getResources();
+            final String[] ids = res.getStringArray(R.array.timezone_values);
+            final String[] labels = res.getStringArray(R.array.timezone_labels);
+
+            int minLength = ids.length;
+            if (ids.length != labels.length) {
+                minLength = Math.min(minLength, labels.length);
+                LogUtils.e("Timezone ids and labels have different length!");
+            }
+
+            final long currentTimeMillis = System.currentTimeMillis();
+            final List<TimeZoneRow> timezones = new ArrayList<>(minLength);
+            for (int i = 0; i < minLength; i++) {
+                timezones.add(new TimeZoneRow(ids[i], labels[i], currentTimeMillis));
+            }
+            Collections.sort(timezones);
+
+            final CharSequence[][] timeZones = new CharSequence[2][timezones.size()];
+            int i = 0;
+            for (TimeZoneRow row : timezones) {
+                timeZones[0][i] = row.mId;
+                timeZones[1][i++] = row.mDisplayName;
+            }
+            return timeZones;
+        }
+
+        private void refresh() {
+            final ListPreference autoSilencePref =
+                    (ListPreference) findPreference(KEY_AUTO_SILENCE);
+            String delay = autoSilencePref.getValue();
+            updateAutoSnoozeSummary(autoSilencePref, delay);
+            autoSilencePref.setOnPreferenceChangeListener(this);
+
+            final ListPreference clockStylePref = (ListPreference) findPreference(KEY_CLOCK_STYLE);
+            clockStylePref.setSummary(clockStylePref.getEntry());
+            clockStylePref.setOnPreferenceChangeListener(this);
+
+            final Preference autoHomeClockPref = findPreference(KEY_AUTO_HOME_CLOCK);
+            final boolean autoHomeClockEnabled = ((SwitchPreference) autoHomeClockPref).isChecked();
+            autoHomeClockPref.setOnPreferenceChangeListener(this);
+
+            final ListPreference homeTimezonePref = (ListPreference) findPreference(KEY_HOME_TZ);
+            homeTimezonePref.setEnabled(autoHomeClockEnabled);
+            homeTimezonePref.setSummary(homeTimezonePref.getEntry());
+            homeTimezonePref.setOnPreferenceChangeListener(this);
+
+            final ListPreference volumeButtonsPref =
+                    (ListPreference) findPreference(KEY_VOLUME_BUTTONS);
+            volumeButtonsPref.setSummary(volumeButtonsPref.getEntry());
+            volumeButtonsPref.setOnPreferenceChangeListener(this);
+
+            final Preference volumePref = findPreference(KEY_ALARM_VOLUME);
+            volumePref.setOnPreferenceClickListener(this);
+
+            final SnoozeLengthDialog snoozePref =
+                    (SnoozeLengthDialog) findPreference(KEY_ALARM_SNOOZE);
+            snoozePref.setSummary();
+
+            final CrescendoLengthDialog alarmCrescendoPref =
+                    (CrescendoLengthDialog) findPreference(KEY_ALARM_CRESCENDO);
+            alarmCrescendoPref.setSummary();
+
+            final CrescendoLengthDialog timerCrescendoPref =
+                    (CrescendoLengthDialog) findPreference(KEY_TIMER_CRESCENDO);
+            timerCrescendoPref.setSummary();
+
+            final Preference dateAndTimeSetting = findPreference(KEY_DATE_TIME);
+            dateAndTimeSetting.setOnPreferenceClickListener(this);
+
+            final ListPreference weekStartPref = (ListPreference) findPreference(KEY_WEEK_START);
+            // Set the default value programmatically
+            final String value = weekStartPref.getValue();
+            final int idx = weekStartPref.findIndexOfValue(
+                    value == null ? String.valueOf(Utils.DEFAULT_WEEK_START) : value);
+            weekStartPref.setValueIndex(idx);
+            weekStartPref.setSummary(weekStartPref.getEntries()[idx]);
+            weekStartPref.setOnPreferenceChangeListener(this);
+
+            final RingtonePreference timerRingtonePref =
+                    (RingtonePreference) findPreference(KEY_TIMER_RINGTONE);
+            timerRingtonePref.setSummary(DataModel.getDataModel().getTimerRingtoneTitle());
+            timerRingtonePref.setOnPreferenceChangeListener(this);
+        }
+
+        private void updateAutoSnoozeSummary(ListPreference listPref, String delay) {
+            int i = Integer.parseInt(delay);
+            if (i == -1) {
+                listPref.setSummary(R.string.auto_silence_never);
+            } else {
+                listPref.setSummary(Utils.getNumberFormattedQuantityString(getActivity(),
+                        R.plurals.auto_silence_summary, i));
+            }
+        }
+
+        private static class TimeZoneRow implements Comparable<TimeZoneRow> {
+
+            private static final boolean SHOW_DAYLIGHT_SAVINGS_INDICATOR = false;
+
+            public final String mId;
+            public final String mDisplayName;
+            public final int mOffset;
+
+            public TimeZoneRow(String id, String name, long currentTimeMillis) {
+                final TimeZone tz = TimeZone.getTimeZone(id);
+                final boolean useDaylightTime = tz.useDaylightTime();
+                mId = id;
+                mOffset = tz.getOffset(currentTimeMillis);
+                mDisplayName = buildGmtDisplayName(name, useDaylightTime);
+            }
+
+            @Override
+            public int compareTo(TimeZoneRow another) {
+                return mOffset - another.mOffset;
+            }
+
+            public String buildGmtDisplayName(String displayName, boolean useDaylightTime) {
+                final int p = Math.abs(mOffset);
+                final StringBuilder name = new StringBuilder("(GMT");
+                name.append(mOffset < 0 ? '-' : '+');
+
+                name.append(p / DateUtils.HOUR_IN_MILLIS);
+                name.append(':');
+
+                int min = p / 60000;
+                min %= 60;
+
+                if (min < 10) {
+                    name.append('0');
+                }
+                name.append(min);
+                name.append(") ");
+                name.append(displayName);
+                if (useDaylightTime && SHOW_DAYLIGHT_SAVINGS_INDICATOR) {
+                    name.append(" \u2600"); // Sun symbol
+                }
+                return name.toString();
+            }
+        }
+    }
+}
diff --git a/src/com/android/deskclock/settings/SnoozeLengthDialog.java b/src/com/android/deskclock/settings/SnoozeLengthDialog.java
new file mode 100644
index 0000000..a9a3aae
--- /dev/null
+++ b/src/com/android/deskclock/settings/SnoozeLengthDialog.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2015 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.settings;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.os.Parcelable;
+import android.preference.DialogPreference;
+import android.support.annotation.NonNull;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.NumberPicker;
+import android.widget.TextView;
+
+import com.android.deskclock.NumberPickerCompat;
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+
+/**
+ * A dialog preference that shows a number picker for selecting snooze length
+ */
+public final class SnoozeLengthDialog extends DialogPreference {
+
+    private static final String DEFAULT_SNOOZE_TIME = "10";
+
+    private NumberPickerCompat mNumberPickerView;
+    private TextView mNumberPickerMinutesView;
+    private final Context mContext;
+    private int mSnoozeMinutes;
+
+    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(@NonNull View view) {
+        super.onBindDialogView(view);
+        mNumberPickerMinutesView = (TextView) view.findViewById(R.id.title);
+        mNumberPickerView = (NumberPickerCompat) view.findViewById(R.id.minutes_picker);
+        mNumberPickerView.setMinValue(1);
+        mNumberPickerView.setMaxValue(30);
+        mNumberPickerView.setValue(mSnoozeMinutes);
+        updateUnits();
+
+        mNumberPickerView.setOnAnnounceValueChangedListener(
+                new NumberPickerCompat.OnAnnounceValueChangedListener() {
+            @Override
+            public void onAnnounceValueChanged(NumberPicker picker, int value,
+                    String displayedValue) {
+                final String announceString = Utils.getNumberFormattedQuantityString(
+                        mContext, R.plurals.snooze_duration, value);
+                picker.announceForAccessibility(announceString);
+            }
+        });
+    }
+
+    @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);
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Parcelable state) {
+        // Restore the value to the NumberPicker.
+        super.onRestoreInstanceState(state);
+
+        // Update the unit display in response to the new value.
+        updateUnits();
+    }
+
+    private void updateUnits() {
+        if (mNumberPickerView != null) {
+            final Resources res = mContext.getResources();
+            final int value = mNumberPickerView.getValue();
+            final CharSequence units = res.getQuantityText(R.plurals.snooze_picker_label, value);
+            mNumberPickerMinutesView.setText(units);
+        }
+    }
+
+    @Override
+    protected void onDialogClosed(boolean positiveResult) {
+        if (positiveResult) {
+            mNumberPickerView.clearFocus();
+            mSnoozeMinutes = mNumberPickerView.getValue();
+            persistString(Integer.toString(mSnoozeMinutes));
+            setSummary();
+        }
+    }
+
+    public void setSummary() {
+        setSummary(Utils.getNumberFormattedQuantityString(mContext, R.plurals.snooze_duration,
+                mSnoozeMinutes));
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/settings/TimerRingtonePreference.java b/src/com/android/deskclock/settings/TimerRingtonePreference.java
new file mode 100644
index 0000000..7a30d92
--- /dev/null
+++ b/src/com/android/deskclock/settings/TimerRingtonePreference.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2015 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.settings;
+
+import android.content.Context;
+import android.content.Intent;
+import android.media.RingtoneManager;
+import android.preference.RingtonePreference;
+import android.support.annotation.NonNull;
+import android.util.AttributeSet;
+
+import com.android.deskclock.data.DataModel;
+
+/**
+ * A custom RingtonePreference that presents the application's default timer ringtone as the value
+ * behind the default selection.
+ */
+public final class TimerRingtonePreference extends RingtonePreference {
+
+    public TimerRingtonePreference(Context context) {
+        super(context);
+    }
+
+    public TimerRingtonePreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public TimerRingtonePreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public TimerRingtonePreference(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    protected void onPrepareRingtonePickerIntent(@NonNull Intent ringtonePickerIntent) {
+        super.onPrepareRingtonePickerIntent(ringtonePickerIntent);
+
+        // Replace the default ringtone uri with the beeping ringtone for timers.
+        ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI,
+                DataModel.getDataModel().getDefaultTimerRingtoneUri());
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/stopwatch/LapsAdapter.java b/src/com/android/deskclock/stopwatch/LapsAdapter.java
new file mode 100644
index 0000000..7592935
--- /dev/null
+++ b/src/com/android/deskclock/stopwatch/LapsAdapter.java
@@ -0,0 +1,319 @@
+/*
+ * Copyright (C) 2015 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.stopwatch;
+
+import android.content.Context;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.widget.RecyclerView;
+import android.text.format.DateUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.android.deskclock.R;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Lap;
+import com.android.deskclock.data.Stopwatch;
+
+import java.text.DecimalFormatSymbols;
+import java.util.List;
+
+/**
+ * Displays a list of lap times in reverse order. That is, the newest lap is at the top, the oldest
+ * lap is at the bottom.
+ */
+class LapsAdapter extends RecyclerView.Adapter<LapsAdapter.LapItemHolder> {
+
+    private final LayoutInflater mInflater;
+    private final Context mContext;
+
+    /** Used to determine when the time format for the lap time column has changed length. */
+    private int mLastFormattedLapTimeLength;
+
+    /** Used to determine when the time format for the total time column has changed length. */
+    private int mLastFormattedAccumulatedTimeLength;
+
+    public LapsAdapter(Context context) {
+        mContext = context;
+        mInflater = LayoutInflater.from(context);
+        setHasStableIds(true);
+    }
+
+    /**
+     * After recording the first lap, there is always a "current lap" in progress.
+     *
+     * @return 0 if no laps are yet recorded; lap count + 1 if any laps exist
+     */
+    @Override
+    public int getItemCount() {
+        final int lapCount = getLaps().size();
+        final int currentLapCount = lapCount == 0 ? 0 : 1;
+        return currentLapCount + lapCount;
+    }
+
+    @Override
+    public LapItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        final View v = mInflater.inflate(R.layout.lap_view, parent, false /* attachToRoot */);
+        return new LapItemHolder(v);
+    }
+
+    @Override
+    public void onBindViewHolder(LapItemHolder viewHolder, int position) {
+        final long lapTime;
+        final int lapNumber;
+        final long totalTime;
+
+        // Lap will be null for the current lap.
+        final Lap lap = position == 0 ? null : getLaps().get(position - 1);
+        if (lap != null) {
+            // For a recorded lap, merely extract the values to format.
+            lapTime = lap.getLapTime();
+            lapNumber = lap.getLapNumber();
+            totalTime = lap.getAccumulatedTime();
+        } else {
+            // For the current lap, compute times relative to the stopwatch.
+            totalTime = getStopwatch().getTotalTime();
+            lapTime = DataModel.getDataModel().getCurrentLapTime(totalTime);
+            lapNumber = getLaps().size() + 1;
+        }
+
+        // Bind data into the child views.
+        viewHolder.lapTime.setText(formatLapTime(lapTime, true));
+        viewHolder.accumulatedTime.setText(formatAccumulatedTime(totalTime, true));
+        viewHolder.lapNumber.setText(formatLapNumber(getLaps().size() + 1, lapNumber));
+    }
+
+    @Override
+    public long getItemId(int position) {
+        final List<Lap> laps = getLaps();
+        if (position == 0) {
+            return laps.size() + 1;
+        }
+
+        return laps.get(position - 1).getLapNumber();
+    }
+
+    /**
+     * @param rv the RecyclerView that contains the {@code childView}
+     * @param totalTime time accumulated for the current lap and all prior laps
+     */
+    void updateCurrentLap(RecyclerView rv, long totalTime) {
+        // If no laps exist there is nothing to do.
+        if (getItemCount() == 0) {
+            return;
+        }
+
+        final View currentLapView = rv.getChildAt(0);
+        if (currentLapView != null) {
+            // Compute the lap time using the total time.
+            final long lapTime = DataModel.getDataModel().getCurrentLapTime(totalTime);
+
+            final LapItemHolder holder = (LapItemHolder) rv.getChildViewHolder(currentLapView);
+            holder.lapTime.setText(formatLapTime(lapTime, false));
+            holder.accumulatedTime.setText(formatAccumulatedTime(totalTime, false));
+        }
+    }
+
+    /**
+     * Record a new lap and update this adapter to include it.
+     *
+     * @return a newly cleared lap
+     */
+    Lap addLap() {
+        final Lap lap = DataModel.getDataModel().addLap();
+
+        if (getItemCount() == 10) {
+            // 10 total laps indicates all items switch from 1 to 2 digit lap numbers.
+            notifyDataSetChanged();
+        } else {
+            // New current lap now exists.
+            notifyItemInserted(0);
+
+            // Prior current lap must be refreshed once with the true values in place.
+            notifyItemChanged(1);
+        }
+
+        return lap;
+    }
+
+    /**
+     * Remove all recorded laps and update this adapter.
+     */
+    void clearLaps() {
+        DataModel.getDataModel().clearLaps();
+
+        // Clear the computed time lengths related to the old recorded laps.
+        mLastFormattedLapTimeLength = 0;
+        mLastFormattedAccumulatedTimeLength = 0;
+
+        notifyDataSetChanged();
+    }
+
+    /**
+     * @return a formatted textual description of lap times and total time
+     */
+    String getShareText() {
+        final Stopwatch stopwatch = getStopwatch();
+        final long totalTime = stopwatch.getTotalTime();
+        final String stopwatchTime = formatTime(totalTime, totalTime, ":");
+
+        // Choose a size for the builder that is unlikely to be resized.
+        final StringBuilder builder = new StringBuilder(1000);
+
+        // Add the total elapsed time of the stopwatch.
+        builder.append(mContext.getString(R.string.sw_share_main, stopwatchTime));
+        builder.append("\n");
+
+        final List<Lap> laps = getLaps();
+        if (!laps.isEmpty()) {
+            // Add a header for lap times.
+            builder.append(mContext.getString(R.string.sw_share_laps));
+            builder.append("\n");
+
+            // Loop through the laps in the order they were recorded; reverse of display order.
+            for (int i = laps.size() - 1; i >= 0; i--) {
+                final Lap lap = laps.get(i);
+                builder.append(lap.getLapNumber());
+                builder.append(DecimalFormatSymbols.getInstance().getDecimalSeparator());
+                builder.append(' ');
+                builder.append(formatTime(lap.getLapTime(), lap.getLapTime(), " "));
+                builder.append("\n");
+            }
+        }
+
+        return builder.toString();
+    }
+
+    /**
+     * @param lapCount the total number of recorded laps
+     * @param lapNumber the number of the lap being formatted
+     * @return e.g. "# 7" if {@code lapCount} less than 10; "# 07" if {@code lapCount} is 10 or more
+     */
+    @VisibleForTesting
+    String formatLapNumber(int lapCount, int lapNumber) {
+        if (lapCount < 10) {
+            return String.format("# %d", lapNumber);
+        }
+
+        return String.format("# %02d", lapNumber);
+    }
+
+    /**
+     * @param maxTime the maximum amount of time; used to choose a time format
+     * @param time the time to format guaranteed not to exceed {@code maxTime}
+     * @param separator displayed between hours and minutes as well as minutes and seconds
+     * @return a formatted version of the time
+     */
+    @VisibleForTesting
+    String formatTime(long maxTime, long time, String separator) {
+        long hundredths, seconds, minutes, hours;
+        seconds = time / 1000;
+        hundredths = (time - seconds * 1000) / 10;
+        minutes = seconds / 60;
+        seconds = seconds - minutes * 60;
+        hours = minutes / 60;
+        minutes = minutes - hours * 60;
+
+        final char decimalSeparator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
+
+        if (maxTime < 10 * DateUtils.MINUTE_IN_MILLIS) {
+            return String.format("%d%s%02d%s%02d",
+                    minutes, separator, seconds, decimalSeparator, hundredths);
+        } else if (maxTime < 60 * DateUtils.MINUTE_IN_MILLIS) {
+            return String.format("%02d%s%02d%s%02d",
+                    minutes, separator, seconds, decimalSeparator, hundredths);
+        } else if (maxTime < 10 * DateUtils.HOUR_IN_MILLIS) {
+            return String.format("%d%s%02d%s%02d%s%02d",
+                    hours, separator, minutes, separator, seconds, decimalSeparator, hundredths);
+        } else if (maxTime < 100 * DateUtils.HOUR_IN_MILLIS) {
+            return String.format("%02d%s%02d%s%02d%s%02d",
+                    hours, separator, minutes, separator, seconds, decimalSeparator, hundredths);
+        }
+
+        return String.format("%03d%s%02d%s%02d%s%02d",
+                hours, separator, minutes, separator, seconds, decimalSeparator, hundredths);
+    }
+
+    /**
+     * @param lapTime the lap time to be formatted
+     * @param isBinding if the lap time is requested so it can be bound avoid notifying of data
+     *                  set changes; they are not allowed to occur during bind
+     * @return a formatted version of the lap time
+     */
+    private String formatLapTime(long lapTime, boolean isBinding) {
+        // The longest lap dictates the way the given lapTime must be formatted.
+        final long longestLapTime = Math.max(DataModel.getDataModel().getLongestLapTime(), lapTime);
+        final String formattedTime = formatTime(longestLapTime, lapTime, " ");
+
+        // If the newly formatted lap time has altered the format, refresh all laps.
+        final int newLength = formattedTime.length();
+        if (!isBinding && mLastFormattedLapTimeLength != newLength) {
+            mLastFormattedLapTimeLength = newLength;
+            notifyDataSetChanged();
+        }
+
+        return formattedTime;
+    }
+
+    /**
+     * @param accumulatedTime the accumulated time to be formatted
+     * @param isBinding if the lap time is requested so it can be bound avoid notifying of data
+     *                  set changes; they are not allowed to occur during bind
+     * @return a formatted version of the accumulated time
+     */
+    private String formatAccumulatedTime(long accumulatedTime, boolean isBinding) {
+        final long totalTime = getStopwatch().getTotalTime();
+        final long longestAccumulatedTime = Math.max(totalTime, accumulatedTime);
+        final String formattedTime = formatTime(longestAccumulatedTime, accumulatedTime, " ");
+
+        // If the newly formatted accumulated time has altered the format, refresh all laps.
+        final int newLength = formattedTime.length();
+        if (!isBinding && mLastFormattedAccumulatedTimeLength != newLength) {
+            mLastFormattedAccumulatedTimeLength = newLength;
+            notifyDataSetChanged();
+        }
+
+        return formattedTime;
+    }
+
+    private Stopwatch getStopwatch() {
+        return DataModel.getDataModel().getStopwatch();
+    }
+
+    private List<Lap> getLaps() {
+        return DataModel.getDataModel().getLaps();
+    }
+
+    /**
+     * Cache the child views of each lap item view.
+     */
+    static final class LapItemHolder extends RecyclerView.ViewHolder {
+
+        private final TextView lapNumber;
+        private final TextView lapTime;
+        private final TextView accumulatedTime;
+
+        public LapItemHolder(View itemView) {
+            super(itemView);
+
+            lapTime = (TextView) itemView.findViewById(R.id.lap_time);
+            lapNumber = (TextView) itemView.findViewById(R.id.lap_number);
+            accumulatedTime = (TextView) itemView.findViewById(R.id.lap_total);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/stopwatch/StopwatchCircleView.java b/src/com/android/deskclock/stopwatch/StopwatchCircleView.java
new file mode 100644
index 0000000..bd2e207
--- /dev/null
+++ b/src/com/android/deskclock/stopwatch/StopwatchCircleView.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2015 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.stopwatch;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Lap;
+import com.android.deskclock.data.Stopwatch;
+
+import java.util.List;
+
+/**
+ * Custom view that draws a reference lap as a circle when one exists.
+ */
+public final class StopwatchCircleView extends View {
+
+    /** The size of the dot indicating the user's position within the reference lap. */
+    private final float mDotRadius;
+
+    /** An amount to subtract from the true radius to account for drawing thicknesses. */
+    private final float mRadiusOffset;
+
+    /** Used to scale the width of the marker to make it similarly visible on all screens. */
+    private final float mScreenDensity;
+
+    /** The color indicating the remaining portion of the current lap. */
+    private final int mRemainderColor;
+
+    /** The color indicating the completed portion of the lap. */
+    private final int mCompletedColor;
+
+    /** The size of the stroke that paints the lap circle. */
+    private final float mStrokeSize;
+
+    /** The size of the stroke that paints the marker for the end of the prior lap. */
+    private final float mMarkerStrokeSize;
+
+    private final Paint mPaint = new Paint();
+    private final Paint mFill = new Paint();
+    private final RectF mArcRect = new RectF();
+
+    @SuppressWarnings("unused")
+    public StopwatchCircleView(Context context) {
+        this(context, null);
+    }
+
+    public StopwatchCircleView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        final Resources resources = context.getResources();
+        final float dotDiameter = resources.getDimension(R.dimen.circletimer_dot_size);
+
+        mDotRadius = dotDiameter / 2f;
+        mScreenDensity = resources.getDisplayMetrics().density;
+        mStrokeSize = resources.getDimension(R.dimen.circletimer_circle_size);
+        mMarkerStrokeSize = resources.getDimension(R.dimen.circletimer_marker_size);
+        mRadiusOffset = Utils.calculateRadiusOffset(mStrokeSize, dotDiameter, mMarkerStrokeSize);
+
+        mRemainderColor = resources.getColor(R.color.clock_white);
+        mCompletedColor = Utils.obtainStyledColor(context, R.attr.colorAccent, Color.RED);
+
+        mPaint.setAntiAlias(true);
+        mPaint.setStyle(Paint.Style.STROKE);
+
+        mFill.setAntiAlias(true);
+        mFill.setColor(mCompletedColor);
+        mFill.setStyle(Paint.Style.FILL);
+    }
+
+    /**
+     * Start the animation if it is not currently running.
+     */
+    void update() {
+        postInvalidateOnAnimation();
+    }
+
+    @Override
+    public void onDraw(Canvas canvas) {
+        // Compute the size and location of the circle to be drawn.
+        final int xCenter = getWidth() / 2;
+        final int yCenter = getHeight() / 2;
+        final float radius = Math.min(xCenter, yCenter) - mRadiusOffset;
+
+        // Reset old painting state.
+        mPaint.setColor(mRemainderColor);
+        mPaint.setStrokeWidth(mStrokeSize);
+
+        final List<Lap> laps = getLaps();
+
+        // If a reference lap does not exist or should not be drawn, draw a simple white circle.
+        if (laps.isEmpty() || !DataModel.getDataModel().canAddMoreLaps()) {
+            // Draw a complete white circle; no red arc required.
+            canvas.drawCircle(xCenter, yCenter, radius, mPaint);
+
+            // No need to continue animating the plain white circle.
+            return;
+        }
+
+        // The first lap is the reference lap to which all future laps are compared.
+        final Stopwatch stopwatch = getStopwatch();
+        final int lapCount = laps.size();
+        final Lap firstLap = laps.get(lapCount - 1);
+        final Lap priorLap = laps.get(0);
+        final long firstLapTime = firstLap.getLapTime();
+        final long currentLapTime = stopwatch.getTotalTime() - priorLap.getAccumulatedTime();
+
+        // Draw a combination of red and white arcs to create a circle.
+        mArcRect.top = yCenter - radius;
+        mArcRect.bottom = yCenter + radius;
+        mArcRect.left =  xCenter - radius;
+        mArcRect.right = xCenter + radius;
+        final float redPercent = (float) currentLapTime / (float) firstLapTime;
+        final float whitePercent = 1 - (redPercent > 1 ? 1 : redPercent);
+
+        // Draw a white arc to indicate the amount of reference lap that remains.
+        canvas.drawArc(mArcRect, 270 + (1 - whitePercent) * 360, whitePercent * 360, false, mPaint);
+
+        // Draw a red arc to indicate the amount of reference lap completed.
+        mPaint.setColor(mCompletedColor);
+        canvas.drawArc(mArcRect, 270, redPercent * 360 , false, mPaint);
+
+        // Starting on lap 2, a marker can be drawn indicating where the prior lap ended.
+        if (lapCount > 1) {
+            mPaint.setColor(mRemainderColor);
+            mPaint.setStrokeWidth(mMarkerStrokeSize);
+            final float markerAngle = (float) priorLap.getLapTime() / (float) firstLapTime * 360;
+            final float startAngle = 270 + markerAngle;
+            final float sweepAngle = mScreenDensity * (float) (360 / (radius * Math.PI));
+            canvas.drawArc(mArcRect, startAngle, sweepAngle, false, mPaint);
+        }
+
+        // Draw a red dot to indicate current position relative to reference lap.
+        final float dotAngleDegrees = 270 + redPercent * 360;
+        final double dotAngleRadians = Math.toRadians(dotAngleDegrees);
+        final float dotX = xCenter + (float) (radius * Math.cos(dotAngleRadians));
+        final float dotY = yCenter + (float) (radius * Math.sin(dotAngleRadians));
+        canvas.drawCircle(dotX, dotY, mDotRadius, mFill);
+
+        // If the stopwatch is not running it does not require continuous updates.
+        if (stopwatch.isRunning()) {
+            postInvalidateOnAnimation();
+        }
+    }
+
+    private Stopwatch getStopwatch() {
+        return DataModel.getDataModel().getStopwatch();
+    }
+
+    private List<Lap> getLaps() {
+        return DataModel.getDataModel().getLaps();
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/stopwatch/StopwatchFragment.java b/src/com/android/deskclock/stopwatch/StopwatchFragment.java
index 08388e0..0474b0d 100644
--- a/src/com/android/deskclock/stopwatch/StopwatchFragment.java
+++ b/src/com/android/deskclock/stopwatch/StopwatchFragment.java
@@ -13,814 +13,422 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package com.android.deskclock.stopwatch;
 
-import android.animation.LayoutTransition;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.content.res.Configuration;
 import android.os.Bundle;
 import android.os.PowerManager;
-import android.os.PowerManager.WakeLock;
-import android.preference.PreferenceManager;
-import android.text.format.DateUtils;
+import android.os.SystemClock;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.SimpleItemAnimator;
+import android.transition.AutoTransition;
+import android.transition.Transition;
+import android.transition.TransitionManager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityManager;
-import android.view.animation.Animation;
-import android.view.animation.TranslateAnimation;
-import android.widget.BaseAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
 
-import com.android.deskclock.CircleButtonsLayout;
-import com.android.deskclock.CircleTimerView;
 import com.android.deskclock.DeskClock;
 import com.android.deskclock.DeskClockFragment;
-import com.android.deskclock.HandleDeskClockApiCalls;
 import com.android.deskclock.LogUtils;
 import com.android.deskclock.R;
-import com.android.deskclock.Utils;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Lap;
+import com.android.deskclock.data.Stopwatch;
 import com.android.deskclock.events.Events;
 import com.android.deskclock.timer.CountingTimerView;
 
-import java.util.ArrayList;
+import static android.content.Context.ACCESSIBILITY_SERVICE;
+import static android.content.Context.POWER_SERVICE;
+import static android.os.PowerManager.ON_AFTER_RELEASE;
+import static android.os.PowerManager.SCREEN_BRIGHT_WAKE_LOCK;
+import static android.view.View.GONE;
+import static android.view.View.INVISIBLE;
+import static android.view.View.VISIBLE;
 
-public class StopwatchFragment extends DeskClockFragment
-        implements OnSharedPreferenceChangeListener {
-    private static final boolean DEBUG = false;
+/**
+ * Fragment that shows the stopwatch and recorded laps.
+ */
+public final class StopwatchFragment extends DeskClockFragment {
 
     private static final String TAG = "StopwatchFragment";
-    private static final int STOPWATCH_REFRESH_INTERVAL_MILLIS = 25;
-    // Lower the refresh rate in accessibility mode to give talkback time to catch up
-    private static final int STOPWATCH_ACCESSIBILTY_REFRESH_INTERVAL_MILLIS = 500;
 
-    int mState = Stopwatches.STOPWATCH_RESET;
+    /** Scheduled to update the stopwatch time and current lap time while stopwatch is running. */
+    private final Runnable mTimeUpdateRunnable = new TimeUpdateRunnable();
 
-    // Stopwatch views that are accessed by the activity
-    private CircleTimerView mTime;
-    private CountingTimerView mTimeText;
-    private ListView mLapsList;
-    private WakeLock mWakeLock;
-    private CircleButtonsLayout mCircleLayout;
-
-    // Animation constants and objects
-    private LayoutTransition mLayoutTransition;
-    private LayoutTransition mCircleLayoutTransition;
-    private View mStartSpace;
-    private View mEndSpace;
-    private View mBottomSpace;
-    private boolean mSpacersUsed;
-
+    /** Used to determine when talk back is on in order to lower the time update rate. */
     private AccessibilityManager mAccessibilityManager;
 
-    // Used for calculating the time from the start taking into account the pause times
-    long mStartTime = 0;
-    long mAccumulatedTime = 0;
+    /** {@code true} while the {@link #mLapsList} is transitioning between shown and hidden. */
+    private boolean mLapsListIsTransitioning;
 
-    // Lap information
-    class Lap {
+    /** The data source for {@link #mLapsList}. */
+    private LapsAdapter mLapsAdapter;
 
-        Lap (long time, long total) {
-            mLapTime = time;
-            mTotalTime = total;
-        }
-        public long mLapTime;
-        public long mTotalTime;
+    /** The layout manager for the {@link #mLapsAdapter}. */
+    private LinearLayoutManager mLapsLayoutManager;
 
-        public void updateView() {
-            View lapInfo = mLapsList.findViewWithTag(this);
-            if (lapInfo != null) {
-                mLapsAdapter.setTimeText(lapInfo, this);
-            }
-        }
-    }
+    /** Draws the reference lap while the stopwatch is running. */
+    private StopwatchCircleView mTime;
 
-    // Adapter for the ListView that shows the lap times.
-    class LapsListAdapter extends BaseAdapter {
+    /** Displays the recorded lap times. */
+    private RecyclerView mLapsList;
 
-        private static final int VIEW_TYPE_LAP = 0;
-        private static final int VIEW_TYPE_SPACE = 1;
-        private static final int VIEW_TYPE_COUNT = 2;
+    /** Displays the current stopwatch time. */
+    private CountingTimerView mTimeText;
 
-        ArrayList<Lap> mLaps = new ArrayList<>();
-        private final LayoutInflater mInflater;
-        private final String[] mFormats;
-        private final String[] mLapFormatSet;
-        // Size of this array must match the size of formats
-        private final long[] mThresholds = {
-                10 * DateUtils.MINUTE_IN_MILLIS, // < 10 minutes
-                DateUtils.HOUR_IN_MILLIS, // < 1 hour
-                10 * DateUtils.HOUR_IN_MILLIS, // < 10 hours
-                100 * DateUtils.HOUR_IN_MILLIS, // < 100 hours
-                1000 * DateUtils.HOUR_IN_MILLIS // < 1000 hours
-        };
-        private int mLapIndex = 0;
-        private int mTotalIndex = 0;
-        private String mLapFormat;
+    /** Held while the stopwatch is running and this fragment is forward to keep the screen on. */
+    private PowerManager.WakeLock mWakeLock;
 
-        public LapsListAdapter(Context context) {
-            mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-            mFormats = context.getResources().getStringArray(R.array.stopwatch_format_set);
-            mLapFormatSet = context.getResources().getStringArray(R.array.sw_lap_number_set);
-            updateLapFormat();
-        }
-
-        @Override
-        public boolean isEnabled(int position) {
-            return false;
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public int getItemViewType(int position) {
-            return position < mLaps.size() ? VIEW_TYPE_LAP : VIEW_TYPE_SPACE;
-        }
-
-        @Override
-        public int getViewTypeCount() {
-            return VIEW_TYPE_COUNT;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            if (getCount() == 0) {
-                return null;
-            }
-
-            // Handle request for the Spacer at the end
-            if (getItemViewType(position) == VIEW_TYPE_SPACE) {
-                return convertView != null ? convertView
-                        : mInflater.inflate(R.layout.stopwatch_spacer, parent, false);
-            }
-
-            final View lapInfo = convertView != null ? convertView
-                    : mInflater.inflate(R.layout.lap_view, parent, false);
-            Lap lap = getItem(position);
-            lapInfo.setTag(lap);
-
-            TextView count = (TextView) lapInfo.findViewById(R.id.lap_number);
-            count.setText(String.format(mLapFormat, mLaps.size() - position).toUpperCase());
-            setTimeText(lapInfo, lap);
-
-            return lapInfo;
-        }
-
-        protected void setTimeText(View lapInfo, Lap lap) {
-            TextView lapTime = (TextView)lapInfo.findViewById(R.id.lap_time);
-            TextView totalTime = (TextView)lapInfo.findViewById(R.id.lap_total);
-            lapTime.setText(Stopwatches.formatTimeText(lap.mLapTime, mFormats[mLapIndex]));
-            totalTime.setText(Stopwatches.formatTimeText(lap.mTotalTime, mFormats[mTotalIndex]));
-        }
-
-        @Override
-        public int getCount() {
-            // Add 1 for the spacer if list is not empty
-            return mLaps.isEmpty() ? 0 : mLaps.size() + 1;
-        }
-
-        @Override
-        public Lap getItem(int position) {
-            if (position >= mLaps.size()) {
-                return null;
-            }
-            return mLaps.get(position);
-        }
-
-        private void updateLapFormat() {
-            // Note Stopwatches.MAX_LAPS < 100
-            mLapFormat = mLapFormatSet[mLaps.size() < 10 ? 0 : 1];
-        }
-
-        private void resetTimeFormats() {
-            mLapIndex = mTotalIndex = 0;
-        }
-
-        /**
-         * A lap is printed into two columns: the total time and the lap time. To make this print
-         * as pretty as possible, multiple formats were created which minimize the width of the
-         * print. As the total or lap time exceed the limit of that format, this code updates
-         * the format used for the total and/or lap times.
-         *
-         * @param lap to measure
-         * @return true if this lap exceeded either threshold and a format was updated.
-         */
-        public boolean updateTimeFormats(Lap lap) {
-            boolean formatChanged = false;
-            while (mLapIndex + 1 < mThresholds.length && lap.mLapTime >= mThresholds[mLapIndex]) {
-                mLapIndex++;
-                formatChanged = true;
-            }
-            while (mTotalIndex + 1 < mThresholds.length &&
-                lap.mTotalTime >= mThresholds[mTotalIndex]) {
-                mTotalIndex++;
-                formatChanged = true;
-            }
-            return formatChanged;
-        }
-
-        public void addLap(Lap l) {
-            mLaps.add(0, l);
-            // for efficiency caller also calls notifyDataSetChanged()
-        }
-
-        public void clearLaps() {
-            mLaps.clear();
-            updateLapFormat();
-            resetTimeFormats();
-            notifyDataSetChanged();
-        }
-
-        // Helper function used to get the lap data to be stored in the activity'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).mTotalTime;
-            }
-            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 (long lap : laps) {
-                mLaps.add(new Lap(lap, 0));
-            }
-            long totalTime = 0;
-            for (int i = size -1; i >= 0; i --) {
-                totalTime += laps[i];
-                mLaps.get(i).mTotalTime = totalTime;
-                updateTimeFormats(mLaps.get(i));
-            }
-            updateLapFormat();
-            showLaps();
-            notifyDataSetChanged();
-        }
-    }
-
-    LapsListAdapter mLapsAdapter;
-
-    public StopwatchFragment() {
-    }
-
-    private void toggleStopwatchState() {
-        long time = Utils.getTimeNow();
-        Context context = getActivity().getApplicationContext();
-        Intent intent = new Intent(context, StopwatchService.class);
-        intent.putExtra(Stopwatches.MESSAGE_TIME, time);
-        intent.putExtra(Stopwatches.SHOW_NOTIF, false);
-        switch (mState) {
-            case Stopwatches.STOPWATCH_RUNNING:
-                // do stop
-                long curTime = Utils.getTimeNow();
-                mAccumulatedTime += (curTime - mStartTime);
-                doStop();
-                Events.sendStopwatchEvent(R.string.action_stop, R.string.label_deskclock);
-
-                intent.setAction(HandleDeskClockApiCalls.ACTION_STOP_STOPWATCH);
-                context.startService(intent);
-                releaseWakeLock();
-                break;
-            case Stopwatches.STOPWATCH_RESET:
-            case Stopwatches.STOPWATCH_STOPPED:
-                // do start
-                doStart(time);
-                Events.sendStopwatchEvent(R.string.action_start, R.string.label_deskclock);
-
-                intent.setAction(HandleDeskClockApiCalls.ACTION_START_STOPWATCH);
-                context.startService(intent);
-                acquireWakeLock();
-                break;
-            default:
-                LogUtils.wtf("Illegal state " + mState
-                        + " while pressing the right stopwatch button");
-                break;
-        }
-    }
+    /** The public no-arg constructor required by all fragments. */
+    public StopwatchFragment() {}
 
     @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                             Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
-        ViewGroup v = (ViewGroup)inflater.inflate(R.layout.stopwatch_fragment, container, false);
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) {
+        mLapsAdapter = new LapsAdapter(getActivity());
+        mLapsLayoutManager = new LinearLayoutManager(getActivity());
 
-        mTime = (CircleTimerView)v.findViewById(R.id.stopwatch_time);
-        mTimeText = (CountingTimerView)v.findViewById(R.id.stopwatch_time_text);
-        mLapsList = (ListView)v.findViewById(R.id.laps_list);
-        mLapsList.setDividerHeight(0);
-        mLapsAdapter = new LapsListAdapter(getActivity());
+        final View v = inflater.inflate(R.layout.stopwatch_fragment, container, false);
+        mTime = (StopwatchCircleView) v.findViewById(R.id.stopwatch_time);
+        mLapsList = (RecyclerView) v.findViewById(R.id.laps_list);
+        ((SimpleItemAnimator) mLapsList.getItemAnimator()).setSupportsChangeAnimations(false);
+        mLapsList.setLayoutManager(mLapsLayoutManager);
         mLapsList.setAdapter(mLapsAdapter);
 
         // Timer text serves as a virtual start/stop button.
-        mTimeText.registerVirtualButtonAction(new Runnable() {
-            @Override
-            public void run() {
-                toggleStopwatchState();
-            }
-        });
+        mTimeText = (CountingTimerView) v.findViewById(R.id.stopwatch_time_text);
         mTimeText.setVirtualButtonEnabled(true);
-
-        mCircleLayout = (CircleButtonsLayout)v.findViewById(R.id.stopwatch_circle);
-        mCircleLayout.setCircleTimerViewIds(R.id.stopwatch_time, 0 /* stopwatchId */ ,
-                0 /* labelId */);
-
-        // Animation setup
-        mLayoutTransition = new LayoutTransition();
-        mCircleLayoutTransition = new LayoutTransition();
-
-        // The CircleButtonsLayout only needs to undertake location changes
-        mCircleLayoutTransition.enableTransitionType(LayoutTransition.CHANGING);
-        mCircleLayoutTransition.disableTransitionType(LayoutTransition.APPEARING);
-        mCircleLayoutTransition.disableTransitionType(LayoutTransition.DISAPPEARING);
-        mCircleLayoutTransition.disableTransitionType(LayoutTransition.CHANGE_APPEARING);
-        mCircleLayoutTransition.disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING);
-        mCircleLayoutTransition.setAnimateParentHierarchy(false);
-
-        // These spacers assist in keeping the size of CircleButtonsLayout constant
-        mStartSpace = v.findViewById(R.id.start_space);
-        mEndSpace = v.findViewById(R.id.end_space);
-        mSpacersUsed = mStartSpace != null || mEndSpace != null;
-
-        // Only applicable on portrait, only visible when there is no lap
-        mBottomSpace = v.findViewById(R.id.bottom_space);
-
-        // Listener to invoke extra animation within the laps-list
-        mLayoutTransition.addTransitionListener(new LayoutTransition.TransitionListener() {
-            @Override
-            public void startTransition(LayoutTransition transition, ViewGroup container,
-                                        View view, int transitionType) {
-                if (view == mLapsList) {
-                    if (transitionType == LayoutTransition.DISAPPEARING) {
-                        if (DEBUG) LogUtils.v("StopwatchFragment.start laps-list disappearing");
-                        boolean shiftX = view.getResources().getConfiguration().orientation
-                                == Configuration.ORIENTATION_LANDSCAPE;
-                        int first = mLapsList.getFirstVisiblePosition();
-                        int last = mLapsList.getLastVisiblePosition();
-                        // Ensure index range will not cause a divide by zero
-                        if (last < first) {
-                            last = first;
-                        }
-                        long duration = transition.getDuration(LayoutTransition.DISAPPEARING);
-                        long offset = duration / (last - first + 1) / 5;
-                        for (int visibleIndex = first; visibleIndex <= last; visibleIndex++) {
-                            View lapView = mLapsList.getChildAt(visibleIndex - first);
-                            if (lapView != null) {
-                                float toXValue = shiftX ? 1.0f * (visibleIndex - first + 1) : 0;
-                                float toYValue = shiftX ? 0 : 4.0f * (visibleIndex - first + 1);
-                                        TranslateAnimation animation = new TranslateAnimation(
-                                        Animation.RELATIVE_TO_SELF, 0,
-                                        Animation.RELATIVE_TO_SELF, toXValue,
-                                        Animation.RELATIVE_TO_SELF, 0,
-                                        Animation.RELATIVE_TO_SELF, toYValue);
-                                animation.setStartOffset((last - visibleIndex) * offset);
-                                animation.setDuration(duration);
-                                lapView.startAnimation(animation);
-                            }
-                        }
-                    }
-                }
-            }
-
-            @Override
-            public void endTransition(LayoutTransition transition, ViewGroup container,
-                                      View view, int transitionType) {
-                if (transitionType == LayoutTransition.DISAPPEARING) {
-                    if (DEBUG) LogUtils.v("StopwatchFragment.end laps-list disappearing");
-                    int last = mLapsList.getLastVisiblePosition();
-                    for (int visibleIndex = mLapsList.getFirstVisiblePosition();
-                         visibleIndex <= last; visibleIndex++) {
-                        View lapView = mLapsList.getChildAt(visibleIndex);
-                        if (lapView != null) {
-                            Animation animation = lapView.getAnimation();
-                            if (animation != null) {
-                                animation.cancel();
-                            }
-                        }
-                    }
-                }
-            }
-        });
+        mTimeText.registerVirtualButtonAction(new ToggleStopwatchRunnable());
 
         return v;
     }
 
-    /**
-     * Make the final display setup.
-     *
-     * If the fragment is starting with an existing list of laps, shows the laps list and if the
-     * spacers around the clock exist, hide them. If there are not laps at the start, hide the laps
-     * list and show the clock spacers if they exist.
-     */
     @Override
-    public void onStart() {
-        super.onStart();
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
 
-        boolean lapsVisible = mLapsAdapter.getCount() > 0;
-
-        mLapsList.setVisibility(lapsVisible ? View.VISIBLE : View.GONE);
-        if (mSpacersUsed) {
-            showSpacerVisibility(lapsVisible);
-        }
-        showBottomSpacerVisibility(lapsVisible);
-
-        ((ViewGroup)getView()).setLayoutTransition(mLayoutTransition);
-        mCircleLayout.setLayoutTransition(mCircleLayoutTransition);
-
-        mAccessibilityManager = (AccessibilityManager) getActivity().getSystemService(
-                Context.ACCESSIBILITY_SERVICE);
+        mAccessibilityManager =
+                (AccessibilityManager) getActivity().getSystemService(ACCESSIBILITY_SERVICE);
     }
 
     @Override
     public void onResume() {
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(getActivity());
-        prefs.registerOnSharedPreferenceChangeListener(this);
-        readFromSharedPref(prefs);
-        mTime.readFromSharedPref(prefs, "sw");
-        mTime.postInvalidate();
+        super.onResume();
 
+        // Conservatively assume the data in the adapter has changed while the fragment was paused.
+        mLapsAdapter.notifyDataSetChanged();
+
+        // Update the state of the buttons.
         setFabAppearance();
         setLeftRightButtonAppearance();
-        mTimeText.setTime(mAccumulatedTime, true, true);
-        if (mState == Stopwatches.STOPWATCH_RUNNING) {
-            acquireWakeLock();
-            startUpdateThread();
-        } else if (mState == Stopwatches.STOPWATCH_STOPPED && mAccumulatedTime != 0) {
-            mTimeText.blinkTimeStr(true);
+
+        // Draw the current stopwatch and lap times.
+        updateTime();
+
+        // Start updates if the stopwatch is running; blink text if it is paused.
+        switch (getStopwatch().getState()) {
+            case RUNNING:
+                acquireWakeLock();
+                mTime.update();
+                startUpdatingTime();
+                break;
+            case PAUSED:
+                mTimeText.blinkTimeStr(true);
+                break;
         }
-        showLaps();
-        ((DeskClock)getActivity()).registerPageChangedListener(this);
-        // View was hidden in onPause, make sure it is visible now.
-        View v = getView();
-        if (v != null) {
-            v.setVisibility(View.VISIBLE);
+
+        // Adjust the visibility of the list of laps.
+        showOrHideLaps(false);
+
+        // Start watching for page changes away from this fragment.
+        getDeskClock().registerPageChangedListener(this);
+
+        // View is hidden in onPause, make sure it is visible now.
+        final View view = getView();
+        if (view != null) {
+            view.setVisibility(VISIBLE);
         }
-        super.onResume();
     }
 
     @Override
     public void onPause() {
-        if (mState == Stopwatches.STOPWATCH_RUNNING) {
-            stopUpdateThread();
-
-            // This is called because the lock screen was activated, the window stay
-            // active under it and when we unlock the screen, we see the old time for
-            // a fraction of a second.
-            View v = getView();
-            if (v != null) {
-                v.setVisibility(View.INVISIBLE);
-            }
-        }
-        // The stopwatch must keep running even if the user closes the app so save stopwatch state
-        // in shared prefs
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(getActivity());
-        prefs.unregisterOnSharedPreferenceChangeListener(this);
-        writeToSharedPref(prefs);
-        mTime.writeToSharedPref(prefs, "sw");
-        mTimeText.blinkTimeStr(false);
-        ((DeskClock)getActivity()).unregisterPageChangedListener(this);
-        releaseWakeLock();
         super.onPause();
+
+        final View view = getView();
+        if (view != null) {
+            // Make the view invisible because when the lock screen is activated, the window stays
+            // active under it. Later, when unlocking the screen, we see the old stopwatch time for
+            // a fraction of a second.
+            getView().setVisibility(INVISIBLE);
+        }
+
+        // Stop all updates while the fragment is not visible.
+        stopUpdatingTime();
+        mTimeText.blinkTimeStr(false);
+
+        // Stop watching for page changes away from this fragment.
+        getDeskClock().unregisterPageChangedListener(this);
+
+        // Release the wake lock if it is currently held.
+        releaseWakeLock();
     }
 
     @Override
     public void onPageChanged(int page) {
-        if (page == DeskClock.STOPWATCH_TAB_INDEX && mState == Stopwatches.STOPWATCH_RUNNING) {
+        if (page == DeskClock.STOPWATCH_TAB_INDEX && getStopwatch().isRunning()) {
             acquireWakeLock();
         } else {
             releaseWakeLock();
         }
     }
 
-    private void doStop() {
-        if (DEBUG) LogUtils.v("StopwatchFragment.doStop");
-        stopUpdateThread();
-        mTime.pauseIntervalAnimation();
-        mTimeText.setTime(mAccumulatedTime, true, true);
-        mTimeText.blinkTimeStr(true);
-        updateCurrentLap(mAccumulatedTime);
-        mState = Stopwatches.STOPWATCH_STOPPED;
-        setFabAppearance();
-        setLeftRightButtonAppearance();
+    @Override
+    public void onFabClick(View view) {
+        toggleStopwatchState();
     }
 
-    private void doStart(long time) {
-        if (DEBUG) LogUtils.v("StopwatchFragment.doStart");
-        mStartTime = time;
-        startUpdateThread();
-        mTimeText.blinkTimeStr(false);
-        if (mTime.isAnimating()) {
-            mTime.startIntervalAnimation();
-        }
-        mState = Stopwatches.STOPWATCH_RUNNING;
-        setFabAppearance();
-        setLeftRightButtonAppearance();
-    }
-
-    private void doLap() {
-        if (DEBUG) LogUtils.v("StopwatchFragment.doLap");
-        showLaps();
-        setFabAppearance();
-        setLeftRightButtonAppearance();
-    }
-
-    private void doReset() {
-        if (DEBUG) LogUtils.v("StopwatchFragment.doReset");
-        SharedPreferences prefs =
-                Utils.getDefaultSharedPreferences(getActivity());
-        Utils.clearSwSharedPref(prefs);
-        mTime.clearSharedPref(prefs, "sw");
-        mAccumulatedTime = 0;
-        mLapsAdapter.clearLaps();
-        showLaps();
-        mTime.stopIntervalAnimation();
-        mTime.reset();
-        mTimeText.setTime(mAccumulatedTime, true, true);
-        mTimeText.blinkTimeStr(false);
-        mState = Stopwatches.STOPWATCH_RESET;
-        setFabAppearance();
-        setLeftRightButtonAppearance();
-    }
-
-    private void shareResults() {
-        final Context context = getActivity();
-        final Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
-        shareIntent.setType("text/plain");
-        shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
-        shareIntent.putExtra(Intent.EXTRA_SUBJECT,
-                Stopwatches.getShareTitle(context.getApplicationContext()));
-        shareIntent.putExtra(Intent.EXTRA_TEXT, Stopwatches.buildShareResults(
-                getActivity().getApplicationContext(), mTimeText.getTimeString(),
-                getLapShareTimes(mLapsAdapter.getLapTimes())));
-
-        final Intent launchIntent = Intent.createChooser(shareIntent,
-                context.getString(R.string.sw_share_button));
-        try {
-            context.startActivity(launchIntent);
-        } catch (ActivityNotFoundException e) {
-            LogUtils.e("No compatible receiver is found");
-        }
-    }
-
-    /** Turn laps as they would be saved in prefs into format for sharing. **/
-    private long[] getLapShareTimes(long[] input) {
-        if (input == null) {
-            return null;
-        }
-
-        int numLaps = input.length;
-        long[] output = new long[numLaps];
-        long prevLapElapsedTime = 0;
-        for (int lap_i = numLaps - 1; lap_i >= 0; lap_i--) {
-            long lap = input[lap_i];
-            LogUtils.v("lap " + lap_i + ": " + lap);
-            output[lap_i] = lap - prevLapElapsedTime;
-            prevLapElapsedTime = lap;
-        }
-        return output;
-    }
-
-    private boolean reachedMaxLaps() {
-        return mLapsAdapter.getCount() >= Stopwatches.MAX_LAPS;
-    }
-
-    /***
-     * Handle action when user presses the lap button
-     * @param time - in hundredth of a second
-     */
-    private void addLapTime(long time) {
-        // The total elapsed time
-        final long curTime = time - mStartTime + mAccumulatedTime;
-        int size = mLapsAdapter.getCount();
-        if (size == 0) {
-            // Create and add the first lap
-            Lap firstLap = new Lap(curTime, curTime);
-            mLapsAdapter.addLap(firstLap);
-            // Create the first active lap
-            mLapsAdapter.addLap(new Lap(0, curTime));
-            // Update the interval on the clock and check the lap and total time formatting
-            mTime.setIntervalTime(curTime);
-            mLapsAdapter.updateTimeFormats(firstLap);
-        } else {
-            // Finish active lap
-            final long lapTime = curTime - mLapsAdapter.getItem(1).mTotalTime;
-            mLapsAdapter.getItem(0).mLapTime = lapTime;
-            mLapsAdapter.getItem(0).mTotalTime = curTime;
-            // Create a new active lap
-            mLapsAdapter.addLap(new Lap(0, curTime));
-            // Update marker on clock and check that formatting for the lap number
-            mTime.setMarkerTime(lapTime);
-            mLapsAdapter.updateLapFormat();
-        }
-        // Repaint the laps list
-        mLapsAdapter.notifyDataSetChanged();
-
-        // Start lap animation starting from the second lap
-        mTime.stopIntervalAnimation();
-        if (!reachedMaxLaps()) {
-            mTime.startIntervalAnimation();
-        }
-    }
-
-    private void updateCurrentLap(long totalTime) {
-        // There are either 0, 2 or more Laps in the list See {@link #addLapTime}
-        if (mLapsAdapter.getCount() > 0) {
-            Lap curLap = mLapsAdapter.getItem(0);
-            curLap.mLapTime = totalTime - mLapsAdapter.getItem(1).mTotalTime;
-            curLap.mTotalTime = totalTime;
-            // If this lap has caused a change in the format for total and/or lap time, all of
-            // the rows need a fresh print. The simplest way to refresh all of the rows is
-            // calling notifyDataSetChanged.
-            if (mLapsAdapter.updateTimeFormats(curLap)) {
-                mLapsAdapter.notifyDataSetChanged();
-            } else {
-                curLap.updateView();
-            }
-        }
-    }
-
-    /**
-     * Show or hide the laps-list
-     */
-    private void showLaps() {
-        if (DEBUG) LogUtils.v(String.format("StopwatchFragment.showLaps: count=%d",
-                mLapsAdapter.getCount()));
-
-        boolean lapsVisible = mLapsAdapter.getCount() > 0;
-
-        // Layout change animations will start upon the first add/hide view. Temporarily disable
-        // the layout transition animation for the spacers, make the changes, then re-enable
-        // the animation for the add/hide laps-list
-        if (mSpacersUsed) {
-            ViewGroup rootView = (ViewGroup) getView();
-            if (rootView != null) {
-                rootView.setLayoutTransition(null);
-
-                showSpacerVisibility(lapsVisible);
-
-                rootView.setLayoutTransition(mLayoutTransition);
-            }
-        }
-
-        showBottomSpacerVisibility(lapsVisible);
-
-        if (lapsVisible) {
-            // There are laps - show the laps-list
-            // No delay for the CircleButtonsLayout changes - start immediately so that the
-            // circle has shifted before the laps-list starts appearing.
-            mCircleLayoutTransition.setStartDelay(LayoutTransition.CHANGING, 0);
-
-            mLapsList.setVisibility(View.VISIBLE);
-        } else {
-            // There are no laps - hide the laps list
-
-            // Delay the CircleButtonsLayout animation until after the laps-list disappears
-            long startDelay = mLayoutTransition.getStartDelay(LayoutTransition.DISAPPEARING) +
-                    mLayoutTransition.getDuration(LayoutTransition.DISAPPEARING);
-            mCircleLayoutTransition.setStartDelay(LayoutTransition.CHANGING, startDelay);
-            mLapsList.setVisibility(View.GONE);
-        }
-    }
-
-    private void showSpacerVisibility(boolean lapsVisible) {
-        final int spacersVisibility = lapsVisible ? View.GONE : View.VISIBLE;
-        if (mStartSpace != null) {
-            mStartSpace.setVisibility(spacersVisibility);
-        }
-        if (mEndSpace != null) {
-            mEndSpace.setVisibility(spacersVisibility);
-        }
-    }
-
-    private void showBottomSpacerVisibility(boolean lapsVisible) {
-        if (mBottomSpace != null) {
-            mBottomSpace.setVisibility(lapsVisible ? View.GONE : View.VISIBLE);
-        }
-    }
-
-    private void startUpdateThread() {
-        mTime.post(mTimeUpdateThread);
-    }
-
-    private void stopUpdateThread() {
-        mTime.removeCallbacks(mTimeUpdateThread);
-    }
-
-    Runnable mTimeUpdateThread = new Runnable() {
-        @Override
-        public void run() {
-            long curTime = Utils.getTimeNow();
-            long totalTime = mAccumulatedTime + (curTime - mStartTime);
-            if (mTime != null) {
-                mTimeText.setTime(totalTime, true, true);
-            }
-            updateCurrentLap(totalTime);
-            mTime.postDelayed(mTimeUpdateThread, mAccessibilityManager != null &&
-                    mAccessibilityManager.isTouchExplorationEnabled()
-                    ? STOPWATCH_ACCESSIBILTY_REFRESH_INTERVAL_MILLIS
-                    : STOPWATCH_REFRESH_INTERVAL_MILLIS);
-        }
-    };
-
-    private void writeToSharedPref(SharedPreferences prefs) {
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.putLong (Stopwatches.PREF_START_TIME, mStartTime);
-        editor.putLong (Stopwatches.PREF_ACCUM_TIME, mAccumulatedTime);
-        editor.putInt (Stopwatches.PREF_STATE, mState);
-        if (mLapsAdapter != null) {
-            long [] laps = mLapsAdapter.getLapTimes();
-            if (laps != null) {
-                editor.putInt (Stopwatches.PREF_LAP_NUM, laps.length);
-                for (int i = 0; i < laps.length; i++) {
-                    String key = Stopwatches.PREF_LAP_TIME + Integer.toString(laps.length - i);
-                    editor.putLong (key, laps[i]);
-                }
-            }
-        }
-        if (mState == Stopwatches.STOPWATCH_RUNNING) {
-            editor.putLong(Stopwatches.NOTIF_CLOCK_BASE, mStartTime-mAccumulatedTime);
-            editor.putLong(Stopwatches.NOTIF_CLOCK_ELAPSED, -1);
-            editor.putBoolean(Stopwatches.NOTIF_CLOCK_RUNNING, true);
-        } else if (mState == Stopwatches.STOPWATCH_STOPPED) {
-            editor.putLong(Stopwatches.NOTIF_CLOCK_ELAPSED, mAccumulatedTime);
-            editor.putLong(Stopwatches.NOTIF_CLOCK_BASE, -1);
-            editor.putBoolean(Stopwatches.NOTIF_CLOCK_RUNNING, false);
-        } else if (mState == Stopwatches.STOPWATCH_RESET) {
-            editor.remove(Stopwatches.NOTIF_CLOCK_BASE);
-            editor.remove(Stopwatches.NOTIF_CLOCK_RUNNING);
-            editor.remove(Stopwatches.NOTIF_CLOCK_ELAPSED);
-        }
-        editor.putBoolean(Stopwatches.PREF_UPDATE_CIRCLE, false);
-        editor.apply();
-    }
-
-    private void readFromSharedPref(SharedPreferences prefs) {
-        mStartTime = prefs.getLong(Stopwatches.PREF_START_TIME, 0);
-        mAccumulatedTime = prefs.getLong(Stopwatches.PREF_ACCUM_TIME, 0);
-        mState = prefs.getInt(Stopwatches.PREF_STATE, Stopwatches.STOPWATCH_RESET);
-        int numLaps = prefs.getInt(Stopwatches.PREF_LAP_NUM, Stopwatches.STOPWATCH_RESET);
-        if (mLapsAdapter != null) {
-            long[] oldLaps = mLapsAdapter.getLapTimes();
-            if (oldLaps == null || oldLaps.length < numLaps) {
-                long[] laps = new long[numLaps];
-                long prevLapElapsedTime = 0;
-                for (int lap_i = 0; lap_i < numLaps; lap_i++) {
-                    String key = Stopwatches.PREF_LAP_TIME + Integer.toString(lap_i + 1);
-                    long lap = prefs.getLong(key, 0);
-                    laps[numLaps - lap_i - 1] = lap - prevLapElapsedTime;
-                    prevLapElapsedTime = lap;
-                }
-                mLapsAdapter.setLapTimes(laps);
-            }
-        }
-        if (prefs.getBoolean(Stopwatches.PREF_UPDATE_CIRCLE, true)) {
-            if (mState == Stopwatches.STOPWATCH_STOPPED) {
-                doStop();
-            } else if (mState == Stopwatches.STOPWATCH_RUNNING) {
-                doStart(mStartTime);
-            } else if (mState == Stopwatches.STOPWATCH_RESET) {
+    @Override
+    public void onLeftButtonClick(View view) {
+        switch (getStopwatch().getState()) {
+            case RUNNING:
+                doAddLap();
+                break;
+            case PAUSED:
                 doReset();
-            }
+                break;
         }
     }
 
     @Override
-    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
-        if (prefs.equals(Utils.getDefaultSharedPreferences(getActivity()))) {
-            if (! (key.equals(Stopwatches.PREF_LAP_NUM) ||
-                    key.startsWith(Stopwatches.PREF_LAP_TIME))) {
-                readFromSharedPref(prefs);
-                if (prefs.getBoolean(Stopwatches.PREF_UPDATE_CIRCLE, true)) {
-                    mTime.readFromSharedPref(prefs, "sw");
-                }
-            }
+    public void onRightButtonClick(View view) {
+        doShare();
+    }
+
+    @Override
+    public void setFabAppearance() {
+        if (mFab == null || getSelectedTab() != DeskClock.STOPWATCH_TAB_INDEX) {
+            return;
+        }
+
+        if (getStopwatch().isRunning()) {
+            mFab.setImageResource(R.drawable.ic_pause_white_24dp);
+            mFab.setContentDescription(getString(R.string.sw_pause_button));
+        } else {
+            mFab.setImageResource(R.drawable.ic_start_white_24dp);
+            mFab.setContentDescription(getString(R.string.sw_start_button));
+        }
+        mFab.setVisibility(VISIBLE);
+    }
+
+    @Override
+    public void setLeftRightButtonAppearance() {
+        if (mLeftButton == null || mRightButton == null ||
+                getSelectedTab() != DeskClock.STOPWATCH_TAB_INDEX) {
+            return;
+        }
+
+        mRightButton.setImageResource(R.drawable.ic_share);
+        mRightButton.setContentDescription(getString(R.string.sw_share_button));
+
+        switch (getStopwatch().getState()) {
+            case RESET:
+                mLeftButton.setEnabled(false);
+                mLeftButton.setVisibility(INVISIBLE);
+                mRightButton.setVisibility(INVISIBLE);
+                break;
+            case RUNNING:
+                mLeftButton.setImageResource(R.drawable.ic_lap);
+                mLeftButton.setContentDescription(getString(R.string.sw_lap_button));
+                mLeftButton.setEnabled(canRecordMoreLaps());
+                mLeftButton.setVisibility(canRecordMoreLaps() ? VISIBLE : INVISIBLE);
+                mRightButton.setVisibility(INVISIBLE);
+                break;
+            case PAUSED:
+                mLeftButton.setEnabled(true);
+                mLeftButton.setImageResource(R.drawable.ic_reset);
+                mLeftButton.setContentDescription(getString(R.string.sw_reset_button));
+                mLeftButton.setVisibility(VISIBLE);
+                mRightButton.setVisibility(VISIBLE);
+                break;
         }
     }
 
-    // Used to keeps screen on when stopwatch is running.
+    /**
+     * Start the stopwatch.
+     */
+    private void doStart() {
+        Events.sendStopwatchEvent(R.string.action_start, R.string.label_deskclock);
+
+        // Update the stopwatch state.
+        DataModel.getDataModel().startStopwatch();
+
+        // Start UI updates.
+        startUpdatingTime();
+        mTime.update();
+        mTimeText.blinkTimeStr(false);
+
+        // Update button states.
+        setFabAppearance();
+        setLeftRightButtonAppearance();
+
+        // Acquire the wake lock.
+        acquireWakeLock();
+    }
+
+    /**
+     * Pause the stopwatch.
+     */
+    private void doPause() {
+        Events.sendStopwatchEvent(R.string.action_pause, R.string.label_deskclock);
+
+        // Update the stopwatch state
+        DataModel.getDataModel().pauseStopwatch();
+
+        // Redraw the paused stopwatch time.
+        updateTime();
+
+        // Stop UI updates.
+        stopUpdatingTime();
+        mTimeText.blinkTimeStr(true);
+
+        // Update button states.
+        setFabAppearance();
+        setLeftRightButtonAppearance();
+
+        // Release the wake lock.
+        releaseWakeLock();
+    }
+
+    /**
+     * Reset the stopwatch.
+     */
+    private void doReset() {
+        Events.sendStopwatchEvent(R.string.action_reset, R.string.label_deskclock);
+
+        // Update the stopwatch state.
+        DataModel.getDataModel().resetStopwatch();
+
+        // Clear the laps.
+        showOrHideLaps(true);
+
+        // Clear the times.
+        mTime.postInvalidateOnAnimation();
+        mTimeText.setTime(0, true, true);
+        mTimeText.blinkTimeStr(false);
+
+        // Update button states.
+        setFabAppearance();
+        setLeftRightButtonAppearance();
+
+        // Release the wake lock.
+        releaseWakeLock();
+    }
+
+    /**
+     * Send stopwatch time and lap times to an external sharing application.
+     */
+    private void doShare() {
+        final String[] subjects = getResources().getStringArray(R.array.sw_share_strings);
+        final String subject = subjects[(int)(Math.random() * subjects.length)];
+        final String text = mLapsAdapter.getShareText();
+
+        final Intent shareIntent = new Intent(Intent.ACTION_SEND)
+                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
+                .putExtra(Intent.EXTRA_SUBJECT, subject)
+                .putExtra(Intent.EXTRA_TEXT, text)
+                .setType("text/plain");
+
+        final Context context = getActivity();
+        final String title = context.getString(R.string.sw_share_button);
+        final Intent shareChooserIntent = Intent.createChooser(shareIntent, title);
+        try {
+            context.startActivity(shareChooserIntent);
+        } catch (ActivityNotFoundException anfe) {
+            LogUtils.e("No compatible receiver is found");
+        }
+    }
+
+    /**
+     * Record and add a new lap ending now.
+     */
+    private void doAddLap() {
+        Events.sendStopwatchEvent(R.string.action_lap, R.string.label_deskclock);
+
+        // Record a new lap.
+        final Lap lap = mLapsAdapter.addLap();
+        if (lap == null) {
+            return;
+        }
+
+        // Update button states.
+        setLeftRightButtonAppearance();
+
+        if (lap.getLapNumber() == 1) {
+            // Child views from prior lap sets hang around and blit to the screen when adding the
+            // first lap of the subsequent lap set. Remove those superfluous children here manually
+            // to ensure they aren't seen as the first lap is drawn.
+            mLapsList.removeAllViewsInLayout();
+
+            // Start animating the reference lap.
+            mTime.update();
+
+            // Recording the first lap transitions the UI to display the laps list.
+            showOrHideLaps(false);
+        }
+
+        // Ensure the newly added lap is visible on screen.
+        mLapsList.scrollToPosition(0);
+    }
+
+    /**
+     * Show or hide the list of laps.
+     */
+    private void showOrHideLaps(boolean clearLaps) {
+        final Transition transition = new AutoTransition()
+                .addListener(new Transition.TransitionListener() {
+                    @Override
+                    public void onTransitionStart(Transition transition) {
+                        mLapsListIsTransitioning = true;
+                    }
+
+                    @Override
+                    public void onTransitionEnd(Transition transition) {
+                        mLapsListIsTransitioning = false;
+                    }
+
+                    @Override
+                    public void onTransitionCancel(Transition transition) {
+                    }
+
+                    @Override
+                    public void onTransitionPause(Transition transition) {
+                    }
+
+                    @Override
+                    public void onTransitionResume(Transition transition) {
+                    }
+                });
+
+        final ViewGroup sceneRoot = (ViewGroup) getView();
+        TransitionManager.beginDelayedTransition(sceneRoot, transition);
+
+        if (clearLaps) {
+            mLapsAdapter.clearLaps();
+        }
+
+        final boolean lapsVisible = mLapsAdapter.getItemCount() > 0;
+        mLapsList.setVisibility(lapsVisible ? VISIBLE : GONE);
+    }
 
     private void acquireWakeLock() {
         if (mWakeLock == null) {
-            final PowerManager pm =
-                    (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
-            mWakeLock = pm.newWakeLock(
-                    PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG);
+            final PowerManager pm = (PowerManager) getActivity().getSystemService(POWER_SERVICE);
+            mWakeLock = pm.newWakeLock(SCREEN_BRIGHT_WAKE_LOCK | ON_AFTER_RELEASE, TAG);
             mWakeLock.setReferenceCounted(false);
         }
         mWakeLock.acquire();
@@ -832,97 +440,94 @@
         }
     }
 
-    @Override
-    public void onFabClick(View view){
-        toggleStopwatchState();
-    }
-
-    @Override
-    public void onLeftButtonClick(View view) {
-        final long time = Utils.getTimeNow();
-        final Context context = getActivity().getApplicationContext();
-        final Intent intent = new Intent(context, StopwatchService.class);
-        intent.putExtra(Stopwatches.MESSAGE_TIME, time);
-        intent.putExtra(Stopwatches.SHOW_NOTIF, false);
-        switch (mState) {
-            case Stopwatches.STOPWATCH_RUNNING:
-                // Save lap time
-                addLapTime(time);
-                doLap();
-                Events.sendStopwatchEvent(R.string.action_lap, R.string.label_deskclock);
-
-                intent.setAction(HandleDeskClockApiCalls.ACTION_LAP_STOPWATCH);
-                context.startService(intent);
-                break;
-            case Stopwatches.STOPWATCH_STOPPED:
-                // do reset
-                doReset();
-                Events.sendStopwatchEvent(R.string.action_reset, R.string.label_deskclock);
-
-                intent.setAction(HandleDeskClockApiCalls.ACTION_RESET_STOPWATCH);
-                context.startService(intent);
-                releaseWakeLock();
-                break;
-            default:
-                // Happens in monkey tests
-                LogUtils.i("Illegal state " + mState + " while pressing the left stopwatch button");
-                break;
-        }
-    }
-
-    @Override
-    public void onRightButtonClick(View view) {
-        shareResults();
-    }
-
-    @Override
-    public void setFabAppearance() {
-        final DeskClock activity = (DeskClock) getActivity();
-        if (mFab == null || activity.getSelectedTab() != DeskClock.STOPWATCH_TAB_INDEX) {
-            return;
-        }
-        if (mState == Stopwatches.STOPWATCH_RUNNING) {
-            mFab.setImageResource(R.drawable.ic_fab_pause);
-            mFab.setContentDescription(getString(R.string.sw_stop_button));
+    /**
+     * Either pause or start the stopwatch based on its current state.
+     */
+    private void toggleStopwatchState() {
+        if (getStopwatch().isRunning()) {
+            doPause();
         } else {
-            mFab.setImageResource(R.drawable.ic_fab_play);
-            mFab.setContentDescription(getString(R.string.sw_start_button));
+            doStart();
         }
-        mFab.setVisibility(View.VISIBLE);
     }
 
-    @Override
-    public void setLeftRightButtonAppearance() {
-        final DeskClock activity = (DeskClock) getActivity();
-        if (mLeftButton == null || mRightButton == null ||
-                activity.getSelectedTab() != DeskClock.STOPWATCH_TAB_INDEX) {
-            return;
-        }
-        mRightButton.setImageResource(R.drawable.ic_share);
-        mRightButton.setContentDescription(getString(R.string.sw_share_button));
+    private Stopwatch getStopwatch() {
+        return DataModel.getDataModel().getStopwatch();
+    }
 
-        switch (mState) {
-            case Stopwatches.STOPWATCH_RESET:
-                mLeftButton.setImageResource(R.drawable.ic_lap);
-                mLeftButton.setContentDescription(getString(R.string.sw_lap_button));
-                mLeftButton.setEnabled(false);
-                mLeftButton.setVisibility(View.INVISIBLE);
-                mRightButton.setVisibility(View.INVISIBLE);
-                break;
-            case Stopwatches.STOPWATCH_RUNNING:
-                mLeftButton.setImageResource(R.drawable.ic_lap);
-                mLeftButton.setContentDescription(getString(R.string.sw_lap_button));
-                mLeftButton.setEnabled(!reachedMaxLaps());
-                mLeftButton.setVisibility(View.VISIBLE);
-                mRightButton.setVisibility(View.INVISIBLE);
-                break;
-            case Stopwatches.STOPWATCH_STOPPED:
-                mLeftButton.setImageResource(R.drawable.ic_reset);
-                mLeftButton.setContentDescription(getString(R.string.sw_reset_button));
-                mLeftButton.setEnabled(true);
-                mLeftButton.setVisibility(View.VISIBLE);
-                mRightButton.setVisibility(View.VISIBLE);
-                break;
+    private boolean canRecordMoreLaps() {
+        return DataModel.getDataModel().canAddMoreLaps();
+    }
+
+    /**
+     * Post the first runnable to update times within the UI. It will reschedule itself as needed.
+     */
+    private void startUpdatingTime() {
+        // Ensure only one copy of the runnable is ever scheduled by first stopping updates.
+        stopUpdatingTime();
+        mTime.post(mTimeUpdateRunnable);
+    }
+
+    /**
+     * Remove the runnable that updates times within the UI.
+     */
+    private void stopUpdatingTime() {
+        mTime.removeCallbacks(mTimeUpdateRunnable);
+    }
+
+    /**
+     * Update all time displays based on a single snapshot of the stopwatch progress. This includes
+     * the stopwatch time drawn in the circle, the current lap time and the total elapsed time in
+     * the list of laps.
+     */
+    private void updateTime() {
+        // Compute the total time of the stopwatch.
+        final long totalTime = getStopwatch().getTotalTime();
+
+        // Update the total time display.
+        mTimeText.setTime(totalTime, true, true);
+
+        // Update the current lap.
+        final boolean currentLapIsVisible = mLapsLayoutManager.findFirstVisibleItemPosition() == 0;
+        if (!mLapsListIsTransitioning && currentLapIsVisible) {
+            mLapsAdapter.updateCurrentLap(mLapsList, totalTime);
+        }
+    }
+
+    /**
+     * This runnable periodically updates times throughout the UI. It stops these updates when the
+     * stopwatch is no longer running.
+     */
+    private final class TimeUpdateRunnable implements Runnable {
+        @Override
+        public void run() {
+            final long startTime = SystemClock.elapsedRealtime();
+
+            updateTime();
+
+            if (getStopwatch().isRunning()) {
+                // The stopwatch is still running so execute this runnable again after a delay.
+                final boolean talkBackOn = mAccessibilityManager.isTouchExplorationEnabled();
+
+                // Grant longer time between redraws when talk-back is on to let it catch up.
+                final int period = talkBackOn ? 500 : 25;
+
+                // Try to maintain a consistent period of time between redraws.
+                final long endTime = SystemClock.elapsedRealtime();
+                final long delay = Math.max(0, startTime + period - endTime);
+
+                mTime.postDelayed(this, delay);
+            }
+        }
+    }
+
+    /**
+     * Tapping the stopwatch text also toggles the stopwatch state, just like the fab.
+     */
+    private final class ToggleStopwatchRunnable implements Runnable {
+        @Override
+        public void run() {
+            toggleStopwatchState();
         }
     }
 }
diff --git a/src/com/android/deskclock/stopwatch/StopwatchService.java b/src/com/android/deskclock/stopwatch/StopwatchService.java
index 9172e81..07714e8 100644
--- a/src/com/android/deskclock/stopwatch/StopwatchService.java
+++ b/src/com/android/deskclock/stopwatch/StopwatchService.java
@@ -1,39 +1,38 @@
+/*
+ * Copyright (C) 2015 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.stopwatch;
 
-import android.app.Notification;
-import android.app.PendingIntent;
 import android.app.Service;
-import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.os.IBinder;
-import android.preference.PreferenceManager;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationManagerCompat;
-import android.view.View;
-import android.widget.RemoteViews;
 
-import com.android.deskclock.CircleTimerView;
-import com.android.deskclock.DeskClock;
 import com.android.deskclock.HandleDeskClockApiCalls;
 import com.android.deskclock.R;
-import com.android.deskclock.Utils;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.events.Events;
 
 /**
- * TODO: Insert description here. (generated by sblitz)
+ * This service exists solely to allow the stopwatch notification to alter the state of the
+ * stopwatch without disturbing the notification shade. If an activity were used instead (even one
+ * that is not displayed) the notification manager implicitly closes the notification shade which
+ * clashes with the use case of starting/pausing/lapping/resetting the stopwatch without
+ * disturbing the notification shade.
  */
-public class StopwatchService extends Service {
-    // Member fields
-    private int mNumLaps;
-    private long mElapsedTime;
-    private long mStartTime;
-    private boolean mLoadApp;
-    private NotificationManagerCompat mNotificationManager;
-
-    // Constants for intent information
-    // Make this a large number to avoid the alarm ID's which seem to be 1, 2, ...
-    // Must also be different than TimerReceiver.IN_USE_NOTIFICATION_ID
-    private static final int NOTIFICATION_ID = Integer.MAX_VALUE - 1;
+public final class StopwatchService extends Service {
 
     @Override
     public IBinder onBind(Intent intent) {
@@ -41,423 +40,31 @@
     }
 
     @Override
-    public void onCreate() {
-        mNumLaps = 0;
-        mElapsedTime = 0;
-        mStartTime = 0;
-        mLoadApp = false;
-        mNotificationManager = NotificationManagerCompat.from(this);
-    }
-
-    @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
-        if (intent == null) {
-            return Service.START_NOT_STICKY;
-        }
-
-        if (mStartTime == 0 || mElapsedTime == 0 || mNumLaps == 0) {
-            // May not have the most recent values.
-            readFromSharedPrefs();
-        }
-
-        String actionType = intent.getAction();
-        long actionTime = intent.getLongExtra(Stopwatches.MESSAGE_TIME, Utils.getTimeNow());
-        boolean showNotif = intent.getBooleanExtra(Stopwatches.SHOW_NOTIF, true);
-        // Update the stopwatch circle when the app is open or is being opened.
-        boolean updateCircle = !showNotif
-                || intent.getAction().equals(Stopwatches.RESET_AND_LAUNCH_STOPWATCH);
-        switch(actionType) {
-            case HandleDeskClockApiCalls.ACTION_START_STOPWATCH:
-                SharedPreferences prefs = Utils.getDefaultSharedPreferences(this) ;
-                prefs.edit().putBoolean(Stopwatches.NOTIF_CLOCK_RUNNING, true).apply();
-
-                mStartTime = actionTime;
-                writeSharedPrefsStarted(mStartTime, updateCircle);
-                if (showNotif) {
-                    setNotification(mStartTime - mElapsedTime, true, mNumLaps);
-                } else {
-                    saveNotification(mStartTime - mElapsedTime, true, mNumLaps);
-                }
+        switch (intent.getAction()) {
+            case HandleDeskClockApiCalls.ACTION_START_STOPWATCH: {
+                DataModel.getDataModel().startStopwatch();
+                Events.sendStopwatchEvent(R.string.action_start, R.string.label_notification);
                 break;
-            case HandleDeskClockApiCalls.ACTION_LAP_STOPWATCH:
-                mNumLaps++;
-                long lapTimeElapsed = actionTime - mStartTime + mElapsedTime;
-                writeSharedPrefsLap(lapTimeElapsed, updateCircle);
-                if (showNotif) {
-                    setNotification(mStartTime - mElapsedTime, true, mNumLaps);
-                } else {
-                    saveNotification(mStartTime - mElapsedTime, true, mNumLaps);
-                }
-                break;
-            case HandleDeskClockApiCalls.ACTION_STOP_STOPWATCH:
-                prefs = Utils.getDefaultSharedPreferences(this);
-                prefs.edit().putBoolean(Stopwatches.NOTIF_CLOCK_RUNNING, false).apply();
-
-                mElapsedTime = mElapsedTime + (actionTime - mStartTime);
-                writeSharedPrefsStopped(mElapsedTime, updateCircle);
-                if (showNotif) {
-                    setNotification(actionTime - mElapsedTime, false, mNumLaps);
-                } else {
-                    saveNotification(mElapsedTime, false, mNumLaps);
-                }
-                break;
-            case HandleDeskClockApiCalls.ACTION_RESET_STOPWATCH:
-                mLoadApp = false;
-                writeSharedPrefsReset(updateCircle);
-                clearSavedNotification();
-                stopSelf();
-                break;
-            case Stopwatches.RESET_AND_LAUNCH_STOPWATCH:
-                mLoadApp = true;
-                writeSharedPrefsReset(updateCircle);
-                clearSavedNotification();
-                closeNotificationShade();
-                stopSelf();
-                break;
-            case Stopwatches.SHARE_STOPWATCH:
-                if  (mElapsedTime > 0) {
-                    closeNotificationShade();
-                    Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
-                    shareIntent.setType("text/plain");
-                    shareIntent.putExtra(Intent.EXTRA_SUBJECT, Stopwatches.getShareTitle(
-                            getApplicationContext()));
-                    shareIntent.putExtra(Intent.EXTRA_TEXT, Stopwatches.buildShareResults(
-                            getApplicationContext(), mElapsedTime, readLapsFromPrefs()));
-                    Intent chooserIntent = Intent.createChooser(shareIntent, null);
-                    chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                    getApplication().startActivity(chooserIntent);
-                }
-                break;
-            case Stopwatches.SHOW_NOTIF:
-                // SHOW_NOTIF sent from the DeskClock.onPause
-                // If a notification is not displayed, this service's work is over
-                if (!showSavedNotification()) {
-                    stopSelf();
-                }
-                break;
-            case Stopwatches.KILL_NOTIF:
-                mNotificationManager.cancel(NOTIFICATION_ID);
-                break;
-
-        }
-
-        // We want this service to continue running until it is explicitly
-        // stopped, so return sticky.
-        return START_STICKY;
-    }
-
-    @Override
-    public void onDestroy() {
-        mNotificationManager.cancel(NOTIFICATION_ID);
-        clearSavedNotification();
-        mNumLaps = 0;
-        mElapsedTime = 0;
-        mStartTime = 0;
-        if (mLoadApp) {
-            Intent activityIntent = new Intent(getApplicationContext(), DeskClock.class);
-            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            activityIntent.putExtra(
-                    DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.STOPWATCH_TAB_INDEX);
-            startActivity(activityIntent);
-            mLoadApp = false;
-        }
-    }
-
-    private void setNotification(long clockBaseTime, boolean clockRunning, int numLaps) {
-        Context context = getApplicationContext();
-        // Intent to load the app for a non-button click.
-        Intent intent = new Intent(context, DeskClock.class);
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        intent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.STOPWATCH_TAB_INDEX);
-        // add category to distinguish between stopwatch intents and timer intents
-        intent.addCategory("stopwatch");
-        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,
-                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
-
-        // Set up remoteviews for the notification.
-        RemoteViews remoteViewsCollapsed = new RemoteViews(getPackageName(),
-                R.layout.stopwatch_notif_collapsed);
-        remoteViewsCollapsed.setOnClickPendingIntent(R.id.swn_collapsed_hitspace, pendingIntent);
-        remoteViewsCollapsed.setChronometer(
-                R.id.swn_collapsed_chronometer, clockBaseTime, null, clockRunning);
-        remoteViewsCollapsed.
-                setImageViewResource(R.id.notification_icon, R.drawable.stat_notify_stopwatch);
-        RemoteViews remoteViewsExpanded = new RemoteViews(getPackageName(),
-                R.layout.stopwatch_notif_expanded);
-        remoteViewsExpanded.setOnClickPendingIntent(R.id.swn_expanded_hitspace, pendingIntent);
-        remoteViewsExpanded.setChronometer(
-                R.id.swn_expanded_chronometer, clockBaseTime, null, clockRunning);
-        remoteViewsExpanded.
-                setImageViewResource(R.id.notification_icon, R.drawable.stat_notify_stopwatch);
-
-        if (clockRunning) {
-            // Left button: lap
-            remoteViewsExpanded.setTextViewText(
-                    R.id.swn_left_button, getResources().getText(R.string.sw_lap_button));
-            Intent leftButtonIntent = new Intent(context, StopwatchService.class);
-            leftButtonIntent.setAction(HandleDeskClockApiCalls.ACTION_LAP_STOPWATCH);
-            remoteViewsExpanded.setOnClickPendingIntent(R.id.swn_left_button,
-                    PendingIntent.getService(context, 0, leftButtonIntent, 0));
-            remoteViewsExpanded.
-                    setTextViewCompoundDrawablesRelative(R.id.swn_left_button,
-                            R.drawable.ic_lap_24dp, 0, 0, 0);
-
-            // Right button: stop clock
-            remoteViewsExpanded.setTextViewText(
-                    R.id.swn_right_button, getResources().getText(R.string.sw_stop_button));
-            Intent rightButtonIntent = new Intent(context, StopwatchService.class);
-            rightButtonIntent.setAction(HandleDeskClockApiCalls.ACTION_STOP_STOPWATCH);
-            remoteViewsExpanded.setOnClickPendingIntent(R.id.swn_right_button,
-                    PendingIntent.getService(context, 0, rightButtonIntent, 0));
-            remoteViewsExpanded.
-                    setTextViewCompoundDrawablesRelative(R.id.swn_right_button,
-                            R.drawable.ic_stop_24dp, 0, 0, 0);
-
-            // Show the laps if applicable.
-            if (numLaps > 0) {
-                String lapText = String.format(
-                        context.getString(R.string.sw_notification_lap_number), numLaps);
-                remoteViewsCollapsed.setTextViewText(R.id.swn_collapsed_laps, lapText);
-                remoteViewsCollapsed.setViewVisibility(R.id.swn_collapsed_laps, View.VISIBLE);
-                remoteViewsExpanded.setTextViewText(R.id.swn_expanded_laps, lapText);
-                remoteViewsExpanded.setViewVisibility(R.id.swn_expanded_laps, View.VISIBLE);
-            } else {
-                remoteViewsCollapsed.setViewVisibility(R.id.swn_collapsed_laps, View.GONE);
-                remoteViewsExpanded.setViewVisibility(R.id.swn_expanded_laps, View.GONE);
             }
-        } else {
-            // Left button: reset clock
-            remoteViewsExpanded.setTextViewText(
-                    R.id.swn_left_button, getResources().getText(R.string.sw_reset_button));
-            Intent leftButtonIntent = new Intent(context, StopwatchService.class);
-            leftButtonIntent.setAction(Stopwatches.RESET_AND_LAUNCH_STOPWATCH);
-            remoteViewsExpanded.setOnClickPendingIntent(R.id.swn_left_button,
-                    PendingIntent.getService(context, 0, leftButtonIntent, 0));
-            remoteViewsExpanded.
-                    setTextViewCompoundDrawablesRelative(R.id.swn_left_button,
-                            R.drawable.ic_reset_24dp, 0, 0, 0);
-
-            // Right button: start clock
-            remoteViewsExpanded.setTextViewText(
-                    R.id.swn_right_button, getResources().getText(R.string.sw_start_button));
-            Intent rightButtonIntent = new Intent(context, StopwatchService.class);
-            rightButtonIntent.setAction(HandleDeskClockApiCalls.ACTION_START_STOPWATCH);
-            remoteViewsExpanded.setOnClickPendingIntent(R.id.swn_right_button,
-                    PendingIntent.getService(context, 0, rightButtonIntent, 0));
-            remoteViewsExpanded.
-                    setTextViewCompoundDrawablesRelative(R.id.swn_right_button,
-                            R.drawable.ic_start_24dp, 0, 0, 0);
-
-            // Show stopped string.
-            remoteViewsCollapsed.
-                    setTextViewText(R.id.swn_collapsed_laps, getString(R.string.swn_stopped));
-            remoteViewsCollapsed.setViewVisibility(R.id.swn_collapsed_laps, View.VISIBLE);
-            remoteViewsExpanded.
-                    setTextViewText(R.id.swn_expanded_laps, getString(R.string.swn_stopped));
-            remoteViewsExpanded.setViewVisibility(R.id.swn_expanded_laps, View.VISIBLE);
-        }
-
-        Intent dismissIntent = new Intent(context, StopwatchService.class);
-        dismissIntent.setAction(HandleDeskClockApiCalls.ACTION_RESET_STOPWATCH);
-
-        Notification notification = new NotificationCompat.Builder(context)
-                .setAutoCancel(!clockRunning)
-                .setContent(remoteViewsCollapsed)
-                .setOngoing(clockRunning)
-                .setDeleteIntent(PendingIntent.getService(context, 0, dismissIntent, 0))
-                .setSmallIcon(R.drawable.ic_tab_stopwatch_activated)
-                .setPriority(Notification.PRIORITY_MAX)
-                .setLocalOnly(true)
-                .build();
-        notification.bigContentView = remoteViewsExpanded;
-        mNotificationManager.notify(NOTIFICATION_ID, notification);
-    }
-
-    /** Save the notification to be shown when the app is closed. **/
-    private void saveNotification(long clockTime, boolean clockRunning, int numLaps) {
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(
-                getApplicationContext());
-        SharedPreferences.Editor editor = prefs.edit();
-        if (clockRunning) {
-            editor.putLong(Stopwatches.NOTIF_CLOCK_BASE, clockTime);
-            editor.putLong(Stopwatches.NOTIF_CLOCK_ELAPSED, -1);
-            editor.putBoolean(Stopwatches.NOTIF_CLOCK_RUNNING, true);
-        } else {
-            editor.putLong(Stopwatches.NOTIF_CLOCK_ELAPSED, clockTime);
-            editor.putLong(Stopwatches.NOTIF_CLOCK_BASE, -1);
-            editor.putBoolean(Stopwatches.NOTIF_CLOCK_RUNNING, false);
-        }
-        editor.putBoolean(Stopwatches.PREF_UPDATE_CIRCLE, false);
-        editor.apply();
-    }
-
-    /** Show the most recently saved notification. **/
-    private boolean showSavedNotification() {
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(
-                getApplicationContext());
-        long clockBaseTime = prefs.getLong(Stopwatches.NOTIF_CLOCK_BASE, -1);
-        long clockElapsedTime = prefs.getLong(Stopwatches.NOTIF_CLOCK_ELAPSED, -1);
-        boolean clockRunning = prefs.getBoolean(Stopwatches.NOTIF_CLOCK_RUNNING, false);
-        int numLaps = prefs.getInt(Stopwatches.PREF_LAP_NUM, -1);
-        if (clockBaseTime == -1) {
-            if (clockElapsedTime == -1) {
-                return false;
-            } else {
-                // We don't have a clock base time, so the clock is stopped.
-                // Use the elapsed time to figure out what time to show.
-                mElapsedTime = clockElapsedTime;
-                clockBaseTime = Utils.getTimeNow() - clockElapsedTime;
+            case HandleDeskClockApiCalls.ACTION_PAUSE_STOPWATCH: {
+                DataModel.getDataModel().pauseStopwatch();
+                Events.sendStopwatchEvent(R.string.action_pause, R.string.label_notification);
+                break;
+            }
+            case HandleDeskClockApiCalls.ACTION_LAP_STOPWATCH: {
+                DataModel.getDataModel().addLap();
+                Events.sendStopwatchEvent(R.string.action_lap, R.string.label_notification);
+                break;
+            }
+            case HandleDeskClockApiCalls.ACTION_RESET_STOPWATCH: {
+                DataModel.getDataModel().clearLaps();
+                DataModel.getDataModel().resetStopwatch();
+                Events.sendStopwatchEvent(R.string.action_reset, R.string.label_notification);
+                break;
             }
         }
-        setNotification(clockBaseTime, clockRunning, numLaps);
-        return true;
-    }
 
-    private void clearSavedNotification() {
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(
-                getApplicationContext());
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.remove(Stopwatches.NOTIF_CLOCK_BASE);
-        editor.remove(Stopwatches.NOTIF_CLOCK_RUNNING);
-        editor.remove(Stopwatches.NOTIF_CLOCK_ELAPSED);
-        editor.apply();
+        return Service.START_NOT_STICKY;
     }
-
-    private void closeNotificationShade() {
-        Intent intent = new Intent();
-        intent.setAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
-        sendBroadcast(intent);
-    }
-
-    private void readFromSharedPrefs() {
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(
-                getApplicationContext());
-        mStartTime = prefs.getLong(Stopwatches.PREF_START_TIME, 0);
-        mElapsedTime = prefs.getLong(Stopwatches.PREF_ACCUM_TIME, 0);
-        mNumLaps = prefs.getInt(Stopwatches.PREF_LAP_NUM, Stopwatches.STOPWATCH_RESET);
-    }
-
-    private long[] readLapsFromPrefs() {
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(
-                getApplicationContext());
-        int numLaps = prefs.getInt(Stopwatches.PREF_LAP_NUM, Stopwatches.STOPWATCH_RESET);
-        long[] laps = new long[numLaps];
-        long prevLapElapsedTime = 0;
-        for (int lap_i = 0; lap_i < numLaps; lap_i++) {
-            String key = Stopwatches.PREF_LAP_TIME + Integer.toString(lap_i + 1);
-            long lap = prefs.getLong(key, 0);
-            if (lap == prevLapElapsedTime && lap_i == numLaps - 1) {
-                lap = mElapsedTime;
-            }
-            laps[numLaps - lap_i - 1] = lap - prevLapElapsedTime;
-            prevLapElapsedTime = lap;
-        }
-        return laps;
-    }
-
-    private void writeToSharedPrefs(Long startTime, Long lapTimeElapsed, Long elapsedTime,
-            Integer state, boolean updateCircle) {
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(
-                getApplicationContext());
-        SharedPreferences.Editor editor = prefs.edit();
-        if (startTime != null) {
-            editor.putLong(Stopwatches.PREF_START_TIME, startTime);
-            mStartTime = startTime;
-        }
-        if (lapTimeElapsed != null) {
-            int numLaps = prefs.getInt(Stopwatches.PREF_LAP_NUM, 0);
-            if (numLaps == 0) {
-                mNumLaps++;
-                numLaps++;
-            }
-            editor.putLong(Stopwatches.PREF_LAP_TIME + Integer.toString(numLaps), lapTimeElapsed);
-            numLaps++;
-            editor.putLong(Stopwatches.PREF_LAP_TIME + Integer.toString(numLaps), lapTimeElapsed);
-            editor.putInt(Stopwatches.PREF_LAP_NUM, numLaps);
-        }
-        if (elapsedTime != null) {
-            editor.putLong(Stopwatches.PREF_ACCUM_TIME, elapsedTime);
-            mElapsedTime = elapsedTime;
-        }
-        if (state != null) {
-            if (state == Stopwatches.STOPWATCH_RESET) {
-                editor.putInt(Stopwatches.PREF_STATE, Stopwatches.STOPWATCH_RESET);
-            } else if (state == Stopwatches.STOPWATCH_RUNNING) {
-                editor.putInt(Stopwatches.PREF_STATE, Stopwatches.STOPWATCH_RUNNING);
-            } else if (state == Stopwatches.STOPWATCH_STOPPED) {
-                editor.putInt(Stopwatches.PREF_STATE, Stopwatches.STOPWATCH_STOPPED);
-            }
-        }
-        editor.putBoolean(Stopwatches.PREF_UPDATE_CIRCLE, updateCircle);
-        editor.apply();
-    }
-
-    private void writeSharedPrefsStarted(long startTime, boolean updateCircle) {
-        writeToSharedPrefs(startTime, null, null, Stopwatches.STOPWATCH_RUNNING, updateCircle);
-        if (updateCircle) {
-            long time = Utils.getTimeNow();
-            SharedPreferences prefs = Utils.getDefaultSharedPreferences(
-                    getApplicationContext());
-            long intervalStartTime = prefs.getLong(
-                    Stopwatches.KEY + CircleTimerView.PREF_CTV_INTERVAL_START, -1);
-            if (intervalStartTime != -1) {
-                intervalStartTime = time;
-                SharedPreferences.Editor editor = prefs.edit();
-                editor.putLong(Stopwatches.KEY + CircleTimerView.PREF_CTV_INTERVAL_START,
-                        intervalStartTime);
-                editor.putBoolean(Stopwatches.KEY + CircleTimerView.PREF_CTV_PAUSED, false);
-                editor.apply();
-            }
-        }
-    }
-
-    private void writeSharedPrefsLap(long lapTimeElapsed, boolean updateCircle) {
-        writeToSharedPrefs(null, lapTimeElapsed, null, null, updateCircle);
-        if (updateCircle) {
-            long time = Utils.getTimeNow();
-            SharedPreferences prefs = Utils.getDefaultSharedPreferences(
-                    getApplicationContext());
-            SharedPreferences.Editor editor = prefs.edit();
-            long laps[] = readLapsFromPrefs();
-            int numLaps = laps.length;
-            long lapTime = laps[1];
-            if (numLaps == 2) { // Have only hit lap once.
-                editor.putLong(Stopwatches.KEY + CircleTimerView.PREF_CTV_INTERVAL, lapTime);
-            } else {
-                editor.putLong(Stopwatches.KEY + CircleTimerView.PREF_CTV_MARKER_TIME, lapTime);
-            }
-            editor.putLong(Stopwatches.KEY + CircleTimerView.PREF_CTV_ACCUM_TIME, 0);
-            if (numLaps < Stopwatches.MAX_LAPS) {
-                editor.putLong(Stopwatches.KEY + CircleTimerView.PREF_CTV_INTERVAL_START, time);
-                editor.putBoolean(Stopwatches.KEY + CircleTimerView.PREF_CTV_PAUSED, false);
-            } else {
-                editor.putLong(Stopwatches.KEY + CircleTimerView.PREF_CTV_INTERVAL_START, -1);
-            }
-            editor.apply();
-        }
-    }
-
-    private void writeSharedPrefsStopped(long elapsedTime, boolean updateCircle) {
-        writeToSharedPrefs(null, null, elapsedTime, Stopwatches.STOPWATCH_STOPPED, updateCircle);
-        if (updateCircle) {
-            long time = Utils.getTimeNow();
-            SharedPreferences prefs = Utils.getDefaultSharedPreferences(
-                    getApplicationContext());
-            long accumulatedTime = prefs.getLong(
-                    Stopwatches.KEY + CircleTimerView.PREF_CTV_ACCUM_TIME, 0);
-            long intervalStartTime = prefs.getLong(
-                    Stopwatches.KEY + CircleTimerView.PREF_CTV_INTERVAL_START, -1);
-            accumulatedTime += time - intervalStartTime;
-            SharedPreferences.Editor editor = prefs.edit();
-            editor.putLong(Stopwatches.KEY + CircleTimerView.PREF_CTV_ACCUM_TIME, accumulatedTime);
-            editor.putBoolean(Stopwatches.KEY + CircleTimerView.PREF_CTV_PAUSED, true);
-            editor.putLong(
-                    Stopwatches.KEY + CircleTimerView.PREF_CTV_CURRENT_INTERVAL, accumulatedTime);
-            editor.apply();
-        }
-    }
-
-    private void writeSharedPrefsReset(boolean updateCircle) {
-        writeToSharedPrefs(null, null, null, Stopwatches.STOPWATCH_RESET, updateCircle);
-    }
-}
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/stopwatch/Stopwatches.java b/src/com/android/deskclock/stopwatch/Stopwatches.java
deleted file mode 100644
index 68b2c69..0000000
--- a/src/com/android/deskclock/stopwatch/Stopwatches.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * 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.stopwatch;
-
-import android.content.Context;
-
-import com.android.deskclock.R;
-
-import java.text.DecimalFormatSymbols;
-
-/**
- * Stopwatch utility class providing access to stopwatch resources and data formatting strings of
- * stopwatch data.
- */
-public class Stopwatches {
-    // Actions processed by stopwatch receiver
-    public static final String SHARE_STOPWATCH = "share_stopwatch";
-    public static final String RESET_AND_LAUNCH_STOPWATCH = "reset_and_launch_stopwatch";
-    public static final String MESSAGE_TIME = "message_time";
-    public static final String SHOW_NOTIF = "show_notification";
-    public static final String KILL_NOTIF = "kill_notification";
-    public static final String PREF_START_TIME  = "sw_start_time";
-    public static final String PREF_ACCUM_TIME = "sw_accum_time";
-    public static final String PREF_STATE = "sw_state";
-    public static final String PREF_LAP_NUM = "sw_lap_num";
-    public static final String PREF_LAP_TIME = "sw_lap_time_";
-    public static final String PREF_UPDATE_CIRCLE = "sw_update_circle";
-    public static final String NOTIF_CLOCK_BASE = "notif_clock_base";
-    public static final String NOTIF_CLOCK_ELAPSED = "notif_clock_elapsed";
-    public static final String NOTIF_CLOCK_RUNNING = "notif_clock_running";
-    public static final String KEY = "sw";
-
-    public static final int STOPWATCH_RESET = 0;
-    public static final int STOPWATCH_RUNNING = 1;
-    public static final int STOPWATCH_STOPPED = 2;
-
-    public static final int MAX_LAPS = 99;
-    public static final int NO_LAP_NUMBER = -1;
-
-    /**
-     * Pull a random jocular title
-     * @param context context with resources
-     * @return the random title
-     */
-    public static String getShareTitle(Context context) {
-        String [] mLabels = context.getResources().getStringArray(R.array.sw_share_strings);
-        return mLabels[(int)(Math.random() * mLabels.length)];
-    }
-
-    /**
-     * Create a multi-line text with the stopwatch lap data
-     * @param context context with resources
-     * @param time total elapsed time
-     * @param laps array of times
-     * @return formatted text
-     */
-    public static String buildShareResults(Context context, String time, long[] laps) {
-        StringBuilder b = new StringBuilder (context.getString(R.string.sw_share_main, time));
-        b.append("\n");
-
-        int lapsNum = laps == null? 0 : laps.length;
-        if (lapsNum == 0) {
-            return b.toString();
-        }
-
-        b.append(context.getString(R.string.sw_share_laps));
-        b.append("\n");
-        for (int i = 1; i <= lapsNum; i ++) {
-            b.append(getTimeText(context, laps[lapsNum-i], i));
-            b.append("\n");
-        }
-        return b.toString();
-    }
-
-    /**
-     * Create a multi-line text with the stopwatch lap data
-     * @param context context with resources
-     * @param time total elapsed time
-     * @param laps array of times
-     * @return formatted text
-     */
-    public static String buildShareResults(Context context, long time, long[] laps) {
-        return buildShareResults(context, getTimeText(context, time, NO_LAP_NUMBER), laps);
-    }
-
-    /***
-     * Format the string of the time running on the stopwatch up to hundred of a second accuracy
-     * @param context context with resources
-     * @param time - in hundreds of a second since the stopwatch started
-     * @param lap lap number
-     * @return formatted text
-     */
-    public static String getTimeText(Context context, long time, int lap) {
-        if (time < 0) {
-            time = 0;
-        }
-        String[] formats;
-        if (lap != NO_LAP_NUMBER) {
-            formats = context.getResources().getStringArray(R.array.shared_laps_format_set);
-        } else {
-            formats = context.getResources().getStringArray(R.array.stopwatch_format_set);
-        }
-        char decimalSeparator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
-        int formatIndex;
-
-        long hundreds, seconds, minutes, hours;
-        seconds = time / 1000;
-        hundreds = (time - seconds * 1000) / 10;
-        minutes = seconds / 60;
-        seconds = seconds - minutes * 60;
-        hours = minutes / 60;
-        minutes = minutes - hours * 60;
-        if (hours >= 100) {
-          formatIndex = 4;
-        } else if (hours >= 10) {
-            formatIndex = 3;
-        } else if (hours > 0) {
-          formatIndex = 2;
-        } else if (minutes >= 10) {
-          formatIndex = 1;
-        } else {
-          formatIndex = 0;
-        }
-        return String.format(formats[formatIndex], hours, minutes,
-                seconds, hundreds, decimalSeparator, lap);
-    }
-
-    /***
-     * 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
-     */
-    public static String formatTimeText(long time, final String format) {
-        if (time < 0) {
-            time = 0;
-        }
-        long hundreds, seconds, minutes, hours;
-        seconds = time / 1000;
-        hundreds = (time - seconds * 1000) / 10;
-        minutes = seconds / 60;
-        seconds = seconds - minutes * 60;
-        hours = minutes / 60;
-        minutes = minutes - hours * 60;
-        char decimalSeparator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
-        return String.format(format, hours, minutes, seconds, hundreds, decimalSeparator);
-    }
-}
diff --git a/src/com/android/deskclock/timer/CountingTimerView.java b/src/com/android/deskclock/timer/CountingTimerView.java
index 278ffd8..bb5778c 100644
--- a/src/com/android/deskclock/timer/CountingTimerView.java
+++ b/src/com/android/deskclock/timer/CountingTimerView.java
@@ -32,7 +32,6 @@
 import com.android.deskclock.R;
 import com.android.deskclock.Utils;
 
-
 /**
  * Class to measure and draw the time in the {@link com.android.deskclock.CircleTimerView}.
  * This class manages and sums the work of the four members mBigHours, mBigMinutes,
@@ -88,7 +87,6 @@
             CountingTimerView.this.showTime(mVisible);
             postDelayed(mBlinkThread, 500);
         }
-
     };
 
     /**
@@ -488,20 +486,6 @@
         }
     }
 
-    public String getTimeString() {
-        // Though only called from Stopwatch Share, so hundredth are never null,
-        // protect the future and check for null mHundredths
-        if (mHundredths == null) {
-            if (mHours == null) {
-                return String.format("%s:%s", mMinutes, mSeconds);
-            }
-            return String.format("%s:%s:%s", mHours, mMinutes, mSeconds);
-        } else if (mHours == null) {
-            return String.format("%s:%s.%s", mMinutes, mSeconds, mHundredths);
-        }
-        return String.format("%s:%s:%s.%s", mHours, mMinutes, mSeconds, mHundredths);
-    }
-
     private static String getTimeStringForAccessibility(int hours, int minutes, int seconds,
             boolean showNeg, Resources r) {
         StringBuilder s = new StringBuilder();
diff --git a/src/com/android/deskclock/timer/ExpiredTimersActivity.java b/src/com/android/deskclock/timer/ExpiredTimersActivity.java
new file mode 100644
index 0000000..08b6304
--- /dev/null
+++ b/src/com/android/deskclock/timer/ExpiredTimersActivity.java
@@ -0,0 +1,276 @@
+/*
+ * Copyright (C) 2015 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.os.Bundle;
+import android.os.SystemClock;
+import android.support.annotation.NonNull;
+import android.transition.AutoTransition;
+import android.transition.TransitionManager;
+import android.view.Gravity;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import com.android.deskclock.BaseActivity;
+import com.android.deskclock.R;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Timer;
+import com.android.deskclock.data.TimerListener;
+
+import java.util.List;
+
+/**
+ * This activity is designed to be shown over the lock screen. As such, it displays the expired
+ * timers and a single button to reset them all. Each expired timer can also be reset to one minute
+ * with a button in the user interface. All other timer operations are disabled in this activity.
+ */
+public class ExpiredTimersActivity extends BaseActivity {
+
+    /** Scheduled to update the timers while at least one is expired. */
+    private final Runnable mTimeUpdateRunnable = new TimeUpdateRunnable();
+
+    /** Updates the timers displayed in this activity as the backing data changes. */
+    private final TimerListener mTimerChangeWatcher = new TimerChangeWatcher();
+
+    /** The scene root for transitions when expired timers are added/removed from this container. */
+    private ViewGroup mExpiredTimersScrollView;
+
+    /** Displays the expired timers. */
+    private ViewGroup mExpiredTimersView;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(R.layout.expired_timers_activity);
+
+        mExpiredTimersView = (ViewGroup) findViewById(R.id.expired_timers_list);
+        mExpiredTimersScrollView = (ViewGroup) findViewById(R.id.expired_timers_scroll);
+
+        findViewById(R.id.fab).setOnClickListener(new FabClickListener());
+
+        final View view = findViewById(R.id.expired_timers_activity);
+        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
+
+        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
+                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+                | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
+                | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
+
+        // Create views for each of the expired timers.
+        for (Timer timer : getExpiredTimers()) {
+            addTimer(timer);
+        }
+
+        // Update views in response to timer data changes.
+        DataModel.getDataModel().addTimerListener(mTimerChangeWatcher);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        startUpdatingTime();
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        stopUpdatingTime();
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        DataModel.getDataModel().removeTimerListener(mTimerChangeWatcher);
+    }
+
+    @Override
+    public boolean dispatchKeyEvent(@NonNull KeyEvent event) {
+        if (event.getAction() == KeyEvent.ACTION_UP) {
+            switch (event.getKeyCode()) {
+                case KeyEvent.KEYCODE_VOLUME_UP:
+                case KeyEvent.KEYCODE_VOLUME_DOWN:
+                case KeyEvent.KEYCODE_VOLUME_MUTE:
+                case KeyEvent.KEYCODE_CAMERA:
+                case KeyEvent.KEYCODE_FOCUS:
+                    DataModel.getDataModel().resetExpiredTimers(R.string.label_hardware_button);
+                    return true;
+            }
+        }
+        return super.dispatchKeyEvent(event);
+    }
+
+    /**
+     * Post the first runnable to update times within the UI. It will reschedule itself as needed.
+     */
+    private void startUpdatingTime() {
+        // Ensure only one copy of the runnable is ever scheduled by first stopping updates.
+        stopUpdatingTime();
+        mExpiredTimersView.post(mTimeUpdateRunnable);
+    }
+
+    /**
+     * Remove the runnable that updates times within the UI.
+     */
+    private void stopUpdatingTime() {
+        mExpiredTimersView.removeCallbacks(mTimeUpdateRunnable);
+    }
+
+    /**
+     * Create and add a new view that corresponds with the given {@code timer}.
+     */
+    private void addTimer(Timer timer) {
+        TransitionManager.beginDelayedTransition(mExpiredTimersScrollView, new AutoTransition());
+
+        final TimerItem timerItem = (TimerItem)
+                getLayoutInflater().inflate(R.layout.timer_item, mExpiredTimersView, false);
+        // Store the timer id as a tag on the view so it can be located on delete.
+        timerItem.setTag(timer.getId());
+        mExpiredTimersView.addView(timerItem);
+
+        // Hide the label hint for expired timers.
+        final TextView labelView = (TextView) timerItem.findViewById(R.id.timer_label);
+        labelView.setHint(null);
+
+        // Add logic to the "Add 1 Minute" button.
+        final View addMinuteButton = timerItem.findViewById(R.id.reset_add);
+        addMinuteButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                final int index = mExpiredTimersView.indexOfChild(timerItem);
+                final Timer timer = getExpiredTimers().get(index);
+                DataModel.getDataModel().addTimerMinute(timer);
+            }
+        });
+
+        // If the first timer was just added, center it.
+        final List<Timer> expiredTimers = getExpiredTimers();
+        if (expiredTimers.size() == 1) {
+            centerFirstTimer();
+        } else if (expiredTimers.size() == 2) {
+            uncenterFirstTimer();
+        }
+    }
+
+    /**
+     * Remove an existing view that corresponds with the given {@code timer}.
+     */
+    private void removeTimer(Timer timer) {
+        TransitionManager.beginDelayedTransition(mExpiredTimersScrollView, new AutoTransition());
+
+        final View timerView = mExpiredTimersView.findViewWithTag(timer.getId());
+        mExpiredTimersView.removeView(timerView);
+
+        // If the second last timer was just removed, center the last timer.
+        final List<Timer> expiredTimers = getExpiredTimers();
+        if (expiredTimers.isEmpty()) {
+            finish();
+        } else if (expiredTimers.size() == 1) {
+            centerFirstTimer();
+        }
+    }
+
+    /**
+     * Center the single timer.
+     */
+    private void centerFirstTimer() {
+        final FrameLayout.LayoutParams lp =
+                (FrameLayout.LayoutParams) mExpiredTimersView.getLayoutParams();
+        lp.gravity = Gravity.CENTER;
+        mExpiredTimersView.requestLayout();
+    }
+
+    /**
+     * Display the multiple timers as a scrollable list.
+     */
+    private void uncenterFirstTimer() {
+        final FrameLayout.LayoutParams lp =
+                (FrameLayout.LayoutParams) mExpiredTimersView.getLayoutParams();
+        lp.gravity = Gravity.NO_GRAVITY;
+        mExpiredTimersView.requestLayout();
+    }
+
+    private List<Timer> getExpiredTimers() {
+        return DataModel.getDataModel().getExpiredTimers();
+    }
+
+    /**
+     * Periodically refreshes the state of each timer.
+     */
+    private class TimeUpdateRunnable implements Runnable {
+        @Override
+        public void run() {
+            final long startTime = SystemClock.elapsedRealtime();
+
+            for (int i = 0; i < mExpiredTimersView.getChildCount(); i++) {
+                final TimerItem timerItem = (TimerItem) mExpiredTimersView.getChildAt(i);
+                final Timer timer = getExpiredTimers().get(i);
+                timerItem.update(timer);
+            }
+
+            final long endTime = SystemClock.elapsedRealtime();
+
+            // Try to maintain a consistent period of time between redraws.
+            final long delay = Math.max(0, startTime + 20 - endTime);
+            mExpiredTimersView.postDelayed(this, delay);
+        }
+    }
+
+    /**
+     * Clicking the fab resets all expired timers.
+     */
+    private class FabClickListener implements View.OnClickListener {
+        @Override
+        public void onClick(View v) {
+            stopUpdatingTime();
+            DataModel.getDataModel().removeTimerListener(mTimerChangeWatcher);
+            DataModel.getDataModel().resetExpiredTimers(R.string.label_deskclock);
+            finish();
+        }
+    }
+
+    /**
+     * Adds and removes expired timers from this activity based on their state changes.
+     */
+    private class TimerChangeWatcher implements TimerListener {
+        @Override
+        public void timerAdded(Timer timer) {
+            if (timer.isExpired()) {
+                addTimer(timer);
+            }
+        }
+
+        @Override
+        public void timerUpdated(Timer before, Timer after) {
+            if (!before.isExpired() && after.isExpired()) {
+                addTimer(after);
+            } else if (before.isExpired() && !after.isExpired()) {
+                removeTimer(before);
+            }
+        }
+
+        @Override
+        public void timerRemoved(Timer timer) {
+            if (timer.isExpired()) {
+                removeTimer(timer);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/timer/FragmentStatePagerAdapter2.java b/src/com/android/deskclock/timer/FragmentStatePagerAdapter2.java
deleted file mode 100644
index 0d6a8ff..0000000
--- a/src/com/android/deskclock/timer/FragmentStatePagerAdapter2.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.deskclock.timer;
-
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.support.v13.app.FragmentCompat;
-import android.support.v13.app.FragmentStatePagerAdapter;
-import android.support.v4.util.SparseArrayCompat;
-import android.support.v4.view.PagerAdapter;
-import android.view.View;
-import android.view.ViewGroup;
-
-/**
- * Forked from support lib's {@link FragmentStatePagerAdapter}, with some minor
- * changes that couldn't be accomplished through subclassing: we need to override the
- * onDataSetChanged method using the private member mFragments which cannot be accessed outside.
- *
- * This class is used for TimerFragment's vertical view pager only. It removed the save/restore
- * functionality, because all the fragments needs to be destroyed whenever TimerFragment's
- * onPause, in order to bind the newly created timer view with the new pager fragment.
- */
-public abstract class FragmentStatePagerAdapter2 extends PagerAdapter {
-
-    private final FragmentManager mFragmentManager;
-    private FragmentTransaction mCurTransaction = null;
-
-    private SparseArrayCompat<Fragment> mFragments = new SparseArrayCompat<Fragment>();
-    private Fragment mCurrentPrimaryItem = null;
-
-
-    public FragmentStatePagerAdapter2(FragmentManager fm) {
-        mFragmentManager = fm;
-    }
-
-    /**
-     * Return the Fragment associated with a specified position.
-     */
-    public abstract Fragment getItem(int position);
-
-    @Override
-    public void startUpdate(ViewGroup container) {
-    }
-
-    @Override
-    public Object instantiateItem(ViewGroup container, int position) {
-        // If we already have this item instantiated, there is nothing
-        // to do.  This can happen when we are restoring the entire pager
-        // from its saved state, where the fragment manager has already
-        // taken care of restoring the fragments we previously had instantiated.
-        final Fragment existing = mFragments.get(position);
-        if (existing != null) {
-            return existing;
-        }
-
-        if (mCurTransaction == null) {
-            mCurTransaction = mFragmentManager.beginTransaction();
-        }
-
-        Fragment fragment = getItem(position);
-        if (fragment != mCurrentPrimaryItem) {
-            setItemVisible(fragment, false);
-        }
-        mFragments.put(position, fragment);
-        mCurTransaction.add(container.getId(), fragment);
-
-        return fragment;
-    }
-
-    @Override
-    public void destroyItem(ViewGroup container, int position, Object object) {
-        Fragment fragment = (Fragment) object;
-
-        if (mCurTransaction == null) {
-            mCurTransaction = mFragmentManager.beginTransaction();
-        }
-        mFragments.delete(position);
-
-        mCurTransaction.remove(fragment);
-    }
-
-    @Override
-    public void setPrimaryItem(ViewGroup container, int position, Object object) {
-        Fragment fragment = (Fragment) object;
-        if (fragment != mCurrentPrimaryItem) {
-            if (mCurrentPrimaryItem != null) {
-                setItemVisible(mCurrentPrimaryItem, false);
-            }
-            if (fragment != null) {
-                setItemVisible(fragment, true);
-            }
-            mCurrentPrimaryItem = fragment;
-        }
-    }
-
-    @Override
-    public void finishUpdate(ViewGroup container) {
-        if (mCurTransaction != null) {
-            mCurTransaction.commitAllowingStateLoss();
-            mCurTransaction = null;
-            mFragmentManager.executePendingTransactions();
-        }
-    }
-
-    @Override
-    public boolean isViewFromObject(View view, Object object) {
-        return ((Fragment) object).getView() == view;
-    }
-
-    public void setItemVisible(Fragment item, boolean visible) {
-        FragmentCompat.setMenuVisibility(item, visible);
-        FragmentCompat.setUserVisibleHint(item, visible);
-    }
-
-    @Override
-    public void notifyDataSetChanged() {
-        // update positions in mFragments
-        SparseArrayCompat<Fragment> newFragments =
-                new SparseArrayCompat<Fragment>(mFragments.size());
-        for (int i = 0; i < mFragments.size(); i++) {
-            final int oldPos = mFragments.keyAt(i);
-            final Fragment f = mFragments.valueAt(i);
-            final int newPos = getItemPosition(f);
-
-            if (newPos != POSITION_NONE) {
-                final int pos = (newPos >= 0) ? newPos : oldPos;
-                newFragments.put(pos, f);
-            }
-        }
-        mFragments = newFragments;
-
-        super.notifyDataSetChanged();
-    }
-
-    public Fragment getFragmentAt(int position) {
-        return mFragments.valueAt(position);
-    }
-
-}
diff --git a/src/com/android/deskclock/timer/TimerAlertFullScreen.java b/src/com/android/deskclock/timer/TimerAlertFullScreen.java
deleted file mode 100644
index db6edfc..0000000
--- a/src/com/android/deskclock/timer/TimerAlertFullScreen.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * 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.Intent;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.view.WindowManager;
-
-import com.android.deskclock.BaseActivity;
-import com.android.deskclock.R;
-import com.android.deskclock.Utils;
-import com.android.deskclock.timer.TimerFullScreenFragment.OnEmptyListListener;
-
-/**
- * Timer alarm alert: pops visible indicator. This activity is the version which
- * shows over the lock screen.
- * This activity re-uses TimerFullScreenFragment GUI
- */
-public class TimerAlertFullScreen extends BaseActivity implements OnEmptyListListener {
-
-    private static final String TAG = "TimerAlertFullScreen";
-    private static final String FRAGMENT = "timer";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        setContentView(R.layout.timer_alert_full_screen);
-        final View view = findViewById(R.id.fragment_container);
-        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
-
-        final Window win = getWindow();
-        win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
-                | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
-        // Turn on the screen unless we are being launched from the AlarmAlert
-        // subclass as a result of the screen turning off.
-        win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
-                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
-                | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
-
-        // Don't create overlapping fragments.
-        if (getFragment() == null) {
-            TimerFullScreenFragment timerFragment = new TimerFullScreenFragment();
-
-            // Create fragment and give it an argument to only show
-            // timers in STATE_TIMESUP state
-            Bundle args = new Bundle();
-            args.putBoolean(Timers.TIMESUP_MODE, true);
-
-            timerFragment.setArguments(args);
-
-            // Add the fragment to the 'fragment_container' FrameLayout
-            getFragmentManager().beginTransaction()
-                    .add(R.id.fragment_container, timerFragment, FRAGMENT).commit();
-        }
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-
-        // Only show notifications for times-up when this activity closed.
-        Utils.cancelTimesUpNotifications(this);
-    }
-
-    @Override
-    public void onPause() {
-        Utils.showTimesUpNotifications(this);
-
-        super.onPause();
-    }
-
-    @Override
-    public boolean dispatchKeyEvent(KeyEvent event) {
-        // Handle key down and key up on a few of the system keys.
-        boolean up = event.getAction() == KeyEvent.ACTION_UP;
-        switch (event.getKeyCode()) {
-        // Volume keys and camera keys stop all the timers
-        case KeyEvent.KEYCODE_VOLUME_UP:
-        case KeyEvent.KEYCODE_VOLUME_DOWN:
-        case KeyEvent.KEYCODE_VOLUME_MUTE:
-        case KeyEvent.KEYCODE_CAMERA:
-        case KeyEvent.KEYCODE_FOCUS:
-            if (up) {
-                stopAllTimesUpTimers();
-            }
-            return true;
-
-        default:
-            break;
-        }
-        return super.dispatchKeyEvent(event);
-    }
-
-    /**
-     * this is called when a second timer is triggered while a previous alert
-     * window is still active.
-     */
-    @Override
-    protected void onNewIntent(Intent intent) {
-        TimerFullScreenFragment timerFragment = getFragment();
-        if (timerFragment != null) {
-            timerFragment.restartAdapter();
-        }
-        super.onNewIntent(intent);
-    }
-
-    @Override
-    public void onConfigurationChanged(Configuration newConfig) {
-        ViewGroup viewContainer = (ViewGroup)findViewById(R.id.fragment_container);
-        viewContainer.requestLayout();
-        super.onConfigurationChanged(newConfig);
-    }
-
-    protected void stopAllTimesUpTimers() {
-        TimerFullScreenFragment timerFragment = getFragment();
-        if (timerFragment != null) {
-            timerFragment.updateAllTimesUpTimers();
-        }
-    }
-
-    @Override
-    public void onEmptyList() {
-        if (Timers.LOGGING) {
-            Log.v(TAG, "onEmptyList");
-        }
-        onListChanged();
-        finish();
-    }
-
-    @Override
-    public void onListChanged() {
-        Utils.showInUseNotifications(this);
-    }
-
-    private TimerFullScreenFragment getFragment() {
-        return (TimerFullScreenFragment) getFragmentManager().findFragmentByTag(FRAGMENT);
-    }
-}
diff --git a/src/com/android/deskclock/timer/TimerCircleView.java b/src/com/android/deskclock/timer/TimerCircleView.java
new file mode 100644
index 0000000..dd2c79f
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerCircleView.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2015 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.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+import com.android.deskclock.data.Timer;
+
+/**
+ * Custom view that draws timer progress as a circle.
+ */
+public final class TimerCircleView extends View {
+
+    /** The size of the dot indicating the progress through the timer. */
+    private final float mDotRadius;
+
+    /** An amount to subtract from the true radius to account for drawing thicknesses. */
+    private final float mRadiusOffset;
+
+    /** The color indicating the remaining portion of the timer. */
+    private final int mRemainderColor;
+
+    /** The color indicating the completed portion of the timer. */
+    private final int mCompletedColor;
+
+    /** The size of the stroke that paints the timer circle. */
+    private final float mStrokeSize;
+
+    private final Paint mPaint = new Paint();
+    private final Paint mFill = new Paint();
+    private final RectF mArcRect = new RectF();
+
+    private Timer mTimer;
+
+    @SuppressWarnings("unused")
+    public TimerCircleView(Context context) {
+        this(context, null);
+    }
+
+    public TimerCircleView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        final Resources resources = context.getResources();
+        final float dotDiameter = resources.getDimension(R.dimen.circletimer_dot_size);
+
+        mDotRadius = dotDiameter / 2f;
+        mStrokeSize = resources.getDimension(R.dimen.circletimer_circle_size);
+        mRadiusOffset = Utils.calculateRadiusOffset(mStrokeSize, dotDiameter, 0);
+
+        mRemainderColor = resources.getColor(R.color.clock_white);
+        mCompletedColor = Utils.obtainStyledColor(context, R.attr.colorAccent, Color.RED);
+
+        mPaint.setAntiAlias(true);
+        mPaint.setStyle(Paint.Style.STROKE);
+
+        mFill.setAntiAlias(true);
+        mFill.setColor(mCompletedColor);
+        mFill.setStyle(Paint.Style.FILL);
+    }
+
+    void update(Timer timer) {
+        if (mTimer != timer) {
+            mTimer = timer;
+            postInvalidateOnAnimation();
+        }
+    }
+
+    @Override
+    public void onDraw(Canvas canvas) {
+        if (mTimer == null) {
+            return;
+        }
+
+        // Compute the size and location of the circle to be drawn.
+        final int xCenter = getWidth() / 2;
+        final int yCenter = getHeight() / 2;
+        final float radius = Math.min(xCenter, yCenter) - mRadiusOffset;
+
+        // Reset old painting state.
+        mPaint.setColor(mRemainderColor);
+        mPaint.setStrokeWidth(mStrokeSize);
+
+        // If the timer is reset, draw a simple white circle.
+        final float redPercent;
+        if (mTimer.isReset()) {
+            // Draw a complete white circle; no red arc required.
+            canvas.drawCircle(xCenter, yCenter, radius, mPaint);
+
+            // Red percent is 0 since no timer progress has been made.
+            redPercent = 0;
+        } else if (mTimer.isExpired()) {
+            mPaint.setColor(mCompletedColor);
+
+            // Draw a complete white circle; no red arc required.
+            canvas.drawCircle(xCenter, yCenter, radius, mPaint);
+
+            // Red percent is 1 since the timer has expired.
+            redPercent = 1;
+        } else {
+            // Draw a combination of red and white arcs to create a circle.
+            mArcRect.top = yCenter - radius;
+            mArcRect.bottom = yCenter + radius;
+            mArcRect.left = xCenter - radius;
+            mArcRect.right = xCenter + radius;
+            redPercent = Math.min(1, (float) mTimer.getElapsedTime() / (float) mTimer.getTotalLength());
+            final float whitePercent = 1 - redPercent;
+
+            // Draw a white arc to indicate the amount of timer that remains.
+            canvas.drawArc(mArcRect, 270, whitePercent * 360, false, mPaint);
+
+            // Draw a red arc to indicate the amount of timer completed.
+            mPaint.setColor(mCompletedColor);
+            canvas.drawArc(mArcRect, 270, -redPercent * 360 , false, mPaint);
+        }
+
+        // Draw a red dot to indicate current progress through the timer.
+        final float dotAngleDegrees = 270 - redPercent * 360;
+        final double dotAngleRadians = Math.toRadians(dotAngleDegrees);
+        final float dotX = xCenter + (float) (radius * Math.cos(dotAngleRadians));
+        final float dotY = yCenter + (float) (radius * Math.sin(dotAngleRadians));
+        canvas.drawCircle(dotX, dotY, mDotRadius, mFill);
+
+        if (mTimer.isRunning()) {
+            postInvalidateOnAnimation();
+        }
+    }
+}
diff --git a/src/com/android/deskclock/timer/TimerFragment.java b/src/com/android/deskclock/timer/TimerFragment.java
index be14910..28a2d2e 100644
--- a/src/com/android/deskclock/timer/TimerFragment.java
+++ b/src/com/android/deskclock/timer/TimerFragment.java
@@ -20,755 +20,686 @@
 import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
-import android.animation.TimeInterpolator;
-import android.app.NotificationManager;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 import android.content.res.Resources;
-import android.os.Build;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
+import android.os.SystemClock;
+import android.support.annotation.VisibleForTesting;
 import android.support.v4.view.ViewPager;
-import android.text.format.DateUtils;
-import android.transition.AutoTransition;
-import android.transition.Transition;
-import android.transition.TransitionManager;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
-import android.view.animation.AccelerateDecelerateInterpolator;
 import android.view.animation.AccelerateInterpolator;
 import android.view.animation.DecelerateInterpolator;
 import android.widget.ImageButton;
 import android.widget.ImageView;
 
-import com.android.deskclock.AnimatorUtils;
 import com.android.deskclock.DeskClock;
 import com.android.deskclock.DeskClockFragment;
+import com.android.deskclock.HandleDeskClockApiCalls;
 import com.android.deskclock.R;
-import com.android.deskclock.TimerSetupView;
-import com.android.deskclock.Utils;
-import com.android.deskclock.VerticalViewPager;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Timer;
+import com.android.deskclock.data.TimerListener;
 import com.android.deskclock.events.Events;
 
-public class TimerFragment extends DeskClockFragment implements OnSharedPreferenceChangeListener {
-    public static final long ANIMATION_TIME_MILLIS = DateUtils.SECOND_IN_MILLIS / 3;
+import java.io.Serializable;
+import java.util.Arrays;
 
-    private static final String KEY_SETUP_SELECTED = "_setup_selected";
-    private static final String KEY_ENTRY_STATE = "entry_state";
-    private static final int PAGINATION_DOTS_COUNT = 4;
-    private static final String CURR_PAGE = "_currPage";
-    private static final TimeInterpolator ACCELERATE_INTERPOLATOR = new AccelerateInterpolator();
-    private static final TimeInterpolator DECELERATE_INTERPOLATOR = new DecelerateInterpolator();
-    private static final long ROTATE_ANIM_DURATION_MILIS = 150;
+import static android.view.View.ALPHA;
+import static android.view.View.GONE;
+import static android.view.View.INVISIBLE;
+import static android.view.View.OnClickListener;
+import static android.view.View.SCALE_X;
+import static android.view.View.VISIBLE;
+import static com.android.deskclock.AnimatorUtils.getScaleAnimator;
 
-    // Transitions are available only in API 19+
-    private static final boolean USE_TRANSITION_FRAMEWORK =
-            Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
+/**
+ * Displays a vertical list of timers in all states.
+ */
+public class TimerFragment extends DeskClockFragment {
 
-    private boolean mTicking = false;
-    private TimerSetupView mSetupView;
-    private VerticalViewPager mViewPager;
-    private TimerFragmentAdapter mAdapter;
-    private ImageButton mCancel;
-    private ViewGroup mContentView;
-    private View mTimerView;
-    private View mLastView;
-    private ImageView[] mPageIndicators = new ImageView[PAGINATION_DOTS_COUNT];
-    private Transition mDeleteTransition;
-    private SharedPreferences mPrefs;
-    private Bundle mViewState = null;
-    private NotificationManager mNotificationManager;
+    private static final String EXTRA_TIMER_SETUP = "com.android.deskclock.action.TIMER_SETUP";
 
-    private final ViewPager.OnPageChangeListener mOnPageChangeListener =
-            new ViewPager.SimpleOnPageChangeListener() {
-                @Override
-                public void onPageSelected(int position) {
-                    highlightPageIndicator(position);
-                    TimerFragment.this.setTimerViewFabIcon(getCurrentTimer());
-                }
-            };
+    private static final String KEY_TIMER_SETUP_STATE = "timer_setup_input";
 
-    private final Runnable mClockTick = new Runnable() {
-        boolean mVisible = true;
-        final static int TIME_PERIOD_MS = 1000;
-        final static int TIME_DELAY_MS = 20;
-        final static int SPLIT = TIME_PERIOD_MS / 2;
+    /** Notified when the user swipes vertically to change the visible timer. */
+    private final TimerPageChangeListener mTimerPageChangeListener = new TimerPageChangeListener();
 
-        @Override
-        public void run() {
-            // Setup for blinking
-            final boolean visible = Utils.getTimeNow() % TIME_PERIOD_MS < SPLIT;
-            final boolean toggle = mVisible != visible;
-            mVisible = visible;
-            for (int i = 0; i < mAdapter.getCount(); i++) {
-                final TimerObj t = mAdapter.getTimerAt(i);
-                if (t.mState == TimerObj.STATE_RUNNING || t.mState == TimerObj.STATE_TIMESUP) {
-                    final long timeLeft = t.updateTimeLeft(false);
-                    if (t.mView != null) {
-                        t.mView.setTime(timeLeft, false);
-                        // Update button every 1/2 second
-                        if (toggle) {
-                            final ImageButton addMinuteButton = (ImageButton)
-                                    t.mView.findViewById(R.id.reset_add);
-                            final boolean canAddMinute = TimerObj.MAX_TIMER_LENGTH - t.mTimeLeft
-                                    > TimerObj.MINUTE_IN_MILLIS;
-                            addMinuteButton.setEnabled(canAddMinute);
-                        }
-                    }
-                }
-                if (t.mTimeLeft <= 0 && t.mState != TimerObj.STATE_RESTART) {
-                    t.setState(TimerObj.STATE_TIMESUP);
-                    if (t.mView != null) {
-                        t.mView.timesUp();
-                    }
-                }
-                // The blinking
-                if (toggle && t.mView != null) {
-                    if (t.mState == TimerObj.STATE_TIMESUP) {
-                        t.mView.setCircleBlink(mVisible);
-                    }
-                    if (t.mState == TimerObj.STATE_STOPPED) {
-                        t.mView.setTextBlink(mVisible);
-                    }
-                }
-            }
-            mTimerView.postDelayed(mClockTick, TIME_DELAY_MS);
-        }
-    };
+    /** Scheduled to update the timers while at least one is running. */
+    private final Runnable mTimeUpdateRunnable = new TimeUpdateRunnable();
 
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mViewState = savedInstanceState;
+    /** Updates the {@link #mPageIndicators} in response to timers being added or removed. */
+    private final TimerListener mTimerWatcher = new TimerWatcher();
+
+    private TimerSetupView mCreateTimerView;
+    private ViewPager mViewPager;
+    private TimerPagerAdapter mAdapter;
+    private ImageButton mCancelCreateButton;
+    private View mTimersView;
+    private View mCurrentView;
+    private ImageView[] mPageIndicators;
+
+    private int mShortAnimationDuration;
+    private int mMediumAnimationDuration;
+
+    private Serializable mTimerSetupState;
+
+    /**
+     * @return an Intent that selects the timers tab with the setup screen for a new timer in place.
+     */
+    public static Intent createTimerSetupIntent(Context context) {
+        return new Intent(context, DeskClock.class)
+                .putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.TIMER_TAB_INDEX)
+                .putExtra(EXTRA_TIMER_SETUP, true);
     }
 
+    /** The public no-arg constructor required by all fragments. */
+    public TimerFragment() {}
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         final View view = inflater.inflate(R.layout.timer_fragment, container, false);
-        mContentView = (ViewGroup) view;
-        mTimerView = view.findViewById(R.id.timer_view);
-        mSetupView = (TimerSetupView) view.findViewById(R.id.timer_setup);
-        mViewPager = (VerticalViewPager) view.findViewById(R.id.vertical_view_pager);
-        mPageIndicators[0] = (ImageView) view.findViewById(R.id.page_indicator0);
-        mPageIndicators[1] = (ImageView) view.findViewById(R.id.page_indicator1);
-        mPageIndicators[2] = (ImageView) view.findViewById(R.id.page_indicator2);
-        mPageIndicators[3] = (ImageView) view.findViewById(R.id.page_indicator3);
-        mCancel = (ImageButton) view.findViewById(R.id.timer_cancel);
-        mCancel.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (mAdapter.getCount() != 0) {
-                    final AnimatorListenerAdapter adapter = new AnimatorListenerAdapter() {
-                        @Override
-                        public void onAnimationEnd(Animator animation) {
-                            mSetupView.reset(); // Make sure the setup is cleared for next time
-                            mSetupView.setScaleX(1.0f); // Reset the scale for setup view
-                            goToPagerView();
-                        }
-                    };
-                    createRotateAnimator(adapter, false).start();
-                }
-            }
-        });
-        if (USE_TRANSITION_FRAMEWORK) {
-            mDeleteTransition = new AutoTransition();
-            mDeleteTransition.setDuration(ANIMATION_TIME_MILLIS / 2);
-            mDeleteTransition.setInterpolator(new AccelerateDecelerateInterpolator());
+
+        mAdapter = new TimerPagerAdapter(getChildFragmentManager());
+        mViewPager = (ViewPager) view.findViewById(R.id.vertical_view_pager);
+        mViewPager.setAdapter(mAdapter);
+        mViewPager.addOnPageChangeListener(mTimerPageChangeListener);
+
+        mTimersView = view.findViewById(R.id.timer_view);
+        mCreateTimerView = (TimerSetupView) view.findViewById(R.id.timer_setup);
+        mPageIndicators = new ImageView[] {
+                (ImageView) view.findViewById(R.id.page_indicator0),
+                (ImageView) view.findViewById(R.id.page_indicator1),
+                (ImageView) view.findViewById(R.id.page_indicator2),
+                (ImageView) view.findViewById(R.id.page_indicator3)
+        };
+        mCancelCreateButton = (ImageButton) view.findViewById(R.id.timer_cancel);
+        mCancelCreateButton.setOnClickListener(new CancelCreateListener());
+
+        view.findViewById(R.id.timer_create).setOnClickListener(new CreateListener());
+
+        final Resources resources = getResources();
+        mShortAnimationDuration = resources.getInteger(android.R.integer.config_shortAnimTime);
+        mMediumAnimationDuration = resources.getInteger(android.R.integer.config_mediumAnimTime);
+
+        DataModel.getDataModel().addTimerListener(mAdapter);
+        DataModel.getDataModel().addTimerListener(mTimerWatcher);
+
+        // If timer setup state is present, retrieve it to be later honored.
+        if (savedInstanceState != null) {
+            mTimerSetupState = savedInstanceState.getSerializable(KEY_TIMER_SETUP_STATE);
         }
 
         return view;
     }
 
     @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        final Context context = getActivity();
-        mPrefs = Utils.getDefaultSharedPreferences(context);
-        mNotificationManager = (NotificationManager) context.getSystemService(Context
-                .NOTIFICATION_SERVICE);
-    }
-
-    @Override
     public void onResume() {
         super.onResume();
-        if (getActivity() instanceof DeskClock) {
-            DeskClock activity = (DeskClock) getActivity();
-            activity.registerPageChangedListener(this);
+
+        // Start watching for page changes away from this fragment.
+        getDeskClock().registerPageChangedListener(this);
+
+        // Initialize the page indicators.
+        updatePageIndicators();
+
+        boolean createTimer = false;
+        int showTimerId = -1;
+
+        // Examine the intent of the parent activity to determine which view to display.
+        final Intent intent = getActivity().getIntent();
+        if (intent != null) {
+            // These extras are single-use; remove them after honoring them.
+            createTimer = intent.getBooleanExtra(EXTRA_TIMER_SETUP, false);
+            intent.removeExtra(EXTRA_TIMER_SETUP);
+
+            showTimerId = intent.getIntExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID, -1);
+            intent.removeExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID);
         }
 
-        if (mAdapter == null) {
-            mAdapter = new TimerFragmentAdapter(getChildFragmentManager(), mPrefs);
-        }
-        mAdapter.populateTimersFromPref();
-        mViewPager.setAdapter(mAdapter);
-        mViewPager.setOnPageChangeListener(mOnPageChangeListener);
-        mPrefs.registerOnSharedPreferenceChangeListener(this);
+        // Choose the view to display in this fragment.
+        if (showTimerId != -1) {
+            // A specific timer must be shown; show the list of timers.
+            showTimersView();
+        } else if (!hasTimers() || createTimer || mTimerSetupState != null) {
+            // No timers exist, a timer is being created, or the last view was timer setup;
+            // show the timer setup view.
+            showCreateTimerView();
 
-        if (mPrefs.getBoolean(Timers.REFRESH_UI_WITH_LATEST_DATA, false)) {
-            // Clear the flag indicating the adapter is out of sync with the database.
-            mPrefs.edit().putBoolean(Timers.REFRESH_UI_WITH_LATEST_DATA, false).apply();
-        }
-
-        mCancel.setVisibility(mAdapter.getCount() == 0 ? View.INVISIBLE : View.VISIBLE);
-
-        boolean goToSetUpView;
-        // Process extras that were sent to the app and were intended for the timer fragment
-        final Intent newIntent = getActivity().getIntent();
-        if (newIntent != null
-                && newIntent.getBooleanExtra(TimerFullScreenFragment.GOTO_SETUP_VIEW, false)) {
-            goToSetUpView = true;
-        } else if (newIntent != null
-                && newIntent.getBooleanExtra(Timers.FIRST_LAUNCH_FROM_API_CALL, false)) {
-            // We use this extra to identify if a. this activity is launched from api call,
-            // and b. this fragment is resumed for the first time. If both are true,
-            // we should show the timer view instead of setup view.
-            goToSetUpView = false;
-            highlightPageIndicator(0);
-            // Find the id of the timer to scroll to. Timers are loaded from SharedPrefs using a
-            // HashSet as an intermediary, so we need to find the position in this specific
-            // Adapter instance instead of just passing the position through the intent.
-            final int timerPosition = ((TimerFragmentAdapter) mViewPager.getAdapter())
-                    .getTimerPosition(newIntent.getIntExtra(Timers.SCROLL_TO_TIMER_ID, 0));
-            mViewPager.setCurrentItem(timerPosition);
-
-            // Reset the extra to false to ensure when next time the fragment resume,
-            // we no longer care if it's from api call or not.
-            newIntent.putExtra(Timers.FIRST_LAUNCH_FROM_API_CALL, false);
-        } else {
-            if (mViewState != null) {
-                final int currPage = mViewState.getInt(CURR_PAGE);
-                mViewPager.setCurrentItem(currPage);
-                highlightPageIndicator(currPage);
-                final boolean hasPreviousInput = mViewState.getBoolean(KEY_SETUP_SELECTED, false);
-                goToSetUpView = hasPreviousInput || mAdapter.getCount() == 0;
-                mSetupView.restoreEntryState(mViewState, KEY_ENTRY_STATE);
-            } else {
-                highlightPageIndicator(0);
-                // If user was not previously using the setup, determine which view to go by count
-                goToSetUpView = mAdapter.getCount() == 0;
+            if (mTimerSetupState != null) {
+                mCreateTimerView.setState(mTimerSetupState);
+                mTimerSetupState = null;
             }
-        }
-        if (goToSetUpView) {
-            goToSetUpView();
         } else {
-            goToPagerView();
+            // Otherwise, default to showing the list of timers.
+            showTimersView();
+        }
+
+        // If the intent did not specify a timer to show, show the last timer that expired.
+        if (showTimerId == -1) {
+            final Timer timer = DataModel.getDataModel().getMostRecentExpiredTimer();
+            showTimerId = timer == null ? -1 : timer.getId();
+        }
+
+        // If a specific timer should be displayed, display the corresponding timer tab.
+        if (showTimerId != -1) {
+            final Timer timer = DataModel.getDataModel().getTimer(showTimerId);
+            if (timer != null) {
+                final int index = DataModel.getDataModel().getTimers().indexOf(timer);
+                mViewPager.setCurrentItem(index);
+            }
         }
     }
 
     @Override
     public void onPause() {
         super.onPause();
-        if (getActivity() instanceof DeskClock) {
-            ((DeskClock) getActivity()).unregisterPageChangedListener(this);
-        }
-        mPrefs.unregisterOnSharedPreferenceChangeListener(this);
-        if (mAdapter != null) {
-            mAdapter.saveTimersToSharedPrefs();
-        }
-        stopClockTicks();
+
+        // Stop watching for page changes away from this fragment.
+        getDeskClock().unregisterPageChangedListener(this);
     }
 
     @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        if (mSetupView != null) {
-            outState.putBoolean(KEY_SETUP_SELECTED, mSetupView.getVisibility() == View.VISIBLE);
-            mSetupView.saveEntryState(outState, KEY_ENTRY_STATE);
-        }
-        outState.putInt(CURR_PAGE, mViewPager.getCurrentItem());
-        mViewState = outState;
+    public void onStop() {
+        super.onStop();
+
+        // Stop updating the timers when this fragment is no longer visible.
+        stopUpdatingTime();
     }
 
     @Override
     public void onDestroyView() {
         super.onDestroyView();
-        mViewState = null;
+
+        DataModel.getDataModel().removeTimerListener(mAdapter);
+        DataModel.getDataModel().removeTimerListener(mTimerWatcher);
     }
 
     @Override
-    public void onPageChanged(int page) {
-        if (page == DeskClock.TIMER_TAB_INDEX && mAdapter != null) {
-            mAdapter.notifyDataSetChanged();
-        }
-    }
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
 
-    // Starts the ticks that animate the timers.
-    private void startClockTicks() {
-        mTimerView.postDelayed(mClockTick, 20);
-        mTicking = true;
-    }
-
-    // Stops the ticks that animate the timers.
-    private void stopClockTicks() {
-        if (mTicking) {
-            mViewPager.removeCallbacks(mClockTick);
-            mTicking = false;
-        }
-    }
-
-    private void goToPagerView() {
-        mTimerView.setVisibility(View.VISIBLE);
-        mSetupView.setVisibility(View.GONE);
-        mLastView = mTimerView;
-        setLeftRightButtonAppearance();
-        setFabAppearance();
-        startClockTicks();
-    }
-
-    private void goToSetUpView() {
-        if (mAdapter.getCount() == 0) {
-            mCancel.setVisibility(View.INVISIBLE);
-        } else {
-            mCancel.setVisibility(View.VISIBLE);
-        }
-        mTimerView.setVisibility(View.GONE);
-        mSetupView.setVisibility(View.VISIBLE);
-        mSetupView.updateDeleteButtonAndDivider();
-        mSetupView.registerStartButton(mFab);
-        mLastView = mSetupView;
-        setLeftRightButtonAppearance();
-        setFabAppearance();
-        stopClockTicks();
-    }
-
-    private void updateTimerState(TimerObj t, String action) {
-        updateTimerState(t, action, true);
-    }
-
-    /**
-     * @param update indicates whether to call updateNextTimesup in TimerReceiver. This is false
-     *               only for label changes.
-     */
-    private void updateTimerState(TimerObj t, String action, boolean update) {
-        if (Timers.DELETE_TIMER.equals(action)) {
-            mAdapter.deleteTimer(t.mTimerId);
-            if (mAdapter.getCount() == 0) {
-                mSetupView.reset();
-                goToSetUpView();
-            }
-        } else {
-            t.writeToSharedPref(mPrefs);
-        }
-        final Intent i = new Intent();
-        i.setAction(action);
-        i.putExtra(Timers.TIMER_INTENT_EXTRA, t.mTimerId);
-        i.putExtra(Timers.UPDATE_NEXT_TIMESUP, update);
-        // Make sure the receiver is getting the intent ASAP.
-        i.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-        getActivity().sendBroadcast(i);
-    }
-
-    private void setTimerViewFabIcon(TimerObj timer) {
-        final DeskClock deskClock = (DeskClock) getActivity();
-        if (deskClock == null || timer == null || mFab == null) {
-            return;
-        }
-
-        if (deskClock.getSelectedTab() != DeskClock.TIMER_TAB_INDEX) {
-            return;
-        }
-
-        final Resources r = deskClock.getResources();
-        switch (timer.mState) {
-            case TimerObj.STATE_RUNNING:
-                mFab.setVisibility(View.VISIBLE);
-                mFab.setContentDescription(r.getString(R.string.timer_stop));
-                mFab.setImageResource(R.drawable.ic_fab_pause);
-                break;
-            case TimerObj.STATE_STOPPED:
-            case TimerObj.STATE_RESTART:
-            // It is possible for a Timer from an older version of Clock to be in STATE_DELETED and
-            // still exist in the list
-            case TimerObj.STATE_DELETED:
-                mFab.setVisibility(View.VISIBLE);
-                mFab.setContentDescription(r.getString(R.string.timer_start));
-                mFab.setImageResource(R.drawable.ic_fab_play);
-                break;
-            case TimerObj.STATE_TIMESUP: // time-up but didn't stopped, continue negative ticking
-                mFab.setVisibility(View.VISIBLE);
-                mFab.setContentDescription(r.getString(R.string.timer_stop));
-                mFab.setImageResource(R.drawable.ic_fab_stop);
-                break;
-            default:
-        }
-    }
-
-    private Animator getRotateFromAnimator(View view) {
-        final Animator animator = ObjectAnimator.ofFloat(view, View.SCALE_X, 1.0f, 0.0f);
-        animator.setDuration(ROTATE_ANIM_DURATION_MILIS);
-        animator.setInterpolator(DECELERATE_INTERPOLATOR);
-        return animator;
-    }
-
-    private Animator getRotateToAnimator(View view) {
-        final Animator animator = ObjectAnimator.ofFloat(view, View.SCALE_X, 0.0f, 1.0f);
-        animator.setDuration(ROTATE_ANIM_DURATION_MILIS);
-        animator.setInterpolator(ACCELERATE_INTERPOLATOR);
-        return animator;
-    }
-
-    private Animator getScaleFooterButtonsAnimator(final boolean show) {
-        final AnimatorSet animatorSet = new AnimatorSet();
-        final Animator leftButtonAnimator = AnimatorUtils.getScaleAnimator(
-                mLeftButton, show ? 0.0f : 1.0f, show ? 1.0f : 0.0f);
-        final Animator rightButtonAnimator = AnimatorUtils.getScaleAnimator(
-                mRightButton, show ? 0.0f : 1.0f, show ? 1.0f : 0.0f);
-        final float fabStartScale = (show && mFab.getVisibility() == View.INVISIBLE) ? 0.0f : 1.0f;
-        final Animator fabAnimator = AnimatorUtils.getScaleAnimator(
-                mFab, fabStartScale, show ? 1.0f : 0.0f);
-        animatorSet.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mLeftButton.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
-                mRightButton.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
-                restoreScale(mLeftButton);
-                restoreScale(mRightButton);
-                restoreScale(mFab);
-            }
-        });
-        // If not show, means transiting from timer view to setup view,
-        // when the setup view starts to rotate, the footer buttons are already invisible,
-        // so the scaling has to finish before the setup view starts rotating
-        animatorSet.setDuration(show ? ROTATE_ANIM_DURATION_MILIS * 2 : ROTATE_ANIM_DURATION_MILIS);
-        animatorSet.play(leftButtonAnimator).with(rightButtonAnimator).with(fabAnimator);
-        return animatorSet;
-    }
-
-    private void restoreScale(View view) {
-        view.setScaleX(1.0f);
-        view.setScaleY(1.0f);
-    }
-
-    private Animator createRotateAnimator(AnimatorListenerAdapter adapter, boolean toSetup) {
-        final AnimatorSet animatorSet = new AnimatorSet();
-        final Animator rotateFrom = getRotateFromAnimator(toSetup ? mTimerView : mSetupView);
-        rotateFrom.addListener(adapter);
-        final Animator rotateTo = getRotateToAnimator(toSetup ? mSetupView : mTimerView);
-        final Animator expandFooterButton = getScaleFooterButtonsAnimator(!toSetup);
-        animatorSet.play(rotateFrom).before(rotateTo).with(expandFooterButton);
-        return animatorSet;
-    }
-
-    @Override
-    public void onFabClick(View view) {
-        if (mLastView != mTimerView) {
-            // Timer is at Setup View, so fab is "play", rotate from setup view to timer view
-            final AnimatorListenerAdapter adapter = new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationStart(Animator animation) {
-                    final int timerLength = mSetupView.getTime();
-                    final TimerObj timerObj = new TimerObj(timerLength * DateUtils.SECOND_IN_MILLIS,
-                        getActivity());
-                    timerObj.setState(TimerObj.STATE_RUNNING);
-                    Events.sendTimerEvent(R.string.action_create, R.string.label_deskclock);
-
-                    updateTimerState(timerObj, Timers.START_TIMER);
-                    Events.sendTimerEvent(R.string.action_start, R.string.label_deskclock);
-
-                    // Go to the newly created timer view
-                    mAdapter.addTimer(timerObj);
-                    mViewPager.setCurrentItem(0);
-                    highlightPageIndicator(0);
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    mSetupView.reset(); // Make sure the setup is cleared for next time
-                    mSetupView.setScaleX(1.0f); // Reset the scale for setup view
-                    goToPagerView();
-                }
-            };
-            createRotateAnimator(adapter, false).start();
-        } else {
-            // Timer is at view pager, so fab is "play" or "pause" or "square that means reset"
-            final TimerObj t = getCurrentTimer();
-            switch (t.mState) {
-                case TimerObj.STATE_RUNNING:
-                    // Stop timer and save the remaining time of the timer
-                    t.setState(TimerObj.STATE_STOPPED);
-                    t.mView.pause();
-                    t.updateTimeLeft(true);
-                    updateTimerState(t, Timers.STOP_TIMER);
-                    Events.sendTimerEvent(R.string.action_stop, R.string.label_deskclock);
-                    break;
-                case TimerObj.STATE_STOPPED:
-                case TimerObj.STATE_RESTART:
-                // It is possible for a Timer from an older version of Clock to be in STATE_DELETED and
-                // still exist in the list
-                case TimerObj.STATE_DELETED:
-                    // Reset the remaining time and continue timer
-                    t.setState(TimerObj.STATE_RUNNING);
-                    t.mStartTime = Utils.getTimeNow() - (t.mOriginalLength - t.mTimeLeft);
-                    t.mView.start();
-                    updateTimerState(t, Timers.START_TIMER);
-                    Events.sendTimerEvent(R.string.action_start, R.string.label_deskclock);
-                    break;
-                case TimerObj.STATE_TIMESUP:
-                    if (t.mDeleteAfterUse) {
-                        cancelTimerNotification(t.mTimerId);
-                        // Tell receiver the timer was deleted.
-                        // It will stop all activity related to the
-                        // timer
-                        t.setState(TimerObj.STATE_DELETED);
-                        updateTimerState(t, Timers.DELETE_TIMER);
-                        Events.sendTimerEvent(R.string.action_delete, R.string.label_deskclock);
-                    } else {
-                        t.setState(TimerObj.STATE_RESTART);
-                        t.mOriginalLength = t.mSetupLength;
-                        t.mTimeLeft = t.mSetupLength;
-                        t.mView.stop();
-                        t.mView.setTime(t.mTimeLeft, false);
-                        t.mView.set(t.mOriginalLength, t.mTimeLeft, false);
-                        updateTimerState(t, Timers.RESET_TIMER);
-                        cancelTimerNotification(t.mTimerId);
-                        Events.sendTimerEvent(R.string.action_reset, R.string.label_deskclock);
-                    }
-                    break;
-            }
-            setTimerViewFabIcon(t);
-        }
-    }
-
-
-    private TimerObj getCurrentTimer() {
-        if (mViewPager == null) {
-            return null;
-        }
-        final int currPage = mViewPager.getCurrentItem();
-        if (currPage < mAdapter.getCount()) {
-            TimerObj o = mAdapter.getTimerAt(currPage);
-            return o;
-        } else {
-            return null;
+        // If the timer creation view is visible, store the input for later restoration.
+        if (mCurrentView == mCreateTimerView) {
+            mTimerSetupState = mCreateTimerView.getState();
+            outState.putSerializable(KEY_TIMER_SETUP_STATE, mTimerSetupState);
         }
     }
 
     @Override
     public void setFabAppearance() {
-        final DeskClock activity = (DeskClock) getActivity();
-        if (mFab == null) {
+        if (mFab == null || getSelectedTab() != DeskClock.TIMER_TAB_INDEX) {
             return;
         }
 
-        if (activity.getSelectedTab() != DeskClock.TIMER_TAB_INDEX) {
-            mFab.setVisibility(View.VISIBLE);
+        if (mCurrentView == mTimersView) {
+            final Timer timer = getTimer();
+            if (timer == null) {
+                mFab.setVisibility(INVISIBLE);
+                return;
+            }
+
+            mFab.setVisibility(VISIBLE);
+            switch (timer.getState()) {
+                case RUNNING:
+                    mFab.setImageResource(R.drawable.ic_pause_white_24dp);
+                    mFab.setContentDescription(getString(R.string.timer_stop));
+                    break;
+                case RESET:
+                case PAUSED:
+                    mFab.setImageResource(R.drawable.ic_start_white_24dp);
+                    mFab.setContentDescription(getString(R.string.timer_start));
+                    break;
+                case EXPIRED:
+                    mFab.setImageResource(R.drawable.ic_stop_white_24dp);
+                    mFab.setContentDescription(getString(R.string.timer_stop));
+                    break;
+            }
+
+        } else if (mCurrentView == mCreateTimerView) {
+            mFab.setVisibility(INVISIBLE);
+        }
+    }
+
+    @Override
+    public void onFabClick(View view) {
+        final Timer timer = getTimer();
+
+        // If no timer is currently showing a fab action is meaningless.
+        if (timer == null) {
             return;
         }
 
-        if (mLastView == mTimerView) {
-            setTimerViewFabIcon(getCurrentTimer());
-        } else if (mSetupView != null) {
-            mSetupView.registerStartButton(mFab);
-            mFab.setImageResource(R.drawable.ic_fab_play);
-            mFab.setContentDescription(getString(R.string.timer_start));
+        switch (timer.getState()) {
+            case RUNNING:
+                DataModel.getDataModel().pauseTimer(timer);
+                Events.sendTimerEvent(R.string.action_stop, R.string.label_deskclock);
+                break;
+            case PAUSED:
+            case RESET:
+                DataModel.getDataModel().startTimer(timer);
+                Events.sendTimerEvent(R.string.action_start, R.string.label_deskclock);
+                break;
+            case EXPIRED:
+                DataModel.getDataModel().resetOrDeleteTimer(timer, R.string.label_deskclock);
+                break;
         }
     }
 
     @Override
     public void setLeftRightButtonAppearance() {
-        final DeskClock activity = (DeskClock) getActivity();
         if (mLeftButton == null || mRightButton == null ||
-                activity.getSelectedTab() != DeskClock.TIMER_TAB_INDEX) {
+                getSelectedTab() != DeskClock.TIMER_TAB_INDEX) {
             return;
         }
 
         mLeftButton.setEnabled(true);
-        mRightButton.setEnabled(true);
-        mLeftButton.setVisibility(mLastView != mTimerView ? View.GONE : View.VISIBLE);
-        mRightButton.setVisibility(mLastView != mTimerView ? View.GONE : View.VISIBLE);
         mLeftButton.setImageResource(R.drawable.ic_delete);
         mLeftButton.setContentDescription(getString(R.string.timer_delete));
+        mLeftButton.setVisibility(mCurrentView != mTimersView ? GONE : VISIBLE);
+
+        mRightButton.setEnabled(true);
         mRightButton.setImageResource(R.drawable.ic_add_timer);
         mRightButton.setContentDescription(getString(R.string.timer_add_timer));
-    }
-
-    @Override
-    public void onRightButtonClick(View view) {
-        // Respond to add another timer
-        final AnimatorListenerAdapter adapter = new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mSetupView.reset();
-                mTimerView.setScaleX(1.0f); // Reset the scale for timer view
-                goToSetUpView();
-            }
-        };
-        createRotateAnimator(adapter, true).start();
+        mRightButton.setVisibility(mCurrentView != mTimersView ? GONE : VISIBLE);
     }
 
     @Override
     public void onLeftButtonClick(View view) {
-        // Respond to delete timer
-        final TimerObj timer = getCurrentTimer();
+        final Timer timer = getTimer();
         if (timer == null) {
-            return; // Prevent NPE if user click delete faster than the fade animation
+            return;
         }
-        if (timer.mState == TimerObj.STATE_TIMESUP) {
-            mNotificationManager.cancel(timer.mTimerId);
-        }
-        if (mAdapter.getCount() == 1) {
-            final AnimatorListenerAdapter adapter = new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    mTimerView.setScaleX(1.0f); // Reset the scale for timer view
-                    deleteTimer(timer);
-                }
-            };
-            createRotateAnimator(adapter, true).start();
+
+        if (mAdapter.getCount() > 1) {
+            animateTimerRemove(timer);
         } else {
-            if (USE_TRANSITION_FRAMEWORK) {
-                TransitionManager.beginDelayedTransition(mContentView, mDeleteTransition);
-            }
-            deleteTimer(timer);
+            animateToView(mCreateTimerView, timer);
         }
-    }
 
-    private void deleteTimer(TimerObj timer) {
-        // Tell receiver the timer was deleted, it will stop all activity related to the
-        // timer
-        timer.setState(TimerObj.STATE_DELETED);
-        updateTimerState(timer, Timers.DELETE_TIMER);
-        Events.sendTimerEvent(R.string.action_delete, R.string.label_deskclock);
-        highlightPageIndicator(mViewPager.getCurrentItem());
-        // When deleting a negative timer (hidden fab), since deleting will not trigger
-        // onResume(), in order to ensure the fab showing correctly, we need to manually
-        // set fab appearance here.
-        setFabAppearance();
-    }
-
-    private void highlightPageIndicator(int position) {
-        final int count = mAdapter.getCount();
-        if (count <= PAGINATION_DOTS_COUNT) {
-            for (int i = 0; i < PAGINATION_DOTS_COUNT; i++) {
-                if (count < 2 || i >= count) {
-                    mPageIndicators[i].setVisibility(View.GONE);
-                } else {
-                    paintIndicator(i, position == i ? R.drawable.ic_swipe_circle_light :
-                            R.drawable.ic_swipe_circle_dark);
-                }
-            }
-        } else {
-            /**
-             * If there are more than 4 timers, the top and/or bottom dot might need to show a
-             * half fade, to indicate there are more timers in that direction.
-             */
-            final int aboveCount = position; // How many timers are above the current timer
-            final int belowCount = count - position - 1; // How many timers are below
-            if (aboveCount < PAGINATION_DOTS_COUNT - 1) {
-                // There's enough room for the above timers, so top dot need not to fade
-                for (int i = 0; i < aboveCount; i++) {
-                    paintIndicator(i, R.drawable.ic_swipe_circle_dark);
-                }
-                paintIndicator(position, R.drawable.ic_swipe_circle_light);
-                for (int i = position + 1; i < PAGINATION_DOTS_COUNT - 1 ; i++) {
-                    paintIndicator(i, R.drawable.ic_swipe_circle_dark);
-                }
-                paintIndicator(PAGINATION_DOTS_COUNT - 1, R.drawable.ic_swipe_circle_bottom);
-            } else {
-                // There's not enough room for the above timers, top dot needs to fade
-                paintIndicator(0, R.drawable.ic_swipe_circle_top);
-                for (int i = 1; i < PAGINATION_DOTS_COUNT - 2; i++) {
-                    paintIndicator(i, R.drawable.ic_swipe_circle_dark);
-                }
-                // Determine which resource to use for the "second indicator" from the bottom.
-                paintIndicator(PAGINATION_DOTS_COUNT - 2, belowCount == 0 ?
-                        R.drawable.ic_swipe_circle_dark : R.drawable.ic_swipe_circle_light);
-                final int lastDotRes;
-                if (belowCount == 0) {
-                    // The current timer is the last one
-                    lastDotRes = R.drawable.ic_swipe_circle_light;
-                } else if (belowCount == 1) {
-                    // There's only one timer below the current
-                    lastDotRes = R.drawable.ic_swipe_circle_dark;
-                } else {
-                    // There are more than one timer below, bottom dot needs to fade
-                    lastDotRes = R.drawable.ic_swipe_circle_bottom;
-                }
-                paintIndicator(PAGINATION_DOTS_COUNT - 1, lastDotRes);
-            }
-        }
-    }
-
-    private void paintIndicator(int position, int res) {
-        mPageIndicators[position].setVisibility(View.VISIBLE);
-        mPageIndicators[position].setImageResource(res);
+        view.announceForAccessibility(getActivity().getString(R.string.timer_deleted));
     }
 
     @Override
-    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
-        if (prefs.equals(mPrefs)) {
-            if (key.equals(Timers.REFRESH_UI_WITH_LATEST_DATA) && prefs.getBoolean(key, false)) {
-                // Clear the flag forcing a refresh of the adapter to reflect external changes.
-                mPrefs.edit().putBoolean(key, false).apply();
-                mAdapter.populateTimersFromPref();
-                mViewPager.setAdapter(mAdapter);
-                if (mViewState != null) {
-                    final int currPage = mViewState.getInt(CURR_PAGE);
-                    mViewPager.setCurrentItem(currPage);
-                    highlightPageIndicator(currPage);
-                } else {
-                    highlightPageIndicator(0);
-                }
-                setFabAppearance();
+    public void onRightButtonClick(View view) {
+        animateToView(mCreateTimerView, null);
+    }
+
+    /**
+     * Updates the state of the page indicators so they reflect the selected page in the context of
+     * all pages.
+     */
+    private void updatePageIndicators() {
+        final int page = mViewPager.getCurrentItem();
+        final int pageIndicatorCount = mPageIndicators.length;
+        final int pageCount = mAdapter.getCount();
+
+        final int[] states = computePageIndicatorStates(page, pageIndicatorCount, pageCount);
+        for (int i = 0; i < states.length; i++) {
+            final int state = states[i];
+            final ImageView pageIndicator = mPageIndicators[i];
+            if (state == 0) {
+                pageIndicator.setVisibility(GONE);
+            } else {
+                pageIndicator.setVisibility(VISIBLE);
+                pageIndicator.setImageResource(state);
             }
         }
     }
 
-    public void setLabel(TimerObj timer, String label) {
-        timer.mLabel = label;
-        updateTimerState(timer, Timers.TIMER_UPDATE, false);
-        // Make sure the new label is visible.
-        mAdapter.populateTimersFromPref();
+    /**
+     * @param page the selected page; value between 0 and {@code pageCount}
+     * @param pageIndicatorCount the number of indicators displaying the {@code page} location
+     * @param pageCount the number of pages that exist
+     * @return an array of length {@code pageIndicatorCount} specifying which image to display for
+     *      each page indicator or 0 if the page indicator should be hidden
+     */
+    @VisibleForTesting
+    static int[] computePageIndicatorStates(int page, int pageIndicatorCount, int pageCount) {
+        // Compute the number of page indicators that will be visible.
+        final int rangeSize = Math.min(pageIndicatorCount, pageCount);
+
+        // Compute the inclusive range of pages to indicate centered around the selected page.
+        int rangeStart = page - (rangeSize / 2);
+        int rangeEnd = rangeStart + rangeSize - 1;
+
+        // Clamp the range of pages if they extend beyond the last page.
+        if (rangeEnd >= pageCount) {
+            rangeEnd = pageCount - 1;
+            rangeStart = rangeEnd - rangeSize + 1;
+        }
+
+        // Clamp the range of pages if they extend beyond the first page.
+        if (rangeStart < 0) {
+            rangeStart = 0;
+            rangeEnd = rangeSize - 1;
+        }
+
+        // Build the result with all page indicators initially hidden.
+        final int[] states = new int[pageIndicatorCount];
+        Arrays.fill(states, 0);
+
+        // If 0 or 1 total pages exist, all page indicators must remain hidden.
+        if (rangeSize < 2) {
+            return states;
+        }
+
+        // Initialize the visible page indicators to be dark.
+        Arrays.fill(states, 0, rangeSize, R.drawable.ic_swipe_circle_dark);
+
+        // If more pages exist before the first page indicator, make it a fade-in gradient.
+        if (rangeStart > 0) {
+            states[0] = R.drawable.ic_swipe_circle_top;
+        }
+
+        // If more pages exist after the last page indicator, make it a fade-out gradient.
+        if (rangeEnd < pageCount - 1) {
+            states[rangeSize - 1] = R.drawable.ic_swipe_circle_bottom;
+        }
+
+        // Set the indicator of the selected page to be light.
+        states[page - rangeStart] = R.drawable.ic_swipe_circle_light;
+
+        return states;
     }
 
-    public void onPlusOneButtonPressed(TimerObj t) {
-        switch (t.mState) {
-            case TimerObj.STATE_RUNNING:
-                t.addTime(TimerObj.MINUTE_IN_MILLIS);
-                long timeLeft = t.updateTimeLeft(false);
-                t.mView.setTime(timeLeft, false);
-                t.mView.setLength(timeLeft);
-                mAdapter.notifyDataSetChanged();
-                updateTimerState(t, Timers.TIMER_UPDATE);
+    /**
+     * Display the view that creates a new timer.
+     */
+    private void showCreateTimerView() {
+        // Stop animating the timers.
+        stopUpdatingTime();
 
-                Events.sendTimerEvent(R.string.action_add_minute, R.string.label_deskclock);
-                break;
-            case TimerObj.STATE_STOPPED:
-                t.setState(TimerObj.STATE_RESTART);
-                t.mTimeLeft = t.mSetupLength;
-                t.mOriginalLength = t.mSetupLength;
-                t.mView.stop();
-                t.mView.setTime(t.mTimeLeft, false);
-                t.mView.set(t.mOriginalLength, t.mTimeLeft, false);
-                updateTimerState(t, Timers.RESET_TIMER);
+        // If no timers yet exist, the user is forced to create the first one.
+        mCancelCreateButton.setVisibility(hasTimers() ? VISIBLE : INVISIBLE);
+        mCancelCreateButton.setEnabled(true);
 
-                Events.sendTimerEvent(R.string.action_reset, R.string.label_deskclock);
-                break;
-            case TimerObj.STATE_TIMESUP:
-                // +1 min when the time is up will restart the timer with 1 minute left.
-                t.setState(TimerObj.STATE_RUNNING);
-                t.mStartTime = Utils.getTimeNow();
-                t.mTimeLeft = t.mOriginalLength = TimerObj.MINUTE_IN_MILLIS;
-                t.mView.setTime(t.mTimeLeft, false);
-                t.mView.set(t.mOriginalLength, t.mTimeLeft, true);
-                t.mView.start();
-                updateTimerState(t, Timers.RESET_TIMER);
-                Events.sendTimerEvent(R.string.action_add_minute, R.string.label_deskclock);
+        // Show the creation view; hide the timer view.
+        mTimersView.setVisibility(GONE);
+        mCreateTimerView.setVisibility(VISIBLE);
 
-                updateTimerState(t, Timers.START_TIMER);
-                cancelTimerNotification(t.mTimerId);
-                break;
-        }
-        // This will change status of the timer, so update fab
+        // Record the fact that the create view is visible.
+        mCurrentView = mCreateTimerView;
+
+        // Update the fab and buttons.
+        setLeftRightButtonAppearance();
         setFabAppearance();
     }
 
-    private void cancelTimerNotification(int timerId) {
-        mNotificationManager.cancel(timerId);
+    /**
+     * Display the view that lists all existing timers.
+     */
+    private void showTimersView() {
+        // Show the timer view; hide the creation view.
+        mTimersView.setVisibility(VISIBLE);
+        mCreateTimerView.setVisibility(GONE);
+
+        // Record the fact that the create view is visible.
+        mCurrentView = mTimersView;
+
+        // Update the fab and buttons.
+        setLeftRightButtonAppearance();
+        setFabAppearance();
+
+        // Start animating the timers.
+        startUpdatingTime();
     }
-}
+
+    /**
+     * @param timerToRemove the timer to be removed during the animation
+     */
+    private void animateTimerRemove(final Timer timerToRemove) {
+        final Animator fadeOut = ObjectAnimator.ofFloat(mViewPager, ALPHA, 1, 0);
+        fadeOut.setDuration(mShortAnimationDuration);
+        fadeOut.setInterpolator(new DecelerateInterpolator());
+        fadeOut.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                DataModel.getDataModel().removeTimer(timerToRemove);
+                Events.sendTimerEvent(R.string.action_delete, R.string.label_deskclock);
+            }
+        });
+
+        final Animator fadeIn = ObjectAnimator.ofFloat(mViewPager, ALPHA, 0, 1);
+        fadeIn.setDuration(mShortAnimationDuration);
+        fadeIn.setInterpolator(new AccelerateInterpolator());
+
+        final AnimatorSet animatorSet = new AnimatorSet();
+        animatorSet.play(fadeOut).before(fadeIn);
+        animatorSet.start();
+    }
+
+    /**
+     * @param toView one of {@link #mTimersView} or {@link #mCreateTimerView}
+     * @param timerToRemove the timer to be removed during the animation; {@code null} if no timer
+     *      should be removed
+     */
+    private void animateToView(View toView, final Timer timerToRemove) {
+        if (mCurrentView == toView) {
+            throw new IllegalStateException("toView is already the current view");
+        }
+
+        final boolean toTimers = toView == mTimersView;
+
+        // Avoid double-taps by enabling/disabling the set of buttons active on the new view.
+        mLeftButton.setEnabled(toTimers);
+        mRightButton.setEnabled(toTimers);
+        mCancelCreateButton.setEnabled(!toTimers);
+
+        final Animator rotateFrom = ObjectAnimator.ofFloat(mCurrentView, SCALE_X, 1, 0);
+        rotateFrom.setDuration(mShortAnimationDuration);
+        rotateFrom.setInterpolator(new DecelerateInterpolator());
+        rotateFrom.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                if (timerToRemove != null) {
+                    DataModel.getDataModel().removeTimer(timerToRemove);
+                    Events.sendTimerEvent(R.string.action_delete, R.string.label_deskclock);
+                }
+
+                mCurrentView.setScaleX(1);
+                if (toTimers) {
+                    showTimersView();
+                } else {
+                    showCreateTimerView();
+                }
+            }
+        });
+
+        final Animator rotateTo = ObjectAnimator.ofFloat(toView, SCALE_X, 0, 1);
+        rotateTo.setDuration(mShortAnimationDuration);
+        rotateTo.setInterpolator(new AccelerateInterpolator());
+
+        final float preScale = toTimers ? 0 : 1;
+        final float postScale = toTimers ? 1 : 0;
+        final Animator fabAnimator = getScaleAnimator(mFab, preScale, postScale);
+        final Animator leftButtonAnimator = getScaleAnimator(mLeftButton, preScale, postScale);
+        final Animator rightButtonAnimator = getScaleAnimator(mRightButton, preScale, postScale);
+
+        final AnimatorSet buttons = new AnimatorSet();
+        buttons.setDuration(toTimers ? mMediumAnimationDuration : mShortAnimationDuration);
+        buttons.play(leftButtonAnimator).with(rightButtonAnimator).with(fabAnimator);
+        buttons.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mLeftButton.setVisibility(toTimers ? VISIBLE : INVISIBLE);
+                mRightButton.setVisibility(toTimers ? VISIBLE : INVISIBLE);
+
+                mFab.setScaleX(1);
+                mFab.setScaleY(1);
+                mLeftButton.setScaleX(1);
+                mLeftButton.setScaleY(1);
+                mRightButton.setScaleX(1);
+                mRightButton.setScaleY(1);
+            }
+        });
+
+        final AnimatorSet animatorSet = new AnimatorSet();
+        animatorSet.play(rotateFrom).before(rotateTo).with(buttons);
+        animatorSet.start();
+    }
+
+    private boolean hasTimers() {
+        return mAdapter.getCount() > 0;
+    }
+
+    private Timer getTimer() {
+        if (mViewPager == null) {
+            return null;
+        }
+
+        return mAdapter.getCount() == 0 ? null : mAdapter.getTimer(mViewPager.getCurrentItem());
+    }
+
+    private void startUpdatingTime() {
+        // Ensure only one copy of the runnable is ever scheduled by first stopping updates.
+        stopUpdatingTime();
+        mViewPager.post(mTimeUpdateRunnable);
+    }
+
+    private void stopUpdatingTime() {
+        mViewPager.removeCallbacks(mTimeUpdateRunnable);
+    }
+
+    /**
+     * Periodically refreshes the state of each timer.
+     */
+    private class TimeUpdateRunnable implements Runnable {
+        @Override
+        public void run() {
+            final long startTime = SystemClock.elapsedRealtime();
+            // If no timers require continuous updates, avoid scheduling the next update.
+            if (!mAdapter.updateTime()) {
+                return;
+            }
+            final long endTime = SystemClock.elapsedRealtime();
+
+            // Try to maintain a consistent period of time between redraws.
+            final long delay = Math.max(0, startTime + 20 - endTime);
+            mTimersView.postDelayed(this, delay);
+        }
+    }
+
+    /**
+     * Update the page indicators and fab in response to a new timer becoming visible.
+     */
+    private class TimerPageChangeListener extends ViewPager.SimpleOnPageChangeListener {
+        @Override
+        public void onPageSelected(int position) {
+            updatePageIndicators();
+            setFabAppearance();
+
+            // Showing a new timer page may introduce a timer requiring continuous updates.
+            startUpdatingTime();
+        }
+
+        @Override
+        public void onPageScrollStateChanged(int state) {
+            // Teasing a neighboring timer may introduce a timer requiring continuous updates.
+            if (state == ViewPager.SCROLL_STATE_DRAGGING) {
+                startUpdatingTime();
+            }
+        }
+    }
+
+    /**
+     * Update the page indicators in response to timers being added or removed.
+     * Update the fab in response to the visible timer changing.
+     */
+    private class TimerWatcher implements TimerListener {
+        @Override
+        public void timerAdded(Timer timer) {
+            // The user interface should not be updated unless the fragment is resumed. It will be
+            // refreshed during onResume later if it is not currently resumed.
+            if (!isResumed()) {
+                return;
+            }
+
+            updatePageIndicators();
+        }
+
+        @Override
+        public void timerUpdated(Timer before, Timer after) {
+            // The user interface should not be updated unless the fragment is resumed. It will be
+            // refreshed during onResume later if it is not currently resumed.
+            if (!isResumed()) {
+                return;
+            }
+
+            // If the timer started, animate the timers.
+            if (before.isReset() && !after.isReset()) {
+                startUpdatingTime();
+            }
+
+            // Fetch the index of the change.
+            final int index = DataModel.getDataModel().getTimers().indexOf(after);
+
+            // If the timer just expired but is not displayed, display it now.
+            if (!before.isExpired() && after.isExpired() && index != mViewPager.getCurrentItem()) {
+                mViewPager.setCurrentItem(index, true);
+
+            } else if (index == mViewPager.getCurrentItem()) {
+                // If the visible timer changed, update the fab to match its new state.
+                setFabAppearance();
+            }
+        }
+
+        @Override
+        public void timerRemoved(Timer timer) {
+            // The user interface should not be updated unless the fragment is resumed. It will be
+            // refreshed during onResume later if it is not currently resumed.
+            if (!isResumed()) {
+                return;
+            }
+
+            updatePageIndicators();
+        }
+    }
+
+    /**
+     * Clicking the play icon on the timer creation page creates a new timer and returns to the
+     * timers list.
+     */
+    private class CreateListener implements OnClickListener {
+        @Override
+        public void onClick(View v) {
+            // Create the new timer.
+            final long length = mCreateTimerView.getTimeInMillis();
+            final Timer timer = DataModel.getDataModel().addTimer(length, "", false);
+            Events.sendTimerEvent(R.string.action_create, R.string.label_deskclock);
+
+            // Start the new timer.
+            DataModel.getDataModel().startTimer(timer);
+            Events.sendTimerEvent(R.string.action_start, R.string.label_deskclock);
+
+            // Reset the state of the create view.
+            mCreateTimerView.reset();
+
+            // Display the freshly created timer view.
+            mViewPager.setCurrentItem(0);
+
+            // Return to the list of timers.
+            animateToView(mTimersView, null);
+        }
+    }
+
+    /**
+     * Clicking the X icon on the timer creation page returns to the timers list.
+     */
+    private class CancelCreateListener implements OnClickListener {
+        @Override
+        public void onClick(View view) {
+            // Reset the state of the create view.
+            mCreateTimerView.reset();
+
+            if (hasTimers()) {
+                animateToView(mTimersView, null);
+            }
+
+            view.announceForAccessibility(getActivity().getString(R.string.timer_canceled));
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/timer/TimerFragmentAdapter.java b/src/com/android/deskclock/timer/TimerFragmentAdapter.java
deleted file mode 100644
index c5244bd..0000000
--- a/src/com/android/deskclock/timer/TimerFragmentAdapter.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.deskclock.timer;
-
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.content.SharedPreferences;
-import android.support.v4.view.PagerAdapter;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-
-public class TimerFragmentAdapter extends FragmentStatePagerAdapter2 {
-
-    private final ArrayList<TimerObj> mTimerList = new ArrayList<TimerObj>();
-    private final SharedPreferences mSharedPrefs;
-
-    public TimerFragmentAdapter(FragmentManager fm, SharedPreferences sharedPreferences) {
-        super(fm);
-        mSharedPrefs = sharedPreferences;
-    }
-
-    @Override
-    public int getItemPosition(Object object) {
-        // Force return NONE so that the adapter always assumes the item position has changed
-        return PagerAdapter.POSITION_NONE;
-    }
-
-    @Override
-    public int getCount() {
-        return mTimerList.size();
-    }
-
-    @Override
-    public Fragment getItem(int position) {
-        return TimerItemFragment.newInstance(mTimerList.get(position));
-    }
-
-    public void addTimer(TimerObj timer) {
-        // Newly created timer should always show on the top of the list
-        mTimerList.add(0, timer);
-        notifyDataSetChanged();
-    }
-
-    public TimerObj getTimerAt(int position) {
-        return mTimerList.get(position);
-    }
-
-    public void saveTimersToSharedPrefs() {
-        TimerObj.putTimersInSharedPrefs(mSharedPrefs, mTimerList);
-    }
-
-    public void populateTimersFromPref() {
-        mTimerList.clear();
-        TimerObj.getTimersFromSharedPrefs(mSharedPrefs, mTimerList);
-        Collections.sort(mTimerList, new Comparator<TimerObj>() {
-            @Override
-            public int compare(TimerObj o1, TimerObj o2) {
-                return (o2.mTimerId < o1.mTimerId) ? -1 : 1;
-            }
-        });
-
-        notifyDataSetChanged();
-    }
-
-    public void deleteTimer(int id) {
-        for (int i = 0; i < mTimerList.size(); i++) {
-            TimerObj timer = mTimerList.get(i);
-            if (timer.mTimerId == id) {
-                if (timer.mView != null) {
-                    timer.mView.stop();
-                }
-                timer.deleteFromSharedPref(mSharedPrefs);
-                mTimerList.remove(i);
-                break;
-            }
-        }
-
-        notifyDataSetChanged();
-        return;
-    }
-
-    // Return position of the timer with the given timerId. If the timer is not in the list,
-    // return 0 so we get the position of the newest timer.
-    public int getTimerPosition(int id) {
-        for (int i = 0; i < mTimerList.size(); i++) {
-            TimerObj timer = mTimerList.get(i);
-            if (timer.mTimerId == id) {
-                return i;
-            }
-        }
-        return 0;
-    }
-}
diff --git a/src/com/android/deskclock/timer/TimerFullScreenFragment.java b/src/com/android/deskclock/timer/TimerFullScreenFragment.java
deleted file mode 100644
index 24b5854..0000000
--- a/src/com/android/deskclock/timer/TimerFullScreenFragment.java
+++ /dev/null
@@ -1,923 +0,0 @@
-/*
- * 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.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.ValueAnimator;
-import android.app.Fragment;
-import android.app.FragmentTransaction;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.content.res.Resources;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.preference.PreferenceManager;
-import android.support.v4.view.animation.PathInterpolatorCompat;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.view.ViewGroup.LayoutParams;
-import android.view.animation.AccelerateInterpolator;
-import android.view.animation.DecelerateInterpolator;
-import android.widget.ImageButton;
-import android.widget.TextView;
-
-import com.android.deskclock.CircleButtonsLayout;
-import com.android.deskclock.DeskClock;
-import com.android.deskclock.DeskClockFragment;
-import com.android.deskclock.LabelDialogFragment;
-import com.android.deskclock.LogUtils;
-import com.android.deskclock.R;
-import com.android.deskclock.TimerSetupView;
-import com.android.deskclock.Utils;
-import com.android.deskclock.events.Events;
-import com.android.deskclock.widget.CircleView;
-import com.android.deskclock.widget.sgv.GridAdapter;
-import com.android.deskclock.widget.sgv.StaggeredGridView;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.LinkedList;
-
-// TODO: This class is renamed from TimerFragment to TimerFullScreenFragment with no change. It
-// is responsible for the timer list in full screen timer alert and should be deprecated shortly.
-public class TimerFullScreenFragment extends DeskClockFragment
-        implements OnClickListener, OnSharedPreferenceChangeListener {
-
-    private static final String TAG = "TimerFragment1";
-    private static final String KEY_ENTRY_STATE = "entry_state";
-    public static final String GOTO_SETUP_VIEW = "deskclock.timers.gotosetup";
-
-    private Bundle mViewState;
-    private StaggeredGridView mTimersList;
-    private View mTimersListPage;
-    private int mColumnCount;
-    private ImageButton mFab;
-    private TimerSetupView mTimerSetup;
-    private TimersListAdapter mAdapter;
-    private boolean mTicking = false;
-    private SharedPreferences mPrefs;
-    private NotificationManager mNotificationManager;
-    private OnEmptyListListener mOnEmptyListListener;
-    private View mLastVisibleView = null;  // used to decide if to set the view or animate to it.
-
-    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;
-        }
-    }
-
-    // Container Activity that requests TIMESUP_MODE must implement this interface
-    public interface OnEmptyListListener {
-        void onEmptyList();
-        void onListChanged();
-    }
-
-    TimersListAdapter createAdapter(Context context) {
-        if (mOnEmptyListListener == null) {
-            return new TimersListAdapter(context);
-        } else {
-            return new TimesUpListAdapter(context);
-        }
-    }
-
-    private class TimersListAdapter extends GridAdapter {
-
-        protected final ArrayList<TimerObj> mTimers = new ArrayList<>();
-        private final LayoutInflater mLayoutInflater;
-
-        public TimersListAdapter(Context context) {
-            mLayoutInflater = LayoutInflater.from(context);
-        }
-
-        @Override
-        public int getCount() {
-            return mTimers.size();
-        }
-
-        @Override
-        public boolean hasStableIds() {
-            return true;
-        }
-
-        @Override
-        public TimerObj 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;
-        }
-
-        protected int findTimerPositionById(int id) {
-            for (int i = 0; i < mTimers.size(); i++) {
-                TimerObj t = mTimers.get(i);
-                if (t.mTimerId == id) {
-                    return i;
-                }
-            }
-            return -1;
-        }
-
-        public void removeTimer(TimerObj timerObj) {
-            int position = findTimerPositionById(timerObj.mTimerId);
-            if (position >= 0) {
-                mTimers.remove(position);
-                notifyDataSetChanged();
-            }
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            final TimerListItem v = (TimerListItem) mLayoutInflater.inflate(
-                    R.layout.timer_list_item, parent, false /* attachToRoot */);
-            final TimerObj o = getItem(position);
-            o.mView = v;
-            long timeLeft = o.updateTimeLeft(false);
-            boolean drawRed = o.mState != TimerObj.STATE_RESTART;
-            v.set(o.mOriginalLength, timeLeft, drawRed);
-            v.setTime(timeLeft, true);
-            switch (o.mState) {
-                case TimerObj.STATE_RUNNING:
-                    v.start();
-                    break;
-                case TimerObj.STATE_TIMESUP:
-                    v.timesUp();
-                    break;
-                default:
-                    break;
-            }
-
-            CircleButtonsLayout circleLayout =
-                    (CircleButtonsLayout) v.findViewById(R.id.timer_circle);
-            circleLayout.setCircleTimerViewIds(R.id.timer_time, R.id.reset_add, R.id.timer_label);
-
-            ImageButton resetAddButton = (ImageButton) v.findViewById(R.id.reset_add);
-            resetAddButton.setTag(new ClickAction(ClickAction.ACTION_PLUS_ONE, o));
-            v.setResetAddButton(true, TimerFullScreenFragment.this);
-
-            TextView label = (TextView) v.findViewById(R.id.timer_label);
-            label.setText(o.mLabel);
-            if (getActivity() instanceof DeskClock) {
-                label.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        onLabelPressed(o);
-                    }
-                });
-            }  else if (TextUtils.isEmpty(o.mLabel)) {
-                label.setVisibility(View.INVISIBLE);
-            }
-
-            return v;
-        }
-
-        @Override
-        public int getItemColumnSpan(Object item, int position) {
-            // This returns the width for a specified position. If we only have one item, have it
-            // span all columns so that it's centered. Otherwise, all timers should just span one.
-            if (getCount() == 1) {
-                return mColumnCount;
-            } else {
-                return 1;
-            }
-        }
-
-        public void addTimer(TimerObj t) {
-            mTimers.add(0, t);
-            sort();
-        }
-
-        public void onSaveInstanceState(Bundle outState) {
-            TimerObj.putTimersInSharedPrefs(mPrefs, mTimers);
-        }
-
-        public void onRestoreInstanceState(Bundle outState) {
-            TimerObj.getTimersFromSharedPrefs(mPrefs, mTimers);
-            sort();
-        }
-
-        public void saveGlobalState() {
-            TimerObj.putTimersInSharedPrefs(mPrefs, mTimers);
-        }
-
-        public void sort() {
-            if (getCount() > 0) {
-                Collections.sort(mTimers, mTimersCompare);
-                notifyDataSetChanged();
-            }
-        }
-
-        private final Comparator<TimerObj> mTimersCompare = new Comparator<TimerObj>() {
-            static final int BUZZING = 0;
-            static final int IN_USE = 1;
-            static final int NOT_USED = 2;
-
-            protected int getSection(TimerObj timerObj) {
-                switch (timerObj.mState) {
-                    case TimerObj.STATE_TIMESUP:
-                        return BUZZING;
-                    case TimerObj.STATE_RUNNING:
-                    case TimerObj.STATE_STOPPED:
-                        return IN_USE;
-                    default:
-                        return NOT_USED;
-                }
-            }
-
-            @Override
-            public int compare(TimerObj o1, TimerObj o2) {
-                int section1 = getSection(o1);
-                int section2 = getSection(o2);
-                if (section1 != section2) {
-                    return (section1 < section2) ? -1 : 1;
-                } else if (section1 == BUZZING || section1 == IN_USE) {
-                    return (o1.mTimeLeft < o2.mTimeLeft) ? -1 : 1;
-                } else {
-                    return (o1.mSetupLength < o2.mSetupLength) ? -1 : 1;
-                }
-            }
-        };
-    }
-
-    private class TimesUpListAdapter extends TimersListAdapter {
-
-        public TimesUpListAdapter(Context context) {
-            super(context);
-        }
-
-        @Override
-        public void onSaveInstanceState(Bundle outState) {
-            // This adapter has a data subset and never updates entire database
-            // Individual timers are updated in button handlers.
-        }
-
-        @Override
-        public void saveGlobalState() {
-            // This adapter has a data subset and never updates entire database
-            // Individual timers are updated in button handlers.
-        }
-
-        @Override
-        public void onRestoreInstanceState(Bundle outState) {
-            // This adapter loads a subset
-            TimerObj.getTimersFromSharedPrefs(mPrefs, mTimers, TimerObj.STATE_TIMESUP);
-
-            if (getCount() == 0) {
-                mOnEmptyListListener.onEmptyList();
-            } else {
-                Collections.sort(mTimers, new Comparator<TimerObj>() {
-                    @Override
-                    public int compare(TimerObj o1, TimerObj o2) {
-                        return (o1.mTimeLeft < o2.mTimeLeft) ? -1 : 1;
-                    }
-                });
-            }
-        }
-    }
-
-    private final Runnable mClockTick = new Runnable() {
-        boolean mVisible = true;
-        final static int TIME_PERIOD_MS = 1000;
-        final static int SPLIT = TIME_PERIOD_MS / 2;
-
-        @Override
-        public void run() {
-            // Setup for blinking
-            boolean visible = Utils.getTimeNow() % TIME_PERIOD_MS < SPLIT;
-            boolean toggle = mVisible != visible;
-            mVisible = visible;
-            for (int i = 0; i < mAdapter.getCount(); i++) {
-                TimerObj t = mAdapter.getItem(i);
-                if (t.mState == TimerObj.STATE_RUNNING || t.mState == TimerObj.STATE_TIMESUP) {
-                    long timeLeft = t.updateTimeLeft(false);
-                    if (t.mView != null) {
-                        t.mView.setTime(timeLeft, false);
-                    }
-                }
-                if (t.mTimeLeft <= 0 && t.mState != TimerObj.STATE_RESTART) {
-                    t.setState(TimerObj.STATE_TIMESUP);
-                    if (t.mView != null) {
-                        t.mView.timesUp();
-                    }
-                }
-
-                // The blinking
-                if (toggle && t.mView != null) {
-                    if (t.mState == TimerObj.STATE_TIMESUP) {
-                        t.mView.setCircleBlink(mVisible);
-                    }
-                    if (t.mState == TimerObj.STATE_STOPPED) {
-                        t.mView.setTextBlink(mVisible);
-                    }
-                }
-            }
-            mTimersList.postDelayed(mClockTick, 20);
-        }
-    };
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        // Cache instance data and consume in first call to setupPage()
-        if (savedInstanceState != null) {
-            mViewState = savedInstanceState;
-        }
-
-        super.onCreate(savedInstanceState);
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
-        View v = inflater.inflate(R.layout.timer_full_screen_fragment, container, false);
-
-        // Handle arguments from parent
-        Bundle bundle = getArguments();
-        if (bundle != null && bundle.containsKey(Timers.TIMESUP_MODE)) {
-            if (bundle.getBoolean(Timers.TIMESUP_MODE, false)) {
-                try {
-                    mOnEmptyListListener = (OnEmptyListListener) getActivity();
-                } catch (ClassCastException e) {
-                    Log.wtf(TAG, getActivity().toString() + " must implement OnEmptyListListener");
-                }
-            }
-        }
-
-        mFab = (ImageButton) v.findViewById(R.id.fab);
-        mTimersList = (StaggeredGridView) v.findViewById(R.id.timers_list);
-        // For tablets in landscape, the count will be 2. All else will be 1.
-        mColumnCount = getResources().getInteger(R.integer.timer_column_count);
-        mTimersList.setColumnCount(mColumnCount);
-        // Set this to true; otherwise adding new views to the end of the list won't cause
-        // everything above it to be filled in correctly.
-        mTimersList.setGuardAgainstJaggedEdges(true);
-
-        mTimersListPage = v.findViewById(R.id.timers_list_page);
-        mTimerSetup = (TimerSetupView) v.findViewById(R.id.timer_setup);
-
-        mPrefs = Utils.getDefaultSharedPreferences(getActivity());
-        mNotificationManager = (NotificationManager)
-                getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
-
-        return v;
-    }
-
-    @Override
-    public void onDestroyView() {
-        mViewState = new Bundle();
-        saveViewState(mViewState);
-        super.onDestroyView();
-    }
-
-    @Override
-    public void onResume() {
-        Intent newIntent = null;
-
-        if (getActivity() instanceof DeskClock) {
-            DeskClock activity = (DeskClock) getActivity();
-            activity.registerPageChangedListener(this);
-            newIntent = activity.getIntent();
-        }
-        super.onResume();
-        mPrefs.registerOnSharedPreferenceChangeListener(this);
-
-        mAdapter = createAdapter(getActivity());
-        mAdapter.onRestoreInstanceState(null);
-
-        LayoutParams params;
-        float dividerHeight = getResources().getDimension(R.dimen.timer_divider_height);
-        if (getActivity() instanceof DeskClock) {
-            // If this is a DeskClock fragment (i.e. not a FullScreenTimerAlert), add a footer to
-            // the bottom of the list so that it can scroll underneath the bottom button bar.
-            // StaggeredGridView doesn't support a footer view, but GridAdapter does, so this
-            // can't happen until the Adapter itself is instantiated.
-            View footerView = getActivity().getLayoutInflater().inflate(
-                    R.layout.blank_footer_view, mTimersList, false);
-            params = footerView.getLayoutParams();
-            params.height -= dividerHeight;
-            footerView.setLayoutParams(params);
-            mAdapter.setFooterView(footerView);
-        }
-
-        if (mPrefs.getBoolean(Timers.REFRESH_UI_WITH_LATEST_DATA, false)) {
-            // Clear the flag indicating the adapter is out of sync with the database.
-            mPrefs.edit().putBoolean(Timers.REFRESH_UI_WITH_LATEST_DATA, false).apply();
-        }
-
-        mTimersList.setAdapter(mAdapter);
-        setTimerListPosition(mAdapter.getCount());
-
-        mLastVisibleView = null;   // Force a non animation setting of the view
-        setPage();
-        // View was hidden in onPause, make sure it is visible now.
-        View v = getView();
-        if (v != null) {
-            getView().setVisibility(View.VISIBLE);
-        }
-
-        if (newIntent != null) {
-            processIntent(newIntent);
-        }
-
-        mFab.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                final Animator revealAnimator = getRevealAnimator(mFab, Color.WHITE);
-                revealAnimator.addListener(new AnimatorListenerAdapter() {
-                    @Override
-                    public void onAnimationEnd(Animator animation) {
-                        updateAllTimesUpTimers();
-                    }
-                });
-                revealAnimator.start();
-            }
-        });
-    }
-
-    private void setTimerListPosition(int numTimers) {
-        final LayoutParams timerListParams = mTimersList.getLayoutParams();
-        if (numTimers <= 1) {
-            // Set a fixed height so we can center it
-            final Resources resources = getResources();
-            timerListParams.height = (int) resources.getDimension(R.dimen.circle_size)
-                    + (int) resources.getDimension(R.dimen.timer_list_padding_bottom);
-
-            // Disable scrolling
-            mTimersList.setOnTouchListener(new View.OnTouchListener() {
-                public boolean onTouch(View v, MotionEvent event) {
-                    return (event.getAction() == MotionEvent.ACTION_MOVE);
-                }
-            });
-        } else {
-            timerListParams.height = LayoutParams.MATCH_PARENT;
-            mTimersList.setOnTouchListener(null);
-        }
-    }
-
-    private Animator getRevealAnimator(View source, int revealColor) {
-        final ViewGroup containerView = (ViewGroup) source.getRootView()
-                .findViewById(android.R.id.content);
-
-        final Rect sourceBounds = new Rect(0, 0, source.getHeight(), source.getWidth());
-        containerView.offsetDescendantRectToMyCoords(source, sourceBounds);
-
-        final int centerX = sourceBounds.centerX();
-        final int centerY = sourceBounds.centerY();
-
-        final int xMax = Math.max(centerX, containerView.getWidth() - centerX);
-        final int yMax = Math.max(centerY, containerView.getHeight() - centerY);
-
-        final float startRadius = Math.max(sourceBounds.width(), sourceBounds.height()) / 2.0f;
-        final float endRadius = (float) Math.sqrt(xMax * xMax + yMax * yMax);
-
-        final CircleView revealView = new CircleView(source.getContext())
-                .setCenterX(centerX)
-                .setCenterY(centerY)
-                .setFillColor(revealColor);
-        containerView.addView(revealView);
-
-        final Animator revealAnimator = ObjectAnimator.ofFloat(
-                revealView, CircleView.RADIUS, startRadius, endRadius);
-        revealAnimator.setInterpolator(PathInterpolatorCompat.create(0.0f, 0.0f, 0.2f, 1.0f));
-
-        final ValueAnimator fadeAnimator = ObjectAnimator.ofFloat(revealView, View.ALPHA, 0.0f);
-        fadeAnimator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                containerView.removeView(revealView);
-            }
-        });
-
-        final AnimatorSet animatorSet = new AnimatorSet();
-        animatorSet.setDuration(TimerFragment.ANIMATION_TIME_MILLIS);
-        animatorSet.playSequentially(revealAnimator, fadeAnimator);
-
-        return revealAnimator;
-    }
-
-    @Override
-    public void onPause() {
-        if (getActivity() instanceof DeskClock) {
-            ((DeskClock) getActivity()).unregisterPageChangedListener(this);
-        }
-        super.onPause();
-        stopClockTicks();
-        if (mAdapter != null) {
-            mAdapter.saveGlobalState();
-        }
-        mPrefs.unregisterOnSharedPreferenceChangeListener(this);
-        // This is called because the lock screen was activated, the window stay
-        // active under it and when we unlock the screen, we see the old time for
-        // a fraction of a second.
-        View v = getView();
-        if (v != null) {
-            v.setVisibility(View.INVISIBLE);
-        }
-    }
-
-    @Override
-    public void onPageChanged(int page) {
-        if (page == DeskClock.TIMER_TAB_INDEX && mAdapter != null) {
-            mAdapter.sort();
-        }
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        if (mAdapter != null) {
-            mAdapter.onSaveInstanceState(outState);
-        }
-        if (mTimerSetup != null) {
-            saveViewState(outState);
-        } else if (mViewState != null) {
-            outState.putAll(mViewState);
-        }
-    }
-
-    private void saveViewState(Bundle outState) {
-        mTimerSetup.saveEntryState(outState, KEY_ENTRY_STATE);
-    }
-
-    public void setPage() {
-        boolean switchToSetupView;
-        if (mViewState != null) {
-            switchToSetupView = false;
-            mTimerSetup.restoreEntryState(mViewState, KEY_ENTRY_STATE);
-            mViewState = null;
-        } else {
-            switchToSetupView = mAdapter.getCount() == 0;
-        }
-        if (switchToSetupView) {
-            gotoSetupView();
-        } else {
-            gotoTimersView();
-        }
-    }
-
-    private void resetTimer(TimerObj t) {
-        t.setState(TimerObj.STATE_RESTART);
-        t.mTimeLeft = t.mOriginalLength = t.mSetupLength;
-        // when multiple timers are firing, some timers will be off-screen and they will not
-        // have Fragment instances unless user scrolls down further. t.mView is null in this case.
-        if (t.mView != null) {
-            t.mView.stop();
-            t.mView.setTime(t.mTimeLeft, false);
-            t.mView.set(t.mOriginalLength, t.mTimeLeft, false);
-        }
-        updateTimersState(t, Timers.RESET_TIMER);
-        Events.sendTimerEvent(R.string.action_reset, R.string.label_deskclock);
-    }
-
-    public void updateAllTimesUpTimers() {
-        boolean notifyChange = false;
-        //  To avoid race conditions where a timer was dismissed and it is still in the timers list
-        // and can be picked again, create a temporary list of timers to be removed first and
-        // then removed them one by one
-        LinkedList<TimerObj> timesupTimers = new LinkedList<>();
-        for (int i = 0; i < mAdapter.getCount(); i++) {
-            TimerObj timerObj = mAdapter.getItem(i);
-            if (timerObj.mState == TimerObj.STATE_TIMESUP) {
-                timesupTimers.addFirst(timerObj);
-                notifyChange = true;
-            }
-        }
-
-        while (timesupTimers.size() > 0) {
-            final TimerObj t = timesupTimers.remove();
-            onStopButtonPressed(t);
-        }
-
-        if (notifyChange) {
-            mPrefs.edit().putBoolean(Timers.REFRESH_UI_WITH_LATEST_DATA, true).apply();
-        }
-    }
-
-    private void gotoSetupView() {
-        if (mLastVisibleView == null || mLastVisibleView.getId() == R.id.timer_setup) {
-            mTimerSetup.setVisibility(View.VISIBLE);
-            mTimerSetup.setScaleX(1f);
-            mTimersListPage.setVisibility(View.GONE);
-        } else {
-            // Animate
-            ObjectAnimator a = ObjectAnimator.ofFloat(mTimersListPage, View.SCALE_X, 1f, 0f);
-            a.setInterpolator(new AccelerateInterpolator());
-            a.setDuration(125);
-            a.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    mTimersListPage.setVisibility(View.GONE);
-                    mTimerSetup.setScaleX(0);
-                    mTimerSetup.setVisibility(View.VISIBLE);
-                    ObjectAnimator b = ObjectAnimator.ofFloat(mTimerSetup, View.SCALE_X, 0f, 1f);
-                    b.setInterpolator(new DecelerateInterpolator());
-                    b.setDuration(225);
-                    b.start();
-                }
-            });
-            a.start();
-
-        }
-        stopClockTicks();
-        mTimerSetup.updateDeleteButtonAndDivider();
-        mLastVisibleView = mTimerSetup;
-    }
-
-    private void gotoTimersView() {
-        if (mLastVisibleView == null || mLastVisibleView.getId() == R.id.timers_list_page) {
-            mTimerSetup.setVisibility(View.GONE);
-            mTimersListPage.setVisibility(View.VISIBLE);
-            mTimersListPage.setScaleX(1f);
-        } else {
-            // Animate
-            ObjectAnimator a = ObjectAnimator.ofFloat(mTimerSetup, View.SCALE_X, 1f, 0f);
-            a.setInterpolator(new AccelerateInterpolator());
-            a.setDuration(125);
-            a.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    mTimerSetup.setVisibility(View.GONE);
-                    mTimersListPage.setScaleX(0);
-                    mTimersListPage.setVisibility(View.VISIBLE);
-                    ObjectAnimator b =
-                            ObjectAnimator.ofFloat(mTimersListPage, View.SCALE_X, 0f, 1f);
-                    b.setInterpolator(new DecelerateInterpolator());
-                    b.setDuration(225);
-                    b.start();
-                }
-            });
-            a.start();
-        }
-        startClockTicks();
-        mLastVisibleView = mTimersListPage;
-    }
-
-    @Override
-    public void onClick(View v) {
-        ClickAction tag = (ClickAction) v.getTag();
-        onClickHelper(tag);
-    }
-
-    private void onClickHelper(ClickAction clickAction) {
-        switch (clickAction.mAction) {
-            case ClickAction.ACTION_DELETE:
-                final TimerObj t = clickAction.mTimer;
-                if (t.mState == TimerObj.STATE_TIMESUP) {
-                    cancelTimerNotification(t.mTimerId);
-                }
-                // Tell receiver the timer was deleted.
-                // It will stop all activity related to the
-                // timer
-                t.setState(TimerObj.STATE_DELETED);
-                updateTimersState(t, Timers.DELETE_TIMER);
-
-                Events.sendTimerEvent(R.string.action_delete, R.string.label_deskclock);
-                break;
-            case ClickAction.ACTION_PLUS_ONE:
-                onPlusOneButtonPressed(clickAction.mTimer);
-                break;
-            case ClickAction.ACTION_STOP:
-                onStopButtonPressed(clickAction.mTimer);
-                break;
-            default:
-                break;
-        }
-    }
-
-    private void onPlusOneButtonPressed(TimerObj t) {
-        switch (t.mState) {
-            case TimerObj.STATE_RUNNING:
-                t.addTime(TimerObj.MINUTE_IN_MILLIS);
-                long timeLeft = t.updateTimeLeft(false);
-                t.mView.setTime(timeLeft, false);
-                t.mView.setLength(timeLeft);
-                mAdapter.notifyDataSetChanged();
-                updateTimersState(t, Timers.TIMER_UPDATE);
-
-                Events.sendTimerEvent(R.string.action_add_minute, R.string.label_deskclock);
-                break;
-            case TimerObj.STATE_TIMESUP:
-                // +1 min when the time is up will restart the timer with 1 minute left.
-                t.setState(TimerObj.STATE_RUNNING);
-                t.mStartTime = Utils.getTimeNow();
-                t.mTimeLeft = t.mOriginalLength = TimerObj.MINUTE_IN_MILLIS;
-                updateTimersState(t, Timers.RESET_TIMER);
-                Events.sendTimerEvent(R.string.action_add_minute, R.string.label_deskclock);
-
-                updateTimersState(t, Timers.START_TIMER);
-                Events.sendTimerEvent(R.string.action_start, R.string.label_deskclock);
-
-                updateTimesUpMode(t);
-                cancelTimerNotification(t.mTimerId);
-                break;
-            case TimerObj.STATE_STOPPED:
-                t.setState(TimerObj.STATE_RESTART);
-                t.mTimeLeft = t.mOriginalLength = t.mSetupLength;
-                t.mView.stop();
-                t.mView.setTime(t.mTimeLeft, false);
-                t.mView.set(t.mOriginalLength, t.mTimeLeft, false);
-                updateTimersState(t, Timers.RESET_TIMER);
-
-                Events.sendTimerEvent(R.string.action_reset, R.string.label_deskclock);
-                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.setState(TimerObj.STATE_STOPPED);
-                t.mView.pause();
-                t.updateTimeLeft(true);
-                updateTimersState(t, Timers.STOP_TIMER);
-
-                Events.sendTimerEvent(R.string.action_stop, R.string.label_deskclock);
-                break;
-            case TimerObj.STATE_STOPPED:
-                // Reset the remaining time and continue timer
-                t.setState(TimerObj.STATE_RUNNING);
-                t.mStartTime = Utils.getTimeNow() - (t.mOriginalLength - t.mTimeLeft);
-                t.mView.start();
-                updateTimersState(t, Timers.START_TIMER);
-
-                Events.sendTimerEvent(R.string.action_start, R.string.label_deskclock);
-                break;
-            case TimerObj.STATE_TIMESUP:
-                if (t.mDeleteAfterUse) {
-                    cancelTimerNotification(t.mTimerId);
-                    // Tell receiver the timer was deleted.
-                    // It will stop all activity related to the
-                    // timer
-                    t.setState(TimerObj.STATE_DELETED);
-                    updateTimersState(t, Timers.DELETE_TIMER);
-                    Events.sendTimerEvent(R.string.action_delete, R.string.label_deskclock);
-                } else {
-                    resetTimer(t);
-                }
-                break;
-            case TimerObj.STATE_RESTART:
-                t.setState(TimerObj.STATE_RUNNING);
-                t.mStartTime = Utils.getTimeNow() - (t.mOriginalLength - t.mTimeLeft);
-                t.mView.start();
-                updateTimersState(t, Timers.START_TIMER);
-                Events.sendTimerEvent(R.string.action_start, R.string.label_deskclock);
-                break;
-            default:
-                break;
-        }
-    }
-
-    private void onLabelPressed(TimerObj t) {
-        final FragmentTransaction ft = getFragmentManager().beginTransaction();
-        final Fragment prev = getFragmentManager().findFragmentByTag("label_dialog");
-        if (prev != null) {
-            ft.remove(prev);
-        }
-        ft.addToBackStack(null);
-
-        // Create and show the dialog.
-        final LabelDialogFragment newFragment =
-                LabelDialogFragment.newInstance(t, t.mLabel, getTag());
-        newFragment.show(ft, "label_dialog");
-    }
-
-    // Starts the ticks that animate the timers.
-    private void startClockTicks() {
-        mTimersList.postDelayed(mClockTick, 20);
-        mTicking = true;
-    }
-
-    // Stops the ticks that animate the timers.
-    private void stopClockTicks() {
-        if (mTicking) {
-            mTimersList.removeCallbacks(mClockTick);
-            mTicking = false;
-        }
-    }
-
-    private void updateTimersState(TimerObj t, String action) {
-        if (Timers.DELETE_TIMER.equals(action)) {
-            LogUtils.e("~~ update timer state");
-            t.deleteFromSharedPref(mPrefs);
-        } else {
-            t.writeToSharedPref(mPrefs);
-        }
-        Intent i = new Intent();
-        i.setAction(action);
-        i.putExtra(Timers.TIMER_INTENT_EXTRA, t.mTimerId);
-        // Make sure the receiver is getting the intent ASAP.
-        i.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-        getActivity().sendBroadcast(i);
-    }
-
-    private void cancelTimerNotification(int timerId) {
-        mNotificationManager.cancel(timerId);
-    }
-
-    private void updateTimesUpMode(TimerObj timerObj) {
-        if (mOnEmptyListListener != null && timerObj.mState != TimerObj.STATE_TIMESUP) {
-            mAdapter.removeTimer(timerObj);
-            if (mAdapter.getCount() == 0) {
-                mOnEmptyListListener.onEmptyList();
-            } else {
-                mOnEmptyListListener.onListChanged();
-            }
-        }
-    }
-
-    public void restartAdapter() {
-        mAdapter = createAdapter(getActivity());
-        mAdapter.onRestoreInstanceState(null);
-    }
-
-    // Process extras that were sent to the app and were intended for the timer
-    // fragment
-    public void processIntent(Intent intent) {
-        // switch to timer setup view
-        if (intent.getBooleanExtra(GOTO_SETUP_VIEW, false)) {
-            gotoSetupView();
-        }
-    }
-
-    @Override
-    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
-        if (prefs.equals(mPrefs)) {
-            if (key.equals(Timers.REFRESH_UI_WITH_LATEST_DATA) && prefs.getBoolean(key, false)) {
-                // Clear the flag forcing a fresh of the adapter to reflect changes in the database.
-                mPrefs.edit().putBoolean(key, false).apply();
-                mAdapter = createAdapter(getActivity());
-                mAdapter.onRestoreInstanceState(null);
-                mTimersList.setAdapter(mAdapter);
-            }
-        }
-    }
-
-    @Override
-    public void onFabClick(View view) {
-        if (mLastVisibleView != mTimersListPage) {
-            // New timer create if timer length is not zero
-            // Create a new timer object to track the timer and
-            // switch to the timers view.
-            int timerLength = mTimerSetup.getTime();
-            if (timerLength == 0) {
-                return;
-            }
-            TimerObj t = new TimerObj(timerLength * DateUtils.SECOND_IN_MILLIS, getActivity());
-            t.setState(TimerObj.STATE_RUNNING);
-            mAdapter.addTimer(t);
-            updateTimersState(t, Timers.START_TIMER);
-            Events.sendTimerEvent(R.string.action_start, R.string.label_deskclock);
-            gotoTimersView();
-            mTimerSetup.reset(); // Make sure the setup is cleared for next time
-
-            mTimersList.setFirstPositionAndOffsets(
-                    mAdapter.findTimerPositionById(t.mTimerId), 0);
-        } else {
-            mTimerSetup.reset();
-            gotoSetupView();
-        }
-    }
-}
diff --git a/src/com/android/deskclock/timer/TimerItem.java b/src/com/android/deskclock/timer/TimerItem.java
new file mode 100644
index 0000000..e5a7be1
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerItem.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2015 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.os.SystemClock;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.deskclock.CircleButtonsLayout;
+import com.android.deskclock.R;
+import com.android.deskclock.data.Timer;
+
+/**
+ * This view is a visual representation of a {@link Timer}.
+ */
+class TimerItem extends LinearLayout {
+
+    /** Displays the remaining time or time since expiration. */
+    private CountingTimerView mTimerText;
+
+    /** Displays timer progress as a color circle that changes from white to red. */
+    private TimerCircleView mCircleView;
+
+    /** A button that either resets the timer or adds time to it, depending on its state. */
+    private ImageView mResetAddButton;
+
+    /** Displays the label associated with the timer. Tapping it presents an edit dialog. */
+    private TextView mLabelView;
+
+    /** The last state of the timer that was rendered; used to avoid expensive operations. */
+    private Timer.State mLastState;
+
+    public TimerItem(Context context) {
+        this(context, null);
+    }
+
+    public TimerItem(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mLabelView = (TextView) findViewById(R.id.timer_label);
+        mResetAddButton = (ImageView) findViewById(R.id.reset_add);
+        mCircleView = (TimerCircleView) findViewById(R.id.timer_time);
+        mTimerText = (CountingTimerView) findViewById(R.id.timer_time_text);
+
+        // This layout positions dynamically positions the label and reset buttons.
+        final CircleButtonsLayout cbl = (CircleButtonsLayout) findViewById(R.id.timer_circle);
+        cbl.setCircleTimerViewIds(R.id.timer_time, R.id.reset_add, R.id.timer_label);
+    }
+
+    /**
+     * Updates this view to display the latest state of the {@code timer}.
+     */
+    void update(Timer timer) {
+        // Update the time.
+        mTimerText.setTime(timer.getRemainingTime(), false, true);
+
+        // Update the progress of the circle.
+        mCircleView.update(timer);
+
+        // Update the label if it changed.
+        final String label = timer.getLabel();
+        if (!TextUtils.equals(label, mLabelView.getText())) {
+            mLabelView.setText(label);
+        }
+
+        // Update visibility of things that may blink.
+        final boolean blinkOff = SystemClock.elapsedRealtime() % 1000 < 500;
+        mCircleView.setVisibility(timer.isExpired() && blinkOff ? INVISIBLE : VISIBLE);
+        mTimerText.showTime(!timer.isPaused() || !blinkOff);
+
+        // Update some potentially expensive areas of the user interface only on state changes.
+        if (timer.getState() != mLastState) {
+            mLastState = timer.getState();
+            switch (mLastState) {
+                case RESET: {
+                    final String resetDesc = getResources().getString(R.string.timer_reset);
+                    mResetAddButton.setImageResource(R.drawable.ic_reset);
+                    mResetAddButton.setContentDescription(resetDesc);
+                    mTimerText.setTimeStrTextColor(false, true);
+                    break;
+                }
+                case RUNNING: {
+                    final String addTimeDesc = getResources().getString(R.string.timer_plus_one);
+                    mResetAddButton.setImageResource(R.drawable.ic_plusone);
+                    mResetAddButton.setContentDescription(addTimeDesc);
+                    mTimerText.setTimeStrTextColor(false, true);
+                    break;
+                }
+                case PAUSED: {
+                    final String resetDesc = getResources().getString(R.string.timer_reset);
+                    mResetAddButton.setImageResource(R.drawable.ic_reset);
+                    mResetAddButton.setContentDescription(resetDesc);
+                    mTimerText.setTimeStrTextColor(false, true);
+                    break;
+                }
+                case EXPIRED: {
+                    final String addTimeDesc = getResources().getString(R.string.timer_plus_one);
+                    mResetAddButton.setImageResource(R.drawable.ic_plusone);
+                    mResetAddButton.setContentDescription(addTimeDesc);
+                    mTimerText.setTimeStrTextColor(true, true);
+                    break;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/timer/TimerItemFragment.java b/src/com/android/deskclock/timer/TimerItemFragment.java
index 3c5d47a..5faec96 100644
--- a/src/com/android/deskclock/timer/TimerItemFragment.java
+++ b/src/com/android/deskclock/timer/TimerItemFragment.java
@@ -16,34 +16,31 @@
 
 package com.android.deskclock.timer;
 
-import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentTransaction;
 import android.os.Bundle;
-import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.TextView;
 
-import com.android.deskclock.CircleButtonsLayout;
-import com.android.deskclock.DeskClock;
 import com.android.deskclock.LabelDialogFragment;
 import com.android.deskclock.R;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Timer;
+import com.android.deskclock.events.Events;
 
 public class TimerItemFragment extends Fragment {
-    private static final String TAG = "TimerItemFragment_tag";
-    private TimerObj mTimerObj;
 
-    public TimerItemFragment() {
-    }
+    private static final String KEY_TIMER_ID = "KEY_TIMER_ID";
+    private int mTimerId;
 
-    public static TimerItemFragment newInstance(TimerObj timerObj) {
+    /** The public no-arg constructor required by all fragments. */
+    public TimerItemFragment() {}
+
+    public static TimerItemFragment newInstance(Timer timer) {
         final TimerItemFragment fragment = new TimerItemFragment();
         final Bundle args = new Bundle();
-        args.putParcelable(TAG, timerObj);
+        args.putInt(KEY_TIMER_ID, timer.getId());
         fragment.setArguments(args);
         return fragment;
     }
@@ -51,82 +48,69 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        final Bundle bundle = getArguments();
-        if (bundle != null) {
-            mTimerObj = (TimerObj) bundle.getParcelable(TAG);
-        }
+
+        mTimerId = getArguments().getInt(KEY_TIMER_ID);
     }
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
-        final TimerListItem v = (TimerListItem) inflater.inflate(R.layout.timer_list_item,
-                null);
-        mTimerObj.mView = v;
-        final long timeLeft = mTimerObj.updateTimeLeft(false);
-        final boolean drawWithColor = mTimerObj.mState != TimerObj.STATE_RESTART;
-        v.set(mTimerObj.mOriginalLength, timeLeft, drawWithColor);
-        v.setTime(timeLeft, true);
-        v.setResetAddButton(mTimerObj.mState == TimerObj.STATE_RUNNING ||
-                mTimerObj.mState == TimerObj.STATE_TIMESUP, new OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                final Fragment parent = getParentFragment();
-                if (parent instanceof TimerFragment) {
-                    ((TimerFragment) parent).onPlusOneButtonPressed(mTimerObj);
-                }
+        final TimerItem view = (TimerItem) inflater.inflate(R.layout.timer_item, container, false);
+        view.findViewById(R.id.reset_add).setOnClickListener(new ResetAddListener());
+        view.findViewById(R.id.timer_label).setOnClickListener(new EditLabelListener());
+        view.update(getTimer());
+
+        return view;
+    }
+
+    /**
+     * @return {@code true} iff the timer is in a state that requires continuous updates
+     */
+    boolean updateTime() {
+        final TimerItem view = (TimerItem) getView();
+        if (view != null) {
+            final Timer timer = getTimer();
+            view.update(timer);
+            return !timer.isReset();
+        }
+
+        return false;
+    }
+
+    int getTimerId() {
+        return mTimerId;
+    }
+
+    Timer getTimer() {
+        return DataModel.getDataModel().getTimer(getTimerId());
+    }
+
+    private class ResetAddListener implements View.OnClickListener {
+        @Override
+        public void onClick(View v) {
+            final Timer timer = getTimer();
+            if (timer.isPaused()) {
+                DataModel.getDataModel().resetOrDeleteTimer(timer, R.string.label_deskclock);
+            } else if (timer.isRunning() || timer.isExpired()) {
+                DataModel.getDataModel().addTimerMinute(timer);
+                Events.sendTimerEvent(R.string.action_add_minute, R.string.label_deskclock);
             }
-        });
-        switch (mTimerObj.mState) {
-            case TimerObj.STATE_RUNNING:
-                v.start();
-                break;
-            case TimerObj.STATE_TIMESUP:
-                v.timesUp();
-                break;
-            default:
-                break;
-        }
-
-        final CircleButtonsLayout circleLayout =
-                (CircleButtonsLayout) v.findViewById(R.id.timer_circle);
-        circleLayout.setCircleTimerViewIds(R.id.timer_time, R.id.reset_add, R.id.timer_label);
-
-        return v;
-    }
-
-    @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        final View v = mTimerObj.mView;
-        if (v == null) {
-            return;
-        }
-
-        TextView label = (TextView) v.findViewById(R.id.timer_label);
-        label.setText(mTimerObj.mLabel);
-        if (getActivity() instanceof DeskClock) {
-            label.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    onLabelPressed(mTimerObj);
-                }
-            });
-        } else if (TextUtils.isEmpty(mTimerObj.mLabel)) {
-            label.setVisibility(View.INVISIBLE);
         }
     }
 
-    private void onLabelPressed(TimerObj t) {
-        final String dialogTag = "label_dialog";
-        final FragmentTransaction ft = getFragmentManager().beginTransaction();
-        final Fragment prev = getFragmentManager().findFragmentByTag(dialogTag);
-        if (prev != null) {
-            ft.remove(prev);
+    private class EditLabelListener implements View.OnClickListener {
+
+        private static final String TAG = "label_dialog";
+
+        @Override
+        public void onClick(View v) {
+            final FragmentTransaction ft = getFragmentManager().beginTransaction();
+            final Fragment existingFragment = getFragmentManager().findFragmentByTag(TAG);
+            if (existingFragment != null) {
+                ft.remove(existingFragment);
+            }
+            ft.addToBackStack(null);
+            LabelDialogFragment.newInstance(getTimer()).show(ft, TAG);
         }
-        ft.addToBackStack(null);
-        final LabelDialogFragment newFragment =
-                LabelDialogFragment.newInstance(t, t.mLabel, getParentFragment().getTag());
-        newFragment.show(ft, dialogTag);
     }
-}
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/timer/TimerKlaxon.java b/src/com/android/deskclock/timer/TimerKlaxon.java
new file mode 100644
index 0000000..979d937
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerKlaxon.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2015 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.net.Uri;
+
+import com.android.deskclock.AsyncRingtonePlayer;
+import com.android.deskclock.LogUtils;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.settings.SettingsActivity;
+
+public abstract class TimerKlaxon {
+
+    private static boolean sStarted = false;
+    private static AsyncRingtonePlayer sAsyncRingtonePlayer;
+
+    private TimerKlaxon() {
+    }
+
+    public static void stop(Context context) {
+        if (sStarted) {
+            LogUtils.i("TimerKlaxon.stop()");
+            sStarted = false;
+            getAsyncRingtonePlayer(context).stop();
+        }
+    }
+
+    public static void start(Context context) {
+        // Make sure we are stopped before starting
+        stop(context);
+        LogUtils.i("TimerKlaxon.start()");
+
+        // Look up user-selected timer ringtone.
+        if (DataModel.getDataModel().isTimerRingtoneSilent()) {
+            // Special case: Silent ringtone
+            LogUtils.i("Playing silent ringtone for timer");
+        } else {
+            final Uri uri = DataModel.getDataModel().getTimerRingtoneUri();
+            getAsyncRingtonePlayer(context).play(uri);
+        }
+        sStarted = true;
+    }
+
+    private static synchronized AsyncRingtonePlayer getAsyncRingtonePlayer(Context context) {
+        if (sAsyncRingtonePlayer == null) {
+            sAsyncRingtonePlayer = new AsyncRingtonePlayer(context.getApplicationContext(),
+                    SettingsActivity.KEY_TIMER_CRESCENDO);
+        }
+
+        return sAsyncRingtonePlayer;
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/timer/TimerListItem.java b/src/com/android/deskclock/timer/TimerListItem.java
deleted file mode 100644
index 07587a8..0000000
--- a/src/com/android/deskclock/timer/TimerListItem.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * 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.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-
-import com.android.deskclock.CircleTimerView;
-import com.android.deskclock.R;
-
-
-public class TimerListItem extends LinearLayout {
-
-    CountingTimerView mTimerText;
-    CircleTimerView mCircleView;
-    ImageView mResetAddButton;
-
-    long mTimerLength;
-
-    public TimerListItem(Context context) {
-        this(context, null);
-    }
-
-    public TimerListItem(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mTimerText = (CountingTimerView) findViewById(R.id.timer_time_text);
-        mCircleView = (CircleTimerView) findViewById(R.id.timer_time);
-        mResetAddButton = (ImageView) findViewById(R.id.reset_add);
-        mCircleView.setTimerMode(true);
-    }
-
-    public void set(long timerLength, long timeLeft, boolean drawRed) {
-        if (mCircleView == null) {
-            mCircleView = (CircleTimerView) findViewById(R.id.timer_time);
-            mCircleView.setTimerMode(true);
-        }
-        mTimerLength = timerLength;
-        mCircleView.setIntervalTime(mTimerLength);
-        mCircleView.setPassedTime(timerLength - timeLeft, drawRed);
-        invalidate();
-    }
-
-    public void start() {
-        mResetAddButton.setImageResource(R.drawable.ic_plusone);
-        mResetAddButton.setContentDescription(getResources().getString(R.string.timer_plus_one));
-        mCircleView.startIntervalAnimation();
-        mTimerText.setTimeStrTextColor(false, true);
-        mTimerText.showTime(true);
-        mCircleView.setVisibility(VISIBLE);
-    }
-
-    public void pause() {
-        mResetAddButton.setImageResource(R.drawable.ic_reset);
-        mResetAddButton.setContentDescription(getResources().getString(R.string.timer_reset));
-        mCircleView.pauseIntervalAnimation();
-        mTimerText.setTimeStrTextColor(false, true);
-        mTimerText.showTime(true);
-        mCircleView.setVisibility(VISIBLE);
-    }
-
-    public void stop() {
-        mCircleView.stopIntervalAnimation();
-        mTimerText.setTimeStrTextColor(false, true);
-        mTimerText.showTime(true);
-        mCircleView.setVisibility(VISIBLE);
-    }
-
-    public void timesUp() {
-        mCircleView.abortIntervalAnimation();
-        mTimerText.setTimeStrTextColor(true, true);
-    }
-
-    public void done() {
-        mCircleView.stopIntervalAnimation();
-        mCircleView.setVisibility(VISIBLE);
-        mCircleView.invalidate();
-        mTimerText.setTimeStrTextColor(true, false);
-    }
-
-    public void setLength(long timerLength) {
-        mTimerLength = timerLength;
-        mCircleView.setIntervalTime(mTimerLength);
-        mCircleView.invalidate();
-    }
-
-    public void setTextBlink(boolean blink) {
-        mTimerText.showTime(!blink);
-    }
-
-    public void setCircleBlink(boolean blink) {
-        mCircleView.setVisibility(blink ? INVISIBLE : VISIBLE);
-    }
-
-    public void setResetAddButton(boolean isRunning, OnClickListener listener) {
-        if (mResetAddButton == null) {
-            mResetAddButton = (ImageView) findViewById(R.id.reset_add);
-        }
-        mResetAddButton.setImageResource(isRunning ? R.drawable.ic_plusone :
-                R.drawable.ic_reset);
-        mResetAddButton.setContentDescription(getResources().getString(
-                isRunning ? R.string.timer_plus_one : R.string.timer_reset));
-        mResetAddButton.setOnClickListener(listener);
-    }
-
-    public void setTime(long time, boolean forceUpdate) {
-        if (mTimerText == null) {
-            mTimerText = (CountingTimerView) findViewById(R.id.timer_time_text);
-        }
-        mTimerText.setTime(time, false, forceUpdate);
-    }
-}
diff --git a/src/com/android/deskclock/timer/TimerObj.java b/src/com/android/deskclock/timer/TimerObj.java
deleted file mode 100644
index 390f658..0000000
--- a/src/com/android/deskclock/timer/TimerObj.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * 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.SharedPreferences;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.preference.PreferenceManager;
-
-import com.android.deskclock.R;
-import com.android.deskclock.Utils;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class TimerObj implements Parcelable {
-
-    public static final String KEY_NEXT_TIMER_ID = "next_timer_id";
-
-    private static final String TAG = "TimerObj";
-    // Max timer length is 9 hours + 99 minutes + 99 seconds
-    public static final long MAX_TIMER_LENGTH = (9 * 3600 + 99 * 60  + 99) * 1000;
-    public static final long MINUTE_IN_MILLIS = 60 * 1000;
-
-    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;     // length set at start of timer and by +1 min after times up
-    public long mSetupLength;        // length set at start of timer
-    public TimerListItem mView;
-    public int mState;
-    public int mPriorState;
-    public String mLabel;
-    public boolean mDeleteAfterUse;
-
-    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_RESTART = 4;
-    public static final int STATE_DELETED = 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_SETUP_TIME = "timer_setup_timet_";
-    private static final String PREF_STATE = "timer_state_";
-    private static final String PREF_PRIOR_STATE = "timer_prior_state_";
-    private static final String PREF_LABEL = "timer_label_";
-    private static final String PREF_DELETE_AFTER_USE = "delete_after_use_";
-
-    private static final String PREF_TIMERS_LIST = "timers_list";
-
-    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) {
-        final String id = Integer.toString(mTimerId);
-
-        final Set<String> timerIds = getTimerIds(prefs);
-        timerIds.add(id);
-
-        final SharedPreferences.Editor editor = prefs.edit()
-                .putInt(PREF_TIMER_ID + id, mTimerId)
-                .putLong(PREF_START_TIME + id, mStartTime)
-                .putLong(PREF_TIME_LEFT + id, mTimeLeft)
-                .putLong(PREF_ORIGINAL_TIME + id, mOriginalLength)
-                .putLong(PREF_SETUP_TIME + id, mSetupLength)
-                .putInt(PREF_STATE + id, mState)
-                .putInt(PREF_PRIOR_STATE + id, mPriorState)
-                .putStringSet(PREF_TIMERS_LIST, timerIds)
-                .putString(PREF_LABEL + id, mLabel)
-                .putBoolean(PREF_DELETE_AFTER_USE + id, mDeleteAfterUse);
-
-        editor.apply();
-    }
-
-    public void readFromSharedPref(SharedPreferences prefs) {
-        final String id = Integer.toString(mTimerId);
-
-        mStartTime = prefs.getLong(PREF_START_TIME + id, 0);
-        mTimeLeft = prefs.getLong(PREF_TIME_LEFT + id, 0);
-        mOriginalLength = prefs.getLong(PREF_ORIGINAL_TIME + id, 0);
-        mSetupLength = prefs.getLong(PREF_SETUP_TIME + id, 0);
-        mState = prefs.getInt(PREF_STATE + id, 0);
-        mPriorState = prefs.getInt(PREF_PRIOR_STATE + id, 0);
-        mLabel = prefs.getString(PREF_LABEL + id, "");
-        mDeleteAfterUse = prefs.getBoolean(PREF_DELETE_AFTER_USE + id, false);
-    }
-
-    public boolean deleteFromSharedPref(SharedPreferences prefs) {
-        final String id = Integer.toString(mTimerId);
-
-        final Set<String> timerIds = getTimerIds(prefs);
-        timerIds.remove(id);
-
-        final SharedPreferences.Editor editor = prefs.edit()
-                .remove(PREF_TIMER_ID + id)
-                .remove(PREF_START_TIME + id)
-                .remove(PREF_TIME_LEFT + id)
-                .remove(PREF_ORIGINAL_TIME + id)
-                .remove(PREF_SETUP_TIME + id)
-                .remove(PREF_STATE + id)
-                .remove(PREF_PRIOR_STATE + id)
-                .putStringSet(PREF_TIMERS_LIST, timerIds)
-                .remove(PREF_LABEL + id)
-                .remove(PREF_DELETE_AFTER_USE + id);
-
-        if (timerIds.isEmpty()) {
-            editor.remove(KEY_NEXT_TIMER_ID);
-        }
-
-        return editor.commit();
-    }
-
-    @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);
-        dest.writeLong(mSetupLength);
-        dest.writeInt(mState);
-        dest.writeInt(mPriorState);
-        dest.writeString(mLabel);
-    }
-
-    public TimerObj(Parcel p) {
-        mTimerId = p.readInt();
-        mStartTime = p.readLong();
-        mTimeLeft = p.readLong();
-        mOriginalLength = p.readLong();
-        mSetupLength = p.readLong();
-        mState = p.readInt();
-        mPriorState = p.readInt();
-        mLabel = p.readString();
-    }
-
-    private TimerObj() {
-        this(0 /* timerLength */, 0 /* timerId */);
-    }
-
-    public TimerObj(long timerLength, int timerId) {
-      init(timerLength, timerId);
-    }
-
-    public TimerObj(long timerLength, Context context) {
-        init(timerLength, getNextTimerId(context));
-    }
-
-    public TimerObj(long length, String label, Context context) {
-        this(length, context);
-        mLabel = label != null ? label : "";
-    }
-
-    private void init (long length, int timerId) {
-        /* TODO: mTimerId must avoid StopwatchService.NOTIFICATION_ID,
-         * TimerReceiver.IN_USE_NOTIFICATION_ID, and alarm ID's (which seem to be 1, 2, ..)
-         */
-        mTimerId = timerId;
-        mStartTime = Utils.getTimeNow();
-        mTimeLeft = mOriginalLength = mSetupLength = length;
-        mLabel = "";
-    }
-
-    private int getNextTimerId(Context context) {
-        final SharedPreferences prefs = Utils.getDefaultSharedPreferences(context);
-        final int nextTimerId;
-        synchronized (TimerObj.class) {
-            nextTimerId = prefs.getInt(KEY_NEXT_TIMER_ID, 0);
-            prefs.edit().putInt(KEY_NEXT_TIMER_ID, nextTimerId + 1).apply();
-        }
-        return nextTimerId;
-    }
-
-    public static boolean isTimerStateSharedPrefKey(String prefKey) {
-        return prefKey.startsWith(PREF_STATE);
-    }
-
-    public static int getTimerIdFromTimerStateKey(String timerStatePrefKey) {
-        final String timerId = timerStatePrefKey.substring(PREF_STATE.length());
-        return Integer.parseInt(timerId);
-    }
-
-    public long updateTimeLeft(boolean forceUpdate) {
-        if (isTicking() || forceUpdate) {
-            long millis = Utils.getTimeNow();
-            mTimeLeft = mOriginalLength - (millis - mStartTime);
-        }
-        return mTimeLeft;
-    }
-
-    public void setState(int state) {
-        mPriorState = mState;
-        mState = state;
-    }
-
-    public String getLabelOrDefault(Context context) {
-        return (mLabel == null || mLabel.length() == 0) ? context.getString(
-                R.string.timer_notification_label)
-                : mLabel;
-    }
-
-    public boolean isTicking() {
-        return mState == STATE_RUNNING || mState == STATE_TIMESUP;
-    }
-
-    public boolean isInUse() {
-        return mState == STATE_RUNNING || mState == STATE_STOPPED;
-    }
-
-    public void addTime(long time) {
-        mTimeLeft = mOriginalLength - (Utils.getTimeNow() - mStartTime);
-        if (mTimeLeft < MAX_TIMER_LENGTH - time) {
-            mOriginalLength += time;
-        }
-    }
-
-    public boolean getDeleteAfterUse() {
-        return mDeleteAfterUse;
-    }
-
-    public long getTimesupTime() {
-        return mStartTime + mOriginalLength;
-    }
-
-    public static TimerObj getTimerFromSharedPrefs(SharedPreferences prefs, int timerId) {
-        final TimerObj timer = new TimerObj();
-        timer.mTimerId = timerId;
-        timer.readFromSharedPref(prefs);
-        return timer;
-    }
-
-    public static void getTimersFromSharedPrefs(SharedPreferences prefs, List<TimerObj> timers) {
-        for (String timerIdString : getTimerIds(prefs)) {
-            final int timerId = Integer.parseInt(timerIdString);
-            timers.add(getTimerFromSharedPrefs(prefs, timerId));
-        }
-
-        Collections.sort(timers, new Comparator<TimerObj>() {
-            @Override
-            public int compare(TimerObj timer1, TimerObj timer2) {
-               return timer1.mTimerId - timer2.mTimerId;
-            }
-        });
-    }
-
-    public static void getTimersFromSharedPrefs(SharedPreferences prefs, List<TimerObj> timers,
-            int state) {
-        for (String timerIdString : getTimerIds(prefs)) {
-            final int timerId = Integer.parseInt(timerIdString);
-            final TimerObj timer = getTimerFromSharedPrefs(prefs, timerId);
-            if (timer.mState == state) {
-                timers.add(timer);
-            }
-        }
-    }
-
-    public static void putTimersInSharedPrefs(SharedPreferences prefs, List<TimerObj> timers) {
-        for (TimerObj timer : timers) {
-            timer.writeToSharedPref(prefs);
-        }
-    }
-
-    public static void resetTimersInSharedPrefs(SharedPreferences prefs) {
-        final List<TimerObj> timers = new  ArrayList<>();
-        getTimersFromSharedPrefs(prefs, timers);
-        for (TimerObj timer : timers) {
-            timer.setState(TimerObj.STATE_RESTART);
-            timer.mTimeLeft = timer.mOriginalLength = timer.mSetupLength;
-            timer.writeToSharedPref(prefs);
-        }
-    }
-
-    private static Set<String> getTimerIds(SharedPreferences prefs) {
-        // return a defensive copy that is safe to mutate; see doc for getStringSet() for details
-        return new HashSet<>(prefs.getStringSet(PREF_TIMERS_LIST, Collections.<String>emptySet()));
-    }
-}
diff --git a/src/com/android/deskclock/timer/TimerPagerAdapter.java b/src/com/android/deskclock/timer/TimerPagerAdapter.java
new file mode 100644
index 0000000..536024c
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerPagerAdapter.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2015 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.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.support.v13.app.FragmentCompat;
+import android.support.v4.view.PagerAdapter;
+import android.util.ArrayMap;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Timer;
+import com.android.deskclock.data.TimerListener;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This adapter produces a {@link TimerItemFragment} for each timer.
+ */
+class TimerPagerAdapter extends PagerAdapter implements TimerListener {
+
+    private final FragmentManager mFragmentManager;
+
+    /** Maps each timer id to the corresponding {@link TimerItemFragment} that draws it. */
+    private final Map<Integer, TimerItemFragment> mFragments = new ArrayMap<>();
+
+    /** The current fragment transaction in play or {@code null}. */
+    private FragmentTransaction mCurrentTransaction;
+
+    /** The {@link TimerItemFragment} that is current visible on screen. */
+    private Fragment mCurrentPrimaryItem;
+
+    public TimerPagerAdapter(FragmentManager fragmentManager) {
+        mFragmentManager = fragmentManager;
+    }
+
+    @Override
+    public int getCount() {
+        return getTimers().size();
+    }
+
+    @Override
+    public boolean isViewFromObject(View view, Object object) {
+        return ((Fragment) object).getView() == view;
+    }
+
+    @Override
+    public int getItemPosition(Object object) {
+        final TimerItemFragment fragment = (TimerItemFragment) object;
+        final Timer timer = fragment.getTimer();
+
+        final int position = getTimers().indexOf(timer);
+        return position == -1 ? POSITION_NONE : position;
+    }
+
+    @Override
+    public Fragment instantiateItem(ViewGroup container, int position) {
+        if (mCurrentTransaction == null) {
+            mCurrentTransaction = mFragmentManager.beginTransaction();
+        }
+
+        final Timer timer = getTimers().get(position);
+
+        // Search for the existing fragment by tag.
+        final String tag = getClass().getSimpleName() + timer.getId();
+        TimerItemFragment fragment = (TimerItemFragment) mFragmentManager.findFragmentByTag(tag);
+
+        if (fragment != null) {
+            // Reattach the existing fragment.
+            mCurrentTransaction.attach(fragment);
+        } else {
+            // Create and add a new fragment.
+            fragment = TimerItemFragment.newInstance(timer);
+            mCurrentTransaction.add(container.getId(), fragment, tag);
+        }
+
+        if (fragment != mCurrentPrimaryItem) {
+            setItemVisible(fragment, false);
+        }
+
+        mFragments.put(timer.getId(), fragment);
+
+        return fragment;
+    }
+
+    @Override
+    public void destroyItem(ViewGroup container, int position, Object object) {
+        final TimerItemFragment fragment = (TimerItemFragment) object;
+
+        if (mCurrentTransaction == null) {
+            mCurrentTransaction = mFragmentManager.beginTransaction();
+        }
+
+        mFragments.remove(fragment.getTimerId());
+        mCurrentTransaction.remove(fragment);
+    }
+
+    @Override
+    public void setPrimaryItem(ViewGroup container, int position, Object object) {
+        final Fragment fragment = (Fragment) object;
+        if (fragment != mCurrentPrimaryItem) {
+            if (mCurrentPrimaryItem != null) {
+                setItemVisible(mCurrentPrimaryItem, false);
+            }
+
+            mCurrentPrimaryItem = fragment;
+
+            if (mCurrentPrimaryItem != null) {
+                setItemVisible(mCurrentPrimaryItem, true);
+            }
+        }
+    }
+
+    @Override
+    public void finishUpdate(ViewGroup container) {
+        if (mCurrentTransaction != null) {
+            mCurrentTransaction.commitAllowingStateLoss();
+            mCurrentTransaction = null;
+            mFragmentManager.executePendingTransactions();
+        }
+    }
+
+    @Override
+    public void timerAdded(Timer timer) {
+        notifyDataSetChanged();
+    }
+
+    @Override
+    public void timerRemoved(Timer timer) {
+        notifyDataSetChanged();
+    }
+
+    @Override
+    public void timerUpdated(Timer before, Timer after) {
+        final TimerItemFragment timerItemFragment = mFragments.get(after.getId());
+        if (timerItemFragment != null) {
+            timerItemFragment.updateTime();
+        }
+    }
+
+    /**
+     * @return {@code true} if at least one timer is in a state requiring continuous updates
+     */
+    boolean updateTime() {
+        boolean continuousUpdates = false;
+        for (TimerItemFragment fragment : mFragments.values()) {
+            continuousUpdates |= fragment.updateTime();
+        }
+        return continuousUpdates;
+    }
+
+    Timer getTimer(int index) {
+        return getTimers().get(index);
+    }
+
+    private List<Timer> getTimers() {
+        return DataModel.getDataModel().getTimers();
+    }
+
+    private static void setItemVisible(Fragment item, boolean visible) {
+        FragmentCompat.setMenuVisibility(item, visible);
+        FragmentCompat.setUserVisibleHint(item, visible);
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/timer/TimerReceiver.java b/src/com/android/deskclock/timer/TimerReceiver.java
index a013d75..7a41789 100644
--- a/src/com/android/deskclock/timer/TimerReceiver.java
+++ b/src/com/android/deskclock/timer/TimerReceiver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2016 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.
@@ -16,479 +16,28 @@
 
 package com.android.deskclock.timer;
 
-import android.app.AlarmManager;
-import android.app.Notification;
-import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationManagerCompat;
-import android.util.Log;
 
-import com.android.deskclock.DeskClock;
-import com.android.deskclock.R;
-import com.android.deskclock.TimerRingService;
-import com.android.deskclock.Utils;
-import com.android.deskclock.events.Events;
+import com.android.deskclock.LogUtils;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Timer;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-
+/**
+ * This broadcast receiver exists to handle timer expiry scheduled in 4.2.1 and prior. It must exist
+ * for at least one release cycle before removal to honor these old scheduled timers after upgrading
+ * beyond 4.2.1. After 4.2.1, all timer expiration is directed to TimerService.
+ */
 public class TimerReceiver extends BroadcastReceiver {
-    private static final String TAG = "TimerReceiver";
-
-    // Make this a large number to avoid the alarm ID's which seem to be 1, 2, ...
-    // Must also be different than StopwatchService.NOTIFICATION_ID
-    private static final int IN_USE_NOTIFICATION_ID = Integer.MAX_VALUE - 2;
-
-    ArrayList<TimerObj> mTimers;
-
     @Override
-    public void onReceive(final Context context, final Intent intent) {
-        if (Timers.LOGGING) {
-            Log.v(TAG, "Received intent " + intent.toString());
-        }
-        String actionType = intent.getAction();
-        // This action does not need the timers data
-        if (Timers.NOTIF_IN_USE_CANCEL.equals(actionType)) {
-            cancelInUseNotification(context);
-            return;
-        }
+    public void onReceive(Context context, Intent intent) {
+        LogUtils.e("TimerReceiver", "Received legacy timer broadcast: %s", intent.getAction());
 
-        // Get the updated timers data.
-        if (mTimers == null) {
-            mTimers = new ArrayList<>();
-        }
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(context);
-        TimerObj.getTimersFromSharedPrefs(prefs, mTimers);
-
-        // These actions do not provide a timer ID, but do use the timers data
-        if (Timers.NOTIF_IN_USE_SHOW.equals(actionType)) {
-            showInUseNotification(context);
-            return;
-        } else if (Timers.NOTIF_TIMES_UP_SHOW.equals(actionType)) {
-            showTimesUpNotification(context);
-            return;
-        } else if (Timers.NOTIF_TIMES_UP_CANCEL.equals(actionType)) {
-            cancelTimesUpNotification(context);
-            return;
-        }
-
-        // Remaining actions provide a timer Id
-        if (!intent.hasExtra(Timers.TIMER_INTENT_EXTRA)) {
-            // No data to work with, do nothing
-            Log.e(TAG, "got intent without Timer data");
-            return;
-        }
-
-        // Get the timer out of the Intent
-        int timerId = intent.getIntExtra(Timers.TIMER_INTENT_EXTRA, -1);
-        if (timerId == -1) {
-            Log.d(TAG, "OnReceive:intent without Timer data for " + actionType);
-        }
-
-        TimerObj t = Timers.findTimer(mTimers, timerId);
-
-        if (Timers.TIMES_UP.equals(actionType)) {
-            // Find the timer (if it doesn't exists, it was probably deleted).
-            if (t == null) {
-                Log.d(TAG, " timer not found in list - do nothing");
-                return;
-            }
-
-            t.setState(TimerObj.STATE_TIMESUP);
-            t.writeToSharedPref(prefs);
-            Events.sendEvent(R.string.category_timer, R.string.action_fire, 0);
-
-            // Play ringtone by using TimerRingService service with a default alarm.
-            Log.d(TAG, "playing ringtone");
-            Intent si = new Intent();
-            si.setClass(context, TimerRingService.class);
-            context.startService(si);
-
-            // Update the in-use notification
-            if (getNextRunningTimer(mTimers, false, Utils.getTimeNow()) == null) {
-                // Found no running timers.
-                cancelInUseNotification(context);
-            } else {
-                showInUseNotification(context);
-            }
-
-            // Start the TimerAlertFullScreen activity.
-            Intent timersAlert = new Intent(context, TimerAlertFullScreen.class);
-            timersAlert.setFlags(
-                    Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
-            context.startActivity(timersAlert);
-        } else if (Timers.RESET_TIMER.equals(actionType)
-                || Timers.DELETE_TIMER.equals(actionType)
-                || Timers.TIMER_DONE.equals(actionType)) {
-            // Stop Ringtone if all timers are not in times-up status
-            stopRingtoneIfNoTimesup(context);
-
-            if (t != null) {
-                cancelTimesUpNotification(context, t);
-            }
-        } else if (Timers.NOTIF_TIMES_UP_STOP.equals(actionType)) {
-            // Find the timer (if it doesn't exists, it was probably deleted).
-            if (t == null) {
-                Log.d(TAG, "timer to stop not found in list - do nothing");
-                return;
-            } else if (t.mState != TimerObj.STATE_TIMESUP) {
-                Log.d(TAG, "action to stop but timer not in times-up state - do nothing");
-                return;
-            }
-
-            // Update timer state
-            t.setState(t.getDeleteAfterUse() ? TimerObj.STATE_DELETED : TimerObj.STATE_RESTART);
-            t.mTimeLeft = t.mOriginalLength = t.mSetupLength;
-            t.writeToSharedPref(prefs);
-
-            // Flag to tell DeskClock to re-sync with the database
-            prefs.edit().putBoolean(Timers.REFRESH_UI_WITH_LATEST_DATA, true).apply();
-
-            cancelTimesUpNotification(context, t);
-
-            // Done with timer - delete from data base
-            if (t.getDeleteAfterUse()) {
-                t.deleteFromSharedPref(prefs);
-            }
-
-            // Stop Ringtone if no timers are in times-up status
-            stopRingtoneIfNoTimesup(context);
-        } else if (Timers.NOTIF_TIMES_UP_PLUS_ONE.equals(actionType)) {
-            // Find the timer (if it doesn't exists, it was probably deleted).
-            if (t == null) {
-                Log.d(TAG, "timer to +1m not found in list - do nothing");
-                return;
-            } else if (t.mState != TimerObj.STATE_TIMESUP) {
-                Log.d(TAG, "action to +1m but timer not in times up state - do nothing");
-                return;
-            }
-
-            // Restarting the timer with 1 minute left.
-            t.setState(TimerObj.STATE_RUNNING);
-            t.mStartTime = Utils.getTimeNow();
-            t.mTimeLeft = t. mOriginalLength = TimerObj.MINUTE_IN_MILLIS;
-            t.writeToSharedPref(prefs);
-
-            // Flag to tell DeskClock to re-sync with the database
-            prefs.edit().putBoolean(Timers.REFRESH_UI_WITH_LATEST_DATA, true).apply();
-
-            cancelTimesUpNotification(context, t);
-
-            // If the app is not open, refresh the in-use notification
-            if (!prefs.getBoolean(Timers.NOTIF_APP_OPEN, false)) {
-                showInUseNotification(context);
-            }
-
-            // Stop Ringtone if no timers are in times-up status
-            stopRingtoneIfNoTimesup(context);
-        } else if (Timers.TIMER_UPDATE.equals(actionType)) {
-            // Find the timer (if it doesn't exists, it was probably deleted).
-            if (t == null) {
-                Log.d(TAG, " timer to update not found in list - do nothing");
-                return;
-            }
-
-            // Refresh buzzing notification
-            if (t.mState == TimerObj.STATE_TIMESUP) {
-                // Must cancel the previous notification to get all updates displayed correctly
-                cancelTimesUpNotification(context, t);
-                showTimesUpNotification(context, t);
-            }
-        }
-        if (intent.getBooleanExtra(Timers.UPDATE_NEXT_TIMESUP, true)) {
-            // Update the next "Times up" alarm unless explicitly told not to.
-            updateNextTimesup(context);
+        if ("times_up".equals(intent.getAction())) {
+            final int timerId = intent.getIntExtra("timer.intent.extra", -1);
+            final Timer timer = DataModel.getDataModel().getTimer(timerId);
+            context.startService(TimerService.createTimerExpiredIntent(context, timer));
         }
     }
-
-    private void stopRingtoneIfNoTimesup(final Context context) {
-        if (Timers.findExpiredTimer(mTimers) == null) {
-            // Stop ringtone
-            Log.d(TAG, "stopping ringtone");
-            Intent si = new Intent();
-            si.setClass(context, TimerRingService.class);
-            context.stopService(si);
-        }
-    }
-
-    // Scan all timers and find the one that will expire next.
-    // Tell AlarmManager to send a "Time's up" message to this receiver when this timer expires.
-    // If no timer exists, clear "time's up" message.
-    private void updateNextTimesup(Context context) {
-        TimerObj t = getNextRunningTimer(mTimers, false, Utils.getTimeNow());
-        long nextTimesup = (t == null) ? -1 : t.getTimesupTime();
-        int timerId = (t == null) ? -1 : t.mTimerId;
-
-        Intent intent = new Intent();
-        intent.setAction(Timers.TIMES_UP);
-        intent.setClass(context, TimerReceiver.class);
-        // Time-critical, should be foreground
-        intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-        if (!mTimers.isEmpty()) {
-            intent.putExtra(Timers.TIMER_INTENT_EXTRA, timerId);
-        }
-        AlarmManager mngr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
-        PendingIntent p = PendingIntent.getBroadcast(context,
-                0, intent, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
-        if (t != null) {
-            if (Utils.isKitKatOrLater()) {
-                mngr.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextTimesup, p);
-            } else {
-                mngr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextTimesup, p);
-            }
-            if (Timers.LOGGING) {
-                Log.d(TAG, "Setting times up to " + nextTimesup);
-            }
-        } else {
-            // if no timer is found Pending Intents should be canceled
-            // to keep the internal state consistent with the UI
-            mngr.cancel(p);
-            p.cancel();
-            if (Timers.LOGGING) {
-                Log.v(TAG, "no next times up");
-            }
-        }
-    }
-
-    private void showInUseNotification(final Context context) {
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(context);
-        boolean appOpen = prefs.getBoolean(Timers.NOTIF_APP_OPEN, false);
-        ArrayList<TimerObj> timersInUse = Timers.timersInUse(mTimers);
-        int numTimersInUse = timersInUse.size();
-
-        if (appOpen || numTimersInUse == 0) {
-            return;
-        }
-
-        String title, contentText;
-        Long nextBroadcastTime = null;
-        long now = Utils.getTimeNow();
-        if (timersInUse.size() == 1) {
-            TimerObj timer = timersInUse.get(0);
-            boolean timerIsTicking = timer.isTicking();
-            String label = timer.getLabelOrDefault(context);
-            title = timerIsTicking ? label : context.getString(R.string.timer_stopped);
-            long timeLeft = timerIsTicking ? timer.getTimesupTime() - now : timer.mTimeLeft;
-            contentText = buildTimeRemaining(context, timeLeft);
-            if (timerIsTicking && timeLeft > TimerObj.MINUTE_IN_MILLIS) {
-                nextBroadcastTime = getBroadcastTime(now, timeLeft);
-            }
-        } else {
-            TimerObj timer = getNextRunningTimer(timersInUse, false, now);
-            if (timer == null) {
-                // No running timers.
-                title = String.format(
-                        context.getString(R.string.timers_stopped), numTimersInUse);
-                contentText = context.getString(R.string.all_timers_stopped_notif);
-            } else {
-                // We have at least one timer running and other timers stopped.
-                title = String.format(
-                        context.getString(R.string.timers_in_use), numTimersInUse);
-                long completionTime = timer.getTimesupTime();
-                long timeLeft = completionTime - now;
-                contentText = String.format(context.getString(R.string.next_timer_notif),
-                        buildTimeRemaining(context, timeLeft));
-                if (timeLeft <= TimerObj.MINUTE_IN_MILLIS) {
-                    TimerObj timerWithUpdate = getNextRunningTimer(timersInUse, true, now);
-                    if (timerWithUpdate != null) {
-                        completionTime = timerWithUpdate.getTimesupTime();
-                        timeLeft = completionTime - now;
-                        nextBroadcastTime = getBroadcastTime(now, timeLeft);
-                    }
-                } else {
-                    nextBroadcastTime = getBroadcastTime(now, timeLeft);
-                }
-            }
-        }
-        showCollapsedNotificationWithNext(context, title, contentText, nextBroadcastTime);
-    }
-
-    private long getBroadcastTime(long now, long timeUntilBroadcast) {
-        long seconds = timeUntilBroadcast / 1000;
-        seconds = seconds - ( (seconds / 60) * 60 );
-        return now + (seconds * 1000);
-    }
-
-    private void showCollapsedNotificationWithNext(
-            final Context context, String title, String text, Long nextBroadcastTime) {
-        Intent activityIntent = new Intent(context, DeskClock.class);
-        activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        activityIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.TIMER_TAB_INDEX);
-        PendingIntent pendingActivityIntent = PendingIntent.getActivity(context, 0, activityIntent,
-                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
-        showCollapsedNotification(context, title, text, NotificationCompat.PRIORITY_HIGH,
-                pendingActivityIntent, IN_USE_NOTIFICATION_ID, false);
-
-        if (nextBroadcastTime == null) {
-            return;
-        }
-        Intent nextBroadcast = new Intent();
-        nextBroadcast.setAction(Timers.NOTIF_IN_USE_SHOW);
-        PendingIntent pendingNextBroadcast =
-                PendingIntent.getBroadcast(context, 0, nextBroadcast, 0);
-        AlarmManager alarmManager =
-                (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
-        if (Utils.isKitKatOrLater()) {
-            alarmManager.setExact(AlarmManager.ELAPSED_REALTIME, nextBroadcastTime, pendingNextBroadcast);
-        } else {
-            alarmManager.set(AlarmManager.ELAPSED_REALTIME, nextBroadcastTime, pendingNextBroadcast);
-        }
-    }
-
-    private static void showCollapsedNotification(final Context context, String title, String text,
-            int priority, PendingIntent pendingIntent, int notificationId, boolean showTicker) {
-        NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
-                .setAutoCancel(false)
-                .setContentTitle(title)
-                .setContentText(text)
-                .setDeleteIntent(pendingIntent)
-                .setOngoing(true)
-                .setPriority(priority)
-                .setShowWhen(false)
-                .setSmallIcon(R.drawable.stat_notify_timer)
-                .setCategory(NotificationCompat.CATEGORY_ALARM)
-                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
-                .setLocalOnly(true);
-        if (showTicker) {
-            builder.setTicker(text);
-        }
-
-        final Notification notification = builder.build();
-        notification.contentIntent = pendingIntent;
-        NotificationManagerCompat.from(context).notify(notificationId, notification);
-    }
-
-    private String buildTimeRemaining(Context context, long timeLeft) {
-        if (timeLeft < 0) {
-            // We should never be here...
-            Log.v(TAG, "Will not show notification for timer already expired.");
-            return null;
-        }
-
-        long seconds, minutes, hours;
-        seconds = timeLeft / 1000;
-        minutes = seconds / 60;
-        hours = minutes / 60;
-        minutes = minutes - hours * 60;
-        if (hours > 99) {
-            hours = 0;
-        }
-
-        String minSeq = Utils.getNumberFormattedQuantityString(context, R.plurals.minutes,
-                (int) minutes);
-
-        String hourSeq = Utils.getNumberFormattedQuantityString(context, R.plurals.hours,
-                (int) hours);
-
-        boolean dispHour = hours > 0;
-        boolean dispMinute = minutes > 0;
-        int index = (dispHour ? 1 : 0) | (dispMinute ? 2 : 0);
-        String[] formats = context.getResources().getStringArray(R.array.timer_notifications);
-        return String.format(formats[index], hourSeq, minSeq);
-    }
-
-    private TimerObj getNextRunningTimer(
-            ArrayList<TimerObj> timers, boolean requireNextUpdate, long now) {
-        long nextTimesup = Long.MAX_VALUE;
-        boolean nextTimerFound = false;
-        Iterator<TimerObj> i = timers.iterator();
-        TimerObj t = null;
-        while(i.hasNext()) {
-            TimerObj tmp = i.next();
-            if (tmp.mState == TimerObj.STATE_RUNNING) {
-                long timesupTime = tmp.getTimesupTime();
-                long timeLeft = timesupTime - now;
-                if (timesupTime < nextTimesup && (!requireNextUpdate || timeLeft > 60) ) {
-                    nextTimesup = timesupTime;
-                    nextTimerFound = true;
-                    t = tmp;
-                }
-            }
-        }
-        if (nextTimerFound) {
-            return t;
-        } else {
-            return null;
-        }
-    }
-
-    public static void cancelInUseNotification(final Context context) {
-        NotificationManagerCompat.from(context).cancel(IN_USE_NOTIFICATION_ID);
-    }
-
-    private void showTimesUpNotification(final Context context) {
-        for (TimerObj timerObj : Timers.timersInTimesUp(mTimers) ) {
-            showTimesUpNotification(context, timerObj);
-        }
-    }
-
-    private void showTimesUpNotification(final Context context, TimerObj timerObj) {
-        // Content Intent. When clicked will show the timer full screen
-        PendingIntent contentIntent = PendingIntent.getActivity(context, timerObj.mTimerId,
-                new Intent(context, TimerAlertFullScreen.class).putExtra(
-                        Timers.TIMER_INTENT_EXTRA, timerObj.mTimerId),
-                PendingIntent.FLAG_UPDATE_CURRENT);
-
-        // Add one minute action button
-        PendingIntent addOneMinuteAction = PendingIntent.getBroadcast(context, timerObj.mTimerId,
-                new Intent(Timers.NOTIF_TIMES_UP_PLUS_ONE)
-                        .putExtra(Timers.TIMER_INTENT_EXTRA, timerObj.mTimerId),
-                PendingIntent.FLAG_UPDATE_CURRENT);
-
-        // Add stop/done action button
-        PendingIntent stopIntent = PendingIntent.getBroadcast(context, timerObj.mTimerId,
-                new Intent(Timers.NOTIF_TIMES_UP_STOP)
-                        .putExtra(Timers.TIMER_INTENT_EXTRA, timerObj.mTimerId),
-                PendingIntent.FLAG_UPDATE_CURRENT);
-
-        // Notification creation
-        final NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
-                .setContentIntent(contentIntent)
-                .addAction(R.drawable.ic_add_24dp,
-                        context.getResources().getString(R.string.timer_plus_1_min),
-                        addOneMinuteAction)
-                .addAction(
-                        timerObj.getDeleteAfterUse()
-                                ? android.R.drawable.ic_menu_close_clear_cancel
-                                : R.drawable.ic_stop_24dp,
-                        timerObj.getDeleteAfterUse()
-                                ? context.getResources().getString(R.string.timer_done)
-                                : context.getResources().getString(R.string.timer_stop),
-                        stopIntent)
-                .setContentTitle(timerObj.getLabelOrDefault(context))
-                .setContentText(context.getResources().getString(R.string.timer_times_up))
-                .setSmallIcon(R.drawable.stat_notify_timer)
-                .setOngoing(true)
-                .setAutoCancel(false)
-                .setPriority(NotificationCompat.PRIORITY_MAX)
-                .setDefaults(NotificationCompat.DEFAULT_LIGHTS)
-                .setWhen(0);
-
-        // Send the notification using the timer's id to identify the
-        // correct notification
-        NotificationManagerCompat.from(context).notify(timerObj.mTimerId, builder.build());
-        if (Timers.LOGGING) {
-            Log.v(TAG, "Setting times-up notification for "
-                    + timerObj.getLabelOrDefault(context) + " #" + timerObj.mTimerId);
-        }
-    }
-
-    private void cancelTimesUpNotification(final Context context) {
-        for (TimerObj timerObj : Timers.timersInTimesUp(mTimers) ) {
-            cancelTimesUpNotification(context, timerObj);
-        }
-    }
-
-    private void cancelTimesUpNotification(final Context context, TimerObj timerObj) {
-        NotificationManagerCompat.from(context).cancel(timerObj.mTimerId);
-        if (Timers.LOGGING) {
-            Log.v(TAG, "Canceling times-up notification for "
-                    + timerObj.getLabelOrDefault(context) + " #" + timerObj.mTimerId);
-        }
-    }
-}
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/timer/TimerService.java b/src/com/android/deskclock/timer/TimerService.java
new file mode 100644
index 0000000..de82b50
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerService.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2015 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.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.IBinder;
+
+import com.android.deskclock.HandleDeskClockApiCalls;
+import com.android.deskclock.R;
+import com.android.deskclock.data.DataModel;
+import com.android.deskclock.data.Timer;
+import com.android.deskclock.events.Events;
+
+/**
+ * <p>This service exists solely to allow {@link android.app.AlarmManager} and timer notifications
+ * to alter the state of timers without disturbing the notification shade. If an activity were used
+ * instead (even one that is not displayed) the notification manager implicitly closes the
+ * notification shade which clashes with the use case of starting/pausing/resetting timers without
+ * disturbing the notification shade.</p>
+ *
+ * <p>The service has a second benefit. It is used to start heads-up notifications for expired
+ * timers in the foreground. This keeps the entire application in the foreground and thus prevents
+ * the operating system from killing it while expired timers are firing.</p>
+ */
+public final class TimerService extends Service {
+
+    private static final String ACTION_PREFIX = "com.android.deskclock.action.";
+
+    private static final String ACTION_TIMER_EXPIRED = ACTION_PREFIX + "TIMER_EXPIRED";
+    private static final String ACTION_UPDATE_NOTIFICATION = ACTION_PREFIX + "UPDATE_NOTIFICATION";
+    private static final String ACTION_RESET_EXPIRED_TIMERS = ACTION_PREFIX +
+            "RESET_EXPIRED_TIMERS";
+    private static final String ACTION_RESET_UNEXPIRED_TIMERS = ACTION_PREFIX +
+            "RESET_UNEXPIRED_TIMERS";
+
+    public static Intent createTimerExpiredIntent(Context context, Timer timer) {
+        final int timerId = timer == null ? -1 : timer.getId();
+        return new Intent(context, TimerService.class)
+                .setAction(ACTION_TIMER_EXPIRED)
+                .putExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID, timerId);
+    }
+
+    public static Intent createResetExpiredTimersIntent(Context context) {
+        return new Intent(context, TimerService.class)
+                .setAction(ACTION_RESET_EXPIRED_TIMERS);
+    }
+
+    public static Intent createResetUnexpiredTimersIntent(Context context) {
+        return new Intent(context, TimerService.class)
+                .setAction(ACTION_RESET_UNEXPIRED_TIMERS);
+    }
+
+    public static Intent createAddMinuteTimerIntent(Context context, int timerId) {
+        return new Intent(context, TimerService.class)
+                .setAction(HandleDeskClockApiCalls.ACTION_ADD_MINUTE_TIMER)
+                .putExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID, timerId);
+    }
+
+    public static Intent createUpdateNotificationIntent(Context context) {
+        return new Intent(context, TimerService.class)
+                .setAction(ACTION_UPDATE_NOTIFICATION);
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        try {
+            switch (intent.getAction()) {
+                case ACTION_UPDATE_NOTIFICATION: {
+                    DataModel.getDataModel().updateTimerNotification();
+                    return START_NOT_STICKY;
+                }
+                case ACTION_RESET_EXPIRED_TIMERS: {
+                    DataModel.getDataModel().resetExpiredTimers(R.string.label_notification);
+                    return START_NOT_STICKY;
+                }
+                case ACTION_RESET_UNEXPIRED_TIMERS: {
+                    DataModel.getDataModel().resetUnexpiredTimers(R.string.label_notification);
+                    return START_NOT_STICKY;
+                }
+            }
+
+            // Look up the timer in question.
+            final int timerId = intent.getIntExtra(HandleDeskClockApiCalls.EXTRA_TIMER_ID, -1);
+            final Timer timer = DataModel.getDataModel().getTimer(timerId);
+
+            // If the timer cannot be located, ignore the action.
+            if (timer == null) {
+                return START_NOT_STICKY;
+            }
+
+            // Perform the action on the timer.
+            switch (intent.getAction()) {
+                case HandleDeskClockApiCalls.ACTION_START_TIMER:
+                    DataModel.getDataModel().startTimer(timer);
+                    Events.sendTimerEvent(R.string.action_start, R.string.label_notification);
+                    break;
+                case HandleDeskClockApiCalls.ACTION_PAUSE_TIMER:
+                    DataModel.getDataModel().pauseTimer(timer);
+                    Events.sendTimerEvent(R.string.action_pause, R.string.label_notification);
+                    break;
+                case HandleDeskClockApiCalls.ACTION_ADD_MINUTE_TIMER:
+                    DataModel.getDataModel().addTimerMinute(timer);
+                    Events.sendTimerEvent(R.string.action_add_minute, R.string.label_notification);
+                    break;
+                case HandleDeskClockApiCalls.ACTION_RESET_TIMER:
+                    DataModel.getDataModel().resetOrDeleteTimer(timer, R.string.label_notification);
+                    break;
+                case ACTION_TIMER_EXPIRED:
+                    DataModel.getDataModel().expireTimer(this, timer);
+                    Events.sendTimerEvent(R.string.action_fire, R.string.label_intent);
+                    break;
+            }
+        } finally {
+            // This service is foreground when expired timers exist and stopped when none exist.
+            if (DataModel.getDataModel().getExpiredTimers().isEmpty()) {
+                stopSelf();
+            }
+        }
+
+        return START_NOT_STICKY;
+    }
+}
\ 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 0000000..d854379
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerSetupView.java
@@ -0,0 +1,258 @@
+/*
+ * 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.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Color;
+import android.text.format.DateUtils;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import com.android.deskclock.AnimatorUtils;
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+
+import java.io.Serializable;
+import java.util.Arrays;
+
+public class TimerSetupView extends LinearLayout implements Button.OnClickListener,
+        Button.OnLongClickListener {
+
+    private final Button[] mNumbers = new Button[10];
+    private final int[] mInput = new int[6];
+    private int mInputPointer = -1;
+    private ImageView mCreate;
+    private ImageButton mDelete;
+    private TimerView mEnteredTime;
+    private View mDivider;
+
+    private final int mColorAccent;
+    private final int mColorHairline;
+
+    private final AnimatorListenerAdapter mHideCreateListener = new AnimatorListenerAdapter() {
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            mCreate.setScaleX(1);
+            mCreate.setScaleY(1);
+            mCreate.setVisibility(INVISIBLE);
+        }
+    };
+
+    private final AnimatorListenerAdapter mShowCreateListener = new AnimatorListenerAdapter() {
+        @Override
+        public void onAnimationStart(Animator animation) {
+            mCreate.setVisibility(VISIBLE);
+        }
+    };
+
+    public TimerSetupView(Context context) {
+        this(context, null /* attrs */);
+    }
+
+    public TimerSetupView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        mColorAccent = Utils.obtainStyledColor(context, R.attr.colorAccent, Color.RED);
+        mColorHairline = context.getResources().getColor(R.color.hairline);
+
+        LayoutInflater.from(context).inflate(R.layout.time_setup_view, this);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        final View v1 = findViewById(R.id.first);
+        final View v2 = findViewById(R.id.second);
+        final View v3 = findViewById(R.id.third);
+        final View v4 = findViewById(R.id.fourth);
+
+        mDivider = findViewById(R.id.divider);
+        mCreate = (ImageView) findViewById(R.id.timer_create);
+        mDelete = (ImageButton) findViewById(R.id.delete);
+        mDelete.setOnClickListener(this);
+        mDelete.setOnLongClickListener(this);
+        mEnteredTime = (TimerView) findViewById(R.id.timer_time_text);
+
+        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);
+
+        mNumbers[0] = (Button) v4.findViewById(R.id.key_middle);
+        v4.findViewById(R.id.key_left).setVisibility(INVISIBLE);
+        v4.findViewById(R.id.key_right).setVisibility(INVISIBLE);
+
+        for (int i = 0; i < mNumbers.length; i++) {
+            mNumbers[i].setOnClickListener(this);
+            mNumbers[i].setText(String.valueOf(i));
+            mNumbers[i].setTextColor(Color.WHITE);
+            mNumbers[i].setTag(R.id.numbers_key, i);
+        }
+
+        reset();
+    }
+
+    @Override
+    public void onClick(View v) {
+        final Integer n = (Integer) v.getTag(R.id.numbers_key);
+        // A number was pressed
+        if (n != null) {
+            // pressing "0" as the first digit does nothing
+            if (mInputPointer == -1 && n == 0) {
+                return;
+            }
+
+            // No space for more digits, so ignore input.
+            if (mInputPointer == mInput.length - 1) {
+                return;
+            }
+
+            // Append the new digit.
+            System.arraycopy(mInput, 0, mInput, 1, mInputPointer + 1);
+            mInput[0] = n;
+            mInputPointer++;
+            updateTime();
+
+            // Update talkback to read the number being deleted
+            final Resources resources = getResources();
+            final String cd = resources.getString(R.string.timer_descriptive_delete, n.toString());
+            mDelete.setContentDescription(cd);
+        }
+
+        // other keys
+        if (v == mDelete) {
+            if (mInputPointer < 0) {
+                // Nothing exists to delete so return.
+                return;
+            }
+
+            System.arraycopy(mInput, 1, mInput, 0, mInputPointer);
+            mInput[mInputPointer] = 0;
+            mInputPointer--;
+            updateTime();
+
+            // Update talkback to read the number being deleted or its original description.
+            final String number = mInputPointer < 0 ? "" : Integer.toString(mInput[mInputPointer]);
+            final String cd = getResources().getString(R.string.timer_descriptive_delete, number);
+            mDelete.setContentDescription(cd);
+        }
+
+        updateStartButton();
+        updateDeleteButtonAndDivider();
+    }
+
+    @Override
+    public boolean onLongClick(View v) {
+        if (v == mDelete) {
+            reset();
+            updateStartButton();
+            return true;
+        }
+        return false;
+    }
+
+    public void reset() {
+        for (int i = 0; i < mInput.length; i ++) {
+            mInput[i] = 0;
+        }
+        mInputPointer = -1;
+        updateTime();
+        updateDeleteButtonAndDivider();
+        mCreate.setVisibility(INVISIBLE);
+    }
+
+    public long getTimeInMillis() {
+        final int hoursInSeconds = mInput[5] * 36000 + mInput[4] * 3600;
+        final int minutesInSeconds = mInput[3] * 600 + mInput[2] * 60;
+        final int seconds = mInput[1] * 10 + mInput[0];
+        final int totalSeconds = hoursInSeconds + minutesInSeconds + seconds;
+
+        return totalSeconds * DateUtils.SECOND_IN_MILLIS;
+    }
+
+    /**
+     * @return an opaque representation of the state of timer setup
+     */
+    public Serializable getState() {
+        return Arrays.copyOf(mInput, mInput.length);
+    }
+
+    /**
+     * @param state an opaque state of this view previously produced by {@link #getState()}
+     */
+    public void setState(Serializable state) {
+        final int[] input = (int[]) state;
+        if (input != null && mInput.length == input.length) {
+            for (int i = 0; i < mInput.length; i++) {
+                mInput[i] = input[i];
+                if (mInput[i] != 0) {
+                    mInputPointer = i;
+                }
+            }
+            updateTime();
+            updateDeleteButtonAndDivider();
+            mCreate.setVisibility(getInputExists() ? VISIBLE : INVISIBLE);
+        }
+    }
+
+    private void updateTime() {
+        final int seconds = mInput[1] * 10 + mInput[0];
+        mEnteredTime.setTime(mInput[5], mInput[4], mInput[3], mInput[2], seconds);
+    }
+
+    private void updateStartButton() {
+        final boolean show = getInputExists();
+        final int finalVisibility = show ? VISIBLE : INVISIBLE;
+        if (mCreate.getVisibility() == finalVisibility) {
+            // Fab is not initialized yet or already shown/hidden
+            return;
+        }
+
+        final int from = show ? 0 : 1;
+        final int to = show ? 1 : 0;
+        final Animator scaleAnimator = AnimatorUtils.getScaleAnimator(mCreate, from, to);
+        scaleAnimator.setDuration(AnimatorUtils.ANIM_DURATION_SHORT);
+        scaleAnimator.addListener(show ? mShowCreateListener : mHideCreateListener);
+        scaleAnimator.start();
+    }
+
+    private void updateDeleteButtonAndDivider() {
+        final boolean enabled = getInputExists();
+        mDelete.setEnabled(enabled);
+        mDivider.setBackgroundColor(enabled ? mColorAccent : mColorHairline);
+    }
+
+    private boolean getInputExists() {
+        return mInputPointer != -1;
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/deskclock/timer/TimerView.java b/src/com/android/deskclock/timer/TimerView.java
index 2dc4015..3fde57b 100644
--- a/src/com/android/deskclock/timer/TimerView.java
+++ b/src/com/android/deskclock/timer/TimerView.java
@@ -29,8 +29,8 @@
 
 public class TimerView extends LinearLayout {
 
-    private TextView mHoursOnes, mMinutesOnes;
-    private TextView mMinutesTens;
+    private TextView mHoursTens, mHoursOnes;
+    private TextView mMinutesTens, mMinutesOnes;
     private TextView mSeconds;
     private final Typeface mAndroidClockMonoThin;
     private Typeface mOriginalHoursTypeface;
@@ -48,7 +48,7 @@
         mAndroidClockMonoThin =
                 Typeface.createFromAsset(context.getAssets(), "fonts/AndroidClockMono-Thin.ttf");
 
-        Resources resources = context.getResources();
+        final Resources resources = context.getResources();
         mWhiteColor = resources.getColor(R.color.clock_white);
         mGrayColor = resources.getColor(R.color.clock_gray);
     }
@@ -57,22 +57,19 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
 
+        mHoursTens = (TextView) findViewById(R.id.hours_tens);
+
         mHoursOnes = (TextView) findViewById(R.id.hours_ones);
-        if (mHoursOnes != null) {
-            mOriginalHoursTypeface = mHoursOnes.getTypeface();
-        }
+        mOriginalHoursTypeface = mHoursOnes.getTypeface();
+
         mMinutesTens = (TextView) findViewById(R.id.minutes_tens);
-        if (mHoursOnes != null && mMinutesTens != null) {
-            addStartPadding(mMinutesTens);
-        }
+        addStartPadding(mMinutesTens);
+
         mMinutesOnes = (TextView) findViewById(R.id.minutes_ones);
-        if (mMinutesOnes != null) {
-            mOriginalMinutesTypeface = mMinutesOnes.getTypeface();
-        }
+        mOriginalMinutesTypeface = mMinutesOnes.getTypeface();
+
         mSeconds = (TextView) findViewById(R.id.seconds);
-        if (mSeconds != null) {
-            addStartPadding(mSeconds);
-        }
+        addStartPadding(mSeconds);
     }
 
     /**
@@ -99,46 +96,48 @@
         textView.setPadding((int) (gapPadding * widths[largest]), 0, 0, 0);
     }
 
-
-    public void setTime(int hoursOnesDigit, int minutesTensDigit,
+    public void setTime(int hoursTensDigit, int hoursOnesDigit, int minutesTensDigit,
                         int minutesOnesDigit, int seconds) {
-        if (mHoursOnes != null) {
-            if (hoursOnesDigit == -1) {
-                mHoursOnes.setText("-");
-                mHoursOnes.setTypeface(mAndroidClockMonoThin);
-                mHoursOnes.setTextColor(mGrayColor);
-            } else {
-                mHoursOnes.setText(String.format("%d", hoursOnesDigit));
-                mHoursOnes.setTypeface(mOriginalHoursTypeface);
-                mHoursOnes.setTextColor(mWhiteColor);
-            }
+        if (hoursTensDigit == -1) {
+            mHoursTens.setText("-");
+            mHoursTens.setTypeface(mAndroidClockMonoThin);
+            mHoursTens.setTextColor(mGrayColor);
+        } else {
+            mHoursTens.setText(String.valueOf(hoursTensDigit));
+            mHoursTens.setTypeface(mOriginalHoursTypeface);
+            mHoursTens.setTextColor(mWhiteColor);
         }
 
-        if (mMinutesTens != null) {
-            if (minutesTensDigit == -1) {
-                mMinutesTens.setText("-");
-                mMinutesTens.setTypeface(mAndroidClockMonoThin);
-                mMinutesTens.setTextColor(mGrayColor);
-            } else {
-                mMinutesTens.setText(String.format("%d", minutesTensDigit));
-                mMinutesTens.setTypeface(mOriginalMinutesTypeface);
-                mMinutesTens.setTextColor(mWhiteColor);
-            }
-        }
-        if (mMinutesOnes != null) {
-            if (minutesOnesDigit == -1) {
-                mMinutesOnes.setText("-");
-                mMinutesOnes.setTypeface(mAndroidClockMonoThin);
-                mMinutesOnes.setTextColor(mGrayColor);
-            } else {
-                mMinutesOnes.setText(String.format("%d", minutesOnesDigit));
-                mMinutesOnes.setTypeface(mOriginalMinutesTypeface);
-                mMinutesOnes.setTextColor(mWhiteColor);
-            }
+        if (hoursOnesDigit == -1) {
+            mHoursOnes.setText("-");
+            mHoursOnes.setTypeface(mAndroidClockMonoThin);
+            mHoursOnes.setTextColor(mGrayColor);
+        } else {
+            mHoursOnes.setText(String.valueOf(hoursOnesDigit));
+            mHoursOnes.setTypeface(mOriginalHoursTypeface);
+            mHoursOnes.setTextColor(mWhiteColor);
         }
 
-        if (mSeconds != null) {
-            mSeconds.setText(String.format("%02d", seconds));
+        if (minutesTensDigit == -1) {
+            mMinutesTens.setText("-");
+            mMinutesTens.setTypeface(mAndroidClockMonoThin);
+            mMinutesTens.setTextColor(mGrayColor);
+        } else {
+            mMinutesTens.setText(String.valueOf(minutesTensDigit));
+            mMinutesTens.setTypeface(mOriginalMinutesTypeface);
+            mMinutesTens.setTextColor(mWhiteColor);
         }
+
+        if (minutesOnesDigit == -1) {
+            mMinutesOnes.setText("-");
+            mMinutesOnes.setTypeface(mAndroidClockMonoThin);
+            mMinutesOnes.setTextColor(mGrayColor);
+        } else {
+            mMinutesOnes.setText(String.valueOf(minutesOnesDigit));
+            mMinutesOnes.setTypeface(mOriginalMinutesTypeface);
+            mMinutesOnes.setTextColor(mWhiteColor);
+        }
+
+        mSeconds.setText(String.format("%02d", seconds));
     }
 }
diff --git a/src/com/android/deskclock/timer/Timers.java b/src/com/android/deskclock/timer/Timers.java
deleted file mode 100644
index 0b0c99f..0000000
--- a/src/com/android/deskclock/timer/Timers.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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 java.util.ArrayList;
-import java.util.Iterator;
-
-public class Timers {
-    // Logging shared by TimerReceiver and TimerAlertFullScreen
-    public static final boolean LOGGING = true;
-
-    // Private actions processed by the receiver
-    public static final String START_TIMER = "start_timer";
-    public static final String STOP_TIMER = "stop_timer";
-    public static final String DELETE_TIMER = "delete_timer";
-    public static final String RESET_TIMER = "reset_timer";
-    public static final String TIMES_UP = "times_up";
-    public static final String TIMER_DONE = "timer_done";
-    public static final String TIMER_UPDATE = "timer_update";
-
-    public static final String TIMER_INTENT_EXTRA = "timer.intent.extra";
-
-    public static final String UPDATE_NEXT_TIMESUP = "timer_update_next_timesup";
-
-    public static final String NOTIF_IN_USE_SHOW = "notif_in_use_show";
-    public static final String NOTIF_IN_USE_CANCEL = "notif_in_use_cancel";
-    public static final String NOTIF_APP_OPEN = "notif_app_open";
-    public static final String NOTIF_TIMES_UP_STOP = "notif_times_up_stop";
-    public static final String NOTIF_TIMES_UP_PLUS_ONE = "notif_times_up_plus_one";
-    public static final String NOTIF_TIMES_UP_SHOW = "notif_times_up_show";
-    public static final String NOTIF_TIMES_UP_CANCEL = "notif_times_up_cancel";
-    public static final String FIRST_LAUNCH_FROM_API_CALL = "first_launch_from_api_call";
-    public static final String SCROLL_TO_TIMER_ID = "scroll_to_timer_id";
-
-    public static final String TIMESUP_MODE = "times_up";
-
-    /**
-     * Key to a shared preference that forces Timer user interfaces to refresh in order to reflect
-     * changes in the database.
-     */
-    public static final String REFRESH_UI_WITH_LATEST_DATA = "refresh_ui_with_latest_data";
-
-    public static TimerObj findTimer(ArrayList<TimerObj> timers, int timerId) {
-        for (TimerObj t : timers) {
-            if (t.mTimerId == timerId) {
-                return t;
-            }
-        }
-        return null;
-    }
-
-    public static TimerObj findExpiredTimer(ArrayList<TimerObj> timers) {
-        for (TimerObj t : timers) {
-            if (t.mState == TimerObj.STATE_TIMESUP) {
-                return t;
-            }
-        }
-        return null;
-    }
-
-    public static ArrayList<TimerObj> timersInUse(ArrayList<TimerObj> timers) {
-        final ArrayList<TimerObj> result = new ArrayList<>(timers);
-        for (Iterator<TimerObj> it = result.iterator(); it.hasNext();) {
-            if (!it.next().isInUse()) {
-                it.remove();
-            }
-        }
-        return result;
-    }
-
-    public static ArrayList<TimerObj> timersInTimesUp(ArrayList<TimerObj> timers) {
-        final ArrayList<TimerObj> result = new ArrayList<>(timers);
-        for (Iterator<TimerObj> it = result.iterator(); it.hasNext();) {
-            if (it.next().mState != TimerObj.STATE_TIMESUP) {
-                it.remove();
-            }
-        }
-        return result;
-    }
-}
diff --git a/src/com/android/deskclock/widget/ActionableToastBar.java b/src/com/android/deskclock/widget/ActionableToastBar.java
deleted file mode 100644
index 5f0139e..0000000
--- a/src/com/android/deskclock/widget/ActionableToastBar.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * 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.widget;
-
-import android.animation.Animator;
-import android.animation.AnimatorInflater;
-import android.animation.AnimatorListenerAdapter;
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.FrameLayout;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.deskclock.R;
-
-/**
- * A custom {@link View} that exposes an action to the user.
- * <p>
- * This is a copy of packages/apps/UnifiedEmail/src/com/android/mail/ui/ActionableToastBar.java
- * with minor modifications.
- */
-public class ActionableToastBar extends LinearLayout {
-    private boolean mHidden = false;
-    private Animator mShowAnimation;
-    private Animator mHideAnimation;
-    private final int mBottomMarginSizeInConversation;
-
-    /** The clickable view */
-    private View mActionButton;
-    /** The view that contains the description. */
-    private TextView mActionDescriptionView;
-    /** The view that contains the text for the action button. */
-    private TextView mActionText;
-    //private ToastBarOperation mOperation;
-
-    public ActionableToastBar(Context context) {
-        this(context, null);
-    }
-
-    public ActionableToastBar(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public ActionableToastBar(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        mBottomMarginSizeInConversation = context.getResources().getDimensionPixelSize(
-                R.dimen.toast_bar_bottom_margin_in_conversation);
-        LayoutInflater.from(context).inflate(R.layout.actionable_toast_row, this, true);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-
-        mActionDescriptionView = (TextView) findViewById(R.id.description_text);
-        mActionButton = findViewById(R.id.action_button);
-        mActionText = (TextView) findViewById(R.id.action_text);
-    }
-
-    /**
-     * Tells the view that it will be appearing in the conversation pane
-     * and should adjust its layout parameters accordingly.
-     * @param isInConversationMode true if the view will be shown in the conversation view
-     */
-    public void setConversationMode(boolean isInConversationMode) {
-        final FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) getLayoutParams();
-        params.bottomMargin = isInConversationMode ? mBottomMarginSizeInConversation : 0;
-        setLayoutParams(params);
-    }
-
-    /**
-     * Displays the toast bar and makes it visible. Allows the setting of
-     * parameters to customize the display.
-     * @param listener performs some action when the action button is clicked
-     * @param descriptionIconResourceId resource ID for the description icon or
-     * 0 if no icon should be shown
-     * @param descriptionText a description text to show in the toast bar
-     * @param showActionIcon if true, the action button icon should be shown
-     * @param actionTextResource resource ID for the text to show in the action button
-     * @param replaceVisibleToast if true, this toast should replace any currently visible toast.
-     * Otherwise, skip showing this toast.
-     */
-    public void show(final ActionClickedListener listener, int descriptionIconResourceId,
-            CharSequence descriptionText, boolean showActionIcon, int actionTextResource,
-            boolean replaceVisibleToast) {
-
-        if (!mHidden && !replaceVisibleToast) {
-            return;
-        }
-
-        mActionButton.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View widget) {
-                if (listener != null) {
-                    listener.onActionClicked();
-                }
-                hide(true);
-            }
-        });
-
-        mActionDescriptionView.setText(descriptionText);
-        mActionText.setText(actionTextResource);
-
-        mHidden = false;
-        getShowAnimation().start();
-    }
-
-    /**
-     * Hides the view and resets the state.
-     */
-    public void hide(boolean animate) {
-        // Prevent multiple call to hide.
-        // Also prevent hiding if show animation is going on.
-        if (!mHidden && !getShowAnimation().isRunning()) {
-            mHidden = true;
-            if (getVisibility() == View.VISIBLE) {
-                mActionDescriptionView.setText("");
-                mActionButton.setOnClickListener(null);
-                // Hide view once it's clicked.
-                if (animate) {
-                    getHideAnimation().start();
-                } else {
-                    setAlpha(0);
-                    setVisibility(View.GONE);
-                }
-            }
-        }
-    }
-
-    private Animator getShowAnimation() {
-        if (mShowAnimation == null) {
-            mShowAnimation = AnimatorInflater.loadAnimator(getContext(), R.animator.fade_in);
-            mShowAnimation.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationStart(Animator animation) {
-                    setVisibility(View.VISIBLE);
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    // There is a tiny change that and hide animation could have finished right
-                    // before the show animation finished.  In that case, the hide will mark the
-                    // view as GONE.  We need to make sure the last one wins.
-                    setVisibility(View.VISIBLE);
-                }
-            });
-            mShowAnimation.setTarget(this);
-        }
-        return mShowAnimation;
-    }
-
-    private Animator getHideAnimation() {
-        if (mHideAnimation == null) {
-            mHideAnimation = AnimatorInflater.loadAnimator(getContext(), R.animator.fade_out);
-            mHideAnimation.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    setVisibility(View.GONE);
-                }
-            });
-            mHideAnimation.setTarget(this);
-        }
-        return mHideAnimation;
-    }
-
-    public boolean isEventInToastBar(MotionEvent event) {
-        if (!isShown()) {
-            return false;
-        }
-        int[] xy = new int[2];
-        float x = event.getX();
-        float y = event.getY();
-        getLocationOnScreen(xy);
-        return (x > xy[0] && x < (xy[0] + getWidth()) && y > xy[1] && y < xy[1] + getHeight());
-    }
-
-    /**
-     * Classes that wish to perform some action when the action button is clicked
-     * should implement this interface.
-     */
-    public interface ActionClickedListener {
-        public void onActionClicked();
-    }
-}
diff --git a/src/com/android/deskclock/widget/EmptyViewController.java b/src/com/android/deskclock/widget/EmptyViewController.java
new file mode 100644
index 0000000..4a21999
--- /dev/null
+++ b/src/com/android/deskclock/widget/EmptyViewController.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2015 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.widget;
+
+import android.transition.Fade;
+import android.transition.Transition;
+import android.transition.TransitionManager;
+import android.transition.TransitionSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.deskclock.Utils;
+
+/**
+ * Controller that displays empty view and handles animation appropriately.
+ */
+public final class EmptyViewController {
+
+    private static final int ANIMATION_DURATION = 300;
+    private static final boolean USE_TRANSITION_FRAMEWORK = Utils.isLOrLater();
+
+    private final Transition mEmptyViewTransition;
+    private final ViewGroup mMainLayout;
+    private final View mContentView;
+    private final View mEmptyView;
+    private boolean mIsEmpty;
+
+    /**
+     * Constructor of the controller.
+     *
+     * @param contentView  The view that should be displayed when empty view is hidden.
+     * @param emptyView The view that should be displayed when main view is empty.
+     */
+    public EmptyViewController(ViewGroup mainLayout, View contentView, View emptyView) {
+        mMainLayout = mainLayout;
+        mContentView = contentView;
+        mEmptyView = emptyView;
+        if (USE_TRANSITION_FRAMEWORK) {
+            mEmptyViewTransition = new TransitionSet()
+                    .setOrdering(TransitionSet.ORDERING_SEQUENTIAL)
+                    .addTarget(contentView)
+                    .addTarget(emptyView)
+                    .addTransition(new Fade(Fade.OUT))
+                    .addTransition(new Fade(Fade.IN))
+                    .setDuration(ANIMATION_DURATION);
+        } else {
+            mEmptyViewTransition = null;
+        }
+    }
+
+    /**
+     * Sets the state for the controller. If it's empty, it will display the empty view.
+     *
+     * @param isEmpty Whether or not the controller should transition into empty state.
+     */
+    public void setEmpty(boolean isEmpty) {
+        if (mIsEmpty == isEmpty) {
+            return;
+        }
+        mIsEmpty = isEmpty;
+        // State changed, perform transition.
+        if (USE_TRANSITION_FRAMEWORK) {
+            TransitionManager.beginDelayedTransition(mMainLayout, mEmptyViewTransition);
+        }
+        mEmptyView.setVisibility(mIsEmpty ? View.VISIBLE : View.GONE);
+        mContentView.setVisibility(mIsEmpty ? View.GONE : View.VISIBLE);
+    }
+}
diff --git a/src/com/android/deskclock/widget/RtlViewPager.java b/src/com/android/deskclock/widget/RtlViewPager.java
new file mode 100644
index 0000000..fc2f43e
--- /dev/null
+++ b/src/com/android/deskclock/widget/RtlViewPager.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2015 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.widget;
+
+import android.content.Context;
+import android.support.v4.view.ViewPager;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.View;
+
+import java.util.Locale;
+
+/**
+ * A {@link ViewPager} that's aware of RTL changes when used with FragmentPagerAdapter.
+ */
+public final class RtlViewPager extends ViewPager {
+
+    /**
+     * Callback interface for responding to changing state of the selected page.
+     * Positions supplied will always be the logical position in the adapter -
+     * that is, the 0 index corresponds to the left-most page in LTR and the
+     * right-most page in RTL.
+     */
+    private OnPageChangeListener mListener;
+
+    public RtlViewPager(Context context) {
+        this(context, null /* attrs */);
+    }
+
+    public RtlViewPager(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+            @Override
+            public void onPageScrolled(int position, float offset, int offsetPixels) {
+                // Do nothing
+            }
+
+            @Override
+            public void onPageSelected(int position) {
+                if (mListener != null) {
+                    mListener.onPageSelected(getRtlAwareIndex(position));
+                }
+            }
+
+            @Override
+            public void onPageScrollStateChanged(int state) {
+                // Do nothing
+            }
+        });
+    }
+
+    @Override
+    public int getCurrentItem() {
+        return getRtlAwareIndex(super.getCurrentItem());
+    }
+
+    @Override
+    public void setCurrentItem(int item) {
+        super.setCurrentItem(getRtlAwareIndex(item));
+    }
+
+    @Override
+    public void setOnPageChangeListener(OnPageChangeListener unused) {
+        throw new UnsupportedOperationException("Use setOnRTLPageChangeListener instead");
+    }
+
+    /**
+     * Get a "RTL friendly" index. If the locale is LTR, the index is returned as is.
+     * Otherwise it's transformed so view pager can render views using the new index for RTL. For
+     * example, the second view will be rendered to the left of first view.
+     *
+     * @param index The logical index.
+     */
+    public int getRtlAwareIndex(int index) {
+        if (TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) ==
+                View.LAYOUT_DIRECTION_RTL) {
+            return getAdapter().getCount() - index - 1;
+        }
+        return index;
+    }
+
+    /**
+     * Sets a {@link OnPageChangeListener}. The listener will be called when a page is selected.
+     */
+    public void setOnRTLPageChangeListener(OnPageChangeListener listener) {
+        mListener = listener;
+    }
+}
diff --git a/src/com/android/deskclock/widget/TextTime.java b/src/com/android/deskclock/widget/TextTime.java
index ecc945a..ff90a55 100644
--- a/src/com/android/deskclock/widget/TextTime.java
+++ b/src/com/android/deskclock/widget/TextTime.java
@@ -140,8 +140,8 @@
         resolver.unregisterContentObserver(mFormatChangeObserver);
     }
 
-    public void setFormat(Context context, int amPmFontSize) {
-        setFormat12Hour(Utils.get12ModeFormat(context, amPmFontSize));
+    public void setFormat(Context context) {
+        setFormat12Hour(Utils.get12ModeFormat(context, true /* showAmPm */));
         setFormat24Hour(Utils.get24ModeFormat());
     }
 
diff --git a/src/com/android/deskclock/widget/selector/AlarmSelectionAdapter.java b/src/com/android/deskclock/widget/selector/AlarmSelectionAdapter.java
index fa8ce56..fa792c7 100644
--- a/src/com/android/deskclock/widget/selector/AlarmSelectionAdapter.java
+++ b/src/com/android/deskclock/widget/selector/AlarmSelectionAdapter.java
@@ -26,6 +26,7 @@
 import com.android.deskclock.provider.Alarm;
 import com.android.deskclock.widget.TextTime;
 
+import java.util.Calendar;
 import java.util.List;
 
 public class AlarmSelectionAdapter extends ArrayAdapter<AlarmSelection> {
@@ -47,8 +48,7 @@
         final Alarm alarm = selection.getAlarm();
 
         final TextTime alarmTime = (TextTime) row.findViewById(R.id.digital_clock);
-        alarmTime.setFormat(context,
-                context.getResources().getDimensionPixelSize(R.dimen.alarm_label_size));
+        alarmTime.setFormat(context);
         alarmTime.setTime(alarm.hour, alarm.minutes);
 
         final TextView alarmLabel = (TextView) row.findViewById(R.id.label);
@@ -57,7 +57,7 @@
         // find days when alarm is firing
         final String daysOfWeek;
         if (!alarm.daysOfWeek.isRepeating()) {
-            daysOfWeek = Alarm.isTomorrow(alarm) ?
+            daysOfWeek = Alarm.isTomorrow(alarm, Calendar.getInstance()) ?
                     context.getResources().getString(R.string.alarm_tomorrow) :
                     context.getResources().getString(R.string.alarm_today);
         } else {
diff --git a/src/com/android/deskclock/widget/sgv/GridAdapter.java b/src/com/android/deskclock/widget/sgv/GridAdapter.java
deleted file mode 100644
index 9251574..0000000
--- a/src/com/android/deskclock/widget/sgv/GridAdapter.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All Rights Reserved.
- */
-
-package com.android.deskclock.widget.sgv;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-
-import com.android.deskclock.widget.sgv.ReorderUtils;
-
-/**
- * Adapter for use with {@link StaggeredGridView}. Copied from Keep.
- * TODO: Keep up to date with fixes to their code; if they move into a shared library, use that.
- */
-public abstract class GridAdapter extends BaseAdapter {
-    /**
-     * A tag key which stores the id of the associated object. If set, this
-     * allows for faster creation of views.
-     */
-    private static final int GRID_ID_TAG = "gridIdTag".hashCode();
-    private View mHeaderView;
-    private View mFooterView;
-
-    public GridAdapter() {
-        super();
-    }
-
-    /**
-     * Checks to see if the child at the specified position is draggable
-     * @param position The position of the child to check against
-     * @return boolean If true, the child at the specified position is draggable.
-     */
-    public boolean isDraggable(int position) {
-        return false;
-    }
-
-    /**
-     * For a view at the specified position, return the region around the view that is a possible
-     * reordering area.
-     * @param position The adapter position
-     * @param isLastColumnInGrid Flag to indicate whether the view at the specified position is
-     * laid out at the last column in the grid.  Being in the last column has some UI implications
-     * when it comes to reordering.  As an example, if a view has reordering area set to Left, and
-     * is laid out in the last column, the grid may also choose to enable the right reordering area
-     * for this view as well so that the user has the convenience have dropping views on the right
-     * edge of the grid to re-order.
-     * @return int The re-ordering area for the view at this adapter position.
-     * Possible return values are a combination of
-     * {@link ReorderUtils#REORDER_AREA_NONE}, {@link ReorderUtils#REORDER_AREA_VALID}
-     */
-    public int getReorderingArea(int position, boolean isLastColumnInGrid) {
-        return ReorderUtils.REORDER_AREA_NONE;
-    }
-
-    /**
-     * The direction for drag to reorder that is allowed.  By default, the allowed direction
-     * is free across both horizontal and vertical axes.
-     * @return int The allowed direction for drag to reorder.  Possible return values are a
-     * combination of {@link ReorderUtils#REORDER_DIRECTION_VERTICAL} and/or
-     * {@link ReorderUtils#REORDER_DIRECTION_HORIZONTAL}
-     */
-    public int getReorderingDirection() {
-        return ReorderUtils.REORDER_DIRECTION_VERTICAL | ReorderUtils.REORDER_DIRECTION_HORIZONTAL;
-    }
-
-    public View getHeaderView() {
-        return mHeaderView;
-    }
-
-    public void setHeaderView(View view) {
-        mHeaderView = view;
-    }
-
-    public View getFooterView() {
-        return mFooterView;
-    }
-
-    public void setFooterView(View view) {
-        mFooterView = view;
-    }
-
-    public boolean hasHeader() {
-        return mHeaderView != null;
-    }
-
-    public boolean hasFooter() {
-        return mFooterView != null;
-    }
-
-    /**
-     * Views created via the GridAdapter or any subclasses should call this to
-     * store the id of the item associated with them.
-     */
-    public void setItemId(View view, long id) {
-        view.setTag(GRID_ID_TAG, id);
-    }
-
-    /**
-     * Get the id of the item associated with this view.
-     */
-    public long getItemIdFromView(View view, int position) {
-        final Object id = view.getTag(GRID_ID_TAG);
-        if (id != null) {
-            return (Long) id;
-        }
-
-        return getItemId(position);
-    }
-
-    /**
-     * Get the id of the item associated with this view.  The specified Object is associated with
-     * the view at this position, and can be used to optimize retrieval of the id by the adapter.
-     * @param item Object associated with this view at this position.
-     * @param position Position of the item.
-     * @return id Id for the item at this position.
-     */
-    public long getItemId(Object item, int position) {
-        // TODO: Rather than using Object, use BaseNode so that we're not confused between this
-        // method, and the method above.
-        return getItemId(position);
-    }
-
-    /**
-     * Get the type of the view given the item it will display based on its
-     * position in the cursor managed by the adapter. Previously, the adapter
-     * would create an item based on the position and use that item to get the
-     * view type. However, if the item already exists due to another call that
-     * required it, it is much better to reuse the item than recreate it.
-     *
-     * @param item Object associated with the view at this position
-     * @param position Position of the item we are verifying
-     * @return int representing the type of the item at the supplied position
-     */
-    public int getItemViewType(Object item, int position) {
-        return getItemViewType(position);
-    }
-
-    /**
-     * Get the view given its associated item.
-     *
-     * @param item Object associated with the view at this position
-     * @param position Position of the item we are verifying
-     * @param scrap The old view to reuse, if possible. Note: You should check
-     *            that this view is non-null and of an appropriate type before
-     *            using. If it is not possible to convert this view to display
-     *            the correct data, this method can create a new view.
-     *            Heterogeneous lists can specify their number of view types, so
-     *            that this View is always of the right type (see
-     *            getViewTypeCount() and getItemViewType(int)).
-     * @param parent The parent view this view will eventually be attached to
-     * @param measuredWidth
-     * @return View
-     */
-    public View getView(Object item, int position, View scrap, ViewGroup parent,
-            int measuredWidth) {
-        return getView(position, scrap, parent);
-    }
-
-    /**
-     * Get how many columns a specific view will span in the grid.
-     */
-    abstract public int getItemColumnSpan(Object item, int position);
-
-    /**
-     * The first change position of all items. It will be used by
-     * StaggeredGridView to optimize rendering, such as skip unchanged items. By
-     * default it returns 0, so StaggeredGridView will not try to optimize.
-     */
-    public int getFirstChangedPosition() {
-        return 0;
-    }
-
-    /**
-     * StaggeredGridView only works with stable id. Any adapter which wants to
-     * use staggered grid view is enforced to use stable ids.
-     */
-    @Override
-    public boolean hasStableIds() {
-        return true;
-    }
-}
diff --git a/src/com/android/deskclock/widget/sgv/OverScrollerSGV.java b/src/com/android/deskclock/widget/sgv/OverScrollerSGV.java
deleted file mode 100644
index 636a90e..0000000
--- a/src/com/android/deskclock/widget/sgv/OverScrollerSGV.java
+++ /dev/null
@@ -1,955 +0,0 @@
-/*
- * Copyright (C) 2013 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.widget.sgv;
-
-import android.content.Context;
-import android.hardware.SensorManager;
-import android.util.Log;
-import android.view.ViewConfiguration;
-import android.view.animation.AnimationUtils;
-import android.view.animation.Interpolator;
-
-/**
- * Temporarily copied from the framework so that StaggeredGridView can properly show the bounce at
- * the end of flings. See TODO and b/8252293 for more info.
- */
-/**
- * This class encapsulates scrolling with the ability to overshoot the bounds
- * of a scrolling operation. This class is a drop-in replacement for
- * {@link android.widget.Scroller} in most cases.
- */
-public class OverScrollerSGV {
-    private int mMode;
-
-    private final SplineOverScroller mScrollerX;
-    private final SplineOverScroller mScrollerY;
-
-    private Interpolator mInterpolator;
-
-    private final boolean mFlywheel;
-
-    private static final int DEFAULT_DURATION = 250;
-    private static final int SCROLL_MODE = 0;
-    private static final int FLING_MODE = 1;
-
-    /**
-     * Creates an OverScroller with a viscous fluid scroll interpolator and flywheel.
-     * @param context
-     */
-    public OverScrollerSGV(Context context) {
-        this(context, null);
-    }
-
-    /**
-     * Creates an OverScroller with flywheel enabled.
-     * @param context The context of this application.
-     * @param interpolator The scroll interpolator. If null, a default (viscous) interpolator will
-     * be used.
-     */
-    public OverScrollerSGV(Context context, Interpolator interpolator) {
-        this(context, interpolator, true);
-    }
-
-    /**
-     * Creates an OverScroller.
-     * @param context The context of this application.
-     * @param interpolator The scroll interpolator. If null, a default (viscous) interpolator will
-     * be used.
-     * @param flywheel If true, successive fling motions will keep on increasing scroll speed.
-     * @hide
-     */
-    public OverScrollerSGV(Context context, Interpolator interpolator, boolean flywheel) {
-        mInterpolator = interpolator;
-        mFlywheel = flywheel;
-        mScrollerX = new SplineOverScroller(context);
-        mScrollerY = new SplineOverScroller(context);
-    }
-
-    /**
-     * Creates an OverScroller with flywheel enabled.
-     * @param context The context of this application.
-     * @param interpolator The scroll interpolator. If null, a default (viscous) interpolator will
-     * be used.
-     * @param bounceCoefficientX A value between 0 and 1 that will determine the proportion of the
-     * velocity which is preserved in the bounce when the horizontal edge is reached. A null value
-     * means no bounce. This behavior is no longer supported and this coefficient has no effect.
-     * @param bounceCoefficientY Same as bounceCoefficientX but for the vertical direction. This
-     * behavior is no longer supported and this coefficient has no effect.
-     * !deprecated Use {!link #OverScroller(Context, Interpolator, boolean)} instead.
-     */
-    public OverScrollerSGV(Context context, Interpolator interpolator,
-            float bounceCoefficientX, float bounceCoefficientY) {
-        this(context, interpolator, true);
-    }
-
-    /**
-     * Creates an OverScroller.
-     * @param context The context of this application.
-     * @param interpolator The scroll interpolator. If null, a default (viscous) interpolator will
-     * be used.
-     * @param bounceCoefficientX A value between 0 and 1 that will determine the proportion of the
-     * velocity which is preserved in the bounce when the horizontal edge is reached. A null value
-     * means no bounce. This behavior is no longer supported and this coefficient has no effect.
-     * @param bounceCoefficientY Same as bounceCoefficientX but for the vertical direction. This
-     * behavior is no longer supported and this coefficient has no effect.
-     * @param flywheel If true, successive fling motions will keep on increasing scroll speed.
-     * !deprecated Use {!link OverScroller(Context, Interpolator, boolean)} instead.
-     */
-    public OverScrollerSGV(Context context, Interpolator interpolator,
-            float bounceCoefficientX, float bounceCoefficientY, boolean flywheel) {
-        this(context, interpolator, flywheel);
-    }
-
-    void setInterpolator(Interpolator interpolator) {
-        mInterpolator = interpolator;
-    }
-
-    /**
-     * The amount of friction applied to flings. The default value
-     * is {@link ViewConfiguration#getScrollFriction}.
-     *
-     * @param friction A scalar dimension-less value representing the coefficient of
-     *         friction.
-     */
-    public final void setFriction(float friction) {
-        mScrollerX.setFriction(friction);
-        mScrollerY.setFriction(friction);
-    }
-
-    /**
-     *
-     * Returns whether the scroller has finished scrolling.
-     *
-     * @return True if the scroller has finished scrolling, false otherwise.
-     */
-    public final boolean isFinished() {
-        return mScrollerX.mFinished && mScrollerY.mFinished;
-    }
-
-    /**
-     * Force the finished field to a particular value. Contrary to
-     * {@link #abortAnimation()}, forcing the animation to finished
-     * does NOT cause the scroller to move to the final x and y
-     * position.
-     *
-     * @param finished The new finished value.
-     */
-    public final void forceFinished(boolean finished) {
-        mScrollerX.mFinished = mScrollerY.mFinished = finished;
-    }
-
-    /**
-     * Returns the current X offset in the scroll.
-     *
-     * @return The new X offset as an absolute distance from the origin.
-     */
-    public final int getCurrX() {
-        return mScrollerX.mCurrentPosition;
-    }
-
-    /**
-     * Returns the current Y offset in the scroll.
-     *
-     * @return The new Y offset as an absolute distance from the origin.
-     */
-    public final int getCurrY() {
-        return mScrollerY.mCurrentPosition;
-    }
-
-    /**
-     * Returns the absolute value of the current velocity.
-     *
-     * @return The original velocity less the deceleration, norm of the X and Y velocity vector.
-     */
-    public float getCurrVelocity() {
-        return (float) Math.hypot(mScrollerX.mCurrVelocity, mScrollerY.mCurrVelocity);
-    }
-
-    /**
-     * Returns the start X offset in the scroll.
-     *
-     * @return The start X offset as an absolute distance from the origin.
-     */
-    public final int getStartX() {
-        return mScrollerX.mStart;
-    }
-
-    /**
-     * Returns the start Y offset in the scroll.
-     *
-     * @return The start Y offset as an absolute distance from the origin.
-     */
-    public final int getStartY() {
-        return mScrollerY.mStart;
-    }
-
-    /**
-     * Returns where the scroll will end. Valid only for "fling" scrolls.
-     *
-     * @return The final X offset as an absolute distance from the origin.
-     */
-    public final int getFinalX() {
-        return mScrollerX.mFinal;
-    }
-
-    /**
-     * Returns where the scroll will end. Valid only for "fling" scrolls.
-     *
-     * @return The final Y offset as an absolute distance from the origin.
-     */
-    public final int getFinalY() {
-        return mScrollerY.mFinal;
-    }
-
-    /**
-     * Returns how long the scroll event will take, in milliseconds.
-     *
-     * @return The duration of the scroll in milliseconds.
-     *
-     * @hide Pending removal once nothing depends on it
-     * @deprecated OverScrollers don't necessarily have a fixed duration.
-     *             This function will lie to the best of its ability.
-     */
-    @Deprecated
-    public final int getDuration() {
-        return Math.max(mScrollerX.mDuration, mScrollerY.mDuration);
-    }
-
-    /**
-     * Extend the scroll animation. This allows a running animation to scroll
-     * further and longer, when used with {@link #setFinalX(int)} or {@link #setFinalY(int)}.
-     *
-     * @param extend Additional time to scroll in milliseconds.
-     * @see #setFinalX(int)
-     * @see #setFinalY(int)
-     *
-     * @hide Pending removal once nothing depends on it
-     * @deprecated OverScrollers don't necessarily have a fixed duration.
-     *             Instead of setting a new final position and extending
-     *             the duration of an existing scroll, use startScroll
-     *             to begin a new animation.
-     */
-    @Deprecated
-    public void extendDuration(int extend) {
-        mScrollerX.extendDuration(extend);
-        mScrollerY.extendDuration(extend);
-    }
-
-    /**
-     * Sets the final position (X) for this scroller.
-     *
-     * @param newX The new X offset as an absolute distance from the origin.
-     * @see #extendDuration(int)
-     * @see #setFinalY(int)
-     *
-     * @hide Pending removal once nothing depends on it
-     * @deprecated OverScroller's final position may change during an animation.
-     *             Instead of setting a new final position and extending
-     *             the duration of an existing scroll, use startScroll
-     *             to begin a new animation.
-     */
-    @Deprecated
-    public void setFinalX(int newX) {
-        mScrollerX.setFinalPosition(newX);
-    }
-
-    /**
-     * Sets the final position (Y) for this scroller.
-     *
-     * @param newY The new Y offset as an absolute distance from the origin.
-     * @see #extendDuration(int)
-     * @see #setFinalX(int)
-     *
-     * @hide Pending removal once nothing depends on it
-     * @deprecated OverScroller's final position may change during an animation.
-     *             Instead of setting a new final position and extending
-     *             the duration of an existing scroll, use startScroll
-     *             to begin a new animation.
-     */
-    @Deprecated
-    public void setFinalY(int newY) {
-        mScrollerY.setFinalPosition(newY);
-    }
-
-    /**
-     * Call this when you want to know the new location. If it returns true, the
-     * animation is not yet finished.
-     */
-    public boolean computeScrollOffset() {
-        if (isFinished()) {
-            return false;
-        }
-
-        switch (mMode) {
-            case SCROLL_MODE:
-                long time = AnimationUtils.currentAnimationTimeMillis();
-                // Any scroller can be used for time, since they were started
-                // together in scroll mode. We use X here.
-                final long elapsedTime = time - mScrollerX.mStartTime;
-
-                final int duration = mScrollerX.mDuration;
-                if (elapsedTime < duration) {
-                    float q = (float) (elapsedTime) / duration;
-
-                    if (mInterpolator == null) {
-                        q = mInterpolator.getInterpolation(q);
-                    } else {
-                        q = mInterpolator.getInterpolation(q);
-                    }
-
-                    mScrollerX.updateScroll(q);
-                    mScrollerY.updateScroll(q);
-                } else {
-                    abortAnimation();
-                }
-                break;
-
-            case FLING_MODE:
-                if (!mScrollerX.mFinished) {
-                    if (!mScrollerX.update()) {
-                        if (!mScrollerX.continueWhenFinished()) {
-                            mScrollerX.finish();
-                        }
-                    }
-                }
-
-                if (!mScrollerY.mFinished) {
-                    if (!mScrollerY.update()) {
-                        if (!mScrollerY.continueWhenFinished()) {
-                            mScrollerY.finish();
-                        }
-                    }
-                }
-
-                break;
-        }
-
-        return true;
-    }
-
-    /**
-     * Start scrolling by providing a starting point and the distance to travel.
-     * The scroll will use the default value of 250 milliseconds for the
-     * duration.
-     *
-     * @param startX Starting horizontal scroll offset in pixels. Positive
-     *        numbers will scroll the content to the left.
-     * @param startY Starting vertical scroll offset in pixels. Positive numbers
-     *        will scroll the content up.
-     * @param dx Horizontal distance to travel. Positive numbers will scroll the
-     *        content to the left.
-     * @param dy Vertical distance to travel. Positive numbers will scroll the
-     *        content up.
-     */
-    public void startScroll(int startX, int startY, int dx, int dy) {
-        startScroll(startX, startY, dx, dy, DEFAULT_DURATION);
-    }
-
-    /**
-     * Start scrolling by providing a starting point and the distance to travel.
-     *
-     * @param startX Starting horizontal scroll offset in pixels. Positive
-     *        numbers will scroll the content to the left.
-     * @param startY Starting vertical scroll offset in pixels. Positive numbers
-     *        will scroll the content up.
-     * @param dx Horizontal distance to travel. Positive numbers will scroll the
-     *        content to the left.
-     * @param dy Vertical distance to travel. Positive numbers will scroll the
-     *        content up.
-     * @param duration Duration of the scroll in milliseconds.
-     */
-    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
-        mMode = SCROLL_MODE;
-        mScrollerX.startScroll(startX, dx, duration);
-        mScrollerY.startScroll(startY, dy, duration);
-    }
-
-    /**
-     * Call this when you want to 'spring back' into a valid coordinate range.
-     *
-     * @param startX Starting X coordinate
-     * @param startY Starting Y coordinate
-     * @param minX Minimum valid X value
-     * @param maxX Maximum valid X value
-     * @param minY Minimum valid Y value
-     * @param maxY Minimum valid Y value
-     * @return true if a springback was initiated, false if startX and startY were
-     *          already within the valid range.
-     */
-    public boolean springBack(int startX, int startY, int minX, int maxX, int minY, int maxY) {
-        mMode = FLING_MODE;
-
-        // Make sure both methods are called.
-        final boolean spingbackX = mScrollerX.springback(startX, minX, maxX);
-        final boolean spingbackY = mScrollerY.springback(startY, minY, maxY);
-        return spingbackX || spingbackY;
-    }
-
-    public void fling(int startX, int startY, int velocityX, int velocityY,
-            int minX, int maxX, int minY, int maxY) {
-        fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, 0, 0);
-    }
-
-    /**
-     * Start scrolling based on a fling gesture. The distance traveled will
-     * depend on the initial velocity of the fling.
-     *
-     * @param startX Starting point of the scroll (X)
-     * @param startY Starting point of the scroll (Y)
-     * @param velocityX Initial velocity of the fling (X) measured in pixels per
-     *            second.
-     * @param velocityY Initial velocity of the fling (Y) measured in pixels per
-     *            second
-     * @param minX Minimum X value. The scroller will not scroll past this point
-     *            unless overX > 0. If overfling is allowed, it will use minX as
-     *            a springback boundary.
-     * @param maxX Maximum X value. The scroller will not scroll past this point
-     *            unless overX > 0. If overfling is allowed, it will use maxX as
-     *            a springback boundary.
-     * @param minY Minimum Y value. The scroller will not scroll past this point
-     *            unless overY > 0. If overfling is allowed, it will use minY as
-     *            a springback boundary.
-     * @param maxY Maximum Y value. The scroller will not scroll past this point
-     *            unless overY > 0. If overfling is allowed, it will use maxY as
-     *            a springback boundary.
-     * @param overX Overfling range. If > 0, horizontal overfling in either
-     *            direction will be possible.
-     * @param overY Overfling range. If > 0, vertical overfling in either
-     *            direction will be possible.
-     */
-    public void fling(int startX, int startY, int velocityX, int velocityY,
-            int minX, int maxX, int minY, int maxY, int overX, int overY) {
-        // Continue a scroll or fling in progress
-        if (mFlywheel && !isFinished()) {
-            float oldVelocityX = mScrollerX.mCurrVelocity;
-            float oldVelocityY = mScrollerY.mCurrVelocity;
-            if (Math.signum(velocityX) == Math.signum(oldVelocityX) &&
-                    Math.signum(velocityY) == Math.signum(oldVelocityY)) {
-                velocityX += oldVelocityX;
-                velocityY += oldVelocityY;
-            }
-        }
-
-        mMode = FLING_MODE;
-        mScrollerX.fling(startX, velocityX, minX, maxX, overX);
-        mScrollerY.fling(startY, velocityY, minY, maxY, overY);
-    }
-
-    /**
-     * Notify the scroller that we've reached a horizontal boundary.
-     * Normally the information to handle this will already be known
-     * when the animation is started, such as in a call to one of the
-     * fling functions. However there are cases where this cannot be known
-     * in advance. This function will transition the current motion and
-     * animate from startX to finalX as appropriate.
-     *
-     * @param startX Starting/current X position
-     * @param finalX Desired final X position
-     * @param overX Magnitude of overscroll allowed. This should be the maximum
-     *              desired distance from finalX. Absolute value - must be positive.
-     */
-    public void notifyHorizontalEdgeReached(int startX, int finalX, int overX) {
-        mScrollerX.notifyEdgeReached(startX, finalX, overX);
-    }
-
-    /**
-     * Notify the scroller that we've reached a vertical boundary.
-     * Normally the information to handle this will already be known
-     * when the animation is started, such as in a call to one of the
-     * fling functions. However there are cases where this cannot be known
-     * in advance. This function will animate a parabolic motion from
-     * startY to finalY.
-     *
-     * @param startY Starting/current Y position
-     * @param finalY Desired final Y position
-     * @param overY Magnitude of overscroll allowed. This should be the maximum
-     *              desired distance from finalY. Absolute value - must be positive.
-     */
-    public void notifyVerticalEdgeReached(int startY, int finalY, int overY) {
-        mScrollerY.notifyEdgeReached(startY, finalY, overY);
-    }
-
-    /**
-     * Returns whether the current Scroller is currently returning to a valid position.
-     * Valid bounds were provided by the
-     * {@link #fling(int, int, int, int, int, int, int, int, int, int)} method.
-     *
-     * One should check this value before calling
-     * {@link #startScroll(int, int, int, int)} as the interpolation currently in progress
-     * to restore a valid position will then be stopped. The caller has to take into account
-     * the fact that the started scroll will start from an overscrolled position.
-     *
-     * @return true when the current position is overscrolled and in the process of
-     *         interpolating back to a valid value.
-     */
-    public boolean isOverScrolled() {
-        return ((!mScrollerX.mFinished &&
-                mScrollerX.mState != SplineOverScroller.SPLINE) ||
-                (!mScrollerY.mFinished &&
-                        mScrollerY.mState != SplineOverScroller.SPLINE));
-    }
-
-    /**
-     * Stops the animation. Contrary to {@link #forceFinished(boolean)},
-     * aborting the animating causes the scroller to move to the final x and y
-     * positions.
-     *
-     * @see #forceFinished(boolean)
-     */
-    public void abortAnimation() {
-        mScrollerX.finish();
-        mScrollerY.finish();
-    }
-
-    /**
-     * Returns the time elapsed since the beginning of the scrolling.
-     *
-     * @return The elapsed time in milliseconds.
-     *
-     * @hide
-     */
-    public int timePassed() {
-        final long time = AnimationUtils.currentAnimationTimeMillis();
-        final long startTime = Math.min(mScrollerX.mStartTime, mScrollerY.mStartTime);
-        return (int) (time - startTime);
-    }
-
-    /**
-     * @hide
-     */
-    public boolean isScrollingInDirection(float xvel, float yvel) {
-        final int dx = mScrollerX.mFinal - mScrollerX.mStart;
-        final int dy = mScrollerY.mFinal - mScrollerY.mStart;
-        return !isFinished() && Math.signum(xvel) == Math.signum(dx) &&
-                Math.signum(yvel) == Math.signum(dy);
-    }
-
-    static class SplineOverScroller {
-        // Initial position
-        private int mStart;
-
-        // Current position
-        private int mCurrentPosition;
-
-        // Final position
-        private int mFinal;
-
-        // Initial velocity
-        private int mVelocity;
-
-        // Current velocity
-        private float mCurrVelocity;
-
-        // Constant current deceleration
-        private float mDeceleration;
-
-        // Animation starting time, in system milliseconds
-        private long mStartTime;
-
-        // Animation duration, in milliseconds
-        private int mDuration;
-
-        // Duration to complete spline component of animation
-        private int mSplineDuration;
-
-        // Distance to travel along spline animation
-        private int mSplineDistance;
-
-        // Whether the animation is currently in progress
-        private boolean mFinished;
-
-        // The allowed overshot distance before boundary is reached.
-        private int mOver;
-
-        // Fling friction
-        private float mFlingFriction = ViewConfiguration.getScrollFriction();
-
-        // Current state of the animation.
-        private int mState = SPLINE;
-
-        // Constant gravity value, used in the deceleration phase.
-        private static final float GRAVITY = 2000.0f;
-
-        // A context-specific coefficient adjusted to physical values.
-        private final float mPhysicalCoeff;
-
-        private static float DECELERATION_RATE = (float) (Math.log(0.78) / Math.log(0.9));
-        private static final float INFLEXION = 0.35f; // Tension lines cross at (INFLEXION, 1)
-        private static final float START_TENSION = 0.5f;
-        private static final float END_TENSION = 1.0f;
-        private static final float P1 = START_TENSION * INFLEXION;
-        private static final float P2 = 1.0f - END_TENSION * (1.0f - INFLEXION);
-
-        private static final int NB_SAMPLES = 100;
-        private static final float[] SPLINE_POSITION = new float[NB_SAMPLES + 1];
-        private static final float[] SPLINE_TIME = new float[NB_SAMPLES + 1];
-
-        private static final int SPLINE = 0;
-        private static final int CUBIC = 1;
-        private static final int BALLISTIC = 2;
-
-        static {
-            float x_min = 0.0f;
-            float y_min = 0.0f;
-            for (int i = 0; i < NB_SAMPLES; i++) {
-                final float alpha = (float) i / NB_SAMPLES;
-
-                float x_max = 1.0f;
-                float x, tx, coef;
-                while (true) {
-                    x = x_min + (x_max - x_min) / 2.0f;
-                    coef = 3.0f * x * (1.0f - x);
-                    tx = coef * ((1.0f - x) * P1 + x * P2) + x * x * x;
-                    if (Math.abs(tx - alpha) < 1E-5) break;
-                    if (tx > alpha) x_max = x;
-                    else x_min = x;
-                }
-                SPLINE_POSITION[i] = coef * ((1.0f - x) * START_TENSION + x) + x * x * x;
-
-                float y_max = 1.0f;
-                float y, dy;
-                while (true) {
-                    y = y_min + (y_max - y_min) / 2.0f;
-                    coef = 3.0f * y * (1.0f - y);
-                    dy = coef * ((1.0f - y) * START_TENSION + y) + y * y * y;
-                    if (Math.abs(dy - alpha) < 1E-5) break;
-                    if (dy > alpha) y_max = y;
-                    else y_min = y;
-                }
-                SPLINE_TIME[i] = coef * ((1.0f - y) * P1 + y * P2) + y * y * y;
-            }
-            SPLINE_POSITION[NB_SAMPLES] = SPLINE_TIME[NB_SAMPLES] = 1.0f;
-        }
-
-        void setFriction(float friction) {
-            mFlingFriction = friction;
-        }
-
-        SplineOverScroller(Context context) {
-            mFinished = true;
-            final float ppi = context.getResources().getDisplayMetrics().density * 160.0f;
-            mPhysicalCoeff = SensorManager.GRAVITY_EARTH // g (m/s^2)
-                    * 39.37f // inch/meter
-                    * ppi
-                    * 0.84f; // look and feel tuning
-        }
-
-        void updateScroll(float q) {
-            mCurrentPosition = mStart + Math.round(q * (mFinal - mStart));
-        }
-
-        /*
-         * Get a signed deceleration that will reduce the velocity.
-         */
-        static private float getDeceleration(int velocity) {
-            return velocity > 0 ? -GRAVITY : GRAVITY;
-        }
-
-        /*
-         * Modifies mDuration to the duration it takes to get from start to newFinal using the
-         * spline interpolation. The previous duration was needed to get to oldFinal.
-         */
-        private void adjustDuration(int start, int oldFinal, int newFinal) {
-            final int oldDistance = oldFinal - start;
-            final int newDistance = newFinal - start;
-            final float x = Math.abs((float) newDistance / oldDistance);
-            final int index = (int) (NB_SAMPLES * x);
-            if (index < NB_SAMPLES) {
-                final float x_inf = (float) index / NB_SAMPLES;
-                final float x_sup = (float) (index + 1) / NB_SAMPLES;
-                final float t_inf = SPLINE_TIME[index];
-                final float t_sup = SPLINE_TIME[index + 1];
-                final float timeCoef = t_inf + (x - x_inf) / (x_sup - x_inf) * (t_sup - t_inf);
-                mDuration *= timeCoef;
-            }
-        }
-
-        void startScroll(int start, int distance, int duration) {
-            mFinished = false;
-
-            mStart = start;
-            mFinal = start + distance;
-
-            mStartTime = AnimationUtils.currentAnimationTimeMillis();
-            mDuration = duration;
-
-            // Unused
-            mDeceleration = 0.0f;
-            mVelocity = 0;
-        }
-
-        void finish() {
-            mCurrentPosition = mFinal;
-            // Not reset since WebView relies on this value for fast fling.
-            // TODO: restore when WebView uses the fast fling implemented in this class.
-            // mCurrVelocity = 0.0f;
-            mFinished = true;
-        }
-
-        void setFinalPosition(int position) {
-            mFinal = position;
-            mFinished = false;
-        }
-
-        void extendDuration(int extend) {
-            final long time = AnimationUtils.currentAnimationTimeMillis();
-            final int elapsedTime = (int) (time - mStartTime);
-            mDuration = elapsedTime + extend;
-            mFinished = false;
-        }
-
-        boolean springback(int start, int min, int max) {
-            mFinished = true;
-
-            mStart = mFinal = start;
-            mVelocity = 0;
-
-            mStartTime = AnimationUtils.currentAnimationTimeMillis();
-            mDuration = 0;
-
-            if (start < min) {
-                startSpringback(start, min, 0);
-            } else if (start > max) {
-                startSpringback(start, max, 0);
-            }
-
-            return !mFinished;
-        }
-
-        private void startSpringback(int start, int end, int velocity) {
-            // mStartTime has been set
-            mFinished = false;
-            mState = CUBIC;
-            mStart = start;
-            mFinal = end;
-            final int delta = start - end;
-            mDeceleration = getDeceleration(delta);
-            // TODO take velocity into account
-            mVelocity = -delta; // only sign is used
-            mOver = Math.abs(delta);
-            mDuration = (int) (1000.0 * Math.sqrt(-2.0 * delta / mDeceleration));
-        }
-
-        void fling(int start, int velocity, int min, int max, int over) {
-            mOver = over;
-            mFinished = false;
-            mCurrVelocity = mVelocity = velocity;
-            mDuration = mSplineDuration = 0;
-            mStartTime = AnimationUtils.currentAnimationTimeMillis();
-            mCurrentPosition = mStart = start;
-
-            if (start > max || start < min) {
-                startAfterEdge(start, min, max, velocity);
-                return;
-            }
-
-            mState = SPLINE;
-            double totalDistance = 0.0;
-
-            if (velocity != 0) {
-                mDuration = mSplineDuration = getSplineFlingDuration(velocity);
-                totalDistance = getSplineFlingDistance(velocity);
-            }
-
-            mSplineDistance = (int) (totalDistance * Math.signum(velocity));
-            mFinal = start + mSplineDistance;
-
-            // Clamp to a valid final position
-            if (mFinal < min) {
-                adjustDuration(mStart, mFinal, min);
-                mFinal = min;
-            }
-
-            if (mFinal > max) {
-                adjustDuration(mStart, mFinal, max);
-                mFinal = max;
-            }
-        }
-
-        private double getSplineDeceleration(int velocity) {
-            return Math.log(INFLEXION * Math.abs(velocity) / (mFlingFriction * mPhysicalCoeff));
-        }
-
-        private double getSplineFlingDistance(int velocity) {
-            final double l = getSplineDeceleration(velocity);
-            final double decelMinusOne = DECELERATION_RATE - 1.0;
-            return mFlingFriction * mPhysicalCoeff * Math.exp(DECELERATION_RATE / decelMinusOne * l);
-        }
-
-        /* Returns the duration, expressed in milliseconds */
-        private int getSplineFlingDuration(int velocity) {
-            final double l = getSplineDeceleration(velocity);
-            final double decelMinusOne = DECELERATION_RATE - 1.0;
-            return (int) (1000.0 * Math.exp(l / decelMinusOne));
-        }
-
-        private void fitOnBounceCurve(int start, int end, int velocity) {
-            // Simulate a bounce that started from edge
-            final float durationToApex = - velocity / mDeceleration;
-            final float distanceToApex = velocity * velocity / 2.0f / Math.abs(mDeceleration);
-            final float distanceToEdge = Math.abs(end - start);
-            final float totalDuration = (float) Math.sqrt(
-                    2.0 * (distanceToApex + distanceToEdge) / Math.abs(mDeceleration));
-            mStartTime -= (int) (1000.0f * (totalDuration - durationToApex));
-            mStart = end;
-            mVelocity = (int) (- mDeceleration * totalDuration);
-        }
-
-        private void startBounceAfterEdge(int start, int end, int velocity) {
-            mDeceleration = getDeceleration(velocity == 0 ? start - end : velocity);
-            fitOnBounceCurve(start, end, velocity);
-            onEdgeReached();
-        }
-
-        private void startAfterEdge(int start, int min, int max, int velocity) {
-            if (start > min && start < max) {
-                Log.e("OverScroller", "startAfterEdge called from a valid position");
-                mFinished = true;
-                return;
-            }
-            final boolean positive = start > max;
-            final int edge = positive ? max : min;
-            final int overDistance = start - edge;
-            boolean keepIncreasing = overDistance * velocity >= 0;
-            if (keepIncreasing) {
-                // Will result in a bounce or a to_boundary depending on velocity.
-                startBounceAfterEdge(start, edge, velocity);
-            } else {
-                // TODO: figure out how to absorb the velocity properly.
-                final double totalDistance = getSplineFlingDistance(velocity);
-                if (false) {
-                    fling(start, velocity, positive ? min : start, positive ? start : max, mOver);
-                } else {
-                    startSpringback(start, edge, velocity);
-                }
-            }
-        }
-
-        void notifyEdgeReached(int start, int end, int over) {
-            // mState is used to detect successive notifications
-            if (mState == SPLINE) {
-                mOver = over;
-                mStartTime = AnimationUtils.currentAnimationTimeMillis();
-                // We were in fling/scroll mode before: current velocity is such that distance to
-                // edge is increasing. This ensures that startAfterEdge will not start a new fling.
-                startAfterEdge(start, end, end, (int) mCurrVelocity);
-            }
-        }
-
-        private void onEdgeReached() {
-            // mStart, mVelocity and mStartTime were adjusted to their values when edge was reached.
-            float distance = mVelocity * mVelocity / (2.0f * Math.abs(mDeceleration));
-            final float sign = Math.signum(mVelocity);
-
-            if (distance > mOver) {
-                // Default deceleration is not sufficient to slow us down before boundary
-                 mDeceleration = - sign * mVelocity * mVelocity / (2.0f * mOver);
-                 distance = mOver;
-            }
-
-            mOver = (int) distance;
-            mState = BALLISTIC;
-            mFinal = mStart + (int) (mVelocity > 0 ? distance : -distance);
-            mDuration = - (int) (1000.0f * mVelocity / mDeceleration);
-        }
-
-        boolean continueWhenFinished() {
-            switch (mState) {
-                case SPLINE:
-                    // Duration from start to null velocity
-                    if (mDuration < mSplineDuration) {
-                        // If the animation was clamped, we reached the edge
-                        mStart = mFinal;
-                        // TODO Better compute speed when edge was reached
-                        mVelocity = (int) mCurrVelocity;
-                        mDeceleration = getDeceleration(mVelocity);
-                        mStartTime += mDuration;
-                        onEdgeReached();
-                    } else {
-                        // Normal stop, no need to continue
-                        return false;
-                    }
-                    break;
-                case BALLISTIC:
-                    mStartTime += mDuration;
-                    startSpringback(mFinal, mStart, 0);
-                    break;
-                case CUBIC:
-                    return false;
-            }
-
-            update();
-            return true;
-        }
-
-        /*
-         * Update the current position and velocity for current time. Returns
-         * true if update has been done and false if animation duration has been
-         * reached.
-         */
-        boolean update() {
-            final long time = AnimationUtils.currentAnimationTimeMillis();
-            final long currentTime = time - mStartTime;
-
-            if (currentTime > mDuration) {
-                return false;
-            }
-
-            double distance = 0.0;
-            switch (mState) {
-                case SPLINE: {
-                    final float t = (float) currentTime / mSplineDuration;
-                    final int index = (int) (NB_SAMPLES * t);
-                    float distanceCoef = 1.f;
-                    float velocityCoef = 0.f;
-                    if (index < NB_SAMPLES) {
-                        final float t_inf = (float) index / NB_SAMPLES;
-                        final float t_sup = (float) (index + 1) / NB_SAMPLES;
-                        final float d_inf = SPLINE_POSITION[index];
-                        final float d_sup = SPLINE_POSITION[index + 1];
-                        velocityCoef = (d_sup - d_inf) / (t_sup - t_inf);
-                        distanceCoef = d_inf + (t - t_inf) * velocityCoef;
-                    }
-
-                    distance = distanceCoef * mSplineDistance;
-                    mCurrVelocity = velocityCoef * mSplineDistance / mSplineDuration * 1000.0f;
-                    break;
-                }
-
-                case BALLISTIC: {
-                    final float t = currentTime / 1000.0f;
-                    mCurrVelocity = mVelocity + mDeceleration * t;
-                    distance = mVelocity * t + mDeceleration * t * t / 2.0f;
-                    break;
-                }
-
-                case CUBIC: {
-                    final float t = (float) (currentTime) / mDuration;
-                    final float t2 = t * t;
-                    final float sign = Math.signum(mVelocity);
-                    distance = sign * mOver * (3.0f * t2 - 2.0f * t * t2);
-                    mCurrVelocity = sign * mOver * 6.0f * (- t + t2);
-                    break;
-                }
-            }
-
-            mCurrentPosition = mStart + (int) Math.round(distance);
-
-            return true;
-        }
-    }
-}
diff --git a/src/com/android/deskclock/widget/sgv/ReorderHelper.java b/src/com/android/deskclock/widget/sgv/ReorderHelper.java
deleted file mode 100644
index 91fd4ea..0000000
--- a/src/com/android/deskclock/widget/sgv/ReorderHelper.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright (C) 2013 Google Inc. All Rights Reserved.
- */
-
-package com.android.deskclock.widget.sgv;
-
-import android.graphics.Point;
-import android.util.Log;
-import android.view.View;
-
-import com.android.deskclock.widget.sgv.StaggeredGridView.LayoutParams;
-import com.android.deskclock.widget.sgv.StaggeredGridView.ReorderListener;
-
-
-/**
- * Helper class for doing reorder animations. Works out the logical position of
- * where an item would be placed as the user drags it around.
- */
-public final class ReorderHelper {
-
-    private static final String TAG = "DeskClock";
-
-    /**
-     * Constant to indicate an unsupported reordering position.
-     */
-    public static final int INVALID_REORDER_POS = -2;
-
-    private final ReorderListener mReorderListener;
-
-    // Current {@link ReorderView} that is currently being dragged over.  If drag is released here,
-    // and this child supports reordering, the dragged view will be reordered to be next
-    // to this child.
-    private ReorderView mCurrentDraggedOverChild;
-
-    // The current child that is being dragged for reordering.
-    private ReorderView mDraggedChild;
-
-    // The id of mDraggedChild.
-    private long mDraggedChildId = -1;
-
-    // The parent view group that dragged children are attached to.
-    private final StaggeredGridView mParentView;
-
-    private boolean mEnableUpdatesOnDrag = true;
-
-    public ReorderHelper(ReorderListener listener, StaggeredGridView parentView) {
-        mReorderListener = listener;
-        mParentView = parentView;
-        if (listener == null) {
-            throw new IllegalArgumentException("ReorderListener cannot be null");
-        }
-
-        if (parentView == null) {
-            throw new IllegalArgumentException("ParentView cannot be null");
-        }
-    }
-
-    /**
-     * Handle dropping the dragged child.
-     * @return true if the drop results in a reordering, false otherwise.
-     */
-    public boolean handleDrop(Point p) {
-        View reorderTarget = null;
-        if (mCurrentDraggedOverChild != null) {
-            reorderTarget = getReorderableChildAtCoordinate(p);
-        } else {
-            Log.w(TAG, "Current dragged over child does not exist");
-        }
-
-        // If reorder target is null, the drag coordinate is not over any
-        // reordering areas. Don't update dragged over child if its the same as
-        // it was before or is the same as the child's original item.
-        if (reorderTarget != null) {
-            final LayoutParams lp = (LayoutParams) reorderTarget.getLayoutParams();
-            // Ensure that target position is not the same as the original,
-            // since that's a no-op.
-            if (lp.position != mCurrentDraggedOverChild.position) {
-                updateDraggedOverChild(reorderTarget);
-            }
-        }
-
-        if (mCurrentDraggedOverChild != null &&
-                mDraggedChild.position != mCurrentDraggedOverChild.position) {
-            return mReorderListener.onReorder(mDraggedChild.target, mDraggedChild.id,
-                    mDraggedChild.position,
-                    mCurrentDraggedOverChild.position);
-        } else {
-            // Even if the dragged child is not dropped in a reorder area, we
-            // would still need to notify the listener of the drop event.
-            mReorderListener.onDrop(mDraggedChild.target, mDraggedChild.position,
-                    mCurrentDraggedOverChild.position);
-            return false;
-        }
-    }
-
-    public void handleDragCancelled(View draggedView) {
-        mReorderListener.onCancelDrag(draggedView);
-    }
-
-    public void handleDragStart(View view, int pos, long id, Point p) {
-        mDraggedChild = new ReorderView(view, pos, id);
-        mDraggedChildId = id;
-        mCurrentDraggedOverChild = new ReorderView(view, pos, id);
-        mReorderListener.onPickedUp(mDraggedChild.target);
-    }
-
-    /**
-     * Handles determining which child views should be moved out of the way to
-     * make space for a reordered item and updates the ReorderListener when a
-     * new child view's space is entered by the dragging view.
-     */
-    public void handleDrag(Point p) {
-        if (p == null || p.y < 0 && p.y > mParentView.getHeight()) {
-            // If the user drags off screen, DragEvent.ACTION_DRAG_ENDED, would be called, so we'll
-            // treat it as though the user has released drag.
-            handleDrop(p);
-            return;
-        }
-
-        if (!mEnableUpdatesOnDrag) {
-            return;
-        }
-
-        View reorderTarget = null;
-        if (mCurrentDraggedOverChild != null) {
-            reorderTarget = getReorderableChildAtCoordinate(p);
-        } else {
-            Log.w(TAG, "Current dragged over child does not exist");
-        }
-
-        // If reorder target is null, the drag coordinate is not over any
-        // reordering areas. Don't update dragged over child if its the same as
-        // it was before or is the same as the child's original item.
-        if (reorderTarget != null) {
-            final LayoutParams lp = (LayoutParams) reorderTarget.getLayoutParams();
-            if (lp.position != mCurrentDraggedOverChild.position) {
-                updateDraggedOverChild(reorderTarget);
-                // Ensure that target position is not the same as the original,
-                // since that's a no-op.
-                mReorderListener.onEnterReorderArea(reorderTarget, lp.position);
-            }
-        }
-    }
-
-    /**
-     * Enable updates on drag events. If set to false, handleDrag will not update place holder
-     */
-    public void enableUpdatesOnDrag(boolean enabled) {
-        mEnableUpdatesOnDrag = enabled;
-    }
-
-    /**
-     * Clear dragged over child info
-     */
-    public void clearDraggedOverChild() {
-        mCurrentDraggedOverChild = null;
-    }
-
-    /**
-     * Return if the currently dragged view is over a valid reordering area.
-     */
-    public boolean isOverReorderingArea() {
-        return mCurrentDraggedOverChild != null;
-    }
-
-    /**
-     * Get the position of the child that is being dragged over. If there isn't one, returns
-     * {@link #INVALID_REORDER_POS}
-     */
-    public int getCurrentDraggedOverChildPosition() {
-        if (mCurrentDraggedOverChild != null) {
-            return mCurrentDraggedOverChild.position;
-        }
-
-        return INVALID_REORDER_POS;
-    }
-
-    /**
-     * Get the id of the child that is being dragged. If there isn't one, returns -1
-     */
-    public long getDraggedChildId() {
-        return mDraggedChildId;
-    }
-
-    /**
-     * Get the original view of the child that is being dragged. If there isn't
-     * one, returns null
-     */
-    public View getDraggedChild() {
-        return mDraggedChild != null ? mDraggedChild.target : null;
-    }
-
-    /**
-     * Clear original dragged child info
-     */
-    public void clearDraggedChild() {
-        mDraggedChild = null;
-    }
-
-    // TODO: Consolidate clearDraggedChild() and clearDraggedChildId().
-    public void clearDraggedChildId() {
-        mDraggedChildId = -1;
-    }
-
-    /**
-     * Get the original position of the child that is being dragged. If there isn't one, returns
-     * {@link #INVALID_REORDER_POS};
-     */
-    public int getDraggedChildPosition() {
-        return mDraggedChild != null ? mDraggedChild.position : INVALID_REORDER_POS;
-    }
-
-    public void updateDraggedChildView(View v) {
-        if (mDraggedChild != null && v != mDraggedChild.target) {
-            mDraggedChild.target = v;
-        }
-    }
-
-    public void updateDraggedOverChildView(View v) {
-        if (mCurrentDraggedOverChild != null && v != mCurrentDraggedOverChild.target) {
-            mCurrentDraggedOverChild.target = v;
-        }
-    }
-
-    /**
-     * Update the current view that is being dragged over, and clean up all drag and hover
-     * UI states from other sibling views.
-     * @param child The new child that is being dragged over.
-     */
-    private void updateDraggedOverChild(View child) {
-        final LayoutParams childLayoutParam = (LayoutParams) child.getLayoutParams();
-        mCurrentDraggedOverChild = new ReorderView(
-                child, childLayoutParam.position, childLayoutParam.id);
-    }
-
-    /**
-     * Return the child view specified by the coordinates if
-     * there exists a child there.
-     *
-     * @return the child in this StaggeredGridView at the coordinates, null otherwise.
-     */
-    public View getReorderableChildAtCoordinate(Point p) {
-        if (p == null || p.y < 0) {
-            // TODO: If we've dragged off the screen, return null for now until we know what
-            // we'd like the experience to be like.
-            return null;
-        }
-
-        final int count = mParentView.getChildCount();
-        for (int i = 0; i < count; i++) {
-            if (!mParentView.isChildReorderable(i)) {
-                continue;
-            }
-            final View childView = mParentView.getChildAt(i);
-            if (p.x >= childView.getLeft() && p.x < childView.getRight()
-                    && p.y >= childView.getTop() && p.y < childView.getBottom()) {
-                return childView;
-            }
-        }
-
-        return null;
-    }
-
-    public boolean hasReorderListener() {
-        return mReorderListener != null;
-    }
-
-    private class ReorderView {
-        final long id;
-        final int position;
-        View target;
-        public ReorderView(View v, int pos, long i) {
-            target = v;
-            position = pos;
-            id = i;
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/deskclock/widget/sgv/ReorderUtils.java b/src/com/android/deskclock/widget/sgv/ReorderUtils.java
deleted file mode 100644
index daa538f..0000000
--- a/src/com/android/deskclock/widget/sgv/ReorderUtils.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All Rights Reserved.
- */
-
-package com.android.deskclock.widget.sgv;
-
-public class ReorderUtils {
-    /**
-     * Possible states a dragged view can be in.
-     */
-    public static final int ON_PICKED_UP = 0;
-    public static final int ON_DRAG_RELEASE = 1;
-    public static final int ON_DRAG_CANCELLED = 2;
-
-    /**
-     * Reordering area of a view in a StaggeredGridView.
-     */
-    public static final int REORDER_AREA_NONE = 0x0;
-    public static final int REORDER_AREA_VALID = 0x1;
-
-    /**
-     *  Reordering states
-     */
-    public static final int DRAG_STATE_NONE = 0;
-    public static final int DRAG_STATE_DRAGGING = 1;
-    public static final int DRAG_STATE_RELEASED_REORDER= 2;
-    public static final int DRAG_STATE_RELEASED_HOVER = 3;
-
-    /**
-     * Reordering directions allowed.  {@link #REORDER_DIRECTION_HORIZONTAL} direction means that
-     * the user is only allowed to drag a view along the horizontal axis.  Likewise for
-     * {@link #REORDER_DIRECTION_VERTICAL}.  These two flags can be OR'ed together to allow for
-     * free dragging across both horizontal and vertical axes.
-     */
-    public static final int REORDER_DIRECTION_HORIZONTAL = 0x1;
-    public static final int REORDER_DIRECTION_VERTICAL = 0x2;
-}
diff --git a/src/com/android/deskclock/widget/sgv/SgvAnimationHelper.java b/src/com/android/deskclock/widget/sgv/SgvAnimationHelper.java
deleted file mode 100644
index f6f32c3..0000000
--- a/src/com/android/deskclock/widget/sgv/SgvAnimationHelper.java
+++ /dev/null
@@ -1,334 +0,0 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
-
-package com.android.deskclock.widget.sgv;
-
-import android.R.interpolator;
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ObjectAnimator;
-import android.content.Context;
-import android.graphics.Point;
-import android.view.View;
-import android.view.WindowManager;
-import android.view.animation.AnimationUtils;
-import android.view.animation.Interpolator;
-
-
-import java.util.List;
-
-public class SgvAnimationHelper {
-
-    /**
-     * Supported entrance animations for views in the {@link StaggeredGridView}.
-     */
-    public enum AnimationIn {
-        NONE,
-        // Fly in all views from the bottom of the screen
-        FLY_UP_ALL_VIEWS,
-        // New views expand into view from height 0.  Existing views are updated and translated
-        // to their new positions if appropriate.
-        EXPAND_NEW_VIEWS,
-        // New views expand into view from height 0.  Existing views are updated and translated
-        // to their new positions if appropriate.  This animation is done for all views
-        // simultaneously without a cascade effect.
-        EXPAND_NEW_VIEWS_NO_CASCADE,
-        // New views are flown in from the bottom.  Existing views are updated and translated
-        // to their new positions if appropriate.
-        FLY_IN_NEW_VIEWS,
-        // New views are slid in from the side.  Existing views are updated and translated
-        // to their new positions if appropriate.
-        SLIDE_IN_NEW_VIEWS,
-        // Fade in all new views
-        FADE,
-    }
-
-    /**
-     * Supported exit animations for views in the {@link StaggeredGridView}.
-     */
-    public enum AnimationOut {
-        NONE,
-        // Stale views are faded out of view.  Existing views are then updated and translated
-        // to their new positions if appropriate.
-        FADE,
-        // Stale views are dropped to the bottom of the screen.  Existing views are then updated
-        // and translated to their new positions if appropriate.
-        FLY_DOWN,
-        // Stale views are slid to the side of the screen.  Existing views are then updated
-        // and translated to their new positions if appropriate.
-        SLIDE,
-        // Stale views are collapsed to height 0.  Existing views are then updated
-        // and translated to their new positions if appropriate.
-        COLLAPSE
-    }
-
-    private static Interpolator sDecelerateQuintInterpolator;
-
-    private static final int ANIMATION_LONG_SCREEN_SIZE = 1600;
-    private static final int ANIMATION_MED_SCREEN_SIZE = 1200;
-
-    // Duration of an individual animation when the children of the grid are laid out again. These
-    // are measured in milliseconds and based on the height of the screen.
-    private static final int ANIMATION_SHORT_DURATION = 400;
-    private static final int ANIMATION_MED_DURATION = 450;
-    private static final int ANIMATION_LONG_DURATION = 500;
-
-    public static final float ANIMATION_ROTATION_DEGREES = 25.0f;
-
-    /**
-     * Duration of an individual animation when the children of the grid are laid out again.
-     * This is measured in milliseconds.
-     */
-    private static int sAnimationDuration = ANIMATION_MED_DURATION;
-
-    public static void initialize(Context context) {
-        sDecelerateQuintInterpolator = AnimationUtils.loadInterpolator(context,
-                interpolator.decelerate_quint);
-
-        final Point size = new Point();
-        ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).
-                getDefaultDisplay().getSize(size);
-        final int screenHeight = size.y;
-
-        if (screenHeight >= ANIMATION_LONG_SCREEN_SIZE) {
-            sAnimationDuration = ANIMATION_LONG_DURATION;
-        } else if (screenHeight >= ANIMATION_MED_SCREEN_SIZE) {
-            sAnimationDuration = ANIMATION_MED_DURATION;
-        } else {
-            sAnimationDuration = ANIMATION_SHORT_DURATION;
-        }
-    }
-
-    public static int getDefaultAnimationDuration() {
-        return sAnimationDuration;
-    }
-
-    public static Interpolator getDefaultAnimationInterpolator() {
-        return sDecelerateQuintInterpolator;
-    }
-
-    /**
-     * Add animations to translate a view's X-translation.  {@link AnimatorListener} can be null.
-     */
-    private static void addXTranslationAnimators(List<Animator> animators,
-            final View view, int startTranslation, final int endTranslation, int animationDelay,
-            AnimatorListener listener) {
-        // We used to skip the animation if startTranslation == endTranslation,
-        // but to add a recycle view listener, we need at least one animation
-        view.setTranslationX(startTranslation);
-        final ObjectAnimator translateAnimatorX = ObjectAnimator.ofFloat(view,
-                View.TRANSLATION_X, startTranslation, endTranslation);
-        translateAnimatorX.setInterpolator(sDecelerateQuintInterpolator);
-        translateAnimatorX.setDuration(sAnimationDuration);
-        translateAnimatorX.setStartDelay(animationDelay);
-        if (listener != null) {
-            translateAnimatorX.addListener(listener);
-        }
-
-        animators.add(translateAnimatorX);
-    }
-
-    /**
-     * Add animations to translate a view's Y-translation.  {@link AnimatorListener} can be null.
-     */
-    private static void addYTranslationAnimators(List<Animator> animators,
-            final View view, int startTranslation, final int endTranslation, int animationDelay,
-            AnimatorListener listener) {
-        // We used to skip the animation if startTranslation == endTranslation,
-        // but to add a recycle view listener, we need at least one animation
-        view.setTranslationY(startTranslation);
-        final ObjectAnimator translateAnimatorY = ObjectAnimator.ofFloat(view,
-                View.TRANSLATION_Y, startTranslation, endTranslation);
-        translateAnimatorY.setInterpolator(sDecelerateQuintInterpolator);
-        translateAnimatorY.setDuration(sAnimationDuration);
-        translateAnimatorY.setStartDelay(animationDelay);
-
-        if (listener != null) {
-            translateAnimatorY.addListener(listener);
-        }
-
-        animators.add(translateAnimatorY);
-    }
-
-    /**
-     * Translate a view to the specified translation values, and animate the translations to 0.
-     */
-    public static void addXYTranslationAnimators(List<Animator> animators, final View view,
-            int xTranslation, int yTranslation, int animationDelay) {
-        addXTranslationAnimators(animators, view, xTranslation, 0, animationDelay, null);
-        addYTranslationAnimators(animators, view, yTranslation, 0, animationDelay, null);
-    }
-
-    /**
-     * Translate a view to the specified translation values, while rotating to the specified
-     * rotation value.
-     */
-    public static void addTranslationRotationAnimators(List<Animator> animators, final View view,
-            int xTranslation, int yTranslation, float rotation, int animationDelay) {
-        addXYTranslationAnimators(animators, view, xTranslation, yTranslation, animationDelay);
-
-        view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
-        view.setRotation(rotation);
-
-        final ObjectAnimator rotateAnimatorY = ObjectAnimator.ofFloat(view,
-                View.ROTATION, view.getRotation(), 0.0f);
-        rotateAnimatorY.setInterpolator(sDecelerateQuintInterpolator);
-        rotateAnimatorY.setDuration(sAnimationDuration);
-        rotateAnimatorY.setStartDelay(animationDelay);
-        rotateAnimatorY.addListener(new AnimatorListenerAdapter() {
-            private boolean mIsCanceled = false;
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                mIsCanceled = true;
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                if (!mIsCanceled) {
-                    view.setRotation(0);
-                }
-
-                view.setLayerType(View.LAYER_TYPE_NONE, null);
-            }
-        });
-
-        animators.add(rotateAnimatorY);
-    }
-
-    /**
-     * Expand a view into view by scaling up vertically from 0.
-     */
-    public static void addExpandInAnimators(List<Animator> animators, final View view,
-            int animationDelay) {
-        view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
-        view.setScaleY(0);
-
-        final ObjectAnimator scaleAnimatorY = ObjectAnimator.ofFloat(view,
-                View.SCALE_Y, view.getScaleY(), 1.0f);
-        scaleAnimatorY.setInterpolator(sDecelerateQuintInterpolator);
-        scaleAnimatorY.setDuration(sAnimationDuration);
-        scaleAnimatorY.setStartDelay(animationDelay);
-        scaleAnimatorY.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                view.setScaleY(1.0f);
-                view.setLayerType(View.LAYER_TYPE_NONE, null);
-            }
-        });
-
-        animators.add(scaleAnimatorY);
-    }
-
-    /**
-     * Collapse a view out by scaling it from its current scaled value to 0.
-     */
-    public static void addCollapseOutAnimators(List<Animator> animators, final View view,
-            int animationDelay) {
-        view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
-
-        final ObjectAnimator scaleAnimatorY = ObjectAnimator.ofFloat(view, View.SCALE_Y,
-                view.getScaleY(), 0);
-        scaleAnimatorY.setInterpolator(sDecelerateQuintInterpolator);
-        scaleAnimatorY.setDuration(sAnimationDuration);
-        scaleAnimatorY.setStartDelay(animationDelay);
-        scaleAnimatorY.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                view.setScaleY(0);
-                view.setLayerType(View.LAYER_TYPE_NONE, null);
-            }
-        });
-
-        animators.add(scaleAnimatorY);
-    }
-
-    /**
-     * Collapse a view out by scaling it from its current scaled value to 0.
-     * The animators are expected to run immediately without a start delay.
-     */
-    public static void addCollapseOutAnimators(List<Animator> animators, final View view) {
-        addCollapseOutAnimators(animators, view, 0 /* animation delay */);
-    }
-
-
-
-    /**
-     * Fly a view out by moving it vertically off the bottom of the screen.
-     */
-    public static void addFlyOutAnimators(List<Animator> animators,
-            final View view, int startTranslation, int endTranslation, int animationDelay) {
-        addYTranslationAnimators(animators, view, startTranslation, endTranslation,
-                animationDelay, null);
-    }
-
-    public static void addFlyOutAnimators(List<Animator> animators, final View view,
-            int startTranslation, int endTranslation) {
-        addFlyOutAnimators(animators, view, startTranslation,
-                endTranslation, 0 /* animation delay */);
-    }
-
-    public static void addSlideInFromRightAnimators(List<Animator> animators, final View view,
-            int startTranslation, int animationDelay) {
-        addXTranslationAnimators(animators, view, startTranslation, 0, animationDelay, null);
-        addFadeAnimators(animators, view, 0, 1.0f, animationDelay);
-    }
-
-    /**
-     * Slide a view out of view from the start to end position, fading the view out as it
-     * approaches the end position.
-     */
-    public static void addSlideOutAnimators(List<Animator> animators, final View view,
-            int startTranslation, int endTranslation, int animationDelay) {
-        addFadeAnimators(animators, view, view.getAlpha(), 0, animationDelay);
-        addXTranslationAnimators(animators, view, startTranslation, endTranslation,
-                animationDelay, null);
-    }
-
-    /**
-     * Slide a view out of view from the start to end position, fading the view out as it
-     * approaches the end position.  The animators are expected to run immediately without a
-     * start delay.
-     */
-    public static void addSlideOutAnimators(List<Animator> animators, final View view,
-            int startTranslation, int endTranslation) {
-        addSlideOutAnimators(animators, view, startTranslation,
-                endTranslation, 0 /* animation delay */);
-    }
-
-    /**
-     * Add animations to fade a view from the specified start alpha value to end value.
-     */
-    public static void addFadeAnimators(List<Animator> animators, final View view,
-            float startAlpha, final float endAlpha, int animationDelay) {
-        if (startAlpha == endAlpha) {
-            return;
-        }
-
-        view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
-        view.setAlpha(startAlpha);
-
-        final ObjectAnimator fadeAnimator = ObjectAnimator.ofFloat(view, View.ALPHA,
-                view.getAlpha(), endAlpha);
-        fadeAnimator.setInterpolator(sDecelerateQuintInterpolator);
-        fadeAnimator.setDuration(sAnimationDuration);
-        fadeAnimator.setStartDelay(animationDelay);
-        fadeAnimator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                view.setAlpha(endAlpha);
-                view.setLayerType(View.LAYER_TYPE_NONE, null);
-            }
-        });
-        animators.add(fadeAnimator);
-    }
-
-    /**
-     * Add animations to fade a view from the specified start alpha value to end value.
-     * The animators are expected to run immediately without a start delay.
-     */
-    public static void addFadeAnimators(List<Animator> animators, final View view,
-            float startAlpha, final float endAlpha) {
-        addFadeAnimators(animators, view, startAlpha, endAlpha, 0 /* animation delay */);
-    }
-}
diff --git a/src/com/android/deskclock/widget/sgv/StaggeredGridView.java b/src/com/android/deskclock/widget/sgv/StaggeredGridView.java
deleted file mode 100644
index aa44df4..0000000
--- a/src/com/android/deskclock/widget/sgv/StaggeredGridView.java
+++ /dev/null
@@ -1,4148 +0,0 @@
-/*
- * 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.widget.sgv;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ValueAnimator;
-import android.annotation.SuppressLint;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.database.DataSetObserver;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.PixelFormat;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.os.Handler;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.v4.util.SparseArrayCompat;
-import android.support.v4.view.MotionEventCompat;
-import android.support.v4.view.VelocityTrackerCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.widget.EdgeEffectCompat;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.DragEvent;
-import android.view.Gravity;
-import android.view.MotionEvent;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.GridView;
-import android.widget.ImageView;
-import android.widget.ScrollView;
-
-import com.android.deskclock.widget.sgv.SgvAnimationHelper.AnimationIn;
-import com.android.deskclock.widget.sgv.SgvAnimationHelper.AnimationOut;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Temporarily copied from support v4 library so that StaggeredGridView can access
- * animation APIs on the current SDK version.
- */
-/**
- * ListView and GridView just not complex enough? Try StaggeredGridView!
- *
- * <p>StaggeredGridView presents a multi-column grid with consistent column sizes
- * but varying row sizes between the columns. Each successive item from a
- * {@link android.widget.ListAdapter ListAdapter} will be arranged from top to bottom,
- * left to right. The largest vertical gap is always filled first.</p>
- *
- * <p>Item views may span multiple columns as specified by their {@link LayoutParams}.
- * The attribute <code>android:layout_span</code> may be used when inflating
- * item views from xml.</p>
- */
-public class StaggeredGridView extends ViewGroup {
-
-    private static final String TAG = "Clock-" + StaggeredGridView.class.getSimpleName();
-
-    /*
-     * There are a few things you should know if you're going to make modifications
-     * to StaggeredGridView.
-     *
-     * Like ListView, SGV populates from an adapter and recycles views that fall out
-     * of the visible boundaries of the grid. A few invariants always hold:
-     *
-     * - mFirstPosition is the adapter position of the View returned by getChildAt(0).
-     * - Any child index can be translated to an adapter position by adding mFirstPosition.
-     * - Any adapter position can be translated to a child index by subtracting mFirstPosition.
-     * - Views for items in the range [mFirstPosition, mFirstPosition + getChildCount()) are
-     *   currently attached to the grid as children. All other adapter positions do not have
-     *   active views.
-     *
-     * This means a few things thanks to the staggered grid's nature. Some views may stay attached
-     * long after they have scrolled offscreen if removing and recycling them would result in
-     * breaking one of the invariants above.
-     *
-     * LayoutRecords are used to track data about a particular item's layout after the associated
-     * view has been removed. These let positioning and the choice of column for an item
-     * remain consistent even though the rules for filling content up vs. filling down vary.
-     *
-     * Whenever layout parameters for a known LayoutRecord change, other LayoutRecords before
-     * or after it may need to be invalidated. e.g. if the item's height or the number
-     * of columns it spans changes, all bets for other items in the same direction are off
-     * since the cached information no longer applies.
-     */
-
-    private GridAdapter mAdapter;
-
-    public static final int COLUMN_COUNT_AUTO = -1;
-
-    /**
-     * The window size to search for a specific item when restoring scroll position.
-     */
-    private final int SCROLL_RESTORE_WINDOW_SIZE = 10;
-
-    private static final int CHILD_TO_REORDER_AREA_RATIO = 4;
-
-    private static final int SINGLE_COL_REORDERING_AREA_SIZE = 30;
-
-    // Time delay in milliseconds between posting each scroll runnables.
-    private static final int SCROLL_HANDLER_DELAY = 5;
-
-    // The default rate of pixels to scroll by when a child view is dragged towards the
-    // upper and lower bound of this view.
-    private static final int DRAG_SCROLL_RATE = 10;
-
-    public static final int ANIMATION_DELAY_IN_MS = 50;
-
-    private AnimationIn mAnimationInMode = AnimationIn.NONE;
-    private AnimationOut mAnimationOutMode = AnimationOut.NONE;
-
-    private AnimatorSet mCurrentRunningAnimatorSet = null;
-
-    /**
-     * Flag to indicate whether the current running animator set was canceled before it reaching
-     * the end of the animations.  This flag is used to help indicate whether the next set of
-     * animators should resume from where the last animator set left off.
-     */
-    boolean mIsCurrentAnimationCanceled = false;
-
-    private int mColCountSetting = 2;
-    private int mColCount = 2;
-    private int mMinColWidth = 0;
-    private int mItemMargin = 0;
-
-    private int[] mItemTops;
-    private int[] mItemBottoms;
-
-    private final Rect mTempRect = new Rect();
-
-    private boolean mFastChildLayout;
-    private boolean mPopulating;
-    private boolean mInLayout;
-
-    private boolean mIsRtlLayout;
-
-    private final RecycleBin mRecycler = new RecycleBin();
-
-    private final AdapterDataSetObserver mObserver = new AdapterDataSetObserver();
-
-    private boolean mDataChanged;
-    private int mItemCount;
-
-    /**
-     * After data set change, we ask adapter the first view that changed.
-     * Any view from 0 to mFirstChangedPosition - 1 is not changed.
-     */
-    private int mFirstChangedPosition;
-
-    /**
-     * If set to true, then we guard against jagged edges in the grid by doing expensive
-     * computation. Otherwise if this is false, we skip the computation.
-     */
-    private boolean mGuardAgainstJaggedEdges;
-
-    private boolean mHasStableIds;
-
-    /**
-     * List of all views to animate out.  This is used when we need to animate out stale views.
-     */
-    private final List<View> mViewsToAnimateOut = new ArrayList<View>();
-
-    private int mFirstPosition;
-
-    private long mFocusedChildIdToScrollIntoView;
-    private ScrollState mCurrentScrollState;
-
-    private final int mTouchSlop;
-    private final int mMaximumVelocity;
-    private final int mFlingVelocity;
-    private float mLastTouchY = 0;
-    private float mTouchRemainderY;
-    private int mActivePointerId;
-
-    private static final int TOUCH_MODE_IDLE = 0;
-    private static final int TOUCH_MODE_DRAGGING = 1;
-    private static final int TOUCH_MODE_FLINGING = 2;
-    private static final int TOUCH_MODE_OVERFLING = 3;
-
-    // Value used to estimate the range of scroll and scroll position
-    final static int SCROLLING_ESTIMATED_ITEM_HEIGHT = 100;
-
-    private int mTouchMode;
-    private final VelocityTracker mVelocityTracker = VelocityTracker.obtain();
-    private final OverScrollerSGV mScroller;
-
-    private final EdgeEffectCompat mTopEdge;
-    private final EdgeEffectCompat mBottomEdge;
-
-    private boolean mIsDragReorderingEnabled;
-
-    private ScrollListener mScrollListener;
-    private OnSizeChangedListener mOnSizeChangedListener;
-
-    // The view to show when the adapter is empty.
-    private View mEmptyView;
-
-    // The size of the region at location relative to the child's edges where reordering
-    // can happen if another child view is dragged and dropped over it.
-    private int mHorizontalReorderingAreaSize;
-
-    // TODO: Put these states into a ReorderingParam object for maintainability.
-    private ImageView mDragView;
-
-    // X and Y positions of the touch down event that started the drag
-    private int mTouchDownForDragStartX;
-    private int mTouchDownForDragStartY;
-
-    // X and Y offsets inside the item from where the user grabbed to the
-    // child's left coordinate.
-    // This is used to aid in the drawing of the drag shadow.
-    private int mTouchOffsetToChildLeft;
-    private int mTouchOffsetToChildTop;
-
-    // Difference between screen coordinates and coordinates in this view.
-    private int mOffsetToAbsoluteX;
-    private int mOffsetToAbsoluteY;
-
-    // the cached positions of the drag view when released.
-    private Rect mCachedDragViewRect;
-
-    // the current drag state
-    private int mDragState;
-
-    // the height of this view
-    private int mHeight;
-
-    // The bounds of the screen that should initiate scrolling when a view
-    // is dragged past these positions.
-    private int mUpperScrollBound;
-    private int mLowerScrollBound;
-
-    // The Bitmap that contains the drag shadow.
-    private Bitmap mDragBitmap;
-    private final int mOverscrollDistance;
-
-    private final WindowManager mWindowManager;
-    private WindowManager.LayoutParams mWindowParams;
-    private static final int mWindowManagerLayoutFlags =
-            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
-            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
-            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
-            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
-            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
-
-    private ReorderHelper mReorderHelper;
-
-    /**
-     * Indicates whether to use pixels-based or position-based scrollbar
-     * properties.
-     * This property is borrow from AbsListView
-     */
-    private boolean mSmoothScrollbarEnabled = false;
-
-    private static final class LayoutRecord {
-        public int column;
-        public long id = -1;
-        public int height;
-        public int span;
-        private int[] mMargins;
-
-        private final void ensureMargins() {
-            if (mMargins == null) {
-                // Don't need to confirm length;
-                // all layoutrecords are purged when column count changes.
-                mMargins = new int[span * 2];
-            }
-        }
-
-        public final int getMarginAbove(int col) {
-            if (mMargins == null) {
-                return 0;
-            }
-            return mMargins[col * 2];
-        }
-
-        public final int getMarginBelow(int col) {
-            if (mMargins == null) {
-                return 0;
-            }
-            return mMargins[col * 2 + 1];
-        }
-
-        public final void setMarginAbove(int col, int margin) {
-            if (mMargins == null && margin == 0) {
-                return;
-            }
-            ensureMargins();
-            mMargins[col * 2] = margin;
-        }
-
-        public final void setMarginBelow(int col, int margin) {
-            if (mMargins == null && margin == 0) {
-                return;
-            }
-            ensureMargins();
-            mMargins[col * 2 + 1] = margin;
-        }
-
-        @Override
-        public String toString() {
-            String result = "LayoutRecord{c=" + column + ", id=" + id + " h=" + height +
-                    " s=" + span;
-            if (mMargins != null) {
-                result += " margins[above, below](";
-                for (int i = 0; i < mMargins.length; i += 2) {
-                    result += "[" + mMargins[i] + ", " + mMargins[i+1] + "]";
-                }
-                result += ")";
-            }
-            return result + "}";
-        }
-    }
-
-    private final Map<Long, ViewRectPair> mChildRectsForAnimation =
-            new HashMap<Long, ViewRectPair>();
-
-    private final SparseArrayCompat<LayoutRecord> mLayoutRecords =
-            new SparseArrayCompat<LayoutRecord>();
-
-    // Handler for executing the scroll runnable
-    private Handler mScrollHandler;
-
-    // Boolean is true when the {@link #mDragScroller} scroll runanbled has been kicked off.
-    // This is set back to false when it is removed from the handler.
-    private boolean mIsDragScrollerRunning;
-
-    /**
-     * Scroller runnable to invoke scrolling when user is holding a dragged view over the upper
-     * or lower bounds of the screen.
-     */
-    private final Runnable mDragScroller = new Runnable() {
-        @Override
-        public void run() {
-            if (mDragState == ReorderUtils.DRAG_STATE_NONE) {
-                return;
-            }
-
-            boolean enableUpdate = true;
-            if (mLastTouchY >= mLowerScrollBound) {
-                // scroll the list up a bit if we're past the lower bound, and the direction
-                // of the movement is towards the bottom of the view.
-                if (trackMotionScroll(-DRAG_SCROLL_RATE, false)) {
-                    // Disable reordering if the view is scrolling
-                    enableUpdate = false;
-                }
-            } else if (mLastTouchY <= mUpperScrollBound) {
-                // scroll the list down a bit if we're past the upper bound, and the direction
-                // of the movement is towards the top of the view.
-                if (trackMotionScroll(DRAG_SCROLL_RATE, false)) {
-                    // Disable reordering if the view is scrolling
-                    enableUpdate = false;
-                }
-            }
-
-            mReorderHelper.enableUpdatesOnDrag(enableUpdate);
-
-            mScrollHandler.postDelayed(this, SCROLL_HANDLER_DELAY);
-        }
-    };
-
-    public StaggeredGridView(Context context) {
-        this(context, null);
-    }
-
-    public StaggeredGridView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public StaggeredGridView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-        final ViewConfiguration vc = ViewConfiguration.get(context);
-        mTouchSlop = vc.getScaledTouchSlop();
-        mMaximumVelocity = vc.getScaledMaximumFlingVelocity();
-        mFlingVelocity = vc.getScaledMinimumFlingVelocity();
-        mScroller = new OverScrollerSGV(context);
-
-        mTopEdge = new EdgeEffectCompat(context);
-        mBottomEdge = new EdgeEffectCompat(context);
-        setWillNotDraw(false);
-        setClipToPadding(false);
-
-        SgvAnimationHelper.initialize(context);
-
-        mDragState = ReorderUtils.DRAG_STATE_NONE;
-        mIsDragReorderingEnabled = true;
-        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
-        final ViewConfiguration configuration = ViewConfiguration.get(context);
-        mOverscrollDistance = configuration.getScaledOverflingDistance();
-        // Disable splitting event. Only one of the children can handle motion event.
-        setMotionEventSplittingEnabled(false);
-    }
-
-    /**
-     * Check to see if the current layout is Right-to-Left.  This check is only supported for
-     * API 17+.  For earlier versions, this method will just return false.
-     *
-     * NOTE:  This is based on the private API method in {@link View} class.
-     *
-     * @return boolean Boolean indicating whether the currently locale is RTL.
-     */
-    @SuppressLint("NewApi")
-    private boolean isLayoutRtl() {
-        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
-            return View.LAYOUT_DIRECTION_RTL == getLayoutDirection();
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Set a fixed number of columns for this grid. Space will be divided evenly
-     * among all columns, respecting the item margin between columns.
-     * The default is 2. (If it were 1, perhaps you should be using a
-     * {@link android.widget.ListView ListView}.)
-     *
-     * @param colCount Number of columns to display.
-     * @see #setMinColumnWidth(int)
-     */
-    public void setColumnCount(int colCount) {
-        if (colCount < 1 && colCount != COLUMN_COUNT_AUTO) {
-            throw new IllegalArgumentException("Column count must be at least 1 - received " +
-                    colCount);
-        }
-        final boolean needsPopulate = colCount != mColCount;
-        mColCount = mColCountSetting = colCount;
-        if (needsPopulate) {
-            // When switching column count, for now, don't restore scroll position, and just
-            // start layout fresh again.
-            clearAllState();
-
-            mHorizontalReorderingAreaSize = 0;
-            populate();
-        }
-    }
-
-    public int getColumnCount() {
-        return mColCount;
-    }
-
-    /**
-     * Set whether or not to explicitly guard against "jagged edges" in the grid
-     * (meaning that the top edge of the children views in the first row of the grid can be
-     * horizontally misaligned).
-     *
-     * If guardAgainstJaggedEdges is true, then we prevent jagged edges by computing the heights of
-     * all views starting at the 0th position of the adapter to figure out the proper offset of the
-     * views currently on screen. This is an expensive operation and should be avoided if possible.
-     *
-     * If guardAgainstJaggedEdges is false, then we can skip the expensive computation that
-     * guards against jagged edges and just layout views on the screen starting from mFirstPosition
-     * (ignoring what came before it).
-     */
-    public void setGuardAgainstJaggedEdges(boolean guardAgainstJaggedEdges) {
-        mGuardAgainstJaggedEdges = guardAgainstJaggedEdges;
-    }
-
-    /**
-     * Set a minimum column width for
-     * @param minColWidth
-     */
-    public void setMinColumnWidth(int minColWidth) {
-        mMinColWidth = minColWidth;
-        setColumnCount(COLUMN_COUNT_AUTO);
-    }
-
-    /**
-     * Set the margin between items in pixels. This margin is applied
-     * both vertically and horizontally.
-     *
-     * @param marginPixels Spacing between items in pixels
-     */
-    public void setItemMargin(int marginPixels) {
-        // We only need to {@link #populate()} if the margin has been changed.
-        if (marginPixels != mItemMargin) {
-            mItemMargin = marginPixels;
-            populate();
-        }
-    }
-
-    public int getItemMargin() {
-        return mItemMargin;
-    }
-
-    /**
-     * When smooth scrollbar is enabled, the position and size of the scrollbar thumb
-     * is computed based on the number of visible pixels in the visible items. This
-     * however assumes that all list items have the same height. If you use a list in
-     * which items have different heights, the scrollbar will change appearance as the
-     * user scrolls through the list. To avoid this issue, you need to disable this
-     * property.
-     *
-     * When smooth scrollbar is disabled, the position and size of the scrollbar thumb
-     * is based solely on the number of items in the adapter and the position of the
-     * visible items inside the adapter. This provides a stable scrollbar as the user
-     * navigates through a list of items with varying heights.
-     *
-     * @param enabled Whether or not to enable smooth scrollbar.
-     *
-     * @see #setSmoothScrollbarEnabled(boolean)
-     * @attr ref android.R.styleable#AbsListView_smoothScrollbar
-     */
-    public void setSmoothScrollbarEnabled(boolean enabled) {
-        mSmoothScrollbarEnabled = enabled;
-    }
-
-    /**
-     * Returns the current state of the fast scroll feature.
-     *
-     * @return True if smooth scrollbar is enabled is enabled, false otherwise.
-     *
-     * @see #setSmoothScrollbarEnabled(boolean)
-     */
-    public boolean isSmoothScrollbarEnabled() {
-        return mSmoothScrollbarEnabled;
-    }
-
-
-    /**
-     * Return the child view specified by the coordinates if
-     * there exists a child there.
-     *
-     * @return the child in this StaggeredGridView at the coordinates, null otherwise.
-     */
-    private View getChildAtCoordinate(int x, int y) {
-        if (y < 0) {
-            // TODO: If we've dragged off the screen, return null for now until we know what
-            // we'd like the experience to be like.
-            return null;
-        }
-
-        final Rect frame = new Rect();
-        final int count = getChildCount();
-        for (int i = 0; i < count; i++) {
-
-            final View childView = getChildAt(i);
-            childView.getHitRect(frame);
-            if (frame.contains(x, y)) {
-                return getChildAt(i);
-            }
-        }
-
-        // No child view at this coordinate.
-        return null;
-    }
-
-    /**
-     * Get the last Y coordinate on this grid where the last touch was made
-     */
-    public float getLastTouchY() {
-        return mLastTouchY;
-    }
-
-    /**
-     * Enable drag reordering of child items.
-     */
-    public void enableDragReordering() {
-        mIsDragReorderingEnabled = true;
-    }
-
-    /**
-     * Disable drag reordering of child items.
-     */
-    public void disableDragReordering() {
-        mIsDragReorderingEnabled = false;
-    }
-
-    /**
-     * Check to see if drag reordering is supported.  The switch must be flipped to true, and there
-     * must be a {@link ReorderListener} registered to listen for reordering events.
-     *
-     * @return boolean indicating whether drag reordering is currently supported.
-     */
-    private boolean isDragReorderingSupported() {
-        return mIsDragReorderingEnabled && mReorderHelper != null &&
-                mReorderHelper.hasReorderListener();
-    }
-
-    /**
-     * Calculate bounds to assist in scrolling during a drag
-     * @param y The y coordinate of the current drag.
-     */
-    private void initializeDragScrollParameters(int y) {
-        // Calculate the upper and lower bound of the screen to support drag scrolling
-        mHeight = getHeight();
-        mUpperScrollBound = Math.min(y - mTouchSlop, mHeight / 5);
-        mLowerScrollBound = Math.max(y + mTouchSlop, mHeight * 4 / 5);
-    }
-
-    /**
-     * Initiate the dragging process. Create a bitmap that is displayed as the dragging event
-     * happens and is moved around across the screen.  This function is called once for each time
-     * that a dragging event is initiated.
-     *
-     * The logic to this method was borrowed from the TouchInterceptor.java class from the
-     * music app.
-     *
-     * @param draggedChild The child view being dragged
-     * @param x The x coordinate of this view where dragging began
-     * @param y The y coordinate of this view where dragging began
-     */
-    private void startDragging(final View draggedChild, final int x, final int y) {
-        if (!isDragReorderingSupported()) {
-            return;
-        }
-
-        mDragBitmap = createDraggedChildBitmap(draggedChild);
-        if (mDragBitmap == null) {
-            // It appears that creating bitmaps for large views fail. For now, don't allow
-            // dragging in this scenario.  When using the framework's drag and drop implementation,
-            // drag shadow also fails with a OutofResourceException when trying to draw the drag
-            // shadow onto a Surface.
-            mReorderHelper.handleDragCancelled(draggedChild);
-            return;
-        }
-        mTouchOffsetToChildLeft = x - draggedChild.getLeft();
-        mTouchOffsetToChildTop = y - draggedChild.getTop();
-        updateReorderStates(ReorderUtils.DRAG_STATE_DRAGGING);
-
-        initializeDragScrollParameters(y);
-
-        final LayoutParams params = (LayoutParams) draggedChild.getLayoutParams();
-        mReorderHelper.handleDragStart(draggedChild, params.position, params.id,
-                new Point(mTouchDownForDragStartX, mTouchDownForDragStartY));
-
-        // TODO: Reconsider using the framework's DragShadow support for dragging,
-        // and only draw the bitmap in onDrop for animation.
-        final Context context = getContext();
-        mDragView = new ImageView(context);
-        mDragView.setImageBitmap(mDragBitmap);
-        mDragView.setAlpha(160);
-
-        mWindowParams = new WindowManager.LayoutParams();
-        mWindowParams.gravity = Gravity.TOP | Gravity.START;
-
-        mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
-        mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
-        mWindowParams.flags = mWindowManagerLayoutFlags;
-        mWindowParams.format = PixelFormat.TRANSLUCENT;
-        // Use WindowManager to overlay a transparent image on drag
-        mWindowManager.addView(mDragView, mWindowParams);
-        updateDraggedBitmapLocation(x, y);
-    }
-
-    private Bitmap createDraggedChildBitmap(View view) {
-        view.setDrawingCacheEnabled(true);
-        final Bitmap cache = view.getDrawingCache();
-
-        Bitmap bitmap = null;
-        if (cache != null) {
-            try {
-                bitmap = cache.copy(Bitmap.Config.ARGB_8888, false);
-            } catch (final OutOfMemoryError e) {
-                Log.w(TAG, "Failed to copy bitmap from Drawing cache", e);
-                bitmap = null;
-            }
-        }
-
-        view.destroyDrawingCache();
-        view.setDrawingCacheEnabled(false);
-
-        return bitmap;
-    }
-
-    /**
-     * Updates the current drag state and the UI appropriately.
-     * @param state the new drag state to update to.
-     */
-    private void updateReorderStates(int state) throws IllegalStateException {
-        boolean resetDraggedChildView = false;
-        boolean resetDragProperties = false;
-
-        mDragState = state;
-
-        switch (state) {
-            case ReorderUtils.DRAG_STATE_NONE:
-            case ReorderUtils.DRAG_STATE_DRAGGING:
-                // reset all states when a drag is complete or when we're starting a new drag.
-                resetDraggedChildView = true;
-                resetDragProperties = true;
-                break;
-
-            case ReorderUtils.DRAG_STATE_RELEASED_REORDER:
-                // In a release over a valid reordering zone, don't reset any UI.  Let
-                // LayoutChildren() take care of doing the appropriate animation
-                // based on the result
-                break;
-
-            case ReorderUtils.DRAG_STATE_RELEASED_HOVER:
-                // When a dragged child is released over another child, the dragged child will
-                // remain hidden.  It is up to the ReorderListener to refresh the UI state
-                // of the child if it does not handle the drop.
-                resetDragProperties = true;
-                break;
-
-            default:
-                throw new IllegalStateException("Illegal drag state: " + mDragState);
-        }
-
-        if (resetDraggedChildView && mReorderHelper.getDraggedChild() != null) {
-            // DraggedChildId and mCachedDragViewRect need to stay around longer than
-            // the other properties because on the next data change, as we lay out, we'll need
-            // mCachedDragViewRect to position the view's animation start position, and
-            // draggedChildId to check if the current was the dragged view.
-            // For the other properties - DraggedOverChildView, DraggedChildView, etc.,
-            // as soon as drag is released, we can reset them because they have no impact on the
-            // next layout pass.
-            mReorderHelper.clearDraggedChildId();
-            mCachedDragViewRect = null;
-        }
-
-        if (resetDragProperties) {
-            if (mDragView != null) {
-                mDragView.setVisibility(INVISIBLE);
-                mWindowManager.removeView(mDragView);
-                mDragView.setImageDrawable(null);
-                mDragView = null;
-
-                if (mDragBitmap != null) {
-                    mDragBitmap.recycle();
-                    mDragBitmap = null;
-                }
-            }
-
-            // We don't reset DraggedChildId here because it may still be in used.
-            // Let LayoutChildren reset it when it's done with it.
-            mReorderHelper.clearDraggedChild();
-            mReorderHelper.clearDraggedOverChild();
-        }
-    }
-
-    /**
-     * Redraw the dragged child's bitmap based on the new coordinates.  If the reordering direction
-     * is {@link ReorderUtils#REORDER_DIRECTION_VERTICAL}, then ignore the x coordinate, as
-     * only vertical movement is allowed.  Similarly, if reordering direction is
-     * {@link ReorderUtils#REORDER_DIRECTION_HORIZONTAL}.  Even though this class does not manage
-     * drag shadow directly, we need to make sure we position the dragged bitmap at where the
-     * drag shadow is so that when drag ends, we can swap the shadow and the bitmap to animate
-     * the view into place.
-     * @param x The updated x coordinate of the drag shadow.
-     * @param y THe updated y coordinate of the drag shadow.
-     */
-    private void updateDraggedBitmapLocation(int x, int y) {
-        final int direction = mAdapter.getReorderingDirection();
-        if ((direction & ReorderUtils.REORDER_DIRECTION_HORIZONTAL) ==
-                ReorderUtils.REORDER_DIRECTION_HORIZONTAL) {
-            if (mDragBitmap != null && mDragBitmap.getWidth() > getWidth()) {
-                // If the bitmap is wider than the width of the screen, then some parts of the view
-                // are off screen.  In this case, just set the drag shadow to start at x = 0
-                // (adjusted to the absolute position on screen) so that at least the beginning of
-                // the drag shadow is guaranteed to be within view.
-                mWindowParams.x = mOffsetToAbsoluteX;
-            } else {
-                // WindowParams is RTL agnostic and operates on raw coordinates.  So in an RTL
-                // layout, we would still want to find the view's left coordinate for the
-                // drag shadow, rather than the view's start.
-                mWindowParams.x = x - mTouchOffsetToChildLeft + mOffsetToAbsoluteX;
-            }
-        } else {
-            mWindowParams.x = mOffsetToAbsoluteX;
-        }
-
-        if ((direction & ReorderUtils.REORDER_DIRECTION_VERTICAL) ==
-                ReorderUtils.REORDER_DIRECTION_VERTICAL) {
-            mWindowParams.y = y - mTouchOffsetToChildTop + mOffsetToAbsoluteY;
-        } else {
-            mWindowParams.y = mOffsetToAbsoluteY;
-        }
-
-        mWindowManager.updateViewLayout(mDragView, mWindowParams);
-    }
-
-    /**
-     * Update the visual state of the drag event based on the current drag location.  If the user
-     * has attempted to re-order by dragging a child over another child's drop zone, call the
-     * appropriate {@link ReorderListener} callback.
-     *
-     * @param x The current x coordinate of the drag event
-     * @param y The current y coordinate of the drag event
-     */
-    private void handleDrag(int x, int y) {
-        if (mDragState != ReorderUtils.DRAG_STATE_DRAGGING) {
-            return;
-        }
-
-        // TODO: Consider moving drag shadow management logic into mReorderHelper as well, or
-        // scrap the custom logic and use the framework's drag-and-drop support now that we're not
-        // doing anything special to the drag shadow.
-        updateDraggedBitmapLocation(x, y);
-
-        if (mCurrentRunningAnimatorSet == null) {
-            // If the current animator set is not null, then animation is running, in which case,
-            // we shouldn't do any reordering processing, as views will be moving around, and
-            // interfering with drag target calculations.
-            mReorderHelper.handleDrag(new Point(x, y));
-        }
-    }
-
-    /**
-     * Check if a view is reorderable.
-     * @param i the child index in view group
-     */
-    public boolean isChildReorderable(int i) {
-        return mAdapter.isDraggable(mFirstPosition + i);
-    }
-
-    /**
-     * Handle the the release of a dragged view.
-     * @param x The current x coordinate where the drag was released.
-     * @param y The current y coordinate where the drag was released.
-     */
-    private void handleDrop(int x, int y) {
-        if (!mReorderHelper.hasReorderListener()) {
-            updateReorderStates(ReorderUtils.DRAG_STATE_NONE);
-            return;
-        }
-
-        if (mReorderHelper.isOverReorderingArea()) {
-            // Store the location of the drag shadow at where dragging stopped
-            // for animation if a reordering has just happened. Since the drag
-            // shadow is drawn as a WindowManager view, its coordinates are
-            // absolute. However, for views inside the grid, we need to operate
-            // with coordinate values that's relative to this grid, so we need
-            // to subtract the offset to absolute screen coordinates that have
-            // been added to mWindowParams.
-            final int left = mWindowParams.x - mOffsetToAbsoluteX;
-            final int top = mWindowParams.y - mOffsetToAbsoluteY;
-
-            mCachedDragViewRect = new Rect(
-                    left, top, left + mDragView.getWidth(), top + mDragView.getHeight());
-            if (getChildCount() > 0) {
-                final View view = getChildAt(0);
-                final LayoutParams lp = (LayoutParams) view.getLayoutParams();
-                if (lp.position > mReorderHelper.getDraggedChildPosition()) {
-                    // If the adapter position of the first child in view is
-                    // greater than the position of the original dragged child,
-                    // this means that the user has scrolled the child out of
-                    // view. Those off screen views would have been recycled. If
-                    // mFirstPosition is currently x, after the reordering
-                    // operation, the child[mFirstPosition] will be
-                    // at mFirstPosition-1. We want to adjust mFirstPosition so
-                    // that we render the view in the correct location after
-                    // reordering completes.
-                    //
-                    // If the user has not scrolled the original dragged child
-                    // out of view, then the view has not been recycled and is
-                    // still in view.
-                    // When onLayout() gets called, we'll automatically fill in
-                    // the empty space that the child leaves behind from the
-                    // reordering operation.
-                    mFirstPosition--;
-                }
-            }
-
-            // Get the current scroll position so that after reordering
-            // completes, we can restore the scroll position of mFirstPosition.
-            mCurrentScrollState = getScrollState();
-        }
-
-        final boolean reordered = mReorderHelper.handleDrop(new Point(x, y));
-        if (reordered) {
-            updateReorderStates(ReorderUtils.DRAG_STATE_RELEASED_REORDER);
-        } else {
-            updateReorderStates(ReorderUtils.DRAG_STATE_NONE);
-        }
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(MotionEvent ev) {
-        mVelocityTracker.addMovement(ev);
-        final int action = ev.getAction() & MotionEventCompat.ACTION_MASK;
-        switch (action) {
-            case MotionEvent.ACTION_DOWN: {
-                mOffsetToAbsoluteX = (int)(ev.getRawX() - ev.getX());
-                mOffsetToAbsoluteY = (int)(ev.getRawY() - ev.getY());
-
-                // Per bug 7377413, event.getX() and getY() returns rawX and rawY when accessed in
-                // dispatchDragEvent, so since an action down is required before a drag can be
-                // initiated, initialize mTouchDownForDragStartX/Y here for the most accurate value.
-                mTouchDownForDragStartX = (int) ev.getX();
-                mTouchDownForDragStartY = (int) ev.getY();
-
-                mVelocityTracker.clear();
-                mScroller.abortAnimation();
-                mLastTouchY = ev.getY();
-                mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
-                mTouchRemainderY = 0;
-                if (mTouchMode == TOUCH_MODE_FLINGING) {
-                    // Catch!
-                    mTouchMode = TOUCH_MODE_DRAGGING;
-                    return true;
-                }
-                break;
-            }
-            case MotionEvent.ACTION_MOVE: {
-                final int index = MotionEventCompat.findPointerIndex(ev, mActivePointerId);
-                if (index < 0) {
-                    Log.e(TAG, "onInterceptTouchEvent could not find pointer with id " +
-                            mActivePointerId + " - did StaggeredGridView receive an inconsistent " +
-                            "event stream?");
-                    return false;
-                }
-                final float y = MotionEventCompat.getY(ev, index);
-                final float dy = y - mLastTouchY + mTouchRemainderY;
-                final int deltaY = (int) dy;
-                mTouchRemainderY = dy - deltaY;
-
-                if (Math.abs(dy) > mTouchSlop) {
-                    mTouchMode = TOUCH_MODE_DRAGGING;
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        mVelocityTracker.addMovement(ev);
-        final int action = ev.getAction() & MotionEventCompat.ACTION_MASK;
-        switch (action) {
-            case MotionEvent.ACTION_DOWN:
-                resetScroller();
-                mVelocityTracker.clear();
-                mScroller.abortAnimation();
-                mLastTouchY = ev.getY();
-                mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
-                mTouchRemainderY = 0;
-                break;
-
-            case MotionEvent.ACTION_MOVE: {
-                final int index = MotionEventCompat.findPointerIndex(ev, mActivePointerId);
-                if (index < 0) {
-                    Log.e(TAG, "onInterceptTouchEvent could not find pointer with id " +
-                            mActivePointerId + " - did StaggeredGridView receive an inconsistent " +
-                            "event stream?");
-                    return false;
-                }
-
-                final float y = MotionEventCompat.getY(ev, index);
-                final float dy = y - mLastTouchY + mTouchRemainderY;
-                final int deltaY = (int) dy;
-                mTouchRemainderY = dy - deltaY;
-
-                if (Math.abs(dy) > mTouchSlop) {
-                    mTouchMode = TOUCH_MODE_DRAGGING;
-                }
-
-                if (mTouchMode == TOUCH_MODE_DRAGGING) {
-                    mLastTouchY = y;
-                    if (!trackMotionScroll(deltaY, true)) {
-                        // Break fling velocity if we impacted an edge.
-                        mVelocityTracker.clear();
-                    }
-                }
-                break;
-            }
-
-            case MotionEvent.ACTION_CANCEL: {
-                mTouchMode = TOUCH_MODE_IDLE;
-                break;
-            }
-
-            case MotionEvent.ACTION_UP: {
-                mVelocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
-                final float velocity = VelocityTrackerCompat.getYVelocity(mVelocityTracker,
-                        mActivePointerId);
-                if (Math.abs(velocity) > mFlingVelocity) {
-                    mTouchMode = TOUCH_MODE_FLINGING;
-                    resetScroller();
-                    mScroller.fling(0, 0, 0, (int) velocity, 0, 0,
-                            Integer.MIN_VALUE, Integer.MAX_VALUE);
-                    mLastTouchY = 0;
-                    ViewCompat.postInvalidateOnAnimation(this);
-                } else {
-                    mTouchMode = TOUCH_MODE_IDLE;
-                }
-            }
-            break;
-        }
-
-        return true;
-    }
-
-    private void resetScroller() {
-        mTouchMode = TOUCH_MODE_IDLE;
-        mTopEdge.finish();
-        mBottomEdge.finish();
-        mScroller.abortAnimation();
-    }
-
-    @Override
-    public boolean dispatchDragEvent(DragEvent event) {
-        if (!isDragReorderingSupported()) {
-            // If the consumer of this StaggeredGridView has not registered a ReorderListener,
-            // don't bother handling drag events.
-            return super.dispatchDragEvent(event);
-        }
-
-        switch(event.getAction()) {
-            case DragEvent.ACTION_DRAG_STARTED:
-                // Per bug 7071594, we won't be able to catch this event in onDragEvent,
-                // so we'll handle the event as it is being dispatched on the way down.
-                if (mReorderHelper.hasReorderListener() && mIsDragReorderingEnabled) {
-                    final View child = getChildAtCoordinate(
-                            mTouchDownForDragStartX, mTouchDownForDragStartY);
-                    if (child != null) {
-                        // Child can be null if the touch point is not on a child view, but is
-                        // still within the bounds of this StaggeredGridView (i.e., margins
-                        // between cells).
-                        startDragging(child, mTouchDownForDragStartX, mTouchDownForDragStartY);
-                        // We must return true in order to continue getting future
-                        // {@link DragEvent}s.
-                        return true;
-                    }
-                }
-                // Be sure to return a value here instead of calling super.dispatchDragEvent()
-                // which will unnecessarily dispatch to all the children (since the
-                // {@link StaggeredGridView} handles all drag events for our purposes)
-                return false;
-
-            case DragEvent.ACTION_DROP:
-            case DragEvent.ACTION_DRAG_ENDED:
-                if (mDragState == ReorderUtils.DRAG_STATE_DRAGGING) {
-                    handleDrop((int)event.getX(), (int)event.getY());
-                }
-
-                // Return early here to avoid calling super.dispatchDragEvent() which dispatches to
-                // children (since this view already can handle all drag events). The super call
-                // can also cause a NPE if the view hierarchy changed in the middle of a drag
-                // and the {@link DragEvent} gets nulled out. This is a workaround for
-                // a framework bug: 8298439.
-                // Since the {@link StaggeredGridView} handles all drag events for our purposes,
-                // just manually fire the drag event to ourselves.
-                return onDragEvent(event);
-        }
-
-        // In all other cases, default to the superclass implementation. We need this so that
-        // the drag/drop framework will fire off {@link #onDragEvent(DragEvent ev)} calls to us.
-        return super.dispatchDragEvent(event);
-    }
-
-    @Override
-    public boolean onDragEvent(DragEvent ev) {
-        if (!isDragReorderingSupported()) {
-            // If the consumer of this StaggeredGridView has not registered a ReorderListener,
-            // don't bother handling drag events.
-            return false;
-        }
-
-        final int x = (int)ev.getX();
-        final int y = (int)ev.getY();
-
-        switch(ev.getAction()) {
-            case DragEvent.ACTION_DRAG_LOCATION:
-                if (mDragState == ReorderUtils.DRAG_STATE_DRAGGING) {
-                    handleDrag(x, y);
-                    mLastTouchY = y;
-                }
-
-                // Kick off the scroll handler on the first drag location event,
-                // if it's not already running
-                if (!mIsDragScrollerRunning &&
-                        // And if the distance traveled while dragging exceeds the touch slop
-                        ((Math.abs(x - mTouchDownForDragStartX) >= 4 * mTouchSlop) ||
-                        (Math.abs(y - mTouchDownForDragStartY) >= 4 * mTouchSlop))) {
-                    // Set true because that the scroller is running now
-                    mIsDragScrollerRunning = true;
-
-                    if (mScrollHandler == null) {
-                        mScrollHandler = getHandler();
-                    }
-                    mScrollHandler.postDelayed(mDragScroller, SCROLL_HANDLER_DELAY);
-                }
-
-                return true;
-
-            case DragEvent.ACTION_DROP:
-            case DragEvent.ACTION_DRAG_ENDED:
-                // We can either expect to receive:
-                // 1. Both {@link DragEvent#ACTION_DROP} and then
-                //    {@link DragEvent#ACTION_DRAG_ENDED} if the drop is over this view.
-                // 2. Only {@link DragEvent#ACTION_DRAG_ENDED} if the drop happened over a
-                //    different view.
-                // For this reason, we should always handle the drop. In case #1, if this code path
-                // gets executed again then nothing will happen because we will have already
-                // updated {@link #mDragState} to not be {@link ReorderUtils#DRAG_STATE_DRAGGING}.
-                if (mScrollHandler != null) {
-                    mScrollHandler.removeCallbacks(mDragScroller);
-                    // Scroller is no longer running
-                    mIsDragScrollerRunning = false;
-                }
-
-                return true;
-            }
-
-        return false;
-    }
-
-    /**
-     *
-     * @param deltaY Pixels that content should move by
-     * @return true if the movement completed, false if it was stopped prematurely.
-     */
-    private boolean trackMotionScroll(int deltaY, boolean allowOverScroll) {
-        final boolean contentFits = contentFits();
-        final int allowOverhang = Math.abs(deltaY);
-        final int overScrolledBy;
-        final int movedBy;
-        if (!contentFits) {
-            int overhang;
-            final boolean up;
-            mPopulating = true;
-            if (deltaY > 0) {
-                overhang = fillUp(mFirstPosition - 1, allowOverhang);
-                up = true;
-            } else {
-                overhang = fillDown(mFirstPosition + getChildCount(), allowOverhang);
-
-                if (overhang < 0) {
-                    // Overhang when filling down indicates how many pixels past the bottom of the
-                    // screen has been filled in.  If this value is negative, it should be set to
-                    // 0 so that we don't allow over scrolling.
-                    overhang = 0;
-                }
-
-                up = false;
-            }
-
-            movedBy = Math.min(overhang, allowOverhang);
-            offsetChildren(up ? movedBy : -movedBy);
-            recycleOffscreenViews();
-            mPopulating = false;
-            overScrolledBy = allowOverhang - overhang;
-        } else {
-            overScrolledBy = allowOverhang;
-            movedBy = 0;
-        }
-
-        if (allowOverScroll) {
-            final int overScrollMode = ViewCompat.getOverScrollMode(this);
-
-            if (overScrollMode == ViewCompat.OVER_SCROLL_ALWAYS ||
-                    (overScrollMode == ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS && !contentFits)) {
-
-                if (overScrolledBy > 0) {
-                    final EdgeEffectCompat edge = deltaY > 0 ? mTopEdge : mBottomEdge;
-                    edge.onPull((float) Math.abs(deltaY) / getHeight());
-                    ViewCompat.postInvalidateOnAnimation(this);
-                }
-            }
-        }
-
-        awakenScrollBars(0 /* show immediately */, true /* invalidate */);
-        return deltaY == 0 || movedBy != 0;
-    }
-
-    public final boolean contentFits() {
-        if (mFirstPosition != 0 || getChildCount() != mItemCount) {
-            return false;
-        }
-
-        int topmost = Integer.MAX_VALUE;
-        int bottommost = Integer.MIN_VALUE;
-        for (int i = 0; i < mColCount; i++) {
-            if (mItemTops[i] < topmost) {
-                topmost = mItemTops[i];
-            }
-            if (mItemBottoms[i] > bottommost) {
-                bottommost = mItemBottoms[i];
-            }
-        }
-
-        return topmost >= getPaddingTop() && bottommost <= getHeight() - getPaddingBottom();
-    }
-
-    /**
-     * Recycle views within the range starting from startIndex (inclusive) until the last
-     * attached child view.
-     */
-    private void recycleViewsInRange(int startIndex, int endIndex) {
-        for (int i = endIndex; i >= startIndex; i--) {
-            final View child = getChildAt(i);
-
-            if (mInLayout) {
-                removeViewsInLayout(i, 1);
-            } else {
-                removeViewAt(i);
-            }
-
-            mRecycler.addScrap(child);
-        }
-    }
-
-    // TODO: Have other overloaded recycle methods call into this one so we would just have one
-    // code path.
-    private void recycleView(View view) {
-        if (view == null) {
-            return;
-        }
-
-        if (mInLayout) {
-            removeViewInLayout(view);
-            invalidate();
-        } else {
-            removeView(view);
-        }
-
-        mRecycler.addScrap(view);
-    }
-
-    /**
-     * Important: this method will leave offscreen views attached if they
-     * are required to maintain the invariant that child view with index i
-     * is always the view corresponding to position mFirstPosition + i.
-     */
-    private void recycleOffscreenViews() {
-        if (getChildCount() == 0) {
-            return;
-        }
-
-        final int height = getHeight();
-        final int clearAbove = -mItemMargin;
-        final int clearBelow = height + mItemMargin;
-        for (int i = getChildCount() - 1; i >= 0; i--) {
-            final View child = getChildAt(i);
-            if (child.getTop() <= clearBelow)  {
-                // There may be other offscreen views, but we need to maintain
-                // the invariant documented above.
-                break;
-            }
-
-            child.clearFocus();
-            if (mInLayout) {
-                removeViewsInLayout(i, 1);
-            } else {
-                removeViewAt(i);
-            }
-
-            mRecycler.addScrap(child);
-        }
-
-        while (getChildCount() > 0) {
-            final View child = getChildAt(0);
-            if (child.getBottom() >= clearAbove) {
-                // There may be other offscreen views, but we need to maintain
-                // the invariant documented above.
-                break;
-            }
-
-            child.clearFocus();
-            if (mInLayout) {
-                removeViewsInLayout(0, 1);
-            } else {
-                removeViewAt(0);
-            }
-
-            mRecycler.addScrap(child);
-            mFirstPosition++;
-        }
-
-        final int childCount = getChildCount();
-        if (childCount > 0) {
-            // Repair the top and bottom column boundaries from the views we still have
-            Arrays.fill(mItemTops, Integer.MAX_VALUE);
-            Arrays.fill(mItemBottoms, Integer.MIN_VALUE);
-            for (int i = 0; i < childCount; i++){
-                final View child = getChildAt(i);
-                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-                final int top = child.getTop() - mItemMargin;
-                final int bottom = child.getBottom();
-                LayoutRecord rec = mLayoutRecords.get(mFirstPosition + i);
-
-                // It's possible the layout record could be null for visible views because
-                // they are cleared between adapter data set changes, but the views are left
-                // attached for the purpose of animations. Hence, populate the layout record again.
-                if (rec == null) {
-                    rec = recreateLayoutRecord(mFirstPosition + i, child, lp);
-                }
-
-                // In LTR layout, iterate across each column that this child is laid out in,
-                // starting from the child's first column (lp.column).  For each column, update
-                // mItemTops and mItemBottoms appropriately to take into account this child's
-                // dimension.  In RTL layout, iterate in reverse, where the child's starting
-                // column would start from the right-most.
-                final int span = Math.min(mColCount, lp.span);
-                for (int spanIndex = 0; spanIndex < span; spanIndex++) {
-                    final int col = mIsRtlLayout ? lp.column - spanIndex :
-                            lp.column + spanIndex;
-                    final int colTop = top - rec.getMarginAbove(spanIndex);
-                    final int colBottom = bottom + rec.getMarginBelow(spanIndex);
-                    if (colTop < mItemTops[col]) {
-                        mItemTops[col] = colTop;
-                    }
-                    if (colBottom > mItemBottoms[col]) {
-                        mItemBottoms[col] = colBottom;
-                    }
-                }
-            }
-
-            for (int col = 0; col < mColCount; col++) {
-                if (mItemTops[col] == Integer.MAX_VALUE) {
-                    // If one was untouched, both were.
-                    final int top = getPaddingTop();
-                    mItemTops[col] = top;
-                    mItemBottoms[col] = top;
-                }
-            }
-        }
-
-        mCurrentScrollState = getScrollState();
-    }
-
-    private LayoutRecord recreateLayoutRecord(int position, View child, LayoutParams lp) {
-        final LayoutRecord rec = new LayoutRecord();
-        mLayoutRecords.put(position, rec);
-        rec.column = lp.column;
-        rec.height = child.getHeight();
-        rec.id = lp.id;
-        rec.span = Math.min(mColCount, lp.span);
-        return rec;
-    }
-
-    @Override
-    public void computeScroll() {
-        if (mTouchMode == TOUCH_MODE_OVERFLING) {
-            handleOverfling();
-        } else if (mScroller.computeScrollOffset()) {
-            final int overScrollMode = ViewCompat.getOverScrollMode(this);
-            final boolean supportsOverscroll = overScrollMode != ViewCompat.OVER_SCROLL_NEVER;
-            final int y = mScroller.getCurrY();
-            final int dy = (int) (y - mLastTouchY);
-            // TODO: Figure out why mLastTouchY is being updated here. Consider using a new class
-            // variable since this value does not represent the last place on the screen where a
-            // touch occurred.
-            mLastTouchY = y;
-            // Check if the top of the motion view is where it is
-            // supposed to be
-            final View motionView = supportsOverscroll &&
-                    getChildCount() > 0 ? getChildAt(0) : null;
-            final int motionViewPrevTop = motionView != null ? motionView.getTop() : 0;
-            final boolean stopped = !trackMotionScroll(dy, false);
-            if (!stopped && !mScroller.isFinished()) {
-                mTouchMode = TOUCH_MODE_IDLE;
-                ViewCompat.postInvalidateOnAnimation(this);
-            } else if (stopped && dy != 0 && supportsOverscroll) {
-                    // Check to see if we have bumped into the scroll limit
-                    if (motionView != null) {
-                        final int motionViewRealTop = motionView.getTop();
-                        // Apply overscroll
-                        final int overscroll = -dy - (motionViewRealTop - motionViewPrevTop);
-                        overScrollBy(0, overscroll, 0, getScrollY(), 0, 0, 0, mOverscrollDistance,
-                                true);
-                    }
-                    final EdgeEffectCompat edge;
-                    if (dy > 0) {
-                        edge = mTopEdge;
-                        mBottomEdge.finish();
-                    } else {
-                        edge = mBottomEdge;
-                        mTopEdge.finish();
-                    }
-                    edge.onAbsorb(Math.abs((int) mScroller.getCurrVelocity()));
-                    if (mScroller.computeScrollOffset()) {
-                        mScroller.notifyVerticalEdgeReached(getScrollY(), 0, mOverscrollDistance);
-                    }
-                    mTouchMode = TOUCH_MODE_OVERFLING;
-                    ViewCompat.postInvalidateOnAnimation(this);
-            } else {
-                mTouchMode = TOUCH_MODE_IDLE;
-            }
-        }
-    }
-
-    private void handleOverfling() {
-        // If the animation is not finished yet, determine next steps.
-        if (mScroller.computeScrollOffset()) {
-            final int scrollY = getScrollY();
-            final int currY = mScroller.getCurrY();
-            final int deltaY = currY - scrollY;
-            if (overScrollBy(0, deltaY, 0, scrollY, 0, 0, 0, mOverscrollDistance, false)) {
-                final boolean crossDown = scrollY <= 0 && currY > 0;
-                final boolean crossUp = scrollY >= 0 && currY < 0;
-                if (crossDown || crossUp) {
-                    int velocity = (int) mScroller.getCurrVelocity();
-                    if (crossUp) {
-                        velocity = -velocity;
-                    }
-
-                    // Don't flywheel from this; we're just continuing
-                    // things.
-                    mTouchMode = TOUCH_MODE_IDLE;
-                    mScroller.abortAnimation();
-                } else {
-                    // Spring back! We are done overscrolling.
-                    if (mScroller.springBack(0, scrollY, 0, 0, 0, 0)) {
-                        mTouchMode = TOUCH_MODE_OVERFLING;
-                        ViewCompat.postInvalidateOnAnimation(this);
-                    } else {
-                        // If already valid, we are done. Exit overfling mode.
-                        mTouchMode = TOUCH_MODE_IDLE;
-                    }
-                }
-            } else {
-                // Still over-flinging; just post the next frame of the animation.
-                ViewCompat.postInvalidateOnAnimation(this);
-            }
-        } else {
-            // Otherwise, exit overfling mode.
-            mTouchMode = TOUCH_MODE_IDLE;
-            mScroller.abortAnimation();
-        }
-    }
-
-    @Override
-    protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
-        if (getScrollY() != scrollY) {
-            scrollTo(0, scrollY);
-        }
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        super.draw(canvas);
-
-        if (mTopEdge != null) {
-            boolean needsInvalidate = false;
-            if (!mTopEdge.isFinished()) {
-                final int restoreCount = canvas.save();
-                canvas.translate(0, 0);
-                mTopEdge.draw(canvas);
-                canvas.restoreToCount(restoreCount);
-                needsInvalidate = true;
-            }
-            if (!mBottomEdge.isFinished()) {
-                final int restoreCount = canvas.save();
-                final int width = getWidth();
-                canvas.translate(-width, getHeight());
-                canvas.rotate(180, width, 0);
-                mBottomEdge.draw(canvas);
-                canvas.restoreToCount(restoreCount);
-                needsInvalidate = true;
-            }
-
-            if (needsInvalidate) {
-                ViewCompat.postInvalidateOnAnimation(this);
-            }
-        }
-    }
-
-    public void beginFastChildLayout() {
-        mFastChildLayout = true;
-    }
-
-    public void endFastChildLayout() {
-        mFastChildLayout = false;
-        populate();
-    }
-
-    @Override
-    public void requestLayout() {
-        if (!mPopulating && !mFastChildLayout) {
-            super.requestLayout();
-        }
-    }
-
-    /**
-     * Sets the view to show if the adapter is empty
-     */
-    public void setEmptyView(View emptyView) {
-        mEmptyView = emptyView;
-
-        updateEmptyStatus();
-    }
-
-    public View getEmptyView() {
-        return mEmptyView;
-    }
-
-    /**
-     * Update the status of the list based on the whether the adapter is empty.  If is it empty and
-     * we have an empty view, display it.  In all the other cases, make sure that the
-     * StaggeredGridView is VISIBLE and that the empty view is GONE (if it's not null).
-     */
-    private void updateEmptyStatus() {
-        if (mAdapter == null || mAdapter.isEmpty()) {
-            if (mEmptyView != null) {
-                mEmptyView.setVisibility(View.VISIBLE);
-                setVisibility(View.GONE);
-            } else {
-                setVisibility(View.VISIBLE);
-            }
-        } else {
-            if (mEmptyView != null) {
-                mEmptyView.setVisibility(View.GONE);
-            }
-            setVisibility(View.VISIBLE);
-        }
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
-        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
-        final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
-        final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
-
-        if (widthMode != MeasureSpec.EXACTLY) {
-            Log.d(TAG, "onMeasure: must have an exact width or match_parent! " +
-                    "Using fallback spec of EXACTLY " + widthSize);
-            widthMode = MeasureSpec.EXACTLY;
-        }
-        if (heightMode != MeasureSpec.EXACTLY) {
-            Log.d(TAG, "onMeasure: must have an exact height or match_parent! " +
-                    "Using fallback spec of EXACTLY " + heightSize);
-            heightMode = MeasureSpec.EXACTLY;
-        }
-
-        setMeasuredDimension(widthSize, heightSize);
-
-        if (mColCountSetting == COLUMN_COUNT_AUTO) {
-            final int colCount = widthSize / mMinColWidth;
-            if (colCount != mColCount) {
-                mColCount = colCount;
-            }
-        }
-
-        if (mHorizontalReorderingAreaSize == 0) {
-            if (mColCount > 1) {
-                final int totalMarginWidth = mItemMargin * (mColCount + 1);
-                final int singleViewWidth = (widthSize - totalMarginWidth) / mColCount;
-                mHorizontalReorderingAreaSize = singleViewWidth / CHILD_TO_REORDER_AREA_RATIO;
-            } else {
-                mHorizontalReorderingAreaSize = SINGLE_COL_REORDERING_AREA_SIZE;
-            }
-        }
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        mIsRtlLayout = isLayoutRtl();
-
-        mInLayout = true;
-        populate();
-        mInLayout = false;
-        final int width = r - l;
-        final int height = b - t;
-        mTopEdge.setSize(width, height);
-        mBottomEdge.setSize(width, height);
-    }
-
-    private void populate() {
-        if (getWidth() == 0 || getHeight() == 0 || mAdapter == null) {
-            return;
-        }
-
-        if (mColCount == COLUMN_COUNT_AUTO) {
-            final int colCount = getWidth() / mMinColWidth;
-            if (colCount != mColCount) {
-                mColCount = colCount;
-            }
-        }
-
-        final int colCount = mColCount;
-        if (mItemTops == null || mItemBottoms == null || mItemTops.length != colCount ||
-                mItemBottoms.length != colCount) {
-            mItemTops = new int[colCount];
-            mItemBottoms = new int[colCount];
-
-            mLayoutRecords.clear();
-            if (mInLayout) {
-                removeAllViewsInLayout();
-            } else {
-                removeAllViews();
-            }
-        }
-
-        // Before we do layout, if there are any pending animations and data has changed,
-        // cancel the animation, as layout on new data will likely trigger another animation
-        // set to be run.
-        if (mDataChanged && mCurrentRunningAnimatorSet != null) {
-            mCurrentRunningAnimatorSet.cancel();
-            mCurrentRunningAnimatorSet = null;
-        }
-
-        if (isSelectionAtTop()) {
-            mCurrentScrollState = null;
-        }
-
-        if (mCurrentScrollState != null) {
-            restoreScrollPosition(mCurrentScrollState);
-        } else {
-            calculateLayoutStartOffsets(getPaddingTop() /* layout start offset */);
-        }
-
-        mPopulating = true;
-
-        mFocusedChildIdToScrollIntoView = -1;
-        final View focusedChild = getFocusedChild();
-        if (focusedChild != null) {
-            final LayoutParams lp = (LayoutParams) focusedChild.getLayoutParams();
-            mFocusedChildIdToScrollIntoView = lp.id;
-        }
-
-        layoutChildren(mDataChanged);
-        fillDown(mFirstPosition + getChildCount(), 0);
-        fillUp(mFirstPosition - 1, 0);
-
-        if (isDragReorderingSupported() &&
-                mDragState == ReorderUtils.DRAG_STATE_RELEASED_REORDER ||
-                mDragState == ReorderUtils.DRAG_STATE_RELEASED_HOVER) {
-            // This child was dragged and dropped with the UI likely
-            // still showing.  Call updateReorderStates, to update
-            // all UI appropriately.
-            mReorderHelper.clearDraggedChildId();
-            updateReorderStates(ReorderUtils.DRAG_STATE_NONE);
-        }
-
-        if (mDataChanged) {
-            // Animation should only play if data has changed since populate() can be called
-            // multiple times with the same data set (e.g., screen size changed).
-            handleLayoutAnimation();
-        }
-
-        recycleOffscreenViews();
-
-        mPopulating = false;
-        mDataChanged = false;
-    }
-
-    @Override
-    public void scrollBy(int x, int y) {
-        if (y != 0) {
-            // TODO: Implement smooth scrolling for this so that scrolling does more than just
-            // jumping by y pixels.
-            trackMotionScroll(y, false /* over scroll */);
-        }
-    }
-
-    private void offsetChildren(int offset) {
-        final int childCount = getChildCount();
-        for (int i = 0; i < childCount; i++) {
-            final View child = getChildAt(i);
-
-            child.offsetTopAndBottom(offset);
-
-            // As we're scrolling, we need to make sure the children that are coming into view
-            // have their reordering area set.
-            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-            setReorderingArea(lp);
-        }
-
-        final int colCount = mColCount;
-        for (int i = 0; i < colCount; i++) {
-            mItemTops[i] += offset;
-            mItemBottoms[i] += offset;
-        }
-
-        if (mScrollListener != null) {
-            mScrollListener.onScrollChanged(offset, computeVerticalScrollOffset(),
-                    computeVerticalScrollRange());
-        }
-    }
-
-    /**
-     * Performs layout animation of child views.
-     * @throws IllegalStateException Exception is thrown of currently set animation mode is
-     * not recognized.
-     */
-    private void handleLayoutAnimation() throws IllegalStateException {
-        final List<Animator> animators = new ArrayList<Animator>();
-
-        // b/8422632 - Without this dummy first animator, startDelays of subsequent animators won't
-        // be honored correctly; all animators will block regardless of startDelay until the first
-        // animator in the AnimatorSet truly starts playing.
-        final ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
-        anim.setDuration(0);
-        animators.add(anim);
-
-        addOutAnimatorsForStaleViews(animators, mAnimationOutMode);
-
-        // Play the In animators at a slight delay after all Out animators have started.
-        final int animationInStartDelay = animators.size() > 0 ?
-                (SgvAnimationHelper.getDefaultAnimationDuration() / 2) : 0;
-        addInAnimators(animators, mAnimationInMode, animationInStartDelay);
-
-        if (animators != null && animators.size() > 0) {
-            final AnimatorSet animatorSet = new AnimatorSet();
-            animatorSet.playTogether(animators);
-            animatorSet.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationStart(Animator animation) {
-                    mIsCurrentAnimationCanceled = false;
-                    mCurrentRunningAnimatorSet = animatorSet;
-                }
-
-                @Override
-                public void onAnimationCancel(Animator animation) {
-                    mIsCurrentAnimationCanceled = true;
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    if (!mIsCurrentAnimationCanceled) {
-                        // If this animation ended naturally, not because it was canceled, then
-                        // reset the animation mode back to ANIMATION_MODE_NONE.  However, if
-                        // the animation was canceled by a data change, then keep the mode as is,
-                        // so that on a re-layout, we can resume animation from the views' current
-                        // positions.
-                        resetAnimationMode();
-                    }
-                    mCurrentRunningAnimatorSet = null;
-                }
-            });
-
-            Log.v(TAG, "starting");
-            animatorSet.start();
-        } else {
-            resetAnimationMode();
-        }
-
-        mViewsToAnimateOut.clear();
-        mChildRectsForAnimation.clear();
-    }
-
-    /**
-     * Reset the current animation mode.
-     */
-    private void resetAnimationMode() {
-        mAnimationInMode = AnimationIn.NONE;
-        mAnimationOutMode = AnimationOut.NONE;
-    }
-
-    /**
-     * Add animators for animating in new views as well as updating positions of views that
-     * should remain on screen.
-     */
-    private void addInAnimators(List<Animator> animators, AnimationIn animationInMode,
-            int startDelay) {
-        if (animationInMode == AnimationIn.NONE) {
-            return;
-        }
-
-        switch (animationInMode) {
-            case FLY_UP_ALL_VIEWS:
-                addFlyInAllViewsAnimators(animators);
-                break;
-
-            case EXPAND_NEW_VIEWS:
-                addUpdateViewPositionsAnimators(animators, true /* cascade animation */,
-                        AnimationIn.EXPAND_NEW_VIEWS, startDelay);
-                break;
-
-            case EXPAND_NEW_VIEWS_NO_CASCADE:
-                addUpdateViewPositionsAnimators(animators, false /* cascade animation */,
-                        AnimationIn.EXPAND_NEW_VIEWS_NO_CASCADE, startDelay);
-                break;
-
-            case SLIDE_IN_NEW_VIEWS:
-                addUpdateViewPositionsAnimators(animators, true /* cascade animation */,
-                        AnimationIn.SLIDE_IN_NEW_VIEWS, startDelay);
-                break;
-
-            case FLY_IN_NEW_VIEWS:
-                addUpdateViewPositionsAnimators(animators, true /* cascade animation */,
-                        AnimationIn.FLY_IN_NEW_VIEWS, startDelay);
-                break;
-
-            case FADE:
-                addUpdateViewPositionsAnimators(animators, true /* cascade animation */,
-                        AnimationIn.FADE, startDelay);
-                break;
-
-            default:
-                throw new IllegalStateException("Unknown animationInMode: " + mAnimationInMode);
-        }
-    }
-
-    /**
-     * Add animators for animating out stale views
-     * @param animationOutMode The animation mode to play for stale views
-     */
-    private void addOutAnimatorsForStaleViews(List<Animator> animators,
-            AnimationOut animationOutMode) {
-        if (animationOutMode == AnimationOut.NONE) {
-            return;
-        }
-
-        for (final View v : mViewsToAnimateOut) {
-            // For each stale view to animate out, retrieve the animators for the view, then attach
-            // the StaleViewAnimationEndListener which checks to see if the view should be recycled
-            // at the end of the animation.
-            final List<Animator> viewAnimators = new ArrayList<Animator>();
-
-            switch (animationOutMode) {
-                case SLIDE:
-                    final LayoutParams lp = (LayoutParams) v.getLayoutParams();
-                    // Bias towards sliding right, but depending on the column that this view
-                    // is laid out in, slide towards the nearest side edge.
-                    int endTranslation = (int)(v.getWidth() * 1.5);
-                    if (lp.column < (mColCount / 2)) {
-                        endTranslation = -endTranslation;
-                    }
-                    SgvAnimationHelper.addSlideOutAnimators(viewAnimators, v,
-                            (int) v.getTranslationX(), endTranslation);
-                    break;
-
-                case COLLAPSE:
-                    SgvAnimationHelper.addCollapseOutAnimators(viewAnimators, v);
-                    break;
-
-                case FLY_DOWN:
-                    SgvAnimationHelper.addFlyOutAnimators(viewAnimators, v,
-                            (int) v.getTranslationY(), getHeight());
-                    break;
-
-                case FADE:
-                    SgvAnimationHelper.addFadeAnimators(viewAnimators, v, v.getAlpha(),
-                            0 /* end alpha */);
-                    break;
-
-                default:
-                    throw new IllegalStateException("Unknown animationOutMode: " +
-                            animationOutMode);
-            }
-
-            if (viewAnimators.size() > 0) {
-                addStaleViewAnimationEndListener(v, viewAnimators);
-                animators.addAll(viewAnimators);
-            }
-        }
-    }
-
-    /**
-     * Handle setting up the animators of child views when the animation is invoked by a change
-     * in the adapter.  This method has a side effect of translating view positions in preparation
-     * for the animations.
-     */
-    private List<Animator> addFlyInAllViewsAnimators(List<Animator> animators) {
-        final int childCount = getChildCount();
-        if (childCount == 0) {
-            return null;
-        }
-
-        if (animators == null) {
-            animators = new ArrayList<Animator>();
-        }
-
-        for (int i = 0; i < childCount; i++) {
-            final int animationDelay = i * ANIMATION_DELAY_IN_MS;
-            final View childToAnimate = getChildAt(i);
-
-            // Start all views from below the bottom of this grid and animate them upwards. This
-            // is done simply by translating the current view's vertical position by the height
-            // of the entire grid.
-            float yTranslation = getHeight();
-            float rotation = SgvAnimationHelper.ANIMATION_ROTATION_DEGREES;
-            if (mIsCurrentAnimationCanceled) {
-                // If mIsAnimationCanceled is true, then this is not the first time that this
-                // animation is running.  For this particular case, we should resume from where
-                // the previous animation left off, rather than resetting translation and rotation.
-                yTranslation = childToAnimate.getTranslationY();
-                rotation = childToAnimate.getRotation();
-            }
-
-            SgvAnimationHelper.addTranslationRotationAnimators(animators, childToAnimate,
-                    0 /* xTranslation */, (int) yTranslation, rotation, animationDelay);
-        }
-
-        return animators;
-    }
-
-    /**
-     * Animations to update the views on screen to their new positions.  For new views that aren't
-     * currently on screen, animate them in using the specified animationInMode.
-     */
-    private List<Animator> addUpdateViewPositionsAnimators(List<Animator> animators,
-            boolean cascadeAnimation, AnimationIn animationInMode, int startDelay) {
-        final int childCount = getChildCount();
-        if (childCount == 0) {
-            return null;
-        }
-
-        if (animators == null) {
-            animators = new ArrayList<Animator>();
-        }
-
-        int viewsAnimated = 0;
-        for (int i = 0; i < childCount; i++) {
-            final View childToAnimate = getChildAt(i);
-
-            if (mViewsToAnimateOut.contains(childToAnimate)) {
-                // If the stale views are still animating, then they are still laid out, so
-                // getChildCount() would've accounted for them.  Since they have their own set
-                // of animations to play, we'll skip over them in this loop.
-                continue;
-            }
-
-            // Use progressive animation delay to create the staggered effect of animating
-            // views.  This is done by having each view delay their animation by
-            // ANIMATION_DELAY_IN_MS after the animation of the previous view.
-            int animationDelay = startDelay +
-                    (cascadeAnimation ? viewsAnimated * ANIMATION_DELAY_IN_MS : 0);
-
-            // Figure out whether a view with this item ID existed before
-            final LayoutParams lp = (LayoutParams) childToAnimate.getLayoutParams();
-
-            final ViewRectPair viewRectPair = mChildRectsForAnimation.get(lp.id);
-
-            final int xTranslation;
-            final int yTranslation;
-
-            // If there is a valid {@link Rect} for the view with this newId, then
-            // setup an animation.
-            if (viewRectPair != null && viewRectPair.rect != null) {
-                // In the special case where the items are explicitly fading, we don't want to do
-                // any of the translations.
-                if (animationInMode == AnimationIn.FADE) {
-                    SgvAnimationHelper.addFadeAnimators(animators, childToAnimate,
-                            0 /* start alpha */, 1.0f /* end alpha */, animationDelay);
-                    continue;
-                }
-
-                final Rect oldRect = viewRectPair.rect;
-                // Since the view already exists, translate it to its new position.
-                // Reset the child back to its previous position given by oldRect if the child
-                // has not already been translated.  If the child has been translated, use the
-                // current translated values, as this child may be in the middle of a previous
-                // animation, so we don't want to simply force it to new location.
-
-                xTranslation = oldRect.left - childToAnimate.getLeft();
-                yTranslation = oldRect.top - childToAnimate.getTop();
-                final float rotation = childToAnimate.getRotation();
-
-                // First set the translation X and Y. The current translation might be out of date.
-                childToAnimate.setTranslationX(xTranslation);
-                childToAnimate.setTranslationY(yTranslation);
-
-                if (xTranslation == 0 && yTranslation == 0 && rotation == 0) {
-                    // Bail early if this view doesn't need to be translated.
-                    continue;
-                }
-
-                SgvAnimationHelper.addTranslationRotationAnimators(animators, childToAnimate,
-                        xTranslation, yTranslation, rotation, animationDelay);
-            } else {
-                // If this view was not present before the data updated, rather than just flashing
-                // the view into its designated position, fly it up from the bottom.
-                xTranslation = 0;
-                yTranslation = (animationInMode == AnimationIn.FLY_IN_NEW_VIEWS) ? getHeight() : 0;
-
-                // Since this is a new view coming in, add additional delays so that these IN
-                // animations start after all the OUT animations have been played.
-                animationDelay += SgvAnimationHelper.getDefaultAnimationDuration();
-
-                childToAnimate.setTranslationX(xTranslation);
-                childToAnimate.setTranslationY(yTranslation);
-
-                switch (animationInMode) {
-                    case FLY_IN_NEW_VIEWS:
-                        SgvAnimationHelper.addTranslationRotationAnimators(animators,
-                                childToAnimate, xTranslation, yTranslation,
-                                SgvAnimationHelper.ANIMATION_ROTATION_DEGREES, animationDelay);
-                        break;
-
-                    case SLIDE_IN_NEW_VIEWS:
-                        // Bias towards sliding right, but depending on the column that this view
-                        // is laid out in, slide towards the nearest side edge.
-                        int startTranslation = (int)(childToAnimate.getWidth() * 1.5);
-                        if (lp.column < (mColCount / 2)) {
-                            startTranslation = -startTranslation;
-                        }
-
-                        SgvAnimationHelper.addSlideInFromRightAnimators(animators,
-                                childToAnimate, startTranslation,
-                                animationDelay);
-                        break;
-
-                    case EXPAND_NEW_VIEWS:
-                    case EXPAND_NEW_VIEWS_NO_CASCADE:
-                        if (i == 0) {
-                            // Initially set the alpha of this view to be invisible, then fade in.
-                            childToAnimate.setAlpha(0);
-
-                            // Create animators that translate the view back to translation = 0
-                            // which would be its new layout position
-                            final int offset = -1 * childToAnimate.getHeight();
-                            SgvAnimationHelper.addXYTranslationAnimators(animators,
-                                    childToAnimate, 0 /* xTranslation */, offset, animationDelay);
-
-                            SgvAnimationHelper.addFadeAnimators(animators, childToAnimate,
-                                    0 /* start alpha */, 1.0f /* end alpha */, animationDelay);
-                        } else {
-                            SgvAnimationHelper.addExpandInAnimators(animators,
-                                    childToAnimate, animationDelay);
-                        }
-                        break;
-                    case FADE:
-                        SgvAnimationHelper.addFadeAnimators(animators, childToAnimate,
-                                0 /* start alpha */, 1.0f /* end alpha */, animationDelay);
-                        break;
-
-                    default:
-                        continue;
-                }
-            }
-
-            viewsAnimated++;
-        }
-
-        return animators;
-    }
-
-    private void addStaleViewAnimationEndListener(final View view, List<Animator> viewAnimators) {
-        if (viewAnimators == null) {
-            return;
-        }
-
-        for (final Animator animator : viewAnimators) {
-            animator.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    // In the event that onChanged is called before this animation finishes,
-                    // we would have mistakenly cached a view that would be recycled.  So
-                    // check if it's there, and remove it so that obtainView() doesn't
-                    // accidentally use the cached view later when it's already been
-                    // moved to the recycler.
-                    final LayoutParams lp = (LayoutParams) view.getLayoutParams();
-                    if (mChildRectsForAnimation.containsKey(lp.id)) {
-                        mChildRectsForAnimation.remove(lp.id);
-                    }
-
-                    recycleView(view);
-                }
-            });
-        }
-    }
-
-    /**
-     * Calculate and cache the {@link LayoutRecord}s for all positions up to mFirstPosition.
-     * mFirstPosition is the position that layout will start from, but we need to know where all
-     * views preceding it will be laid out so that mFirstPosition will be laid out at the correct
-     * position.  If this is not done, mFirstPosition will be laid out at the first empty space
-     * possible (i.e., top left), and this may not be the correct position in the overall layout.
-     *
-     * This can be optimized if we don't need to guard against jagged edges in the grid or if
-     * mFirstChangedPosition is set to a non-zero value (so we can skip calculating some views).
-     */
-    private void calculateLayoutStartOffsets(int offset) {
-        // Bail early if we don't guard against jagged edges or if nothing has changed before
-        // mFirstPosition.
-        // Also check that we're not at the top of the list because sometimes grid padding isn't set
-        // until after mItemTops and mItemBottoms arrays have been initialized, so we should
-        // go through and compute the right layout start offset for mFirstPosition = 0.
-        if (mFirstPosition != 0 &&
-                (!mGuardAgainstJaggedEdges || mFirstPosition < mFirstChangedPosition)) {
-            // At this time, we know that mItemTops should be the same, because
-            // nothing has changed before view at mFirstPosition. The only thing
-            // we need to do is to reset mItemBottoms. The result should be the
-            // same, if we don't bail early and execute the following code
-            // again. Notice that mItemBottoms always equal to mItemTops after
-            // this method.
-            System.arraycopy(mItemTops, 0, mItemBottoms, 0, mColCount);
-            return;
-        }
-
-        final int colWidth = (getWidth() - getPaddingLeft() - getPaddingRight() -
-                mItemMargin * (mColCount - 1)) / mColCount;
-
-        Arrays.fill(mItemTops, getPaddingTop());
-        Arrays.fill(mItemBottoms, getPaddingTop());
-
-        // Since we will be doing a pass to calculate all views up to mFirstPosition, it is likely
-        // that all existing {@link LayoutRecord}s will be stale, so clear it out to avoid
-        // accidentally the re-use of stale values.
-        //
-        // Note: We cannot just invalidate all layout records after mFirstPosition because it is
-        // possible that this layout pass is caused by a down sync from the server that may affect
-        // the layout of views from position 0 to mFirstPosition - 1.
-        if (mDataChanged) {
-            mLayoutRecords.clear();
-        }
-
-        for (int i = 0; i < mFirstPosition; i++) {
-            LayoutRecord rec = mLayoutRecords.get(i);
-
-            if (mDataChanged || rec == null) {
-                final View view = obtainView(i, null);
-                final LayoutParams lp = (LayoutParams) view.getLayoutParams();
-
-                final int heightSpec;
-                if (lp.height == LayoutParams.WRAP_CONTENT) {
-                    heightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-                } else {
-                    heightSpec = MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY);
-                }
-
-                final int span = Math.min(mColCount, lp.span);
-                final int widthSize = colWidth * span + mItemMargin * (span - 1);
-                final int widthSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY);
-
-                view.measure(widthSpec, heightSpec);
-                final int height = view.getMeasuredHeight();
-
-                if (rec == null) {
-                    rec = new LayoutRecord();
-                    mLayoutRecords.put(i, rec);
-                }
-
-                rec.height = height;
-                rec.id = lp.id;
-                rec.span = span;
-
-                // We're not actually using this view, so add this back to the recycler.
-                mRecycler.addScrap(view);
-            }
-
-            int nextColumn = getNextColumnDown();
-
-            // Given the span, check if there's enough space to put this view at this column.
-            // IMPORTANT Use the same logic in {@link #layoutChildren}.
-            if (rec.span > 1) {
-                if (mIsRtlLayout) {
-                    if (nextColumn + 1 < rec.span) {
-                        nextColumn = mColCount - 1;
-                    }
-                } else {
-                    if (mColCount - nextColumn < rec.span) {
-                        nextColumn = 0;
-                    }
-                }
-            }
-            rec.column = nextColumn;
-
-            // Place the top of this child beneath the last by finding the lowest coordinate across
-            // the columns that this child will span.  For LTR layout, we scan across from left to
-            // right, and for RTL layout, we scan from right to left.
-            // TODO: Consolidate this logic with getNextRecordDown() in the future, as that method
-            // already calculates the margins for us.  This will keep the implementation consistent
-            // with layoutChildren(), fillUp() and fillDown().
-            int lowest = mItemBottoms[nextColumn] + mItemMargin;
-            if (rec.span > 1) {
-                for (int spanIndex = 0; spanIndex < rec.span; spanIndex++) {
-                    final int index = mIsRtlLayout ? nextColumn - spanIndex :
-                            nextColumn + spanIndex;
-                    final int bottom = mItemBottoms[index] + mItemMargin;
-                    if (bottom > lowest) {
-                        lowest = bottom;
-                    }
-                }
-            }
-
-            for (int spanIndex = 0; spanIndex < rec.span; spanIndex++) {
-                final int col = mIsRtlLayout ? nextColumn - spanIndex : nextColumn + spanIndex;
-                mItemBottoms[col] = lowest + rec.height;
-
-                if (Log.isLoggable(TAG, Log.VERBOSE)) {
-                    Log.v(TAG, " position: " + i + " bottoms: ");
-                    for (int j = 0; j < mColCount; j++) {
-                        Log.v(TAG, "    mItemBottoms["+j+"]: " + mItemBottoms[j]);
-                    }
-                }
-            }
-        }
-
-        // mItemBottoms[] at this point contains the values of all views up to mFirstPosition.  To
-        // figure out where view at mFirstPosition will be laid out, we'll need to find the column
-        // that is the highest (i.e., i where mItemBottoms[i] <= mItemBottoms[j] for all j
-        // from 0 to mColCount.)
-        int highestValue = Integer.MAX_VALUE;
-        for (int k = 0; k < mColCount; k++) {
-            if (mItemBottoms[k] < highestValue) {
-                highestValue = mItemBottoms[k];
-            }
-        }
-
-        // Adjust the offsets in each column so that values in mItemTops[] and mItemBottoms[]
-        // reflect coordinates on screen.  These offsets will be the actual values where layout
-        // will start from, otherwise, we'd naively start at (leftPadding, topPadding) for
-        // mFirstPosition.
-        for (int k = 0; k < mColCount; k++) {
-            mItemBottoms[k] = mItemBottoms[k] - highestValue + offset;
-            mItemTops[k] = mItemBottoms[k];
-
-            // Log.v(TAG, "Adjusting to offset = mItemBottoms[" + k + "]: " + mItemBottoms[k]);
-        }
-    }
-
-    /**
-     * Measure and layout all currently visible children.
-     *
-     * @param queryAdapter true to requery the adapter for view data
-     */
-    final void layoutChildren(boolean queryAdapter) {
-        final int paddingLeft = getPaddingLeft();
-        final int paddingRight = getPaddingRight();
-        final int itemMargin = mItemMargin;
-        final int availableWidth = (getWidth() - paddingLeft - paddingRight - itemMargin
-                * (mColCount - 1));
-        final int colWidth = availableWidth / mColCount;
-        // The availableWidth may not be divisible by mColCount. Keep the
-        // remainder. It will be added to the width of the last view in the row.
-        final int remainder = availableWidth % mColCount;
-
-        boolean viewsRemovedInLayout = false;
-
-        // If we're animating out stale views, then we want to defer recycling of views.
-        final boolean deferRecyclingForAnimation = mAnimationOutMode != AnimationOut.NONE;
-
-        if (!deferRecyclingForAnimation) {
-            final int childCount = getChildCount();
-            // If the latest data set has fewer data items than mFirstPosition, don't keep any
-            // views on screen, and just let the layout logic below retrieve appropriate views
-            // from the recycler.
-            final int viewsToKeepOnScreen = (mItemCount <= mFirstPosition) ? 0 :
-                mItemCount - mFirstPosition;
-
-            if (childCount > viewsToKeepOnScreen) {
-                // If there are more views laid out than the number of data items remaining to be
-                // laid out, recycle the extraneous views.
-                recycleViewsInRange(viewsToKeepOnScreen, childCount - 1);
-                viewsRemovedInLayout = true;
-            }
-        } else {
-            mViewsToAnimateOut.clear();
-        }
-
-        for (int i = 0; i < getChildCount(); i++) {
-            final int position = mFirstPosition + i;
-            View child = getChildAt(i);
-
-            final int highestAvailableLayoutPosition = mItemBottoms[getNextColumnDown()];
-            if (deferRecyclingForAnimation &&
-                    (position >= mItemCount || highestAvailableLayoutPosition >= getHeight())) {
-                // For the remainder of views on screen, they should not be on screen, so we can
-                // skip layout.  Add them to the list of views to animate out.
-                // We should only get in this position if deferRecyclingForAnimation = true,
-                // otherwise, we should've recycled all views before getting into this layout loop.
-                mViewsToAnimateOut.add(child);
-                continue;
-            }
-
-            LayoutParams lp = null;
-            int col = -1;
-
-            if (child != null) {
-                lp = (LayoutParams) child.getLayoutParams();
-                col = lp.column;
-            }
-
-            final boolean needsLayout = queryAdapter || child == null || child.isLayoutRequested();
-            if (queryAdapter) {
-                View newView = null;
-                if (deferRecyclingForAnimation) {
-                    // If we are deferring recycling for animation, then we don't want to pass the
-                    // current child in to obtainView for re-use.  obtainView() in this case should
-                    // try to find the view belonging to this item on screen, or populate a fresh
-                    // one from the recycler.
-                    newView = obtainView(position);
-                } else {
-                    newView = obtainView(position, child);
-                }
-
-                // Update layout params since they may have changed
-                lp = (LayoutParams) newView.getLayoutParams();
-
-                if (newView != child) {
-                    if (child != null && !deferRecyclingForAnimation) {
-                        mRecycler.addScrap(child);
-                        removeViewInLayout(child);
-                        viewsRemovedInLayout = true;
-                    }
-
-                    // If this view is already in the layout hierarchy, we can just detach it
-                    // from the parent and re-attach it at the correct index.  If the view has
-                    // already been removed from the layout hierarchy, getParent() == null.
-                    if (newView.getParent() == this) {
-                        detachViewFromParent(newView);
-                        attachViewToParent(newView, i, lp);
-                    } else {
-                        addViewInLayout(newView, i, lp);
-                    }
-                }
-
-                child = newView;
-
-                // Since the data has changed, we need to make sure the next child is in the
-                // right column. We choose the next column down (vs. next column up) because we
-                // are filling from the top of the screen downwards as we iterate through
-                // visible children. (We take span into account below.)
-                lp.column = getNextColumnDown();
-                col = lp.column;
-            }
-
-            setReorderingArea(lp);
-
-            final int span = Math.min(mColCount, lp.span);
-
-            // Given the span, check if there's enough space to put this view at this column.
-            // IMPORTANT Propagate the same logic to {@link #calculateLayoutStartOffsets}.
-            if (span > 1) {
-                if (mIsRtlLayout) {
-                    // For RTL layout, if the current column index is less than the span of the
-                    // child, then we know that there is not enough room remaining to lay this
-                    // child out (e.g., if col == 0, but span == 2, then laying this child down
-                    // at column = col would put us out of bound into a negative column index.).
-                    // For this scenario, reset the index back to the right-most column, and lay
-                    // out the child at this position where we can ensure that we can display as
-                    // much of the child as possible.
-                    if (col + 1 < span) {
-                        col = mColCount - 1;
-                    }
-                } else {
-                    if (mColCount - col < span) {
-                        // If not, reset the col to 0.
-                        col = 0;
-                    }
-                }
-
-                lp.column = col;
-            }
-
-            int widthSize = (colWidth * span + itemMargin * (span - 1));
-            // If it is rtl, we layout the view from col to col - span +
-            // 1. If it reaches the most left column, i.e. we added the
-            // additional width. So the check it span == col +1
-            if ((mIsRtlLayout && span == col + 1)
-                    || (!mIsRtlLayout && span + col == mColCount)) {
-                widthSize += remainder;
-            }
-            if (needsLayout) {
-                final int widthSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY);
-
-                final int heightSpec;
-                if (lp.height == LayoutParams.WRAP_CONTENT) {
-                    heightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-                } else {
-                    heightSpec = MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY);
-                }
-
-                child.measure(widthSpec, heightSpec);
-            }
-
-            // Place the top of this child beneath the last by finding the lowest coordinate across
-            // the columns that this child will span.  For LTR layout, we scan across from left to
-            // right, and for RTL layout, we scan from right to left.
-            // TODO:  Consolidate this logic with getNextRecordDown() in the future, as that method
-            // already calculates the margins for us.  This will keep the implementation consistent
-            // with fillUp() and fillDown().
-            int childTop = mItemBottoms[col] + mItemMargin;
-            if (span > 1) {
-                int lowest = childTop;
-                for (int spanIndex = 0; spanIndex < span; spanIndex++) {
-                    final int index = mIsRtlLayout ? col - spanIndex : col + spanIndex;
-                    final int bottom = mItemBottoms[index] + mItemMargin;
-                    if (bottom > lowest) {
-                        lowest = bottom;
-                    }
-                }
-
-                childTop = lowest;
-            }
-
-            final int childHeight = child.getMeasuredHeight();
-            final int childBottom = childTop + childHeight;
-            int childLeft = 0;
-            int childRight = 0;
-            if (mIsRtlLayout) {
-                childRight = (getWidth() - paddingRight) -
-                        (mColCount - col - 1) * (colWidth + itemMargin);
-                childLeft = childRight - child.getMeasuredWidth();
-            } else {
-                childLeft = paddingLeft + col * (colWidth + itemMargin);
-                childRight = childLeft + child.getMeasuredWidth();
-            }
-
-        /*    Log.v(TAG, "[layoutChildren] height: " + childHeight
-                    + " top: " + childTop + " bottom: " + childBottom
-                    + " left: " + childLeft
-                    + " column: " + col
-                    + " position: " + position
-                    + " id: " + lp.id);
-*/
-            child.layout(childLeft, childTop, childRight, childBottom);
-            if (lp.id == mFocusedChildIdToScrollIntoView) {
-                child.requestFocus();
-            }
-
-            for (int spanIndex = 0; spanIndex < span; spanIndex++) {
-                final int index = mIsRtlLayout ? col - spanIndex : col + spanIndex;
-                mItemBottoms[index] = childBottom;
-            }
-
-            // Whether or not LayoutRecords may have already existed for the view at this position
-            // on screen, we'll update it after we lay out to ensure that the LayoutRecord
-            // has the most updated information about the view at this position.  We can be assured
-            // that all views before those on screen (views with adapter position < mFirstPosition)
-            // have the correct LayoutRecords because calculateLayoutStartOffsets() would have
-            // set them appropriately.
-            LayoutRecord rec = mLayoutRecords.get(position);
-            if (rec == null) {
-                rec = new LayoutRecord();
-                mLayoutRecords.put(position, rec);
-            }
-
-            rec.column = lp.column;
-            rec.height = childHeight;
-            rec.id = lp.id;
-            rec.span = span;
-        }
-
-        // It appears that removeViewInLayout() does not invalidate.  So if we make use of this
-        // method during layout, we should invalidate explicitly.
-        if (viewsRemovedInLayout || deferRecyclingForAnimation) {
-            invalidate();
-        }
-    }
-
-    /**
-     * Set the reordering area for the child layout specified
-     */
-    private void setReorderingArea(LayoutParams childLayoutParams) {
-        final boolean isLastColumn = childLayoutParams.column == (mColCount - 1);
-        childLayoutParams.reorderingArea =
-                mAdapter.getReorderingArea(childLayoutParams.position, isLastColumn);
-    }
-
-    final void invalidateLayoutRecordsBeforePosition(int position) {
-        int endAt = 0;
-        while (endAt < mLayoutRecords.size() && mLayoutRecords.keyAt(endAt) < position) {
-            endAt++;
-        }
-        mLayoutRecords.removeAtRange(0, endAt);
-    }
-
-    final void invalidateLayoutRecordsAfterPosition(int position) {
-        int beginAt = mLayoutRecords.size() - 1;
-        while (beginAt >= 0 && mLayoutRecords.keyAt(beginAt) > position) {
-            beginAt--;
-        }
-        beginAt++;
-        mLayoutRecords.removeAtRange(beginAt + 1, mLayoutRecords.size() - beginAt);
-    }
-
-    /**
-     * Before doing an animation, map the item IDs for the currently visible children to the
-     * {@link Rect} that defines their position on the screen so a translation animation
-     * can be applied to their new layout positions.
-     */
-    private void cacheChildRects() {
-        final int childCount = getChildCount();
-        mChildRectsForAnimation.clear();
-
-        long originalDraggedChildId = -1;
-        if (isDragReorderingSupported()) {
-            originalDraggedChildId = mReorderHelper.getDraggedChildId();
-            if (mCachedDragViewRect != null && originalDraggedChildId != -1) {
-                // This child was dragged in a reordering operation.  Use the cached position
-                // of where the drag event was released as the cached location.
-                mChildRectsForAnimation.put(originalDraggedChildId,
-                        new ViewRectPair(mDragView, mCachedDragViewRect));
-                mCachedDragViewRect = null;
-            }
-        }
-
-        for (int i = 0; i < childCount; i++) {
-            final View child = getChildAt(i);
-            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
-            Rect rect;
-            if (lp.id != originalDraggedChildId) {
-                final int childTop = (int) child.getY();
-                final int childBottom = childTop + child.getHeight();
-                final int childLeft = (int) child.getX();
-                final int childRight = childLeft + child.getWidth();
-                rect = new Rect(childLeft, childTop, childRight, childBottom);
-                mChildRectsForAnimation.put(lp.id /* item id */, new ViewRectPair(child, rect));
-            }
-        }
-    }
-
-    /**
-     * Should be called with mPopulating set to true
-     *
-     * @param fromPosition Position to start filling from
-     * @param overhang the number of extra pixels to fill beyond the current top edge
-     * @return the max overhang beyond the beginning of the view of any added items at the top
-     */
-    final int fillUp(int fromPosition, int overhang) {
-        final int paddingLeft = getPaddingLeft();
-        final int paddingRight = getPaddingRight();
-        final int itemMargin = mItemMargin;
-        final int availableWidth = (getWidth() - paddingLeft - paddingRight - itemMargin
-                * (mColCount - 1));
-        final int colWidth = availableWidth / mColCount;
-        // The availableWidth may not be divisible by mColCount. Keep the
-        // remainder. It will be added to the width of the last view in the row.
-        final int remainder = availableWidth % mColCount;
-        final int gridTop = getPaddingTop();
-        final int fillTo = -overhang;
-        int nextCol = getNextColumnUp();
-        int position = fromPosition;
-
-        while (nextCol >= 0 && mItemTops[nextCol] > fillTo && position >= 0) {
-            final View child = obtainView(position, null);
-            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
-            if (child.getParent() != this) {
-                if (mInLayout) {
-                    addViewInLayout(child, 0, lp);
-                } else {
-                    addView(child, 0);
-                }
-            }
-
-            final int span = Math.min(mColCount, lp.span);
-
-            LayoutRecord rec;
-            if (span > 1) {
-                rec = getNextRecordUp(position, span);
-                nextCol = rec.column;
-            } else {
-                rec = mLayoutRecords.get(position);
-            }
-
-            boolean invalidateBefore = false;
-            if (rec == null) {
-                rec = new LayoutRecord();
-                mLayoutRecords.put(position, rec);
-                rec.column = nextCol;
-                rec.span = span;
-            } else if (span != rec.span) {
-                rec.span = span;
-                rec.column = nextCol;
-                invalidateBefore = true;
-            } else {
-                nextCol = rec.column;
-            }
-
-            if (mHasStableIds) {
-                rec.id = lp.id;
-            }
-
-            lp.column = nextCol;
-            setReorderingArea(lp);
-
-            int widthSize = colWidth * span + itemMargin * (span - 1);
-            // If it is rtl, we layout the view from nextCol to nextCol - span +
-            // 1. If it reaches the most left column, i.e. we added the
-            // additional width. So the check it span == nextCol + 1
-            if ((mIsRtlLayout && span == nextCol + 1)
-                    || (!mIsRtlLayout && span + nextCol == mColCount)) {
-                widthSize += remainder;
-            }
-            final int widthSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY);
-            final int heightSpec;
-            if (lp.height == LayoutParams.WRAP_CONTENT) {
-                heightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-            } else {
-                heightSpec = MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY);
-            }
-            child.measure(widthSpec, heightSpec);
-
-            final int childHeight = child.getMeasuredHeight();
-            if (invalidateBefore || (childHeight != rec.height && rec.height > 0)) {
-                invalidateLayoutRecordsBeforePosition(position);
-            }
-            rec.height = childHeight;
-
-            // Iterate across each column that this child spans and add the margin calculated
-            // for that column to mItemTops.  getMarginBelow() is expected to give us the correct
-            // margin values at each column such that mItemTops ends up with a smooth edge across
-            // the column spans.  We need to do this before actually laying down the child,
-            // otherwise we risk overlapping one child over another.  mItemTops stores the top
-            // index for where the next child should be laid out.  For RTL, we do the update
-            // in reverse order.
-            for (int i = 0; i < span; i++) {
-                final int index = mIsRtlLayout ? nextCol - i : nextCol + i;
-                mItemTops[index] += rec.getMarginBelow(i);
-            }
-
-            final int startFrom = mItemTops[nextCol];
-            final int childBottom = startFrom;
-            final int childTop = childBottom - childHeight;
-
-            int childLeft = 0;
-            int childRight = 0;
-            // For LTR layout, the child's left is calculated as the
-            // (column index from left) * (columnWidth plus item margins).
-            // For RTL layout, the child's left is relative to its right, and its right coordinate
-            // is calculated as the difference between the width of this grid and
-            // (column index from right) * (columnWidth plus item margins).
-            if (mIsRtlLayout) {
-                childRight = (getWidth() - paddingRight) -
-                        (mColCount - nextCol - 1) * (colWidth + itemMargin);
-                childLeft = childRight - child.getMeasuredWidth();
-            } else {
-                childLeft = paddingLeft + nextCol * (colWidth + itemMargin);
-                childRight = childLeft + child.getMeasuredWidth();
-            }
-            child.layout(childLeft, childTop, childRight, childBottom);
-
-            Log.v(TAG, "[fillUp] position: " + position + " id: " + lp.id
-                    + " childLeft: " + childLeft + " childTop: " + childTop
-                    + " column: " + rec.column + " childHeight:" + childHeight);
-
-            // Since we're filling up, once the child is laid out, update mItemTops again
-            // to reflect the next available top value at this column.  This is simply the child's
-            // top coordinates, minus any available margins set.  For LTR, we start at the column
-            // that this child is laid out from (nextCol) and move right for span amount.  For RTL
-            // layout, we start at the column that this child is laid out from and move left.
-            for (int i = 0; i < span; i++) {
-                final int index = mIsRtlLayout ? nextCol - i : nextCol + i;
-                mItemTops[index] = childTop - rec.getMarginAbove(i) - itemMargin;
-            }
-
-            if (lp.id == mFocusedChildIdToScrollIntoView) {
-                child.requestFocus();
-            }
-
-            nextCol = getNextColumnUp();
-            mFirstPosition = position--;
-        }
-
-        int highestView = getHeight();
-        for (int i = 0; i < mColCount; i++) {
-            if (mItemTops[i] < highestView) {
-                highestView = mItemTops[i];
-            }
-        }
-        return gridTop - highestView;
-    }
-
-    /**
-     * Should be called with mPopulating set to true
-     *
-     * @param fromPosition Position to start filling from
-     * @param overhang the number of extra pixels to fill beyond the current bottom edge
-     * @return the max overhang beyond the end of the view of any added items at the bottom
-     */
-    final int fillDown(int fromPosition, int overhang) {
-        final int paddingLeft = getPaddingLeft();
-        final int paddingRight = getPaddingRight();
-        final int itemMargin = mItemMargin;
-        final int availableWidth = (getWidth() - paddingLeft - paddingRight - itemMargin
-                * (mColCount - 1));
-        final int colWidth = availableWidth / mColCount;
-        // The availableWidth may not be divisible by mColCount. Keep the
-        // remainder. It will be added to the width of the last view in the row.
-        final int remainder = availableWidth % mColCount;
-        final int gridBottom = getHeight() - getPaddingBottom();
-        final int fillTo = gridBottom + overhang;
-        int nextCol = getNextColumnDown();
-        int position = fromPosition;
-
-        while (nextCol >= 0 && mItemBottoms[nextCol] < fillTo && position < mItemCount) {
-            final View child = obtainView(position, null);
-            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-            if (child.getParent() != this) {
-                if (mInLayout) {
-                    addViewInLayout(child, -1, lp);
-                } else {
-                    addView(child);
-                }
-            }
-
-            final int span = Math.min(mColCount, lp.span);
-
-            LayoutRecord rec;
-            if (span > 1) {
-                rec = getNextRecordDown(position, span);
-                nextCol = rec.column;
-            } else {
-                rec = mLayoutRecords.get(position);
-            }
-
-            boolean invalidateAfter = false;
-            if (rec == null) {
-                rec = new LayoutRecord();
-                mLayoutRecords.put(position, rec);
-                rec.column = nextCol;
-                rec.span = span;
-            } else if (span != rec.span) {
-                rec.span = span;
-                rec.column = nextCol;
-                invalidateAfter = true;
-            } else {
-                nextCol = rec.column;
-            }
-
-            if (mHasStableIds) {
-                rec.id = lp.id;
-            }
-
-            lp.column = nextCol;
-            setReorderingArea(lp);
-
-
-            int widthSize = colWidth * span + itemMargin * (span - 1);
-            // If it is rtl, we layout the view from nextCol to nextCol - span +
-            // 1. If it reaches the most left column, i.e. we added the
-            // additional width. So the check it span == nextCol +1
-            if ((mIsRtlLayout && span == nextCol + 1)
-                    || (!mIsRtlLayout && span + nextCol == mColCount)) {
-                widthSize += remainder;
-            }
-            final int widthSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY);
-            final int heightSpec;
-            if (lp.height == LayoutParams.WRAP_CONTENT) {
-                heightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-            } else {
-                heightSpec = MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY);
-            }
-            child.measure(widthSpec, heightSpec);
-
-            final int childHeight = child.getMeasuredHeight();
-            if (invalidateAfter || (childHeight != rec.height && rec.height > 0)) {
-                invalidateLayoutRecordsAfterPosition(position);
-            }
-
-            rec.height = childHeight;
-
-            // Before laying out the child, we need to make sure mItemBottoms is updated with the
-            // correct values such that there is a smooth edge across the child's span.
-            // getMarginAbove() is expected to give us these values.  For LTR layout, we start at
-            // nextCol, and update forward for the number of columns this child spans.  For RTL
-            // layout, we start at nextCol and update backwards for the same number of columns.
-            for (int i = 0; i < span; i++) {
-                final int index = mIsRtlLayout ? nextCol - i : nextCol + i;
-                mItemBottoms[index] += rec.getMarginAbove(i);
-            }
-
-            final int startFrom = mItemBottoms[nextCol];
-            final int childTop = startFrom + itemMargin;
-            final int childBottom = childTop + childHeight;
-            int childLeft = 0;
-            int childRight = 0;
-            if (mIsRtlLayout) {
-                childRight = (getWidth() - paddingRight) -
-                        (mColCount - nextCol - 1) * (colWidth + itemMargin);
-                childLeft = childRight - child.getMeasuredWidth();
-            } else {
-                childLeft = paddingLeft + nextCol * (colWidth + itemMargin);
-                childRight = childLeft + child.getMeasuredWidth();
-            }
-
-            Log.v(TAG, "[fillDown] position: " + position + " id: " + lp.id
-                    + " childLeft: " + childLeft + " childTop: " + childTop
-                    + " column: " + rec.column + " childHeight:" + childHeight);
-
-            child.layout(childLeft, childTop, childRight, childBottom);
-
-            // Once we've laid down the child, update mItemBottoms again to reflect the next
-            // available set of bottom values for the next child.
-            for (int i = 0; i < span; i++) {
-                final int index = mIsRtlLayout ? nextCol - i : nextCol + i;
-                mItemBottoms[index] = childBottom + rec.getMarginBelow(i);
-            }
-
-            if (lp.id == mFocusedChildIdToScrollIntoView) {
-                child.requestFocus();
-            }
-
-            nextCol = getNextColumnDown();
-            position++;
-        }
-
-        int lowestView = 0;
-        for (int i = 0; i < mColCount; i++) {
-            final int index = mIsRtlLayout ? mColCount - (i + 1) : i;
-            if (mItemBottoms[index] > lowestView) {
-                lowestView = mItemBottoms[index];
-            }
-        }
-
-        return lowestView - gridBottom;
-    }
-
-    /**
-     * @return column that the next view filling upwards should occupy. This is the bottom-most
-     *         position available for a single-column item.
-     */
-    final int getNextColumnUp() {
-        int result = -1;
-        int bottomMost = Integer.MIN_VALUE;
-
-        final int colCount = mColCount;
-        for (int i = colCount - 1; i >= 0; i--) {
-            final int index = mIsRtlLayout ? colCount - (i + 1) : i;
-            final int top = mItemTops[index];
-            if (top > bottomMost) {
-                bottomMost = top;
-                result = index;
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Return a LayoutRecord for the given position
-     * @param position
-     * @param span
-     * @return
-     */
-    final LayoutRecord getNextRecordUp(int position, int span) {
-        LayoutRecord rec = mLayoutRecords.get(position);
-        if (rec == null || rec.span != span) {
-            if (span > mColCount) {
-                throw new IllegalStateException("Span larger than column count! Span:" + span
-                        + " ColumnCount:" + mColCount);
-            }
-            rec = new LayoutRecord();
-            rec.span = span;
-            mLayoutRecords.put(position, rec);
-        }
-        int targetCol = -1;
-        int bottomMost = Integer.MIN_VALUE;
-
-        // For LTR layout, we start from the bottom-right corner upwards when we need to find the
-        // NextRecordUp.  For RTL, we will start from bottom-left.
-        final int colCount = mColCount;
-        if (mIsRtlLayout) {
-            for (int i = span - 1; i < colCount; i++) {
-                int top = Integer.MAX_VALUE;
-                for (int j = i; j > i - span; j--) {
-                    final int singleTop = mItemTops[j];
-                    if (singleTop < top) {
-                        top = singleTop;
-                    }
-                }
-                if (top > bottomMost) {
-                    bottomMost = top;
-                    targetCol = i;
-                }
-            }
-        } else {
-            for (int i = colCount - span; i >= 0; i--) {
-                int top = Integer.MAX_VALUE;
-                for (int j = i; j < i + span; j++) {
-                    final int singleTop = mItemTops[j];
-                    if (singleTop < top) {
-                        top = singleTop;
-                    }
-                }
-                if (top > bottomMost) {
-                    bottomMost = top;
-                    targetCol = i;
-                }
-            }
-        }
-
-        rec.column = targetCol;
-
-        // Once we've found the target column for the view at this position, we update mItemTops
-        // for all columns that this view will occupy.  We set the margin such that mItemTops is
-        // equal for all columns in the view's span.  For LTR layout, we start at targetCol and
-        // move right, and for RTL, we start at targetCol and move left.
-        for (int i = 0; i < span; i++) {
-            final int nextCol = mIsRtlLayout ? targetCol - i : targetCol + i;
-            rec.setMarginBelow(i, mItemTops[nextCol] - bottomMost);
-        }
-
-        return rec;
-    }
-
-    /**
-     * @return column that the next view filling downwards should occupy. This is the top-most
-     *         position available.
-     */
-    final int getNextColumnDown() {
-        int topMost = Integer.MAX_VALUE;
-        int result = 0;
-        final int colCount = mColCount;
-
-        for (int i = 0; i < colCount; i++) {
-            final int index = mIsRtlLayout ? colCount - (i + 1) : i;
-            final int bottom = mItemBottoms[index];
-            if (bottom < topMost) {
-                topMost = bottom;
-                result = index;
-            }
-        }
-
-        return result;
-    }
-
-    final LayoutRecord getNextRecordDown(int position, int span) {
-        LayoutRecord rec = mLayoutRecords.get(position);
-        if (rec == null || rec.span != span) {
-            if (span > mColCount) {
-                throw new IllegalStateException("Span larger than column count! Span:" + span
-                        + " ColumnCount:" + mColCount);
-            }
-
-            rec = new LayoutRecord();
-            rec.span = span;
-            mLayoutRecords.put(position, rec);
-        }
-
-        int targetCol = -1;
-        int topMost = Integer.MAX_VALUE;
-
-        final int colCount = mColCount;
-
-        // For LTR layout, we start from the top-left corner and move right-downwards, when we
-        // need to find the NextRecordDown.  For RTL we will start from Top-Right corner, and move
-        // left-downwards.
-        if (mIsRtlLayout) {
-            for (int i = colCount - 1; i >= span - 1; i--) {
-                int bottom = Integer.MIN_VALUE;
-                for (int j = i; j > i - span; j--) {
-                    final int singleBottom = mItemBottoms[j];
-                    if (singleBottom > bottom) {
-                        bottom = singleBottom;
-                    }
-                }
-                if (bottom < topMost) {
-                    topMost = bottom;
-                    targetCol = i;
-                }
-            }
-        } else {
-            for (int i = 0; i <= colCount - span; i++) {
-                int bottom = Integer.MIN_VALUE;
-                for (int j = i; j < i + span; j++) {
-                    final int singleBottom = mItemBottoms[j];
-                    if (singleBottom > bottom) {
-                        bottom = singleBottom;
-                    }
-                }
-                if (bottom < topMost) {
-                    topMost = bottom;
-                    targetCol = i;
-                }
-            }
-        }
-
-        rec.column = targetCol;
-
-        // Once we've found the target column for the view at this position, we update mItemBottoms
-        // for all columns that this view will occupy.  We set the margins such that mItemBottoms
-        // is equal for all columns in the view's span.  For LTR layout, we start at targetCol and
-        // move right, and for RTL, we start at targetCol and move left.
-        for (int i = 0; i < span; i++) {
-            final int nextCol = mIsRtlLayout ? targetCol - i : targetCol + i;
-            rec.setMarginAbove(i, topMost - mItemBottoms[nextCol]);
-        }
-
-        return rec;
-    }
-
-    private int getItemWidth(int itemColumnSpan) {
-        final int colWidth = (getWidth() - getPaddingLeft() - getPaddingRight() -
-                mItemMargin * (mColCount - 1)) / mColCount;
-        return colWidth * itemColumnSpan + mItemMargin * (itemColumnSpan - 1);
-    }
-
-    /**
-     * Obtain a populated view from the adapter.  This method checks to see if the view to populate
-     * is already laid out on screen somewhere by comparing the item ids.
-     *
-     * If the view is already laid out, and the view type has not changed, populate the contents
-     * and return.
-     *
-     * If the view is not laid out on screen somewhere, grab a view from the recycler and populate.
-     *
-     * NOTE: This method should be called during layout.
-     *
-     * TODO: This can probably be consolidated with the overloaded {@link #obtainView(int, View)}.
-     *
-     * @param position Position to get the view for.
-     */
-    final View obtainView(int position) {
-        // TODO: This method currently does not support transient state views.
-
-        final Object item = mAdapter.getItem(position);
-
-        View scrap = null;
-        final int positionViewType = mAdapter.getItemViewType(item, position);
-
-        final long id = mAdapter.getItemId(item, position);
-        final ViewRectPair viewRectPair = mChildRectsForAnimation.get(id);
-        if (viewRectPair != null) {
-            scrap = viewRectPair.view;
-
-            // TODO: Make use of stable ids by retrieving the cached views using stable ids.  In
-            // theory, we should maintain a list of active views, and then fetch the views
-            // from that list.  If that fails, then we should go to the recycler.
-            // For the collection holding stable ids, we must ensure that those views don't get
-            // repurposed for other items at different positions.
-        }
-
-        final int scrapViewType = scrap != null &&
-                (scrap.getLayoutParams() instanceof LayoutParams) ?
-                ((LayoutParams) scrap.getLayoutParams()).viewType : -1;
-
-        if (scrap == null || scrapViewType != positionViewType) {
-            // If there is no cached view or the cached view's type no longer match the type
-            // of the item at the specified position, retrieve a new view from the recycler and
-            // recycle the cached view.
-            if (scrap != null) {
-                // The cached view we had is not valid, so add it to the recycler and
-                // remove it from the current layout.
-                recycleView(scrap);
-            }
-
-            scrap = mRecycler.getScrapView(positionViewType);
-        }
-
-        final int itemColumnSpan = mAdapter.getItemColumnSpan(item, position);
-        final int itemWidth = getItemWidth(itemColumnSpan);
-        final View view = mAdapter.getView(item, position, scrap, this, itemWidth);
-
-        ViewGroup.LayoutParams lp = view.getLayoutParams();
-        if (view.getParent() != this) {
-            if (lp == null) {
-                lp = generateDefaultLayoutParams();
-            } else if (!checkLayoutParams(lp)) {
-                lp = generateLayoutParams(lp);
-            }
-
-            view.setLayoutParams(lp);
-        }
-
-        final LayoutParams sglp = (LayoutParams) view.getLayoutParams();
-        sglp.position = position;
-        sglp.viewType = positionViewType;
-        sglp.id = id;
-        sglp.span = itemColumnSpan;
-
-        // When the view at the positions we are tracking update, make sure to
-        // update our views as well. That way, we have the correct
-        // rectangle for comparing when the drag target enters/ leaves the
-        // placeholder view.
-        if (isDragReorderingSupported() && mReorderHelper.getDraggedChildId() == id) {
-            mReorderHelper.updateDraggedChildView(view);
-            mReorderHelper.updateDraggedOverChildView(view);
-        }
-        return view;
-    }
-
-    /**
-     * Obtain a populated view from the adapter. If optScrap is non-null and is not
-     * reused it will be placed in the recycle bin.
-     *
-     * @param position position to get view for
-     * @param optScrap Optional scrap view; will be reused if possible
-     * @return A new view, a recycled view from mRecycler, or optScrap
-     */
-    final View obtainView(int position, View optScrap) {
-        View view = mRecycler.getTransientStateView(position);
-        final Object item = mAdapter.getItem(position);
-        final int positionViewType = mAdapter.getItemViewType(item, position);
-
-        if (view == null) {
-            // Reuse optScrap if it's of the right type (and not null)
-            final int optType = optScrap != null ?
-                    ((LayoutParams) optScrap.getLayoutParams()).viewType : -1;
-
-            final View scrap = optType == positionViewType ?
-                    optScrap : mRecycler.getScrapView(positionViewType);
-
-            final int itemColumnSpan = mAdapter.getItemColumnSpan(item, position);
-            final int itemWidth = getItemWidth(itemColumnSpan);
-            view = mAdapter.getView(item, position, scrap, this, itemWidth);
-
-            if (view != scrap && scrap != null) {
-                // The adapter didn't use it; put it back.
-                mRecycler.addScrap(scrap);
-            }
-
-            ViewGroup.LayoutParams lp = view.getLayoutParams();
-
-            if (view.getParent() != this) {
-                if (lp == null) {
-                    lp = generateDefaultLayoutParams();
-                } else if (!checkLayoutParams(lp)) {
-                    lp = generateLayoutParams(lp);
-                }
-
-                view.setLayoutParams(lp);
-            }
-        }
-
-        final LayoutParams sglp = (LayoutParams) view.getLayoutParams();
-        sglp.position = position;
-        sglp.viewType = positionViewType;
-        final long id = mAdapter.getItemIdFromView(view, position);
-        sglp.id = id;
-        sglp.span = mAdapter.getItemColumnSpan(item, position);
-
-        // When the view at the positions we are tracking update, make sure to
-        // update our views as well. That way, we have the correct
-        // rectangle for comparing when the drag target enters/ leaves the
-        // placeholder view.
-        if (isDragReorderingSupported() && mReorderHelper.getDraggedChildId() == id) {
-            mReorderHelper.updateDraggedChildView(view);
-            mReorderHelper.updateDraggedOverChildView(view);
-        }
-
-        return view;
-    }
-
-    /**
-     * Animation mode to play for new data coming in as well as the stale data that should be
-     * animated out.
-     * @param animationIn The animation to play to introduce new or updated data into view
-     * @param animationOut The animation to play to transition stale data out of view.
-     */
-    public void setAnimationMode(AnimationIn animationIn, AnimationOut animationOut) {
-        mAnimationInMode = animationIn;
-        mAnimationOutMode = animationOut;
-    }
-
-    public AnimationIn getAnimationInMode() {
-        return mAnimationInMode;
-    }
-
-    public AnimationOut getAnimationOutMode() {
-        return mAnimationOutMode;
-    }
-
-    public GridAdapter getAdapter() {
-        return mAdapter;
-    }
-
-    public void setAdapter(GridAdapter adapter) {
-        if (mAdapter != null) {
-            mAdapter.unregisterDataSetObserver(mObserver);
-        }
-
-        clearAllState();
-
-        mAdapter = adapter;
-        mDataChanged = true;
-        mItemCount = adapter != null ? adapter.getCount() : 0;
-
-        if (adapter != null) {
-            adapter.registerDataSetObserver(mObserver);
-            mRecycler.setViewTypeCount(adapter.getViewTypeCount());
-            mHasStableIds = adapter.hasStableIds();
-        } else {
-            mHasStableIds = false;
-        }
-
-        if (isDragReorderingSupported()) {
-            updateReorderStates(ReorderUtils.DRAG_STATE_NONE);
-        }
-
-        updateEmptyStatus();
-    }
-
-    public void setAdapter(GridAdapter adapter, ScrollState scrollState) {
-        setAdapter(adapter);
-        mCurrentScrollState = scrollState;
-    }
-
-    /**
-     * Clear all state because the grid will be used for a completely different set of data.
-     */
-    private void clearAllState() {
-        // Clear all layout records and views
-        mLayoutRecords.clear();
-        removeAllViews();
-
-        mItemTops = null;
-        mItemBottoms = null;
-
-        setSelectionToTop();
-
-        // Clear recycler because there could be different view types now
-        mRecycler.clear();
-
-        // Reset the last touch y coordinate so that any animation/events won't use stale values.
-        mLastTouchY = 0;
-
-        // Reset the first changed position to 0. At least we will update all views.
-        mFirstChangedPosition = 0;
-    }
-
-    /**
-     * Scroll the list so the first visible position in the grid is the first item in the adapter.
-     */
-    public void setSelectionToTop() {
-        mCurrentScrollState = null;
-        setFirstPositionAndOffsets(0 /* position */, getPaddingTop() /* offset */);
-    }
-
-    /**
-     * Get {@link #mFirstPosition}, which is the adapter position of the View
-     * returned by getChildAt(0).
-     */
-    public int getCurrentFirstPosition() {
-        return mFirstPosition;
-    }
-
-    /**
-     * Indicate whether the scrolling state is currently at the topmost of this grid
-     * @return boolean Indicates whether the current view is the top most of this grid.
-     */
-    private boolean isSelectionAtTop() {
-        if (mCurrentScrollState != null && mCurrentScrollState.getAdapterPosition() == 0) {
-            // ScrollState is how far the top of the first child is from the top of the screen, and
-            // does not include top padding when the adapter position is the first child. If the
-            // vertical offset of the scroll state is exactly equal to {@link #mItemMargin}, then
-            // the first item, and therefore the view of the grid, is at the top.
-            return mCurrentScrollState.getVerticalOffset() == mItemMargin;
-        }
-
-        return false;
-    }
-
-    /**
-     * Set the first position and offset so that on layout, we would start laying out starting
-     * with the specified position at the top of the view.
-     * @param position The child position to place at the top of this view.
-     * @param offset The vertical layout offset of the view at the specified position.
-     */
-    public void setFirstPositionAndOffsets(int position, int offset) {
-        // Reset the first visible position in the grid to be item 0
-        mFirstPosition = position;
-        if (mItemTops == null || mItemBottoms == null) {
-            mItemTops = new int[mColCount];
-            mItemBottoms = new int[mColCount];
-        }
-
-        calculateLayoutStartOffsets(offset);
-    }
-
-    /**
-     * Restore the view to the states specified by the {@link ScrollState}.
-     * @param scrollState {@link ScrollState} containing the scroll states to restore to.
-     */
-    private void restoreScrollPosition(ScrollState scrollState) {
-        if (mAdapter == null || scrollState == null || mAdapter.getCount() == 0) {
-            return;
-        }
-
-        Log.v(TAG, "[restoreScrollPosition] " + scrollState);
-
-        int targetPosition = 0;
-        long itemId = -1;
-
-        final int originalPosition = scrollState.getAdapterPosition();
-        final int adapterCount = mAdapter.getCount();
-        // ScrollState is defined as the vertical offset of the first item that is laid out
-        // on screen.  To restore scroll state, we check within a window to see if we can
-        // find that original first item in this new data set.  If we can, restore that item
-        // to the first position on screen, offset by its previous vertical offset.  If we
-        // cannot find that item, then we'll simply layout out everything from the beginning
-        // again.
-
-        // TODO:  Perhaps it is more efficient if we check the cursor in one direction first
-        // before going backwards, rather than jumping back and forth as we are doing now.
-        for (int i = 0; i < SCROLL_RESTORE_WINDOW_SIZE; i++) {
-            if (originalPosition + i < adapterCount) {
-                itemId = mAdapter.getItemId(originalPosition + i);
-                if (itemId != -1 && itemId == scrollState.getItemId()) {
-                    targetPosition = originalPosition + i;
-                    break;
-                }
-            }
-
-            if (originalPosition - i >= 0 && originalPosition - i < adapterCount) {
-                itemId = mAdapter.getItemId(originalPosition - i);
-                if (itemId != -1 && itemId == scrollState.getItemId()) {
-                    targetPosition = originalPosition - i;
-                    break;
-                }
-            }
-        }
-
-        // layoutChildren(), fillDown() and fillUp() always apply mItemMargin when laying out
-        // views.  Since restoring scroll position is effectively laying out a particular child
-        // as the first child, we need to ensure we strip mItemMargin from the offset, as it
-        // will be re-applied when the view is laid out.
-        //
-        // Since top padding varies with screen orientation and is not stored in the scroll
-        // state when the scroll adapter position is the first child, we add it here.
-        int offset = scrollState.getVerticalOffset() - mItemMargin;
-        if (targetPosition == 0) {
-            offset += getPaddingTop();
-        }
-
-        setFirstPositionAndOffsets(targetPosition, offset);
-        mCurrentScrollState = null;
-    }
-
-    /**
-     * Return the current scroll state of this view.
-     * @return {@link ScrollState} The current scroll state
-     */
-    public ScrollState getScrollState() {
-        final View v = getChildAt(0);
-        if (v == null) {
-            return null;
-        }
-
-        final LayoutParams lp = (LayoutParams) v.getLayoutParams();
-        // Since top padding varies with screen orientation, it is not stored in the scroll state
-        // when the scroll adapter position is the first child.
-        final int offset = (lp.position == 0 ? v.getTop() - getPaddingTop() : v.getTop());
-        return new ScrollState(lp.id, lp.position, offset);
-    }
-
-    /**
-     * NOTE This method is borrowed from {@link ScrollView}.
-     */
-    @Override
-    public boolean requestChildRectangleOnScreen(View child, Rect rectangle,
-            boolean immediate) {
-        // offset into coordinate space of this scroll view
-        rectangle.offset(child.getLeft() - child.getScrollX(),
-                child.getTop() - child.getScrollY());
-
-        return scrollToChildRect(rectangle, immediate);
-    }
-
-    /**
-     * If rect is off screen, scroll just enough to get it (or at least the
-     * first screen size chunk of it) on screen.
-     * NOTE This method is borrowed from {@link ScrollView}.
-     *
-     * @param rect      The rectangle.
-     * @param immediate True to scroll immediately without animation. Not used here.
-     * @return true if scrolling was performed
-     */
-    private boolean scrollToChildRect(Rect rect, boolean immediate) {
-        final int delta = computeScrollDeltaToGetChildRectOnScreen(rect);
-        final boolean scroll = delta != 0;
-        if (scroll) {
-            // TODO smoothScrollBy if immediate is false.
-            scrollBy(0, delta);
-        }
-        return scroll;
-    }
-
-    @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-
-        if (mOnSizeChangedListener != null) {
-            mOnSizeChangedListener.onSizeChanged(w, h, oldw, oldh);
-        }
-
-        // NOTE Below is borrowed from {@link ScrollView}.
-        final View currentFocused = findFocus();
-        if (null == currentFocused || this == currentFocused) {
-            return;
-        }
-
-        // If the currently-focused view was visible on the screen when the
-        // screen was at the old height, then scroll the screen to make that
-        // view visible with the new screen height.
-        if (isWithinDeltaOfScreen(currentFocused, 0, oldh)) {
-            currentFocused.getDrawingRect(mTempRect);
-            offsetDescendantRectToMyCoords(currentFocused, mTempRect);
-            scrollBy(0, computeScrollDeltaToGetChildRectOnScreen(mTempRect));
-        }
-    }
-
-    /**
-     *
-     * NOTE This method is borrowed from {@link ScrollView}.
-     *
-     * @return whether the descendant of this scroll view is within delta
-     *  pixels of being on the screen.
-     */
-    private boolean isWithinDeltaOfScreen(View descendant, int delta, int height) {
-        descendant.getDrawingRect(mTempRect);
-        offsetDescendantRectToMyCoords(descendant, mTempRect);
-
-        return (mTempRect.bottom + delta) >= getScrollY()
-                && (mTempRect.top - delta) <= (getScrollY() + height);
-    }
-
-    /**
-     * NOTE: borrowed from {@link GridView}
-     * Comments from {@link View}
-     *
-     * Compute the vertical extent of the vertical scrollbar's thumb within the vertical range.
-     * This value is used to compute the length of the thumb within the scrollbar's track.
-     * The range is expressed in arbitrary units that must be the same as the units used by
-     * {@link #computeVerticalScrollRange} and {@link #computeVerticalScrollOffset}.
-     *
-     * The default extent is the drawing height of this view.
-     *
-     * @return the vertical extent of the scrollbar's thumb
-     */
-    @Override
-    protected int computeVerticalScrollExtent() {
-
-        final int count = getChildCount();
-        if (count > 0) {
-            if (mSmoothScrollbarEnabled) {
-                final int rowCount = (count + mColCount - 1) / mColCount;
-                int extent = rowCount * SCROLLING_ESTIMATED_ITEM_HEIGHT;
-
-                View view = getChildAt(0);
-                final int top = view.getTop();
-                int height = view.getHeight();
-                if (height > 0) {
-                    extent += (top * SCROLLING_ESTIMATED_ITEM_HEIGHT) / height;
-                }
-
-                view = getChildAt(count - 1);
-                final int bottom = view.getBottom();
-                height = view.getHeight();
-                if (height > 0) {
-                    extent -= ((bottom - getHeight()) * SCROLLING_ESTIMATED_ITEM_HEIGHT) / height;
-                }
-
-                return extent;
-            } else {
-                return 1;
-            }
-        }
-        return 0;
-    }
-
-    /**
-     * NOTE: borrowed from {@link GridView} and altered as appropriate to accommodate for
-     * {@link StaggeredGridView}
-     *
-     * Comments from {@link View}
-     *
-     * Compute the vertical offset of the vertical scrollbar's thumb within the horizontal range.
-     * This value is used to compute the position of the thumb within the scrollbar's track.
-     * The range is expressed in arbitrary units that must be the same as the units used by
-     * {@link #computeVerticalScrollRange()} and {@link #computeVerticalScrollExtent()}.
-     *
-     * The default offset is the scroll offset of this view.
-     *
-     * @return the vertical offset of the scrollbar's thumb
-     */
-    @Override
-    protected int computeVerticalScrollOffset() {
-        final int firstPosition = mFirstPosition;
-        final int childCount = getChildCount();
-        final int paddingTop = getPaddingTop();
-
-        if (firstPosition >= 0 && childCount > 0) {
-            if (mSmoothScrollbarEnabled) {
-                final View view = getChildAt(0);
-                final int top = view.getTop();
-                final int currentTopViewHeight = view.getHeight();
-                if (currentTopViewHeight > 0) {
-                    // In an ideal world, all items would have a fixed height that we would know
-                    // a priori, calculating the scroll offset would simply be:
-                    //     [A] (mFirstPosition * fixedHeight) - childView[0].top
-                    //         where childView[0] is the first view on screen.
-                    //
-                    // However, given that we do not know the height ahead of time, and that each
-                    // item in this grid can have varying heights, we'd need to assign an arbitrary
-                    // item height (SCROLLING_ESTIMATED_ITEM_HEIGHT) in order to estimate the scroll
-                    // offset.  The previous equation thus transforms to:
-                    //     [B] (mFirstPosition * SCROLLING_ESTIMATED_ITEM_HEIGHT) -
-                    //         ((childView[0].top * SCROLLING_ESTIMATED_ITEM_HEIGHT) /
-                    //          childView[0].height)
-                    //
-                    // Equation [B] gives a pretty good calculation of the offset if this were a
-                    // single column grid view, for a multi-column grid, one slight modification is
-                    // needed:
-                    //     [C] ((mFirstPosition * SCROLLING_ESTIMATED_ITEM_HEIGHT) / mColCount) -
-                    //         ((childView[0].top * SCROLLING_ESTIMATED_ITEM_HEIGHT) /
-                    //          childView[0].height)
-                    final int estimatedScrollOffset =
-                            ((firstPosition * SCROLLING_ESTIMATED_ITEM_HEIGHT) / mColCount) -
-                            ((top * SCROLLING_ESTIMATED_ITEM_HEIGHT) / currentTopViewHeight);
-
-                    final int rowCount = (mItemCount + mColCount - 1) / mColCount;
-                    final int overScrollCompensation = (int) ((float) getScrollY() / getHeight() *
-                            rowCount * SCROLLING_ESTIMATED_ITEM_HEIGHT);
-
-                    int val = Math.max(estimatedScrollOffset + overScrollCompensation, 0);
-                    // If mFirstPosition is currently the very first item in the adapter, check to
-                    // see if we need to take into account any top padding.  This is so that we
-                    // don't return 0 when in fact the user may still be scrolling through some
-                    // top padding.
-                    if (firstPosition == 0 && paddingTop > 0) {
-                        val += paddingTop - top + mItemMargin;
-                    }
-                    return val;
-                }
-            } else {
-                int index;
-                final int count = mItemCount;
-                if (firstPosition == 0) {
-                    index = 0;
-                } else if (firstPosition + childCount == count) {
-                    index = count;
-                } else {
-                    index = firstPosition + childCount / 2;
-                }
-                return (int) (firstPosition + childCount * (index / (float) count));
-            }
-        }
-
-        return paddingTop;
-    }
-
-    /**
-     * NOTE: borrowed from {@link GridView} and altered as appropriate to accommodate for
-     * {@link StaggeredGridView}
-     *
-     * Comments from {@link View}
-     *
-     * Compute the vertical range that the vertical scrollbar represents.
-     * The range is expressed in arbitrary units that must be the same as the units used by
-     * {@link #computeVerticalScrollExtent} and {@link #computeVerticalScrollOffset}.
-     *
-     * The default range is the drawing height of this view.
-     *
-     * @return the total vertical range represented by the vertical scrollbar
-     */
-    @Override
-    protected int computeVerticalScrollRange() {
-        final int rowCount = (mItemCount + mColCount - 1) / mColCount;
-        int result = Math.max(rowCount * SCROLLING_ESTIMATED_ITEM_HEIGHT, 0);
-
-        if (mSmoothScrollbarEnabled) {
-            if (getScrollY() != 0) {
-                // Compensate for overscroll
-                result += Math.abs((int) ((float) getScrollY() / getHeight() * rowCount
-                        * SCROLLING_ESTIMATED_ITEM_HEIGHT));
-            }
-        } else {
-            result = mItemCount;
-        }
-
-        return result;
-    }
-
-    /**
-     * Compute the amount to scroll in the Y direction in order to get
-     * a rectangle completely on the screen (or, if taller than the screen,
-     * at least the first screen size chunk of it).
-     *
-     * NOTE This method is borrowed from {@link ScrollView}.
-     *
-     * @param rect The rect.
-     * @return The scroll delta.
-     */
-    protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
-        if (getChildCount() == 0) {
-            return 0;
-        }
-
-        final int height = getHeight();
-        final int fadingEdge = getVerticalFadingEdgeLength();
-
-        int screenTop = getScrollY();
-        int screenBottom = screenTop + height;
-
-        // leave room for top fading edge as long as rect isn't at very top
-        if (rect.top > 0) {
-            screenTop += fadingEdge;
-        }
-
-        // leave room for bottom fading edge as long as rect isn't at very bottom
-        if (rect.bottom < getHeight()) {
-            screenBottom -= fadingEdge;
-        }
-
-        int scrollYDelta = 0;
-
-        if (rect.bottom > screenBottom && rect.top > screenTop) {
-            // need to move down to get it in view: move down just enough so
-            // that the entire rectangle is in view (or at least the first
-            // screen size chunk).
-
-            if (rect.height() > height) {
-                // just enough to get screen size chunk on
-                scrollYDelta = screenTop - rect.top;
-            } else {
-                // get entire rect at bottom of screen
-                scrollYDelta = screenBottom - rect.bottom;
-            }
-        } else if (rect.top < screenTop && rect.bottom < screenBottom) {
-            // need to move up to get it in view: move up just enough so that
-            // entire rectangle is in view (or at least the first screen
-            // size chunk of it).
-
-            if (rect.height() > height) {
-                // screen size chunk
-                scrollYDelta = screenBottom - rect.bottom;
-            } else {
-                // entire rect at top
-                scrollYDelta = screenTop - rect.top;
-            }
-        }
-        return scrollYDelta;
-    }
-
-    @Override
-    protected LayoutParams generateDefaultLayoutParams() {
-        return new LayoutParams(LayoutParams.WRAP_CONTENT);
-    }
-
-    @Override
-    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
-        return new LayoutParams(lp);
-    }
-
-    @Override
-    protected boolean checkLayoutParams(ViewGroup.LayoutParams lp) {
-        return lp instanceof LayoutParams;
-    }
-
-    @Override
-    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
-        return new LayoutParams(getContext(), attrs);
-    }
-
-    @Override
-    public Parcelable onSaveInstanceState() {
-        final Parcelable superState = super.onSaveInstanceState();
-        final SavedState ss = new SavedState(superState);
-        final int position = mFirstPosition;
-        ss.position = position;
-        if (position >= 0 && mAdapter != null && position < mAdapter.getCount()) {
-            ss.firstId = mAdapter.getItemId(position);
-        }
-        if (getChildCount() > 0) {
-            // Since top padding varies with screen orientation, it is not stored in the scroll
-            // state when the scroll adapter position is the first child.
-            ss.topOffset = position == 0 ?
-                    getChildAt(0).getTop() - getPaddingTop() : getChildAt(0).getTop();
-        }
-        return ss;
-    }
-
-    @Override
-    public void onRestoreInstanceState(Parcelable state) {
-        final SavedState ss = (SavedState) state;
-        super.onRestoreInstanceState(ss.getSuperState());
-        mDataChanged = true;
-        mFirstPosition = ss.position;
-        mCurrentScrollState = new ScrollState(ss.firstId, ss.position, ss.topOffset);
-        requestLayout();
-    }
-
-    public static class LayoutParams extends ViewGroup.LayoutParams {
-        private static final int[] LAYOUT_ATTRS = new int[] {
-            android.R.attr.layout_span
-        };
-
-        private static final int SPAN_INDEX = 0;
-
-        /**
-         * The number of columns this item should span
-         */
-        public int span = 1;
-
-        /**
-         * Item position this view represents
-         */
-        public int position = -1;
-
-        /**
-         * Type of this view as reported by the adapter
-         */
-        int viewType;
-
-        /**
-         * The column this view is occupying
-         */
-        int column;
-
-        /**
-         * The stable ID of the item this view displays
-         */
-        long id = -1;
-
-        /**
-         * The position where reordering can happen for this view
-         */
-        public int reorderingArea = ReorderUtils.REORDER_AREA_NONE;
-
-        public LayoutParams(int height) {
-            super(MATCH_PARENT, height);
-
-            if (this.height == MATCH_PARENT) {
-                Log.w(TAG, "Constructing LayoutParams with height FILL_PARENT - " +
-                        "impossible! Falling back to WRAP_CONTENT");
-                this.height = WRAP_CONTENT;
-            }
-        }
-
-        public LayoutParams(Context c, AttributeSet attrs) {
-            super(c, attrs);
-
-            if (this.width != MATCH_PARENT) {
-                Log.w(TAG, "Inflation setting LayoutParams width to " + this.width +
-                        " - must be MATCH_PARENT");
-                this.width = MATCH_PARENT;
-            }
-            if (this.height == MATCH_PARENT) {
-                Log.w(TAG, "Inflation setting LayoutParams height to MATCH_PARENT - " +
-                        "impossible! Falling back to WRAP_CONTENT");
-                this.height = WRAP_CONTENT;
-            }
-
-            final TypedArray a = c.obtainStyledAttributes(attrs, LAYOUT_ATTRS);
-            span = a.getInteger(SPAN_INDEX, 1);
-            a.recycle();
-        }
-
-        public LayoutParams(ViewGroup.LayoutParams other) {
-            super(other);
-
-            if (this.width != MATCH_PARENT) {
-                Log.w(TAG, "Constructing LayoutParams with width " + this.width +
-                        " - must be MATCH_PARENT");
-                this.width = MATCH_PARENT;
-            }
-            if (this.height == MATCH_PARENT) {
-                Log.w(TAG, "Constructing LayoutParams with height MATCH_PARENT - " +
-                        "impossible! Falling back to WRAP_CONTENT");
-                this.height = WRAP_CONTENT;
-            }
-        }
-    }
-
-    private class RecycleBin {
-        private ArrayList<View>[] mScrapViews;
-        private int mViewTypeCount;
-        private int mMaxScrap;
-
-        private SparseArray<View> mTransientStateViews;
-
-        public void setViewTypeCount(int viewTypeCount) {
-            if (viewTypeCount < 1) {
-                throw new IllegalArgumentException("Must have at least one view type (" +
-                        viewTypeCount + " types reported)");
-            }
-            if (viewTypeCount == mViewTypeCount) {
-                return;
-            }
-
-            final ArrayList<View>[] scrapViews = new ArrayList[viewTypeCount];
-            for (int i = 0; i < viewTypeCount; i++) {
-                scrapViews[i] = new ArrayList<View>();
-            }
-            mViewTypeCount = viewTypeCount;
-            mScrapViews = scrapViews;
-        }
-
-        public void clear() {
-            final int typeCount = mViewTypeCount;
-            for (int i = 0; i < typeCount; i++) {
-                mScrapViews[i].clear();
-            }
-            if (mTransientStateViews != null) {
-                mTransientStateViews.clear();
-            }
-        }
-
-        public void clearTransientViews() {
-            if (mTransientStateViews != null) {
-                mTransientStateViews.clear();
-            }
-        }
-
-        public void addScrap(View v) {
-            if (!(v.getLayoutParams() instanceof LayoutParams)) {
-                return;
-            }
-
-            final LayoutParams lp = (LayoutParams) v.getLayoutParams();
-            if (ViewCompat.hasTransientState(v)) {
-                if (mTransientStateViews == null) {
-                    mTransientStateViews = new SparseArray<View>();
-                }
-                mTransientStateViews.put(lp.position, v);
-                return;
-            }
-
-            final int childCount = getChildCount();
-            if (childCount > mMaxScrap) {
-                mMaxScrap = childCount;
-            }
-
-            // Clear possible modified states applied to the view when adding to the recycler.
-            // This view may have been part of a cancelled animation, so clear that state so that
-            // future consumer of this view won't have to deal with states from its past life.
-            v.setTranslationX(0);
-            v.setTranslationY(0);
-            v.setRotation(0);
-            v.setAlpha(1.0f);
-            v.setScaleY(1.0f);
-
-            final ArrayList<View> scrap = mScrapViews[lp.viewType];
-            if (scrap.size() < mMaxScrap) {
-                // The number of scraps have not yet exceeded our limit, check to see that this
-                // view does not already exist in the recycler.  This can happen if a caller
-                // mistakenly calls addScrap(view) multiple times for the same view.
-                if (!scrap.contains(v)) {
-                    scrap.add(v);
-                }
-            }
-        }
-
-        public View getTransientStateView(int position) {
-            if (mTransientStateViews == null) {
-                return null;
-            }
-
-            final View result = mTransientStateViews.get(position);
-            if (result != null) {
-                mTransientStateViews.remove(position);
-            }
-            return result;
-        }
-
-        public View getScrapView(int type) {
-            final ArrayList<View> scrap = mScrapViews[type];
-            if (scrap.isEmpty()) {
-                return null;
-            }
-
-            final int index = scrap.size() - 1;
-            final View result = scrap.remove(index);
-
-            return result;
-        }
-
-        // TODO: Implement support to maintain a list of active views so that we can make use of
-        // stable ids to retrieve the same view that is currently laid out for a particular item.
-        // Currently, all views "recycled" are shoved into the same collection, this may not be
-        // the most effective way.  Refer to the RecycleBin as implemented for AbsListView.
-        public View getView(int type, long stableId) {
-            final ArrayList<View> scrap = mScrapViews[type];
-            if (scrap.isEmpty()) {
-                return null;
-            }
-
-            for (int i = 0; i < scrap.size(); i++) {
-                final View v = scrap.get(i);
-                final LayoutParams lp = (LayoutParams) v.getLayoutParams();
-                if (lp.id == stableId) {
-                    scrap.remove(i);
-                    return v;
-                }
-            }
-
-            return null;
-        }
-    }
-
-    private class AdapterDataSetObserver extends DataSetObserver {
-        @Override
-        public void onChanged() {
-            mDataChanged = true;
-
-            mItemCount = mAdapter.getCount();
-            mFirstChangedPosition = mAdapter.getFirstChangedPosition();
-            if (mFirstPosition >= mItemCount) {
-                // If the latest data set has fewer data items than mFirstPosition, we will not be
-                // able to accurately restore scroll state, so just reset to the top.
-                mFirstPosition = 0;
-                mCurrentScrollState = null;
-            }
-
-            // TODO: Consider matching these back up if we have stable IDs.
-            mRecycler.clearTransientViews();
-
-            if (mHasStableIds) {
-                // If we will animate the transition to the new layout, cache the current positions
-                // of the visible children. This is before any views get removed below.
-                cacheChildRects();
-            } else {
-                // Clear all layout records
-                mLayoutRecords.clear();
-
-                // Reset item bottoms to be equal to item tops
-                final int colCount = mColCount;
-                for (int i = 0; i < colCount; i++) {
-                    mItemBottoms[i] = mItemTops[i];
-                }
-            }
-
-            updateEmptyStatus();
-
-            // TODO: consider repopulating in a deferred runnable instead
-            // (so that successive changes may still be batched)
-            requestLayout();
-        }
-
-        @Override
-        public void onInvalidated() {
-        }
-    }
-
-    static class SavedState extends BaseSavedState {
-        long firstId = -1;
-        int position;
-
-        // topOffset is the vertical value that the view specified by position should
-        // start rendering from.  If it is 0, the view would be at the top of the grid.
-        int topOffset;
-
-        SavedState(Parcelable superState) {
-            super(superState);
-        }
-
-        private SavedState(Parcel in) {
-            super(in);
-            firstId = in.readLong();
-            position = in.readInt();
-            topOffset = in.readInt();
-        }
-
-        @Override
-        public void writeToParcel(Parcel out, int flags) {
-            super.writeToParcel(out, flags);
-            out.writeLong(firstId);
-            out.writeInt(position);
-            out.writeInt(topOffset);
-        }
-
-        @Override
-        public String toString() {
-            return "StaggereGridView.SavedState{"
-                        + Integer.toHexString(System.identityHashCode(this))
-                        + " firstId=" + firstId
-                        + " position=" + position + "}";
-        }
-
-        public static final Parcelable.Creator<SavedState> CREATOR
-                = new Parcelable.Creator<SavedState>() {
-            @Override
-            public SavedState createFromParcel(Parcel in) {
-                return new SavedState(in);
-            }
-
-            @Override
-            public SavedState[] newArray(int size) {
-                return new SavedState[size];
-            }
-        };
-    }
-
-    public void setDropListener(ReorderListener listener) {
-        mReorderHelper = new ReorderHelper(listener, this);
-    }
-
-    public void setScrollListener(ScrollListener listener) {
-        mScrollListener = listener;
-    }
-
-    public void setOnSizeChangedListener(OnSizeChangedListener listener) {
-        mOnSizeChangedListener = listener;
-    }
-
-    /**
-     * Helper class to store a {@link View} with its corresponding layout positions
-     * as a {@link Rect}.
-     */
-    private static class ViewRectPair {
-        public final View view;
-        public final Rect rect;
-
-        public ViewRectPair(View v, Rect r) {
-            view = v;
-            rect = r;
-        }
-    }
-
-    public static class ScrollState implements Parcelable {
-        private final long mItemId;
-        private final int mAdapterPosition;
-
-        // The offset that the view specified by mAdapterPosition should start rendering from.  If
-        // this value is 0, then the view would be rendered from the very top of this grid.
-        private int mVerticalOffset;
-
-        public ScrollState(long itemId, int adapterPosition, int offset) {
-            mItemId = itemId;
-            mAdapterPosition = adapterPosition;
-            mVerticalOffset = offset;
-        }
-
-        private ScrollState(Parcel in) {
-            mItemId = in.readLong();
-            mAdapterPosition = in.readInt();
-            mVerticalOffset = in.readInt();
-        }
-
-        public long getItemId() {
-            return mItemId;
-        }
-
-        public int getAdapterPosition() {
-            return mAdapterPosition;
-        }
-
-        public void setVerticalOffset(int offset) {
-            mVerticalOffset = offset;
-        }
-
-        public int getVerticalOffset() {
-            return mVerticalOffset;
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            dest.writeLong(mItemId);
-            dest.writeInt(mAdapterPosition);
-            dest.writeInt(mVerticalOffset);
-        }
-
-        public static final Parcelable.Creator<ScrollState> CREATOR =
-                new Parcelable.Creator<ScrollState>() {
-            @Override
-            public ScrollState createFromParcel(Parcel source) {
-                return new ScrollState(source);
-            }
-
-            @Override
-            public ScrollState[] newArray(int size) {
-                return new ScrollState[size];
-            }
-        };
-
-        @Override
-        public String toString() {
-            return "ScrollState {mItemId=" + mItemId +
-                    " mAdapterPosition=" + mAdapterPosition +
-                    " mVerticalOffset=" + mVerticalOffset + "}";
-        }
-    }
-
-    /**
-     * Listener of {@Link StaggeredGridView} for grid size change.
-     */
-    public interface OnSizeChangedListener {
-        void onSizeChanged(int width, int height, int oldWidth, int oldHeight);
-    }
-
-    /**
-     * Listener of {@Link StaggeredGridView} for scroll change.
-     */
-    public interface ScrollListener {
-
-        /**
-         * Called when scroll happens on this view.
-         *
-         * @param offset The scroll offset amount.
-         * @param currentScrollY The current y position of this view.
-         * @param maxScrollY The maximum amount of scroll possible in this view.
-         */
-        void onScrollChanged(int offset, int currentScrollY, int maxScrollY);
-    }
-
-    /**
-     * Listener of {@link StaggeredGridView} for animations.  This listener is responsible
-     * for playing all animations created by this {@link StaggeredGridView}
-     */
-    public interface AnimationListener {
-        /**
-         * Called when animations are ready to be played
-         * @param animationMode The current animation mode based on the state of the data.  Valid
-         * animation modes are {@link ANIMATION_MODE_NONE}, {@link ANIMATION_MODE_NEW_DATA}, and
-         * {@link ANIMATION_MODE_UPDATE_DATA}.
-         * @param animators The list of animators to be played
-         */
-        void onAnimationReady(int animationMode, List<Animator> animators);
-    }
-
-    /**
-     * Listener of {@link StaggeredGridView} for drag and drop reordering of child views.
-     */
-    public interface ReorderListener {
-
-        /**
-         * onPickedUp is called to notify listeners that an item has been picked up for reordering.
-         * @param draggedChild the original child view that picked up.
-         */
-        void onPickedUp(View draggedChild);
-
-        /**
-         * onDrop is called to notify listeners that an intent to drop the
-         * item at position "from" over the position "target"
-         * @param draggedView the original child view that was dropped
-         * @param sourcePosition the original position where the item was dragged from
-         * @param targetPosition the target position where the item is dropped at
-         */
-        void onDrop(View draggedView, int sourcePosition, int targetPosition);
-
-        /**
-         * onCancelDrag is called to notify listeners that the drag event has been cancelled.
-         * @param draggediew the original child view that was dragged.
-         */
-        void onCancelDrag(View draggediew);
-
-        /**
-         * onReorder is called to notify listeners that an intent to move the
-         * item at position "from" to position "to"
-         * @param draggedView the original child view that was dragged
-         * @param id id of the original item that was picked up
-         * @param from
-         * @param to the target position where the item is dropped at
-         */
-        boolean onReorder(View draggedView, long id, int from, int to);
-
-        /**
-         * Event handler for a drag entering the {@link StaggeredGridView} element's
-         * reordering area.
-         * @param view The child view that just received an enter event on the reordering area.
-         * @param position The adapter position of the view that just received an enter event.
-         */
-        void onEnterReorderArea(View view, int position);
-    }
-}
diff --git a/src/com/android/deskclock/widget/toast/LinearLayoutWithSnackbarBehavior.java b/src/com/android/deskclock/widget/toast/LinearLayoutWithSnackbarBehavior.java
new file mode 100644
index 0000000..3b9c61f
--- /dev/null
+++ b/src/com/android/deskclock/widget/toast/LinearLayoutWithSnackbarBehavior.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2015 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.widget.toast;
+
+import android.content.Context;
+import android.support.design.widget.CoordinatorLayout;
+import android.support.design.widget.Snackbar;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.LinearLayout;
+
+/**
+ * LinearLayout Behavior that slides up and down when snackbar appears/disappears.
+ */
+public final class LinearLayoutWithSnackbarBehavior
+        extends CoordinatorLayout.Behavior<LinearLayout> {
+
+    public LinearLayoutWithSnackbarBehavior(Context context, AttributeSet attrs) {}
+
+    @Override
+    public boolean layoutDependsOn(CoordinatorLayout parent, LinearLayout child, View dependency) {
+        return dependency instanceof Snackbar.SnackbarLayout;
+    }
+
+    @Override
+    public boolean onDependentViewChanged(CoordinatorLayout parent, LinearLayout child,
+            View dependency) {
+        final float translationY = Math.min(0,
+                dependency.getTranslationY() - dependency.getHeight());
+        child.setTranslationY(translationY);
+        return true;
+    }
+}
diff --git a/src/com/android/deskclock/widget/toast/SnackbarManager.java b/src/com/android/deskclock/widget/toast/SnackbarManager.java
new file mode 100644
index 0000000..4a01cf0
--- /dev/null
+++ b/src/com/android/deskclock/widget/toast/SnackbarManager.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2015 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.widget.toast;
+
+import android.support.design.widget.Snackbar;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Manages visibility of Snackbar and allow preemptively dismiss current Snackbar on screen.
+ */
+public final class SnackbarManager {
+
+    private static WeakReference<Snackbar> sSnackbar = null;
+
+    private SnackbarManager() {}
+
+    public static void show(Snackbar snackbar) {
+        sSnackbar = new WeakReference<>(snackbar);
+        snackbar.show();
+    }
+
+    public static void dismiss() {
+        if (sSnackbar != null && sSnackbar.get() != null) {
+            sSnackbar.get().dismiss();
+            sSnackbar = null;
+        }
+    }
+}
diff --git a/src/com/android/deskclock/ToastMaster.java b/src/com/android/deskclock/widget/toast/ToastManager.java
similarity index 89%
rename from src/com/android/deskclock/ToastMaster.java
rename to src/com/android/deskclock/widget/toast/ToastManager.java
index 4d51696..09be715 100644
--- a/src/com/android/deskclock/ToastMaster.java
+++ b/src/com/android/deskclock/widget/toast/ToastManager.java
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package com.android.deskclock;
+package com.android.deskclock.widget.toast;
 
 import android.widget.Toast;
 
-public class ToastMaster {
+public final class ToastManager {
 
     private static Toast sToast = null;
 
-    private ToastMaster() {
+    private ToastManager() {
 
     }
 
diff --git a/src/com/android/deskclock/worldclock/Cities.java b/src/com/android/deskclock/worldclock/Cities.java
deleted file mode 100644
index dbd017d..0000000
--- a/src/com/android/deskclock/worldclock/Cities.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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.worldclock;
-
-import android.content.SharedPreferences;
-import android.util.Log;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-
-public class Cities {
-
-    public static final String WORLDCLOCK_UPDATE_INTENT = "com.android.deskclock.worldclock.update";
-    private static final String NUMBER_OF_CITIES = "number_of_cities";
-
-    public static void saveCitiesToSharedPrefs(
-            SharedPreferences prefs, HashMap<String, CityObj> cities) {
-        SharedPreferences.Editor editor = prefs.edit();
-        editor.putInt(NUMBER_OF_CITIES, cities.size());
-        Collection<CityObj> col = cities.values();
-        Iterator<CityObj> i = col.iterator();
-        int count = 0;
-        while (i.hasNext()) {
-            CityObj c = i.next();
-            c.saveCityToSharedPrefs(editor, count);
-            count++;
-        }
-        editor.apply();
-    }
-
-    public static  HashMap<String, CityObj> readCitiesFromSharedPrefs(SharedPreferences prefs) {
-        int size = prefs.getInt(NUMBER_OF_CITIES, -1);
-        HashMap<String, CityObj> c = new HashMap<String, CityObj>();
-        if (size > 0) {
-            for (int i = 0; i < size; i++) {
-                CityObj o = new CityObj(prefs, i);
-                if (o.mCityName != null && o.mTimeZone != null) {
-                    c.put(o.mCityId, o);
-                }
-            }
-        }
-        return c;
-    }
-
-    private static void dumpCities(SharedPreferences prefs, String title) {
-        int size = prefs.getInt(NUMBER_OF_CITIES, -1);
-        Log.d("Cities", "Selected Cities List " + title);
-        Log.d("Cities", "Number of cities " + size);
-        HashMap<String, CityObj> c = new HashMap<String, CityObj>();
-        if (size > 0) {
-            for (int i = 0; i < size; i++) {
-                CityObj o = new CityObj(prefs, i);
-                if (o.mCityName != null && o.mTimeZone != null) {
-                    Log.d("Cities", "Name " + o.mCityName + " tz " + o.mTimeZone);
-                }
-            }
-        }
-    }
-}
diff --git a/src/com/android/deskclock/worldclock/CitiesActivity.java b/src/com/android/deskclock/worldclock/CitiesActivity.java
deleted file mode 100644
index f7dff8b..0000000
--- a/src/com/android/deskclock/worldclock/CitiesActivity.java
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
- * 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.worldclock;
-
-import android.content.ActivityNotFoundException;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.media.AudioManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.preference.PreferenceManager;
-import android.support.v4.view.MenuItemCompat;
-import android.support.v7.widget.SearchView;
-import android.text.TextUtils;
-import android.text.format.DateFormat;
-import android.util.TypedValue;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.view.inputmethod.EditorInfo;
-import android.widget.BaseAdapter;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
-import android.widget.Filter;
-import android.widget.Filterable;
-import android.widget.ListView;
-import android.widget.SectionIndexer;
-import android.widget.TextView;
-
-import com.android.deskclock.BaseActivity;
-import com.android.deskclock.R;
-import com.android.deskclock.SettingsActivity;
-import com.android.deskclock.Utils;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-
-/**
- * Cities chooser for the world clock
- */
-public class CitiesActivity extends BaseActivity implements OnCheckedChangeListener,
-        View.OnClickListener, SearchView.OnQueryTextListener {
-
-    private static final String KEY_SEARCH_QUERY = "search_query";
-    private static final String KEY_SEARCH_MODE = "search_mode";
-    private static final String KEY_LIST_POSITION = "list_position";
-
-    private static final String PREF_SORT = "sort_preference";
-
-    private static final int SORT_BY_NAME = 0;
-    private static final int SORT_BY_GMT_OFFSET = 1;
-
-    /**
-     * This must be false for production. If true, turns on logging, test code,
-     * etc.
-     */
-    static final boolean DEBUG = false;
-    static final String TAG = "CitiesActivity";
-
-    private LayoutInflater mFactory;
-    private ListView mCitiesList;
-    private CityAdapter mAdapter;
-    private HashMap<String, CityObj> mUserSelectedCities;
-    private Calendar mCalendar;
-
-    private SearchView mSearchView;
-    private StringBuffer mQueryTextBuffer = new StringBuffer();
-    private boolean mSearchMode;
-    private int mPosition = -1;
-
-    private SharedPreferences mPrefs;
-    private int mSortType;
-
-    private String mSelectedCitiesHeaderString;
-
-    /***
-     * Adapter for a list of cities with the respected time zone. The Adapter
-     * sorts the list alphabetically and create an indexer.
-     ***/
-    private class CityAdapter extends BaseAdapter implements Filterable, SectionIndexer {
-        private static final int VIEW_TYPE_CITY = 0;
-        private static final int VIEW_TYPE_HEADER = 1;
-
-        private static final String DELETED_ENTRY = "C0";
-
-        private List<CityObj> mDisplayedCitiesList;
-
-        private CityObj[] mCities;
-        private CityObj[] mSelectedCities;
-
-        private final int mLayoutDirection;
-
-        // A map that caches names of cities in local memory.  The names in this map are
-        // preferred over the names of the selected cities stored in SharedPreferences, which could
-        // be in a different language.  This map gets reloaded on a locale change, when the new
-        // language's city strings are read from the xml file.
-        private HashMap<String, String> mCityNameMap = new HashMap<String, String>();
-
-        private String[] mSectionHeaders;
-        private Integer[] mSectionPositions;
-
-        private CityNameComparator mSortByNameComparator = new CityNameComparator();
-        private CityGmtOffsetComparator mSortByTimeComparator = new CityGmtOffsetComparator();
-
-        private final LayoutInflater mInflater;
-        private boolean mIs24HoursMode; // AM/PM or 24 hours mode
-
-        private final String mPattern12;
-        private final String mPattern24;
-
-        private int mSelectedEndPosition = 0;
-
-        private Filter mFilter = new Filter() {
-
-            @Override
-            protected synchronized FilterResults performFiltering(CharSequence constraint) {
-                FilterResults results = new FilterResults();
-                String modifiedQuery = constraint.toString().trim().toUpperCase();
-
-                ArrayList<CityObj> filteredList = new ArrayList<>();
-                ArrayList<String> sectionHeaders = new ArrayList<>();
-                ArrayList<Integer> sectionPositions = new ArrayList<>();
-
-                // Update the list first when user using search filter
-                final Collection<CityObj> selectedCities = mUserSelectedCities.values();
-                mSelectedCities = selectedCities.toArray(new CityObj[selectedCities.size()]);
-                // If the search query is empty, add in the selected cities
-                if (TextUtils.isEmpty(modifiedQuery) && mSelectedCities != null) {
-                    if (mSelectedCities.length > 0) {
-                        sectionHeaders.add("+");
-                        sectionPositions.add(0);
-                        filteredList.add(new CityObj(mSelectedCitiesHeaderString,
-                                mSelectedCitiesHeaderString, null, null));
-                    }
-                    for (CityObj city : mSelectedCities) {
-                        city.isHeader = false;
-                        filteredList.add(city);
-                    }
-                }
-
-                final HashSet<String> selectedCityIds = new HashSet<>();
-                for (CityObj c : mSelectedCities) {
-                    selectedCityIds.add(c.mCityId);
-                }
-                mSelectedEndPosition = filteredList.size();
-
-                long currentTime = System.currentTimeMillis();
-                String val = null;
-                int offset = -100000; //some value that cannot be a real offset
-                for (CityObj city : mCities) {
-
-                    // If the city is a deleted entry, ignore it.
-                    if (city.mCityId.equals(DELETED_ENTRY)) {
-                        continue;
-                    }
-
-                    // If the search query is empty, add section headers.
-                    if (TextUtils.isEmpty(modifiedQuery)) {
-                        if (!selectedCityIds.contains(city.mCityId)) {
-                            // If the list is sorted by name, and the city has an index
-                            // different than the previous city's index, update the section header.
-                            if (mSortType == SORT_BY_NAME
-                                    && !city.mCityIndex.equals(val)) {
-                                val = city.mCityIndex.toUpperCase();
-                                sectionHeaders.add(val);
-                                sectionPositions.add(filteredList.size());
-                                city.isHeader = true;
-                            } else {
-                                city.isHeader = false;
-                            }
-
-                            // If the list is sorted by time, and the gmt offset is different than
-                            // the previous city's gmt offset, insert a section header.
-                            if (mSortType == SORT_BY_GMT_OFFSET) {
-                                TimeZone timezone = TimeZone.getTimeZone(city.mTimeZone);
-                                int newOffset = timezone.getOffset(currentTime);
-                                if (offset != newOffset) {
-                                    offset = newOffset;
-                                    // Because JB fastscroll only supports ~1 char strings
-                                    // and KK ellipsizes strings, trim section headers to the
-                                    // nearest hour.
-                                    final String offsetString = Utils.getGMTHourOffset(timezone,
-                                            Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT
-                                            /* useShortForm */ );
-                                    sectionHeaders.add(offsetString);
-                                    sectionPositions.add(filteredList.size());
-                                    city.isHeader = true;
-                                } else {
-                                    city.isHeader = false;
-                                }
-                            }
-
-                            filteredList.add(city);
-                        }
-                    } else {
-                        // If the city name begins with the non-empty query, add it into the list.
-                        String cityName = city.mCityName.trim().toUpperCase();
-                        if (city.mCityId != null && cityName.startsWith(modifiedQuery)) {
-                            city.isHeader = false;
-                            filteredList.add(city);
-                        }
-                    }
-                }
-
-                mSectionHeaders = sectionHeaders.toArray(new String[sectionHeaders.size()]);
-                mSectionPositions = sectionPositions.toArray(new Integer[sectionPositions.size()]);
-
-                results.values = filteredList;
-                results.count = filteredList.size();
-                return results;
-            }
-
-            @Override
-            protected void publishResults(CharSequence constraint, FilterResults results) {
-                mDisplayedCitiesList = (ArrayList<CityObj>) results.values;
-                if (mPosition >= 0) {
-                    mCitiesList.setSelectionFromTop(mPosition, 0);
-                    mPosition = -1;
-                }
-                notifyDataSetChanged();
-            }
-        };
-
-        public CityAdapter(
-                Context context, LayoutInflater factory) {
-            super();
-            mCalendar = Calendar.getInstance();
-            mCalendar.setTimeInMillis(System.currentTimeMillis());
-            mLayoutDirection = TextUtils.getLayoutDirectionFromLocale(Locale.getDefault());
-            mInflater = factory;
-
-            // Load the cities from xml.
-            mCities = Utils.loadCitiesFromXml(context);
-
-            // Reload the city name map with the recently parsed city names of the currently
-            // selected language for use with selected cities.
-            mCityNameMap.clear();
-            for (CityObj city : mCities) {
-                mCityNameMap.put(city.mCityId, city.mCityName);
-            }
-
-            // Re-organize the selected cities into an array.
-            Collection<CityObj> selectedCities = mUserSelectedCities.values();
-            mSelectedCities = selectedCities.toArray(new CityObj[selectedCities.size()]);
-
-            // Override the selected city names in the shared preferences with the
-            // city names in the updated city name map, which will always reflect the
-            // current language.
-            for (CityObj city : mSelectedCities) {
-                String newCityName = mCityNameMap.get(city.mCityId);
-                if (newCityName != null) {
-                    city.mCityName = newCityName;
-                }
-            }
-
-            mPattern24 = Utils.isJBMR2OrLater()
-                    ? DateFormat.getBestDateTimePattern(Locale.getDefault(), "Hm")
-                    : getString(R.string.time_format_24_mode);
-
-            // There's an RTL layout bug that causes jank when fast-scrolling through
-            // the list in 12-hour mode in an RTL locale. We can work around this by
-            // ensuring the strings are the same length by using "hh" instead of "h".
-            String pattern12 = Utils.isJBMR2OrLater()
-                    ? DateFormat.getBestDateTimePattern(Locale.getDefault(), "hma")
-                    : getString(R.string.time_format_12_mode);
-
-            if (mLayoutDirection == View.LAYOUT_DIRECTION_RTL) {
-                pattern12 = pattern12.replaceAll("h", "hh");
-            }
-            mPattern12 = pattern12;
-
-            sortCities(mSortType);
-            set24HoursMode(context);
-        }
-
-        public void toggleSort() {
-            if (mSortType == SORT_BY_NAME) {
-                sortCities(SORT_BY_GMT_OFFSET);
-            } else {
-                sortCities(SORT_BY_NAME);
-            }
-        }
-
-        private void sortCities(final int sortType) {
-            mSortType = sortType;
-            Arrays.sort(mCities, sortType == SORT_BY_NAME ? mSortByNameComparator
-                    : mSortByTimeComparator);
-            if (mSelectedCities != null) {
-                Arrays.sort(mSelectedCities, sortType == SORT_BY_NAME ? mSortByNameComparator
-                        : mSortByTimeComparator);
-            }
-            mPrefs.edit().putInt(PREF_SORT, sortType).commit();
-            mFilter.filter(mQueryTextBuffer.toString());
-        }
-
-        @Override
-        public int getCount() {
-            return mDisplayedCitiesList != null ? mDisplayedCitiesList.size() : 0;
-        }
-
-        @Override
-        public Object getItem(int p) {
-            if (mDisplayedCitiesList != null && p >= 0 && p < mDisplayedCitiesList.size()) {
-                return mDisplayedCitiesList.get(p);
-            }
-            return null;
-        }
-
-        @Override
-        public long getItemId(int p) {
-            return p;
-        }
-
-        @Override
-        public boolean isEnabled(int p) {
-            return mDisplayedCitiesList != null && mDisplayedCitiesList.get(p).mCityId != null;
-        }
-
-        @Override
-        public synchronized View getView(int position, View view, ViewGroup parent) {
-            if (mDisplayedCitiesList == null || position < 0
-                    || position >= mDisplayedCitiesList.size()) {
-                return null;
-            }
-            CityObj c = mDisplayedCitiesList.get(position);
-            // Header view: A CityObj with nothing but the "selected cities" label
-            if (c.mCityId == null) {
-                if (view == null) {
-                    view = mInflater.inflate(R.layout.city_list_header, parent, false);
-                }
-            } else { // City view
-                // Make sure to recycle a City view only
-                if (view == null) {
-                    view = mInflater.inflate(R.layout.city_list_item, parent, false);
-                    final CityViewHolder holder = new CityViewHolder();
-                    holder.index = (TextView) view.findViewById(R.id.index);
-                    holder.name = (TextView) view.findViewById(R.id.city_name);
-                    holder.time = (TextView) view.findViewById(R.id.city_time);
-                    holder.selected = (CheckBox) view.findViewById(R.id.city_onoff);
-                    view.setTag(holder);
-                }
-                view.setOnClickListener(CitiesActivity.this);
-                CityViewHolder holder = (CityViewHolder) view.getTag();
-
-                holder.selected.setTag(c);
-                holder.selected.setChecked(mUserSelectedCities.containsKey(c.mCityId));
-                holder.selected.setOnCheckedChangeListener(CitiesActivity.this);
-                holder.name.setText(c.mCityName, TextView.BufferType.SPANNABLE);
-                holder.time.setText(getTimeCharSequence(c.mTimeZone));
-                if (c.isHeader) {
-                    holder.index.setVisibility(View.VISIBLE);
-                    if (mSortType == SORT_BY_NAME) {
-                        holder.index.setText(c.mCityIndex);
-                        holder.index.setTextSize(TypedValue.COMPLEX_UNIT_SP, 24);
-                    } else { // SORT_BY_GMT_OFFSET
-                        holder.index.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
-                        holder.index.setText(Utils.getGMTHourOffset(
-                                TimeZone.getTimeZone(c.mTimeZone), false));
-                    }
-                } else {
-                    // If not a header, use the invisible index for left padding
-                    holder.index.setVisibility(View.INVISIBLE);
-                }
-                // skip checkbox and other animations
-                view.jumpDrawablesToCurrentState();
-            }
-            return view;
-        }
-
-        private CharSequence getTimeCharSequence(String timeZone) {
-            mCalendar.setTimeZone(TimeZone.getTimeZone(timeZone));
-            return DateFormat.format(mIs24HoursMode ? mPattern24 : mPattern12, mCalendar);
-        }
-
-        @Override
-        public int getViewTypeCount() {
-            return 2;
-        }
-
-        @Override
-        public int getItemViewType(int position) {
-            return (mDisplayedCitiesList.get(position).mCityId != null)
-                    ? VIEW_TYPE_CITY : VIEW_TYPE_HEADER;
-        }
-
-        private class CityViewHolder {
-            TextView index;
-            TextView name;
-            TextView time;
-            CheckBox selected;
-        }
-
-        public void set24HoursMode(Context c) {
-            mIs24HoursMode = DateFormat.is24HourFormat(c);
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public int getPositionForSection(int section) {
-            return !isEmpty(mSectionPositions) ? mSectionPositions[section] : 0;
-        }
-
-
-        @Override
-        public int getSectionForPosition(int p) {
-            final Integer[] positions = mSectionPositions;
-            if (!isEmpty(positions)) {
-                for (int i = 0; i < positions.length - 1; i++) {
-                    if (p >= positions[i]
-                            && p < positions[i + 1]) {
-                        return i;
-                    }
-                }
-                if (p >= positions[positions.length - 1]) {
-                    return positions.length - 1;
-                }
-            }
-            return 0;
-        }
-
-        @Override
-        public Object[] getSections() {
-            return mSectionHeaders;
-        }
-
-        @Override
-        public Filter getFilter() {
-            return mFilter;
-        }
-
-        private boolean isEmpty(Object[] array) {
-            return array == null || array.length == 0;
-        }
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setVolumeControlStream(AudioManager.STREAM_ALARM);
-
-        mFactory = LayoutInflater.from(this);
-        mPrefs = Utils.getDefaultSharedPreferences(this);
-        mSortType = mPrefs.getInt(PREF_SORT, SORT_BY_NAME);
-        mSelectedCitiesHeaderString = getString(R.string.selected_cities_label);
-        if (savedInstanceState != null) {
-            mQueryTextBuffer.append(savedInstanceState.getString(KEY_SEARCH_QUERY));
-            mSearchMode = savedInstanceState.getBoolean(KEY_SEARCH_MODE);
-            mPosition = savedInstanceState.getInt(KEY_LIST_POSITION);
-        }
-        updateLayout();
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle bundle) {
-        super.onSaveInstanceState(bundle);
-        bundle.putString(KEY_SEARCH_QUERY, mQueryTextBuffer.toString());
-        bundle.putBoolean(KEY_SEARCH_MODE, mSearchMode);
-        bundle.putInt(KEY_LIST_POSITION, mCitiesList.getFirstVisiblePosition());
-    }
-
-    private void updateLayout() {
-        setContentView(R.layout.cities_activity);
-        mCitiesList = (ListView) findViewById(R.id.cities_list);
-        setFastScroll(TextUtils.isEmpty(mQueryTextBuffer.toString().trim()));
-        mCitiesList.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
-        mUserSelectedCities = Cities.readCitiesFromSharedPrefs(
-                Utils.getDefaultSharedPreferences(this));
-        mAdapter = new CityAdapter(this, mFactory);
-        mCitiesList.setAdapter(mAdapter);
-    }
-
-    private void setFastScroll(boolean enabled) {
-        if (mCitiesList != null) {
-            mCitiesList.setFastScrollAlwaysVisible(enabled);
-            mCitiesList.setFastScrollEnabled(enabled);
-        }
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        if (mAdapter != null) {
-            mAdapter.set24HoursMode(this);
-        }
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        Cities.saveCitiesToSharedPrefs(Utils.getDefaultSharedPreferences(this),
-                mUserSelectedCities);
-        Intent i = new Intent(Cities.WORLDCLOCK_UPDATE_INTENT);
-        sendBroadcast(i);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                finish();
-                return true;
-            case R.id.menu_item_settings:
-                startActivity(new Intent(this, SettingsActivity.class));
-                return true;
-            case R.id.menu_item_help:
-                Intent i = item.getIntent();
-                if (i != null) {
-                    try {
-                        startActivity(i);
-                    } catch (ActivityNotFoundException e) {
-                        // No activity found to match the intent - ignore
-                    }
-                }
-                return true;
-            case R.id.menu_item_sort:
-                if (mAdapter != null) {
-                    mAdapter.toggleSort();
-                    setFastScroll(TextUtils.isEmpty(mQueryTextBuffer.toString().trim()));
-                }
-                return true;
-            default:
-                break;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        getMenuInflater().inflate(R.menu.cities_menu, menu);
-        MenuItem help = menu.findItem(R.id.menu_item_help);
-        if (help != null) {
-            Utils.prepareHelpMenuItem(this, help);
-        }
-
-        MenuItem searchMenu = menu.findItem(R.id.menu_item_search);
-        mSearchView = (SearchView) MenuItemCompat.getActionView(searchMenu);
-        mSearchView.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
-        mSearchView.setOnSearchClickListener(new OnClickListener() {
-
-            @Override
-            public void onClick(View arg0) {
-                mSearchMode = true;
-            }
-        });
-        mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
-
-            @Override
-            public boolean onClose() {
-                mSearchMode = false;
-                return false;
-            }
-        });
-        if (mSearchView != null) {
-            mSearchView.setOnQueryTextListener(this);
-            mSearchView.setQuery(mQueryTextBuffer.toString(), false);
-            if (mSearchMode) {
-                mSearchView.requestFocus();
-                mSearchView.setIconified(false);
-            }
-        }
-        return super.onCreateOptionsMenu(menu);
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        MenuItem sortMenuItem = menu.findItem(R.id.menu_item_sort);
-        if (mSortType == SORT_BY_NAME) {
-            sortMenuItem.setTitle(getString(R.string.menu_item_sort_by_gmt_offset));
-        } else {
-            sortMenuItem.setTitle(getString(R.string.menu_item_sort_by_name));
-        }
-        return super.onPrepareOptionsMenu(menu);
-    }
-
-    @Override
-    public void onCheckedChanged(CompoundButton b, boolean checked) {
-        CityObj c = (CityObj) b.getTag();
-        if (checked) {
-            mUserSelectedCities.put(c.mCityId, c);
-        } else {
-            mUserSelectedCities.remove(c.mCityId);
-        }
-    }
-
-    @Override
-    public void onClick(View v) {
-        CompoundButton b = (CompoundButton) v.findViewById(R.id.city_onoff);
-        boolean checked = b.isChecked();
-        onCheckedChanged(b, checked);
-        b.setChecked(!checked);
-    }
-
-    @Override
-    public boolean onQueryTextChange(String queryText) {
-        mQueryTextBuffer.setLength(0);
-        mQueryTextBuffer.append(queryText);
-        mCitiesList.setFastScrollEnabled(TextUtils.isEmpty(mQueryTextBuffer.toString().trim()));
-        mAdapter.getFilter().filter(queryText);
-        return true;
-    }
-
-    @Override
-    public boolean onQueryTextSubmit(String arg0) {
-        return false;
-    }
-}
diff --git a/src/com/android/deskclock/worldclock/CityGmtOffsetComparator.java b/src/com/android/deskclock/worldclock/CityGmtOffsetComparator.java
deleted file mode 100644
index e18cb63..0000000
--- a/src/com/android/deskclock/worldclock/CityGmtOffsetComparator.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2013 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.worldclock;
-
-import java.util.Comparator;
-import java.util.TimeZone;
-
-public class CityGmtOffsetComparator implements Comparator<CityObj> {
-
-    private CityNameComparator mNameComparator = null;
-
-    @Override
-    public int compare(CityObj c1, CityObj c2) {
-        long currentTime = System.currentTimeMillis();
-        int offset = TimeZone.getTimeZone(c1.mTimeZone).getOffset(currentTime);
-        int offset2 = TimeZone.getTimeZone(c2.mTimeZone).getOffset(currentTime);
-        return (offset < offset2) ? -1 : (offset > offset2) ? 1 :
-            getCityNameComparator().compare(c1, c2);
-    }
-
-    private CityNameComparator getCityNameComparator() {
-        if (mNameComparator == null) {
-            mNameComparator = new CityNameComparator();
-        }
-        return mNameComparator;
-    }
-}
diff --git a/src/com/android/deskclock/worldclock/CityNameComparator.java b/src/com/android/deskclock/worldclock/CityNameComparator.java
deleted file mode 100644
index 832f206..0000000
--- a/src/com/android/deskclock/worldclock/CityNameComparator.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2013 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.worldclock;
-
-import java.text.Collator;
-import java.util.Comparator;
-
-public class CityNameComparator implements Comparator<CityObj> {
-
-    private Collator mCollator;
-
-    public CityNameComparator() {
-        mCollator = Collator.getInstance();
-    }
-
-    @Override
-    public int compare(CityObj c1, CityObj c2) {
-        return mCollator.compare(c1.mCityName, c2.mCityName);
-    }
-}
diff --git a/src/com/android/deskclock/worldclock/CityObj.java b/src/com/android/deskclock/worldclock/CityObj.java
deleted file mode 100644
index 8893b90..0000000
--- a/src/com/android/deskclock/worldclock/CityObj.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.worldclock;
-
-import android.content.SharedPreferences;
-
-public class CityObj {
-
-    private static final String CITY_NAME = "city_name_";
-    private static final String CITY_TIME_ZONE = "city_tz_";
-    private static final String CITY_ID = "city_id_";
-    private static final String CITY_INDEX = "city_index_";
-
-    public String mCityName;
-    public String mTimeZone;
-    public String mCityId;
-    public String mCityIndex;
-    public boolean isHeader;
-
-    public CityObj(String name, String timezone, String id, String index) {
-        mCityName = name;
-        mTimeZone = timezone;
-        mCityId = id;
-        mCityIndex = index;
-    }
-
-    @Override
-    public String toString() {
-        return "CityObj{" +
-                "name=" + mCityName +
-                ", timezone=" + mTimeZone +
-                ", id=" + mCityId +
-                ", index=" + mCityIndex +
-                '}';
-    }
-
-    public CityObj(SharedPreferences prefs, int index) {
-        mCityName = prefs.getString(CITY_NAME + index, null);
-        mTimeZone = prefs.getString(CITY_TIME_ZONE + index, null);
-        mCityId = prefs.getString(CITY_ID + index, null);
-        mCityIndex = prefs.getString(CITY_INDEX + index, null);
-    }
-
-    public void saveCityToSharedPrefs(SharedPreferences.Editor editor, int index) {
-        editor.putString(CITY_NAME + index, mCityName);
-        editor.putString(CITY_TIME_ZONE + index, mTimeZone);
-        editor.putString(CITY_ID + index, mCityId);
-        editor.putString(CITY_INDEX + index, mCityIndex);
-    }
-}
diff --git a/src/com/android/deskclock/worldclock/CitySelectionActivity.java b/src/com/android/deskclock/worldclock/CitySelectionActivity.java
new file mode 100644
index 0000000..d38ac71
--- /dev/null
+++ b/src/com/android/deskclock/worldclock/CitySelectionActivity.java
@@ -0,0 +1,599 @@
+/*
+ * Copyright (C) 2015 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.worldclock;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.os.Bundle;
+import android.support.v7.widget.SearchView;
+import android.text.TextUtils;
+import android.text.format.DateFormat;
+import android.util.ArraySet;
+import android.util.TypedValue;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.ListView;
+import android.widget.SectionIndexer;
+import android.widget.TextView;
+
+import com.android.deskclock.BaseActivity;
+import com.android.deskclock.R;
+import com.android.deskclock.Utils;
+import com.android.deskclock.actionbarmenu.AbstractMenuItemController;
+import com.android.deskclock.actionbarmenu.ActionBarMenuManager;
+import com.android.deskclock.actionbarmenu.MenuItemControllerFactory;
+import com.android.deskclock.actionbarmenu.NavUpMenuItemController;
+import com.android.deskclock.actionbarmenu.SearchMenuItemController;
+import com.android.deskclock.actionbarmenu.SettingMenuItemController;
+import com.android.deskclock.data.City;
+import com.android.deskclock.data.DataModel;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.TimeZone;
+
+/**
+ * This activity allows the user to alter the cities selected for display.
+ *
+ * Note, it is possible for two instances of this Activity to exist simultaneously:
+ *
+ * <ul>
+ *     <li>Clock Tab-> Tap Floating Action Button</li>
+ *     <li>Digital Widget -> Tap any city clock</li>
+ * </ul>
+ *
+ * As a result, {@link #onResume()} conservatively refreshes itself from the backing
+ * {@link DataModel} which may have changed since this activity was last displayed.
+ */
+public final class CitySelectionActivity extends BaseActivity {
+
+    /** The list of all selected and unselected cities, indexed and possibly filtered. */
+    private ListView mCitiesList;
+
+    /** The adapter that presents all of the selected and unselected cities. */
+    private CityAdapter mCitiesAdapter;
+
+    /** Manages all action bar menu display and click handling. */
+    private final ActionBarMenuManager mActionBarMenuManager = new ActionBarMenuManager(this);
+
+    /** Menu item controller for search view. */
+    private SearchMenuItemController mSearchMenuItemController;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setVolumeControlStream(AudioManager.STREAM_ALARM);
+
+        setContentView(R.layout.cities_activity);
+        mSearchMenuItemController =
+                new SearchMenuItemController(new SearchView.OnQueryTextListener() {
+                    @Override
+                    public boolean onQueryTextSubmit(String query) {
+                        return false;
+                    }
+
+                    @Override
+                    public boolean onQueryTextChange(String query) {
+                        mCitiesAdapter.filter(query);
+                        updateFastScrolling();
+                        return true;
+                    }
+                }, savedInstanceState);
+        mCitiesAdapter = new CityAdapter(this, mSearchMenuItemController);
+        mActionBarMenuManager.addMenuItemController(new NavUpMenuItemController(this))
+                .addMenuItemController(mSearchMenuItemController)
+                .addMenuItemController(new SortOrderMenuItemController())
+                .addMenuItemController(new SettingMenuItemController(this))
+                .addMenuItemController(MenuItemControllerFactory.getInstance()
+                        .buildMenuItemControllers(this));
+        mCitiesList = (ListView) findViewById(R.id.cities_list);
+        mCitiesList.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
+        mCitiesList.setAdapter(mCitiesAdapter);
+
+        updateFastScrolling();
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle bundle) {
+        super.onSaveInstanceState(bundle);
+        mSearchMenuItemController.saveInstance(bundle);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        // Recompute the contents of the adapter before displaying on screen.
+        mCitiesAdapter.refresh();
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+
+        // Save the selected cities.
+        DataModel.getDataModel().setSelectedCities(mCitiesAdapter.getSelectedCities());
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        mActionBarMenuManager.createOptionsMenu(menu, getMenuInflater());
+        return true;
+    }
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        mActionBarMenuManager.prepareShowMenu(menu);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (mActionBarMenuManager.handleMenuItemClick(item)) {
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    /**
+     * Fast scrolling is only enabled while no filtering is happening.
+     */
+    private void updateFastScrolling() {
+        final boolean enabled = !mCitiesAdapter.isFiltering();
+        mCitiesList.setFastScrollAlwaysVisible(enabled);
+        mCitiesList.setFastScrollEnabled(enabled);
+    }
+
+    /**
+     * This adapter presents data in 2 possible modes. If selected cities exist the format is:
+     *
+     * <pre>
+     * Selected Cities
+     *   City 1 (alphabetically first)
+     *   City 2 (alphabetically second)
+     *   ...
+     * A City A1 (alphabetically first starting with A)
+     *   City A2 (alphabetically second starting with A)
+     *   ...
+     * B City B1 (alphabetically first starting with B)
+     *   City B2 (alphabetically second starting with B)
+     *   ...
+     * </pre>
+     *
+     * If selected cities do not exist, that section is removed and all that remains is:
+     *
+     * <pre>
+     * A City A1 (alphabetically first starting with A)
+     *   City A2 (alphabetically second starting with A)
+     *   ...
+     * B City B1 (alphabetically first starting with B)
+     *   City B2 (alphabetically second starting with B)
+     *   ...
+     * </pre>
+     */
+    private static final class CityAdapter extends BaseAdapter implements View.OnClickListener,
+            CompoundButton.OnCheckedChangeListener, SectionIndexer {
+
+        /** The type of the single optional "Selected Cities" header entry. */
+        private static final int VIEW_TYPE_SELECTED_CITIES_HEADER = 0;
+
+        /** The type of each city entry. */
+        private static final int VIEW_TYPE_CITY = 1;
+
+        private final Context mContext;
+
+        private final LayoutInflater mInflater;
+
+        /** The 12-hour time pattern for the current locale. */
+        private final String mPattern12;
+
+        /** The 24-hour time pattern for the current locale. */
+        private final String mPattern24;
+
+        /** {@code true} time should honor {@link #mPattern24}; {@link #mPattern12} otherwise. */
+        private boolean mIs24HoursMode;
+
+        /** A calendar used to format time in a particular timezone. */
+        private final Calendar mCalendar;
+
+        /** The list of cities which may be filtered by a search term. */
+        private List<City> mFilteredCities = Collections.emptyList();
+
+        /** A mutable set of cities currently selected by the user. */
+        private final Set<City> mUserSelectedCities = new ArraySet<>();
+
+        /** The number of user selections at the top of the adapter to avoid indexing. */
+        private int mOriginalUserSelectionCount;
+
+        /** The precomputed section headers. */
+        private String[] mSectionHeaders;
+
+        /** The corresponding location of each precomputed section header. */
+        private Integer[] mSectionHeaderPositions;
+
+        /** Menu item controller for search. Search query is maintained here. */
+        private final SearchMenuItemController mSearchMenuItemController;
+
+        public CityAdapter(Context context, SearchMenuItemController searchMenuItemController) {
+            mContext = context;
+            mSearchMenuItemController = searchMenuItemController;
+            mInflater = LayoutInflater.from(context);
+
+            mCalendar = Calendar.getInstance();
+            mCalendar.setTimeInMillis(System.currentTimeMillis());
+
+            final Locale locale = Locale.getDefault();
+            mPattern24 = DateFormat.getBestDateTimePattern(locale, "Hm");
+
+            String pattern12 = DateFormat.getBestDateTimePattern(locale, "hma");
+            if (TextUtils.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL) {
+                // There's an RTL layout bug that causes jank when fast-scrolling through
+                // the list in 12-hour mode in an RTL locale. We can work around this by
+                // ensuring the strings are the same length by using "hh" instead of "h".
+                pattern12 = pattern12.replaceAll("h", "hh");
+            }
+            mPattern12 = pattern12;
+        }
+
+        @Override
+        public int getCount() {
+            final int headerCount = hasHeader() ? 1 : 0;
+            return headerCount + mFilteredCities.size();
+        }
+
+        @Override
+        public City getItem(int position) {
+            if (hasHeader()) {
+                final int itemViewType = getItemViewType(position);
+                switch (itemViewType) {
+                    case VIEW_TYPE_SELECTED_CITIES_HEADER:
+                        return null;
+                    case VIEW_TYPE_CITY:
+                        return mFilteredCities.get(position - 1);
+                }
+                throw new IllegalStateException("unexpected item view type: " + itemViewType);
+            }
+
+            return mFilteredCities.get(position);
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public synchronized View getView(int position, View view, ViewGroup parent) {
+            final int itemViewType = getItemViewType(position);
+            switch (itemViewType) {
+                case VIEW_TYPE_SELECTED_CITIES_HEADER:
+                    if (view == null) {
+                        view = mInflater.inflate(R.layout.city_list_header, parent, false);
+                    }
+                    return view;
+
+                case VIEW_TYPE_CITY:
+                    final City city = getItem(position);
+                    final TimeZone timeZone = city.getTimeZone();
+
+                    // Inflate a new view if necessary.
+                    if (view == null) {
+                        view = mInflater.inflate(R.layout.city_list_item, parent, false);
+                        final TextView index = (TextView) view.findViewById(R.id.index);
+                        final TextView name = (TextView) view.findViewById(R.id.city_name);
+                        final TextView time = (TextView) view.findViewById(R.id.city_time);
+                        final CheckBox selected = (CheckBox) view.findViewById(R.id.city_onoff);
+                        view.setTag(new CityItemHolder(index, name, time, selected));
+                    }
+
+                    // Bind data into the child views.
+                    final CityItemHolder holder = (CityItemHolder) view.getTag();
+                    holder.selected.setTag(city);
+                    holder.selected.setChecked(mUserSelectedCities.contains(city));
+                    holder.selected.setContentDescription(city.getName());
+                    holder.selected.setOnCheckedChangeListener(this);
+                    holder.name.setText(city.getName(), TextView.BufferType.SPANNABLE);
+                    holder.time.setText(getTimeCharSequence(timeZone));
+
+                    final boolean showIndex = getShowIndex(position);
+                    holder.index.setVisibility(showIndex ? View.VISIBLE : View.INVISIBLE);
+                    if (showIndex) {
+                        switch (getCitySort()) {
+                            case NAME:
+                                holder.index.setText(city.getIndexString());
+                                holder.index.setTextSize(TypedValue.COMPLEX_UNIT_SP, 24);
+                                break;
+
+                            case UTC_OFFSET:
+                                holder.index.setText(Utils.getGMTHourOffset(timeZone, false));
+                                holder.index.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
+                                break;
+                        }
+                    }
+
+                    // skip checkbox and other animations
+                    view.jumpDrawablesToCurrentState();
+                    view.setOnClickListener(this);
+                    return view;
+            }
+
+            throw new IllegalStateException("unexpected item view type: " + itemViewType);
+        }
+
+        @Override
+        public int getViewTypeCount() {
+            return 2;
+        }
+
+        @Override
+        public int getItemViewType(int position) {
+            return hasHeader() && position == 0 ? VIEW_TYPE_SELECTED_CITIES_HEADER : VIEW_TYPE_CITY;
+        }
+
+        @Override
+        public void onCheckedChanged(CompoundButton b, boolean checked) {
+            final City city = (City) b.getTag();
+            if (checked) {
+                mUserSelectedCities.add(city);
+                b.announceForAccessibility(mContext.getString(R.string.city_checked,
+                        city.getName()));
+            } else {
+                mUserSelectedCities.remove(city);
+                b.announceForAccessibility(mContext.getString(R.string.city_unchecked,
+                        city.getName()));
+            }
+        }
+
+        @Override
+        public void onClick(View v) {
+            final CheckBox b = (CheckBox) v.findViewById(R.id.city_onoff);
+            b.setChecked(!b.isChecked());
+        }
+
+        @Override
+        public Object[] getSections() {
+            if (mSectionHeaders == null) {
+                // Make an educated guess at the expected number of sections.
+                final int approximateSectionCount = getCount() / 5;
+                final List<String> sections = new ArrayList<>(approximateSectionCount);
+                final List<Integer> positions = new ArrayList<>(approximateSectionCount);
+
+                // Add a section for the "Selected Cities" header if it exists.
+                if (hasHeader()) {
+                    sections.add("+");
+                    positions.add(0);
+                }
+
+                for (int position = 0; position < getCount(); position++) {
+                    // Add a section if this position should show the section index.
+                    if (getShowIndex(position)) {
+                        final City city = getItem(position);
+                        switch (getCitySort()) {
+                            case NAME:
+                                sections.add(city.getIndexString());
+                                break;
+                            case UTC_OFFSET:
+                                final TimeZone timezone = city.getTimeZone();
+                                sections.add(Utils.getGMTHourOffset(timezone, Utils.isPreL()));
+                                break;
+                        }
+                        positions.add(position);
+                    }
+                }
+
+                mSectionHeaders = sections.toArray(new String[sections.size()]);
+                mSectionHeaderPositions = positions.toArray(new Integer[positions.size()]);
+            }
+            return mSectionHeaders;
+        }
+
+        @Override
+        public int getPositionForSection(int sectionIndex) {
+            return getSections().length == 0 ? 0 : mSectionHeaderPositions[sectionIndex];
+        }
+
+        @Override
+        public int getSectionForPosition(int position) {
+            if (getSections().length == 0) {
+                return 0;
+            }
+
+            for (int i = 0; i < mSectionHeaderPositions.length - 2; i++) {
+                if (position < mSectionHeaderPositions[i]) continue;
+                if (position >= mSectionHeaderPositions[i + 1]) continue;
+
+                return i;
+            }
+
+            return mSectionHeaderPositions.length - 1;
+        }
+
+        /**
+         * Clear the section headers to force them to be recomputed if they are now stale.
+         */
+        private void clearSectionHeaders() {
+            mSectionHeaders = null;
+            mSectionHeaderPositions = null;
+        }
+
+        /**
+         * Rebuilds all internal data structures from scratch.
+         */
+        private void refresh() {
+            // Update the 12/24 hour mode.
+            mIs24HoursMode = DateFormat.is24HourFormat(mContext);
+
+            // Refresh the user selections.
+            final List<City> selected = DataModel.getDataModel().getSelectedCities();
+            mUserSelectedCities.clear();
+            mUserSelectedCities.addAll(selected);
+            mOriginalUserSelectionCount = selected.size();
+
+            // Recompute section headers.
+            clearSectionHeaders();
+
+            // Recompute filtered cities.
+            filter(mSearchMenuItemController.getQueryText());
+        }
+
+        /**
+         * Filter the cities using the given {@code queryText}.
+         */
+        private void filter(String queryText) {
+            mSearchMenuItemController.setQueryText(queryText);
+            final String query = queryText.trim().toUpperCase();
+
+            // Compute the filtered list of cities.
+            final List<City> filteredCities;
+            if (TextUtils.isEmpty(query)) {
+                filteredCities = DataModel.getDataModel().getAllCities();
+            } else {
+                final List<City> unselected = DataModel.getDataModel().getUnselectedCities();
+                filteredCities = new ArrayList<>(unselected.size());
+                for (City city : unselected) {
+                    if (city.getNameUpperCase().startsWith(query)) {
+                        filteredCities.add(city);
+                    }
+                }
+            }
+
+            // Swap in the filtered list of cities and notify of the data change.
+            mFilteredCities = filteredCities;
+            notifyDataSetChanged();
+        }
+
+        private boolean isFiltering() {
+            return !TextUtils.isEmpty(mSearchMenuItemController.getQueryText().trim());
+        }
+
+        private Collection<City> getSelectedCities() { return mUserSelectedCities; }
+        private boolean hasHeader() { return !isFiltering() && mOriginalUserSelectionCount > 0; }
+
+        private DataModel.CitySort getCitySort() {
+            return DataModel.getDataModel().getCitySort();
+        }
+
+        private Comparator<City> getCitySortComparator() {
+            return DataModel.getDataModel().getCityIndexComparator();
+        }
+
+        private CharSequence getTimeCharSequence(TimeZone timeZone) {
+            mCalendar.setTimeZone(timeZone);
+            return DateFormat.format(mIs24HoursMode ? mPattern24 : mPattern12, mCalendar);
+        }
+
+        private boolean getShowIndex(int position) {
+            // Indexes are never displayed on filtered cities.
+            if (isFiltering()) {
+                return false;
+            }
+
+            if (hasHeader()) {
+                // None of the original user selections should show their index.
+                if (position <= mOriginalUserSelectionCount) {
+                    return false;
+                }
+
+                // The first item after the original user selections must always show its index.
+                if (position == mOriginalUserSelectionCount + 1) {
+                    return true;
+                }
+            } else {
+                // None of the original user selections should show their index.
+                if (position < mOriginalUserSelectionCount) {
+                    return false;
+                }
+
+                // The first item after the original user selections must always show its index.
+                if (position == mOriginalUserSelectionCount) {
+                    return true;
+                }
+            }
+
+            // Otherwise compare the city with its predecessor to test if it is a header.
+            final City priorCity = getItem(position - 1);
+            final City city = getItem(position);
+            return getCitySortComparator().compare(priorCity, city) != 0;
+        }
+
+        /**
+         * Cache the child views of each city item view.
+         */
+        private static final class CityItemHolder {
+
+            private final TextView index;
+            private final TextView name;
+            private final TextView time;
+            private final CheckBox selected;
+
+            public CityItemHolder(TextView index, TextView name, TextView time, CheckBox selected) {
+                this.index = index;
+                this.name = name;
+                this.time = time;
+                this.selected = selected;
+            }
+        }
+    }
+
+    private final class SortOrderMenuItemController extends AbstractMenuItemController {
+
+        private static final int SORT_MENU_RES_ID = R.id.menu_item_sort;
+
+        @Override
+        public int getId() {
+            return SORT_MENU_RES_ID;
+        }
+
+        @Override
+        public void showMenuItem(Menu menu) {
+            final MenuItem sortMenuItem = menu.findItem(SORT_MENU_RES_ID);
+            final String title;
+            if (DataModel.getDataModel().getCitySort() == DataModel.CitySort.NAME) {
+                title = getString(R.string.menu_item_sort_by_gmt_offset);
+            } else {
+                title = getString(R.string.menu_item_sort_by_name);
+            }
+            sortMenuItem.setTitle(title);
+            sortMenuItem.setVisible(true);
+        }
+
+        @Override
+        public boolean handleMenuItemClick(MenuItem item) {
+            // Save the new sort order.
+            DataModel.getDataModel().toggleCitySort();
+
+            // Section headers are influenced by sort order and must be cleared.
+            mCitiesAdapter.clearSectionHeaders();
+
+            // Honor the new sort order in the adapter.
+            mCitiesAdapter.filter(mSearchMenuItemController.getQueryText());
+            return true;
+        }
+    }
+}
diff --git a/src/com/android/deskclock/worldclock/WorldClockAdapter.java b/src/com/android/deskclock/worldclock/WorldClockAdapter.java
deleted file mode 100644
index 01da740..0000000
--- a/src/com/android/deskclock/worldclock/WorldClockAdapter.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * 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.worldclock;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.TextClock;
-import android.widget.TextView;
-
-import com.android.deskclock.AnalogClock;
-import com.android.deskclock.R;
-import com.android.deskclock.SettingsActivity;
-import com.android.deskclock.Utils;
-
-import java.text.Collator;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.TimeZone;
-
-public class WorldClockAdapter extends BaseAdapter {
-    protected Object [] mCitiesList;
-    private final LayoutInflater mInflater;
-    private final Context mContext;
-    private String mClockStyle;
-    private final Collator mCollator = Collator.getInstance();
-    protected HashMap<String, CityObj> mCitiesDb = new HashMap<String, CityObj>();
-    protected int mClocksPerRow;
-
-    public WorldClockAdapter(Context context) {
-        super();
-        mContext = context;
-        loadData(context);
-        loadCitiesDb(context);
-        mInflater = LayoutInflater.from(context);
-        mClocksPerRow = context.getResources().getInteger(R.integer.world_clocks_per_row);
-    }
-
-    public void reloadData(Context context) {
-        loadData(context);
-        notifyDataSetChanged();
-    }
-
-    public void loadData(Context context) {
-        SharedPreferences prefs = Utils.getDefaultSharedPreferences(mContext);
-        mClockStyle = prefs.getString(SettingsActivity.KEY_CLOCK_STYLE,
-                mContext.getResources().getString(R.string.default_clock_style));
-        mCitiesList = Cities.readCitiesFromSharedPrefs(prefs).values().toArray();
-        sortList();
-        mCitiesList = addHomeCity();
-    }
-
-    public void loadCitiesDb(Context context) {
-        mCitiesDb.clear();
-        // Read the cities DB so that the names and timezones will be taken from the DB
-        // and not from the selected list so that change of locale or changes in the DB will
-        // be reflected.
-        CityObj[] cities = Utils.loadCitiesFromXml(context);
-        if (cities != null) {
-            for (int i = 0; i < cities.length; i ++) {
-                mCitiesDb.put(cities[i].mCityId, cities [i]);
-            }
-        }
-    }
-
-    /***
-     * Adds the home city as the first item of the adapter if the feature is on and the device time
-     * zone is different from the home time zone that was set by the user.
-     * return the list of cities.
-     */
-    private Object[] addHomeCity() {
-        if (needHomeCity()) {
-            SharedPreferences sharedPref = Utils.getDefaultSharedPreferences(mContext);
-            String homeTZ = sharedPref.getString(SettingsActivity.KEY_HOME_TZ, "");
-            CityObj c = new CityObj(
-                    mContext.getResources().getString(R.string.home_label), homeTZ, null, null);
-            Object[] temp = new Object[mCitiesList.length + 1];
-            temp[0] = c;
-            for (int i = 0; i < mCitiesList.length; i++) {
-                temp[i + 1] = mCitiesList[i];
-            }
-            return temp;
-        } else {
-            return mCitiesList;
-        }
-    }
-
-    public void updateHomeLabel(Context context) {
-        // Update the "home" label if the home time zone clock is shown
-        if (needHomeCity() && mCitiesList.length > 0) {
-            ((CityObj) mCitiesList[0]).mCityName =
-                    context.getResources().getString(R.string.home_label);
-        }
-    }
-
-    public boolean needHomeCity() {
-        SharedPreferences sharedPref = Utils.getDefaultSharedPreferences(mContext);
-        if (sharedPref.getBoolean(SettingsActivity.KEY_AUTO_HOME_CLOCK, false)) {
-            String homeTZ = sharedPref.getString(
-                    SettingsActivity.KEY_HOME_TZ, TimeZone.getDefault().getID());
-            final Date now = new Date();
-            return TimeZone.getTimeZone(homeTZ).getOffset(now.getTime())
-                    != TimeZone.getDefault().getOffset(now.getTime());
-        } else {
-            return false;
-        }
-    }
-
-    public boolean hasHomeCity() {
-        return (mCitiesList != null) && mCitiesList.length > 0
-                && ((CityObj) mCitiesList[0]).mCityId == null;
-    }
-
-    private void sortList() {
-        final Date now = new Date();
-
-        // Sort by the Offset from GMT taking DST into account
-        // and if the same sort by City Name
-        Arrays.sort(mCitiesList, new Comparator<Object>() {
-            private int safeCityNameCompare(CityObj city1, CityObj city2) {
-                if (city1.mCityName == null && city2.mCityName == null) {
-                    return 0;
-                } else if (city1.mCityName == null) {
-                    return -1;
-                } else if (city2.mCityName == null) {
-                    return 1;
-                } else {
-                    return mCollator.compare(city1.mCityName, city2.mCityName);
-                }
-            }
-
-            @Override
-            public int compare(Object object1, Object object2) {
-                CityObj city1 = (CityObj) object1;
-                CityObj city2 = (CityObj) object2;
-                if (city1.mTimeZone == null && city2.mTimeZone == null) {
-                    return safeCityNameCompare(city1, city2);
-                } else if (city1.mTimeZone == null) {
-                    return -1;
-                } else if (city2.mTimeZone == null) {
-                    return 1;
-                }
-
-                int gmOffset1 = TimeZone.getTimeZone(city1.mTimeZone).getOffset(now.getTime());
-                int gmOffset2 = TimeZone.getTimeZone(city2.mTimeZone).getOffset(now.getTime());
-                if (gmOffset1 == gmOffset2) {
-                    return safeCityNameCompare(city1, city2);
-                } else {
-                    return gmOffset1 - gmOffset2;
-                }
-            }
-        });
-    }
-
-    @Override
-    public int getCount() {
-        if (mClocksPerRow == 1) {
-            // In the special case where we have only 1 clock per view.
-            return mCitiesList.length;
-        }
-
-        // Otherwise, each item in the list holds 1 or 2 clocks
-        return (mCitiesList.length  + 1)/2;
-    }
-
-    @Override
-    public Object getItem(int p) {
-        return null;
-    }
-
-    @Override
-    public long getItemId(int p) {
-        return p;
-    }
-
-    @Override
-    public boolean isEnabled(int p) {
-        return false;
-    }
-
-    @Override
-    public View getView(int position, View view, ViewGroup parent) {
-        // Index in cities list
-        int index = position * mClocksPerRow;
-        if (index < 0 || index >= mCitiesList.length) {
-            return null;
-        }
-
-        if (view == null) {
-            view = mInflater.inflate(R.layout.world_clock_list_item, parent, false);
-        }
-        updateView(view.findViewById(R.id.city_left), (CityObj)mCitiesList[index]);
-        return view;
-    }
-
-    private void updateView(View clock, CityObj cityObj) {
-        TextView name = (TextView)(clock.findViewById(R.id.city_name));
-        TextView dayOfWeek = (TextView)(clock.findViewById(R.id.city_day));
-        TextClock dclock = (TextClock)(clock.findViewById(R.id.digital_clock));
-        AnalogClock aclock = (AnalogClock)(clock.findViewById(R.id.analog_clock));
-
-        if (mClockStyle.equals("analog")) {
-            dclock.setVisibility(View.GONE);
-            aclock.setVisibility(View.VISIBLE);
-            aclock.setTimeZone(cityObj.mTimeZone);
-            aclock.enableSeconds(false);
-        } else {
-            dclock.setVisibility(View.VISIBLE);
-            aclock.setVisibility(View.GONE);
-            dclock.setTimeZone(cityObj.mTimeZone);
-            Utils.setTimeFormat(mContext, dclock,
-                    mContext.getResources().getDimensionPixelSize(R.dimen.label_font_size));
-        }
-        CityObj cityInDb = mCitiesDb.get(cityObj.mCityId);
-        // Home city or city not in DB , use data from the save selected cities list
-        name.setText(Utils.getCityName(cityObj, cityInDb));
-
-        final Calendar now = Calendar.getInstance();
-        now.setTimeZone(TimeZone.getDefault());
-        int myDayOfWeek = now.get(Calendar.DAY_OF_WEEK);
-        // Get timezone from cities DB if available
-        String cityTZ = (cityInDb != null) ? cityInDb.mTimeZone : cityObj.mTimeZone;
-        now.setTimeZone(TimeZone.getTimeZone(cityTZ));
-        int cityDayOfWeek = now.get(Calendar.DAY_OF_WEEK);
-        if (myDayOfWeek != cityDayOfWeek) {
-            dayOfWeek.setText(mContext.getString(R.string.world_day_of_week_label,
-                    now.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault())));
-            dayOfWeek.setVisibility(View.VISIBLE);
-        } else {
-            dayOfWeek.setVisibility(View.GONE);
-        }
-    }
-}