diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1d8c46d..1ea883a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3,7 +3,7 @@
         android:sharedUserId="android.media"
         android:sharedUserLabel="@string/uid_label"
         android:versionCode="800">
-        
+
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
@@ -28,6 +28,7 @@
 
         <provider
             android:name="MediaDocumentsProvider"
+            android:label="@string/storage_description"
             android:authorities="com.android.providers.media.documents"
             android:grantUriPermissions="true"
             android:exported="true"
diff --git a/res/drawable/ic_add.xml b/res/drawable/ic_add.xml
new file mode 100644
index 0000000..22b3fe9
--- /dev/null
+++ b/res/drawable/ic_add.xml
@@ -0,0 +1,24 @@
+<!--
+    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.
+    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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:fillColor="?android:attr/colorAccent"
+        android:pathData="M38.0,26.0L26.0,26.0l0.0,12.0l-4.0,0.0L22.0,26.0L10.0,26.0l0.0,-4.0l12.0,0.0L22.0,10.0l4.0,0.0l0.0,12.0l12.0,0.0l0.0,4.0z"/>
+</vector>
\ No newline at end of file
diff --git a/res/layout/add_ringtone_item.xml b/res/layout/add_ringtone_item.xml
new file mode 100644
index 0000000..aea1a2b
--- /dev/null
+++ b/res/layout/add_ringtone_item.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+     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="fill_parent"
+    android:layout_height="wrap_content"
+    android:gravity="center_vertical"
+    android:background="?android:attr/selectableItemBackground">
+
+<ImageView
+        android:layout_width="24dp"
+        android:layout_height="24dp"
+        android:layout_alignParentRight="true"
+        android:layout_centerVertical="true"
+        android:scaleType="centerCrop"
+        android:layout_marginRight="24dp"
+        android:layout_marginLeft="24dp"
+        android:src="@drawable/ic_add" />
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/add_ringtone_text"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:minHeight="?android:attr/listPreferredItemHeightSmall"
+        android:text="@string/add_ringtone_text"
+        android:textColor="?android:attr/colorAccent"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:maxLines="3"
+        android:gravity="center_vertical"
+        android:paddingEnd="?android:attr/dialogPreferredPadding"
+        android:drawablePadding="20dp"
+        android:ellipsize="marquee" />
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/radio_with_work_badge.xml b/res/layout/radio_with_work_badge.xml
new file mode 100644
index 0000000..e7d37ea
--- /dev/null
+++ b/res/layout/radio_with_work_badge.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+     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.providers.media.CheckedListItem xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:gravity="center_vertical"
+    android:background="?android:attr/selectableItemBackground"
+    >
+
+    <CheckedTextView
+        android:id="@+id/checked_text_view"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:minHeight="?android:attr/listPreferredItemHeightSmall"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textColor="?android:attr/textColorAlertDialogListItem"
+        android:gravity="center_vertical"
+        android:paddingStart="20dp"
+        android:paddingEnd="?android:attr/dialogPreferredPadding"
+        android:drawableStart="?android:attr/listChoiceIndicatorSingle"
+        android:drawablePadding="20dp"
+        android:ellipsize="marquee"
+        android:layout_toLeftOf="@+id/work_icon"
+        android:maxLines="3" />
+
+    <ImageView
+        android:id="@id/work_icon"
+        android:layout_width="18dp"
+        android:layout_height="18dp"
+        android:layout_alignParentRight="true"
+        android:layout_centerVertical="true"
+        android:scaleType="centerCrop"
+        android:layout_marginRight="20dp" />
+</com.android.providers.media.CheckedListItem>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index edeb9dc..1523a83 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Plaaslike berging"</string>
     <string name="app_label" msgid="9035307001052716210">"Mediaberging"</string>
     <string name="artist_label" msgid="8105600993099120273">"Kunstenaar"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Verstekluitoon"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Opstaan"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Slinger"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Swaai"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Voeg luitoon by"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Vee uit"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Kan nie gepasmaakte luitoon byvoeg nie"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Kan nie gepasmaakte luitoon uitvee nie"</string>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 4632c85..8460f36 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"ማህደረመረጃ"</string>
+    <string name="storage_description" msgid="4081716890357580107">"አካባቢያዊ ማከማቻ"</string>
     <string name="app_label" msgid="9035307001052716210">"ማህደረ መረጃ ማከማቻ"</string>
     <string name="artist_label" msgid="8105600993099120273">"አርቲስት"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"ነባሪ የደወል ቅላጼ"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"ተነሳ"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"ተወዛወዝ"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"አወዛውዝ"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"የጥሪ ቅላጼ አክል"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"ሰርዝ"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"ብጁ የጥሪ ቅላጼን ማከል አልተቻለም"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"ብጁ የጥሪ ቅላጼን መሰረዝ አልተቻለም"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index ea90bee..656c4d2 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,10 +17,11 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"الوسائط"</string>
+    <string name="storage_description" msgid="4081716890357580107">"التخزين المحلي"</string>
     <string name="app_label" msgid="9035307001052716210">"تخزين الوسائط"</string>
     <string name="artist_label" msgid="8105600993099120273">"الفنان"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"نغمة الرنين الافتراضية"</string>
-    <string name="notification_sound_default" msgid="6541609166469990135">"صوت الإشعار الافتراضي"</string>
+    <string name="notification_sound_default" msgid="6541609166469990135">"صوت الإشعار التلقائي"</string>
     <string name="alarm_sound_default" msgid="5488847775252870314">"صوت التنبيه الافتراضي"</string>
     <string name="root_images" msgid="5861633549189045666">"الصور"</string>
     <string name="root_videos" msgid="8792703517064649453">"مقاطع الفيديو"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"ارتفاع"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"تأرجُح"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"اهتزاز"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"إضافة نغمة رنين"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"حذف"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"يتعذر إضافة نغمة رنين مخصصة"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"يتعذر حذف نغمة الرنين المخصصة"</string>
 </resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az/strings.xml
similarity index 81%
rename from res/values-az-rAZ/strings.xml
rename to res/values-az/strings.xml
index e865602..27795d7 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Yerli yaddaş"</string>
     <string name="app_label" msgid="9035307001052716210">"Media Yaddaşı"</string>
     <string name="artist_label" msgid="8105600993099120273">"Sənətçi"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Defolt rinqton"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Ucalan tempdə"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Yellənmə"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Fırlatma"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Zəng səsi daxil edin"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Silin"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Fərdi zəng səsi əlavə etmək mümkün deyil"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Fərdi zəng səsini silmək mümkün deyil"</string>
 </resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 9477acc..a222597 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -16,13 +16,28 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="uid_label" msgid="999888504096344278">"Mediji"</string>
-    <string name="app_label" msgid="581696352855930028">"Skladište za medije"</string>
-    <string name="artist_label" msgid="1181678850424271227">"Izvođač"</string>
-    <string name="ringtone_default" msgid="3332469542084549546">"Podrazumevana melodija zvona"</string>
-    <string name="notification_sound_default" msgid="5309766396223094324">"Podrazumevani zvuk obaveštenja"</string>
-    <string name="alarm_sound_default" msgid="6854264112790616066">"Podrazumevani zvuk alarma"</string>
-    <string name="root_images" msgid="7098113056247445324">"Slike"</string>
-    <string name="root_videos" msgid="3304457332406057833">"Video snimci"</string>
-    <string name="root_audio" msgid="7177565505195715659">"Zvuk"</string>
+    <string name="uid_label" msgid="8421971615411294156">"Mediji"</string>
+    <!-- no translation found for storage_description (4081716890357580107) -->
+    <skip />
+    <string name="app_label" msgid="9035307001052716210">"Memorijski prostor za medije"</string>
+    <string name="artist_label" msgid="8105600993099120273">"Izvođač"</string>
+    <string name="ringtone_default" msgid="1744846699922263043">"Podrazumevana melodija zvona"</string>
+    <string name="notification_sound_default" msgid="6541609166469990135">"Podrazumevani zvuk obaveštenja"</string>
+    <string name="alarm_sound_default" msgid="5488847775252870314">"Podrazumevani zvuk alarma"</string>
+    <string name="root_images" msgid="5861633549189045666">"Slike"</string>
+    <string name="root_videos" msgid="8792703517064649453">"Video snimci"</string>
+    <string name="root_audio" msgid="3505830755201326018">"Zvuk"</string>
+    <string name="sound_name_awaken" msgid="5266892392848526147">"probuđen"</string>
+    <string name="sound_name_bounce" msgid="8771447635446665231">"skok"</string>
+    <string name="sound_name_drip" msgid="1744684469020662152">"kapanje"</string>
+    <string name="sound_name_gallop" msgid="2664454314532060876">"galop"</string>
+    <string name="sound_name_nudge" msgid="5445751598250698244">"gurkanje"</string>
+    <string name="sound_name_orbit" msgid="4623457897813255481">"kruženje"</string>
+    <string name="sound_name_rise" msgid="2200258555031675806">"uspon"</string>
+    <string name="sound_name_sway" msgid="348448316663085643">"njihanje"</string>
+    <string name="sound_name_wag" msgid="2730733083078126563">"mahanje"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Dodaj melodiju zvona"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Izbriši"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Dodavanje prilagođene melodije zvona nije uspelo"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Brisanje prilagođene melodije zvona nije uspelo"</string>
 </resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
new file mode 100644
index 0000000..df6f17e
--- /dev/null
+++ b/res/values-be/strings.xml
@@ -0,0 +1,43 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="uid_label" msgid="8421971615411294156">"Медыя"</string>
+    <!-- no translation found for storage_description (4081716890357580107) -->
+    <skip />
+    <string name="app_label" msgid="9035307001052716210">"Медыясховішча"</string>
+    <string name="artist_label" msgid="8105600993099120273">"Выканаўца"</string>
+    <string name="ringtone_default" msgid="1744846699922263043">"Стандартны рынгтон"</string>
+    <string name="notification_sound_default" msgid="6541609166469990135">"Стандартны сігнал апавяшчэння"</string>
+    <string name="alarm_sound_default" msgid="5488847775252870314">"Стандартны сігнал будзільніка"</string>
+    <string name="root_images" msgid="5861633549189045666">"Відарысы"</string>
+    <string name="root_videos" msgid="8792703517064649453">"Відэа"</string>
+    <string name="root_audio" msgid="3505830755201326018">"Аўдыя"</string>
+    <string name="sound_name_awaken" msgid="5266892392848526147">"Абуджэнне"</string>
+    <string name="sound_name_bounce" msgid="8771447635446665231">"Адскок"</string>
+    <string name="sound_name_drip" msgid="1744684469020662152">"Кроплі"</string>
+    <string name="sound_name_gallop" msgid="2664454314532060876">"Галоп"</string>
+    <string name="sound_name_nudge" msgid="5445751598250698244">"Штуршок"</string>
+    <string name="sound_name_orbit" msgid="4623457897813255481">"Арбіта"</string>
+    <string name="sound_name_rise" msgid="2200258555031675806">"Уздым"</string>
+    <string name="sound_name_sway" msgid="348448316663085643">"Гайданне"</string>
+    <string name="sound_name_wag" msgid="2730733083078126563">"Маханне"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Дадаць рынгтон"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Выдаліць"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Немагчыма дадаць карыстальніцкі рынгтон"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Немагчыма выдаліць карыстальніцкі рынгтон"</string>
+</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 67a3898..90e0231 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Мултимедия"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Локално хранилище"</string>
     <string name="app_label" msgid="9035307001052716210">"Мултимедийно хранилище"</string>
     <string name="artist_label" msgid="8105600993099120273">"Изпълнител"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Стандартна мелодия"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Издигане"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Люлеене"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Поклащане"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Добавяне на мелодия"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Изтриване"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Персонализираната мелодия не може да се добави"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Персонализираната мелодия не може да се изтрие"</string>
 </resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn/strings.xml
similarity index 79%
rename from res/values-bn-rBD/strings.xml
rename to res/values-bn/strings.xml
index 877d10d..155e44f 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"মিডিয়া"</string>
+    <string name="storage_description" msgid="4081716890357580107">"স্থানীয় সঞ্চয়স্থান"</string>
     <string name="app_label" msgid="9035307001052716210">"মিডিয়া সঞ্চয়স্থান"</string>
     <string name="artist_label" msgid="8105600993099120273">"শিল্পী"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"ডিফল্ট রিংয়ের শব্দ"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"রাইজ"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"দোলা"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"ওয়াগ"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"রিংটোন যোগ করুন"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"মুছুন"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"কাস্টম রিংটোন যোগ করা গেল না"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"কাস্টম রিংয়ের শব্দ মোছা গেল না"</string>
 </resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
new file mode 100644
index 0000000..beed01f
--- /dev/null
+++ b/res/values-bs/strings.xml
@@ -0,0 +1,43 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="uid_label" msgid="8421971615411294156">"Mediji"</string>
+    <!-- no translation found for storage_description (4081716890357580107) -->
+    <skip />
+    <string name="app_label" msgid="9035307001052716210">"Medijska pohrana"</string>
+    <string name="artist_label" msgid="8105600993099120273">"Umjetnik"</string>
+    <string name="ringtone_default" msgid="1744846699922263043">"Zadana melodija zvona"</string>
+    <string name="notification_sound_default" msgid="6541609166469990135">"Zadani zvuk obavještenja"</string>
+    <string name="alarm_sound_default" msgid="5488847775252870314">"Zadani zvuk alarma"</string>
+    <string name="root_images" msgid="5861633549189045666">"Slike"</string>
+    <string name="root_videos" msgid="8792703517064649453">"Videozapisi"</string>
+    <string name="root_audio" msgid="3505830755201326018">"Zvuk"</string>
+    <string name="sound_name_awaken" msgid="5266892392848526147">"Probuđen"</string>
+    <string name="sound_name_bounce" msgid="8771447635446665231">"Odskakanje"</string>
+    <string name="sound_name_drip" msgid="1744684469020662152">"Kapanje"</string>
+    <string name="sound_name_gallop" msgid="2664454314532060876">"Galop"</string>
+    <string name="sound_name_nudge" msgid="5445751598250698244">"Gurkanje"</string>
+    <string name="sound_name_orbit" msgid="4623457897813255481">"Kruženje"</string>
+    <string name="sound_name_rise" msgid="2200258555031675806">"Uspon"</string>
+    <string name="sound_name_sway" msgid="348448316663085643">"Njihanje"</string>
+    <string name="sound_name_wag" msgid="2730733083078126563">"Klaćenje"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Dodaj melodiju zvona"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Izbriši"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Nije moguće dodati prilagođenu melodiju zvona"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Nije moguće izbrisati prilagođenu melodiju zvona"</string>
+</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index fadb4e8..628b67d 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multimèdia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Emmagatzematge local"</string>
     <string name="app_label" msgid="9035307001052716210">"Emmagatzematge multimèdia"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artista"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"So de trucada predeterminat"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Afegeix un so de trucada"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Suprimeix"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"No es pot afegir el so de trucada personalitzat"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"No es pot suprimir el so de trucada personalitzat"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index f5d613d..68389f4 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Média"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Místní úložiště"</string>
     <string name="app_label" msgid="9035307001052716210">"Úložiště médií"</string>
     <string name="artist_label" msgid="8105600993099120273">"Interpret"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Výchozí vyzváněcí tón"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Vzestup"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Rozhoupání"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Pochod"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Přidat vyzváněcí tón"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Smazat"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Vlastní vyzváněcí tón se nepodařilo přidat"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Vlastní vyzváněcí tón se nepodařilo smazat"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 7b7129a..336f229 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Medier"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Lokalt lager"</string>
     <string name="app_label" msgid="9035307001052716210">"Medielagring"</string>
     <string name="artist_label" msgid="8105600993099120273">"Musiker"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Standardringetone"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Tilføj ringetone"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Slet"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Den tilpassede ringetone kunne ikke tilføjes"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Den tilpassede ringetone kunne ikke slettes"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 54f71fd..5fbd904 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Medien"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Lokaler Speicher"</string>
     <string name="app_label" msgid="9035307001052716210">"Medienspeicher"</string>
     <string name="artist_label" msgid="8105600993099120273">"Interpret"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Standard-Klingelton"</string>
@@ -24,7 +25,7 @@
     <string name="alarm_sound_default" msgid="5488847775252870314">"Standard-Weckton"</string>
     <string name="root_images" msgid="5861633549189045666">"Bilder"</string>
     <string name="root_videos" msgid="8792703517064649453">"Videos"</string>
-    <string name="root_audio" msgid="3505830755201326018">"Audiodateien"</string>
+    <string name="root_audio" msgid="3505830755201326018">"Audio"</string>
     <string name="sound_name_awaken" msgid="5266892392848526147">"Awaken"</string>
     <string name="sound_name_bounce" msgid="8771447635446665231">"Bounce"</string>
     <string name="sound_name_drip" msgid="1744684469020662152">"Drip"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Klingelton hinzufügen"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Löschen"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Benutzerdefinierter Klingelton konnte nicht hinzugefügt werden"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Benutzerdefinierter Klingelton konnte nicht gelöscht werden"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 6bc4770..2a0e141 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Μέσα"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Τοπικός χώρος αποθήκευσης"</string>
     <string name="app_label" msgid="9035307001052716210">"Αποθηκευτικός χώρος μέσων"</string>
     <string name="artist_label" msgid="8105600993099120273">"Καλλιτέχνης"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Προεπιλεγμένος ήχος κλήσης"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Σήκωμα"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Χαλάρωση"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Κούνημα"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Προσθήκη ήχου κλήσης"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Διαγραφή"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Δεν είναι δυνατή η προσθήκη προσαρμοσμένου ήχου κλήσης"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Δεν είναι δυνατή η διαγραφή προσαρμοσμένου ήχου κλήσης"</string>
 </resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 72a2563..f6104c8 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Local storage"</string>
     <string name="app_label" msgid="9035307001052716210">"Media Storage"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artist"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Default ringtone"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Add ringtone"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Delete"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Unable to add customised ringtone"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Unable to delete customised ringtone"</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 72a2563..f6104c8 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Local storage"</string>
     <string name="app_label" msgid="9035307001052716210">"Media Storage"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artist"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Default ringtone"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Add ringtone"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Delete"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Unable to add customised ringtone"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Unable to delete customised ringtone"</string>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 72a2563..f6104c8 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Local storage"</string>
     <string name="app_label" msgid="9035307001052716210">"Media Storage"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artist"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Default ringtone"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Add ringtone"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Delete"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Unable to add customised ringtone"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Unable to delete customised ringtone"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 4933a9e..0586775 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multimedia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Almacenamiento local"</string>
     <string name="app_label" msgid="9035307001052716210">"Almacenamiento multimedia"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artista"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Tono predeterminado"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Agregar tono"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Borrar"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"No se puede agregar el tono personalizado"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"No se puede borrar el tono personalizado"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index d5c1d40..6fa3d45 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multimedia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Almacenamiento local"</string>
     <string name="app_label" msgid="9035307001052716210">"Almacenamiento multimedia"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artista"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Tono de llamada predeterminado"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Añadir tono de llamada"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Eliminar"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"No se ha podido añadir un tono de llamada personalizado"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"No se ha podido eliminar un tono de llamada personalizado"</string>
 </resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et/strings.xml
similarity index 78%
rename from res/values-et-rEE/strings.xml
rename to res/values-et/strings.xml
index 9421959..5e2b984 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,12 +17,13 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Meedia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Kohalik salvestusruum"</string>
     <string name="app_label" msgid="9035307001052716210">"Meediumi salvestusruum"</string>
     <string name="artist_label" msgid="8105600993099120273">"Esitaja"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Vaikehelin"</string>
     <string name="notification_sound_default" msgid="6541609166469990135">"Märguande vaikeheli"</string>
     <string name="alarm_sound_default" msgid="5488847775252870314">"Äratuse vaikeheli"</string>
-    <string name="root_images" msgid="5861633549189045666">"Kujutised"</string>
+    <string name="root_images" msgid="5861633549189045666">"Pildid"</string>
     <string name="root_videos" msgid="8792703517064649453">"Videod"</string>
     <string name="root_audio" msgid="3505830755201326018">"Heli"</string>
     <string name="sound_name_awaken" msgid="5266892392848526147">"Äratus"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Tõus"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Kõigutus"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Raputus"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Lisa helin"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Kustuta"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Kohandatud helinat ei õnnestu lisada"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Kohandatud helinat ei õnnestu kustutada"</string>
 </resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu/strings.xml
similarity index 80%
rename from res/values-eu-rES/strings.xml
rename to res/values-eu/strings.xml
index fb1770d..2e8033c 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,10 +17,11 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multimedia-edukia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Biltegi lokala"</string>
     <string name="app_label" msgid="9035307001052716210">"Multimediaren memoria-unitatea"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artista"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Tonu lehenetsia"</string>
-    <string name="notification_sound_default" msgid="6541609166469990135">"Jakinarazpen-soinu lehenetsia"</string>
+    <string name="notification_sound_default" msgid="6541609166469990135">"Jakinarazpenen soinu lehenetsia"</string>
     <string name="alarm_sound_default" msgid="5488847775252870314">"Alarmaren soinu lehenetsia"</string>
     <string name="root_images" msgid="5861633549189045666">"Irudiak"</string>
     <string name="root_videos" msgid="8792703517064649453">"Bideoak"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Igoera"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Kulunka"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Mugimendua"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Gehitu tonua"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Ezabatu"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Ezin da gehitu tonu pertsonalizatua"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Ezin da ezabatu tonu pertsonalizatua"</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 023e6ba..69ac9ef 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"رسانه"</string>
+    <string name="storage_description" msgid="4081716890357580107">"فضای ذخیره‌سازی محلی"</string>
     <string name="app_label" msgid="9035307001052716210">"فضای ذخیره‌سازی رسانه"</string>
     <string name="artist_label" msgid="8105600993099120273">"هنرمند"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"آهنگ زنگ پیش‌فرض"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"طلوع"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"نوسان"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"تکان"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"افزودن آهنگ زنگ"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"حذف"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"افزودن آهنگ زنگ سفارشی ممکن نیست"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"حذف آهنگ زنگ سفارشی ممکن نیست"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index aea6604..62f76ff 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Paikallinen tallennustila"</string>
     <string name="app_label" msgid="9035307001052716210">"Median tallennustila"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artisti"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Oletussoittoääni"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Nousu"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Keinunta"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Heilutus"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Lisää soittoääni"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Poista"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Muokatun soittoäänen lisääminen epäonnistui."</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Muokatun soittoäänen poistaminen epäonnistui."</string>
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 856974b..f018e2d 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multimédia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Stockage local"</string>
     <string name="app_label" msgid="9035307001052716210">"Stockage multimédia"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artiste"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Sonnerie par défaut"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Accentuer"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Balancement"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Remuer"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Ajouter une sonnerie"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Supprimer"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Impossible d\'ajouter une sonnerie personnalisée"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Impossible de supprimer la sonnerie personnalisée"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 565e1fe..339ee5b 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multimédia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Stockage local"</string>
     <string name="app_label" msgid="9035307001052716210">"Stockage multimédia"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artiste"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Sonnerie par défaut"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Ajouter une sonnerie"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Supprimer"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Impossible d\'ajouter une sonnerie personnalisée"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Impossible de supprimer la sonnerie personnalisée"</string>
 </resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl/strings.xml
similarity index 80%
rename from res/values-gl-rES/strings.xml
rename to res/values-gl/strings.xml
index 66d02d7..eb52aed 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multimedia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Almacenamento local"</string>
     <string name="app_label" msgid="9035307001052716210">"Almacenamento multimedia"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artista"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Ton de chamada predeterminado"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Subir"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Oscilar"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Axitar"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Engadir ton de chamada"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Eliminar"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Non se pode engadir un ton de chamada personalizado"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Non se pode eliminar un ton de chamada personalizado"</string>
 </resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu/strings.xml
similarity index 72%
rename from res/values-gu-rIN/strings.xml
rename to res/values-gu/strings.xml
index 049832e..d27ed29 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"મીડિયા"</string>
+    <string name="storage_description" msgid="4081716890357580107">"સ્થાનિક સ્ટોરેજ"</string>
     <string name="app_label" msgid="9035307001052716210">"મીડિયા સ્ટોરેજ"</string>
     <string name="artist_label" msgid="8105600993099120273">"કલાકાર"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"ડિફોલ્ટ રિંગટોન"</string>
@@ -29,9 +30,13 @@
     <string name="sound_name_bounce" msgid="8771447635446665231">"બાઉન્સ"</string>
     <string name="sound_name_drip" msgid="1744684469020662152">"ટીપાં"</string>
     <string name="sound_name_gallop" msgid="2664454314532060876">"ગૅલપ"</string>
-    <string name="sound_name_nudge" msgid="5445751598250698244">"નજ"</string>
-    <string name="sound_name_orbit" msgid="4623457897813255481">"ઓર્બિટ"</string>
-    <string name="sound_name_rise" msgid="2200258555031675806">"ઉદય"</string>
-    <string name="sound_name_sway" msgid="348448316663085643">"સ્વે"</string>
-    <string name="sound_name_wag" msgid="2730733083078126563">"વૅગ"</string>
+    <string name="sound_name_nudge" msgid="5445751598250698244">"Nudge"</string>
+    <string name="sound_name_orbit" msgid="4623457897813255481">"Orbit"</string>
+    <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
+    <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
+    <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"રિંગટોન ઉમેરો"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"કાઢી નાખો"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"કસ્ટમ રિંગટોન ઉમેરવામાં અસમર્થ"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"કસ્ટમ રિંગટોન કાઢી નાખવામાં અસમર્થ"</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 3eff820..178a059 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"मीडिया"</string>
+    <string name="storage_description" msgid="4081716890357580107">"स्थानीय जगह"</string>
     <string name="app_label" msgid="9035307001052716210">"मीडिया मेमोरी"</string>
     <string name="artist_label" msgid="8105600993099120273">"कलाकार"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"डिफ़ॉल्ट रिंगटोन"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"राइज़"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"स्वे"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"वैग"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"रिंगटोन जोड़ेंं"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"हटाएं"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"कस्टम रिंगटोन जोड़ने में असमर्थ"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"कस्टम रिंगटोन हटाने में असमर्थ"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index a3f6b1c..5c7e85e 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Mediji"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Lokalna pohrana"</string>
     <string name="app_label" msgid="9035307001052716210">"Pohranjivanje na mediju"</string>
     <string name="artist_label" msgid="8105600993099120273">"Izvođač"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Zadana melodija zvona"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Podizanje"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Lelujanje"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Mahanje"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Dodaj melodiju zvona"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Izbriši"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Dodavanje prilagođene melodije zvona nije moguće"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Brisanje prilagođene melodije zvona nije moguće"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index d229fd9..b47d643 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Média"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Helyi tárhely"</string>
     <string name="app_label" msgid="9035307001052716210">"Médiatároló"</string>
     <string name="artist_label" msgid="8105600993099120273">"Előadó"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Alapértelmezett csengőhang"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Csengőhang hozzáadása"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Törlés"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Nem sikerült hozzáadni az egyéni csengőhangot"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Nem sikerült törölni az egyéni csengőhangot"</string>
 </resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy/strings.xml
similarity index 79%
rename from res/values-hy-rAM/strings.xml
rename to res/values-hy/strings.xml
index c23c1cd..e9374a9 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Մեդիա"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Սարքի հիշողություն"</string>
     <string name="app_label" msgid="9035307001052716210">"Մեդիա կրիչ"</string>
     <string name="artist_label" msgid="8105600993099120273">"Կատարող"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Կանխադրված զանգերանգը"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Ավելացնել զանգերանգ"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Ջնջել"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Հնարավոր չէ հատուկ զանգերանգ ավելացնել"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Հնարավոր չէ ջնջել հատուկ զանգերանգը"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index afbf2e7..7d3d07d 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Penyimpanan lokal"</string>
     <string name="app_label" msgid="9035307001052716210">"Penyimpanan Media"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artis"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Nada dering default"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Tambahkan nada dering"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Hapus"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Tidak dapat menambahkan nada dering khusus"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Tidak dapat menghapus nada dering khusus"</string>
 </resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is/strings.xml
similarity index 81%
rename from res/values-is-rIS/strings.xml
rename to res/values-is/strings.xml
index d1cd87d..e54a772 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Margmiðlun"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Staðbundin vistun"</string>
     <string name="app_label" msgid="9035307001052716210">"Efnisgeymsla"</string>
     <string name="artist_label" msgid="8105600993099120273">"Flytjandi"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Sjálfgefinn hringitónn"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Ris"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sveifla"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Vagg"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Bæta hringitóni við"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Eyða"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Get ekki bætt sérsniðnum hringitóni við"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Get ekki eytt sérsniðnum hringitóni"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index bd7d0c4..77c2028 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Supporti multimediali"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Archiviazione locale"</string>
     <string name="app_label" msgid="9035307001052716210">"Media Storage"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artista"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Suoneria predefinita"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Aggiungi suoneria"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Elimina"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Impossibile aggiungere suoneria personalizzata"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Impossibile eliminare suoneria personalizzata"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index e609448..702c910 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"מדיה"</string>
+    <string name="storage_description" msgid="4081716890357580107">"אחסון מקומי"</string>
     <string name="app_label" msgid="9035307001052716210">"אחסון מדיה"</string>
     <string name="artist_label" msgid="8105600993099120273">"אמן"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"רינגטון ברירת מחדל"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"עלייה"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"התנודדות"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"כשכוש"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"רינגטון חדש"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"מחק"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"לא ניתן להוסיף רינגטון מותאם אישית"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"לא ניתן למחוק רינגטון מותאם אישית"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 22de002..bb74988 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"メディア"</string>
+    <string name="storage_description" msgid="4081716890357580107">"ローカル ストレージ"</string>
     <string name="app_label" msgid="9035307001052716210">"メディア ストレージ"</string>
     <string name="artist_label" msgid="8105600993099120273">"アーティスト"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"デフォルトの着信音"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"着信音を追加"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"削除"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"カスタム着信音を追加できません"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"カスタム着信音を削除できません"</string>
 </resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka/strings.xml
similarity index 77%
rename from res/values-ka-rGE/strings.xml
rename to res/values-ka/strings.xml
index 41e1129..7973ed5 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"მედია"</string>
+    <string name="storage_description" msgid="4081716890357580107">"ადგილობრივი მეხსიერება"</string>
     <string name="app_label" msgid="9035307001052716210">"მედიის საცავი"</string>
     <string name="artist_label" msgid="8105600993099120273">"შემსრულებელი"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"ნაგულისხმევი ზარი"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"ზარის დამატება"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"წაშლა"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"მორგებული ზარის დამატება შეუძლებელია"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"მორგებული ზარის წაშლა შეუძლებელია"</string>
 </resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk/strings.xml
similarity index 80%
rename from res/values-kk-rKZ/strings.xml
rename to res/values-kk/strings.xml
index 64c6394..1865a16 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Мультимeдиа"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Жергілікті жад"</string>
     <string name="app_label" msgid="9035307001052716210">"Мультимедиа қоймасы"</string>
     <string name="artist_label" msgid="8105600993099120273">"Орындаушы"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Әдепкі қоңырау әуені"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Көтерілу"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Тербелу"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Шайқау"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Рингтон енгізу"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Жою"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Арнаулы рингтонды енгізу мүмкін емес"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Арнаулы рингтонды жою мүмкін емес"</string>
 </resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km/strings.xml
similarity index 77%
rename from res/values-km-rKH/strings.xml
rename to res/values-km/strings.xml
index c615042..3e1d801 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"មេឌៀ"</string>
+    <string name="storage_description" msgid="4081716890357580107">"ទំហំផ្ទុកមូលដ្ឋាន"</string>
     <string name="app_label" msgid="9035307001052716210">"ទំហំផ្ទុកមេឌៀ"</string>
     <string name="artist_label" msgid="8105600993099120273">"សិល្បករ"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"សំឡេង​រោទ៍​លំនាំដើម"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"រះ"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"យោល"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"គ្រវី"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"បន្ថែម​សំឡេង​រោទ៍"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"លុប"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"មិន​អាច​បន្ថែម​សំឡេង​រោទ៍​ផ្ទាល់ខ្លួន​បាន"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"មិន​អាច​លុប​សំឡេង​រោទ៍​ផ្ទាល់ខ្លួន​បាន​ទេ"</string>
 </resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn/strings.xml
similarity index 78%
rename from res/values-kn-rIN/strings.xml
rename to res/values-kn/strings.xml
index 46a0f79..bd26e3c 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"ಮಾಧ್ಯಮ"</string>
+    <string name="storage_description" msgid="4081716890357580107">"ಸ್ಥಳೀಯ ಸಂಗ್ರಹಣೆ"</string>
     <string name="app_label" msgid="9035307001052716210">"ಮಾಧ್ಯಮ ಸಂಗ್ರಹಣೆ"</string>
     <string name="artist_label" msgid="8105600993099120273">"ಕಲಾವಿದರು"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"ಡಿಫಾಲ್ಟ್ ರಿಂಗ್‌ಟೋನ್"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"ರೈಸ್"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"ಸ್ವೇ"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"ವಾಗ್"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"ರಿಂಗ್‌ಟೋನ್ ಸೇರಿಸಿ"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"ಅಳಿಸಿ"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"ಕಸ್ಟಮ್ ರಿಂಗ್‌ಟೋನ್ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"ಕಸ್ಟಮ್ ರಿಂಗ್‌ಟೋನ್ ಅಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index f666b6a..f76e711 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"미디어"</string>
+    <string name="storage_description" msgid="4081716890357580107">"로컬 저장소"</string>
     <string name="app_label" msgid="9035307001052716210">"미디어 저장소"</string>
     <string name="artist_label" msgid="8105600993099120273">"아티스트"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"기본 벨소리"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"점점 커지는 소리"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"천천히 흔들리는 소리"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"개가 꼬리를 흔드는 소리"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"벨소리 추가"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"삭제"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"맞춤 벨소리를 추가할 수 없습니다."</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"맞춤 벨소리를 삭제할 수 없습니다."</string>
 </resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky/strings.xml
similarity index 78%
rename from res/values-ky-rKG/strings.xml
rename to res/values-ky/strings.xml
index f2711a7..0146713 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,11 +17,12 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Мультимедия"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Жергиликтүү сактагыч"</string>
     <string name="app_label" msgid="9035307001052716210">"Медиа сактагыч"</string>
     <string name="artist_label" msgid="8105600993099120273">"Аткаруучу"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Демейки шыңгыр"</string>
     <string name="notification_sound_default" msgid="6541609166469990135">"Демейки эскертме үнү"</string>
-    <string name="alarm_sound_default" msgid="5488847775252870314">"Демейки ойготкуч добушу"</string>
+    <string name="alarm_sound_default" msgid="5488847775252870314">"Ойготкучтун демейки үнү"</string>
     <string name="root_images" msgid="5861633549189045666">"Сүрөттөр"</string>
     <string name="root_videos" msgid="8792703517064649453">"Видеолор"</string>
     <string name="root_audio" msgid="3505830755201326018">"Аудио"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Шыңгыр кошуу"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Жок кылуу"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Жеке рингтон кошулбай жатат"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Жеке рингтон жок кылынбай жатат"</string>
 </resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo/strings.xml
similarity index 81%
rename from res/values-lo-rLA/strings.xml
rename to res/values-lo/strings.xml
index 1873219..d497471 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"ມີເດຍ"</string>
+    <string name="storage_description" msgid="4081716890357580107">"ບ່ອນຈັດເກັບຂໍ້ມູນໃນເຄື່ອງ"</string>
     <string name="app_label" msgid="9035307001052716210">"ພື້ນທີ່ຈັດເກັບຂໍ້ມູນມີເດຍ"</string>
     <string name="artist_label" msgid="8105600993099120273">"ສິນລະປິນ"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"ຣິງໂທນເລີ່ມຕົ້ນ"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"ເພີ່ມຣິງໂທນ"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"​ລຶບ"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Unable to add custom ringtone"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Unable to delete custom ringtone"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 4c6dc28..0daa997 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Medija"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Vietinė saugykla"</string>
     <string name="app_label" msgid="9035307001052716210">"Medijos saugykla"</string>
     <string name="artist_label" msgid="8105600993099120273">"Atlikėjas"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Numatytasis skambėjimo tonas"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Pakilimas"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Supimas"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Mostai"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Pridėti skambėjimo toną"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Ištrinti"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Nepavyksta pridėti tinkinto skambėjimo tono"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Nepavyksta ištrinti tinkinto skambėjimo tono"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 0ced55a..6582b3d 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multivide"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Lokālā krātuve"</string>
     <string name="app_label" msgid="9035307001052716210">"Multivides krātuve"</string>
     <string name="artist_label" msgid="8105600993099120273">"Izpildītājs"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Noklusējuma zvana signāls"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Pievienot zvana signālu"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Dzēst"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Nevar pievienot pielāgotu zvana signālu"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Nevar izdzēst pielāgotu zvana signālu"</string>
 </resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk/strings.xml
similarity index 80%
rename from res/values-mk-rMK/strings.xml
rename to res/values-mk/strings.xml
index 3b0fc47..cce1c96 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Аудио-визуелни содржини"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Локална меморија"</string>
     <string name="app_label" msgid="9035307001052716210">"Меморија за аудио-визуелни содржини"</string>
     <string name="artist_label" msgid="8105600993099120273">"Изведувач"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Стандардна мелодија"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Станување"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Бранување"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Нишање"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Додај мелодија"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Избриши"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Не може да се додаде приспособена мелодија"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Не може да се избрише приспособена мелодија"</string>
 </resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml/strings.xml
similarity index 77%
rename from res/values-ml-rIN/strings.xml
rename to res/values-ml/strings.xml
index 3939ea8..473df67 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"മീഡിയ"</string>
+    <string name="storage_description" msgid="4081716890357580107">"ലോക്കൽ സ്റ്റോറേജ്"</string>
     <string name="app_label" msgid="9035307001052716210">"മീഡിയ സ്റ്റോറേജ്"</string>
     <string name="artist_label" msgid="8105600993099120273">"ആർട്ടിസ്‌റ്റ്"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"ഡിഫോൾട്ട് റിംഗ്‌ടോൺ"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"റയ്സ്"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"സ്വേ"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"വാഗ്"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"റിംഗ്‌ടോൺ ചേർക്കുക"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"ഇല്ലാതാക്കുക"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"ഇഷ്ടാനുസൃത റിംഗ്‌ടോൺ ചേർക്കാനാവില്ല"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"ഇഷ്ടാനുസൃത റിംഗ്‌ടോൺ ഇല്ലാതാക്കാനാവില്ല"</string>
 </resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn/strings.xml
similarity index 79%
rename from res/values-mn-rMN/strings.xml
rename to res/values-mn/strings.xml
index 6474171..3ff4341 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Медиа"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Дотоод сан"</string>
     <string name="app_label" msgid="9035307001052716210">"Медиа санах ой"</string>
     <string name="artist_label" msgid="8105600993099120273">"Уран бүтээлч"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Үндсэн хонхны ая"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Хонхны ая нэмэх"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Устгах"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Захиалгат хонхны ая нэмэх боломжгүй"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Захиалгат хонхны ая устгах боломжгүй"</string>
 </resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr/strings.xml
similarity index 79%
rename from res/values-mr-rIN/strings.xml
rename to res/values-mr/strings.xml
index 765621c..1ec6ff9 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"मीडिया"</string>
+    <string name="storage_description" msgid="4081716890357580107">"स्थानिक संचय"</string>
     <string name="app_label" msgid="9035307001052716210">"मीडिया संचय"</string>
     <string name="artist_label" msgid="8105600993099120273">"कलाकार"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"डीफॉल्ट रिंगटोन"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"राइज"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"स्वे"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"वॉग"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"रिंगटोन जोडा"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"हटवा"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"सानुकूल रिंगटोन जोडण्यात अक्षम"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"सानुकूल रिंगटोन हटविण्यात अक्षम"</string>
 </resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms/strings.xml
similarity index 81%
rename from res/values-ms-rMY/strings.xml
rename to res/values-ms/strings.xml
index 064641e..11e2af5 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Storan setempat"</string>
     <string name="app_label" msgid="9035307001052716210">"Storan Media"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artis"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Nada dering lalai"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Bangkit"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Lenggok"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Goyang"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Tambah nada dering"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Padam"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Tidak dapat menambah nada dering tersuai"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Tidak dapat memadamkan nada dering tersuai"</string>
 </resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my/strings.xml
similarity index 78%
rename from res/values-my-rMM/strings.xml
rename to res/values-my/strings.xml
index e0e4d86..1626ace 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"မီဒီယာ"</string>
+    <string name="storage_description" msgid="4081716890357580107">"စက်တွင်း သိုလှောင်ခန်း"</string>
     <string name="app_label" msgid="9035307001052716210">"မီဒီယာ သိုလှောင်ခန်း"</string>
     <string name="artist_label" msgid="8105600993099120273">"အနုပညာရှင်"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"မူလဖုန်းမြည်သံ"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"စူးရှကျယ်လောင်သံ"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"ပုခက်လွှဲသံ"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"လှုပ်ခါသံ"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"ဖုန်းမြည်သံကို ထည့်ရန်"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"ဖျက်ရန်"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"စိတ်ကြိုက်ဖုန်းမြည်သံကို ထည့်သွင်း၍မရပါ"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"စိတ်ကြိုက်ဖုန်းမြည်သံကို ဖျက်၍မရပါ"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 31c90c9..8e7eeaf 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Medier"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Lokal lagring"</string>
     <string name="app_label" msgid="9035307001052716210">"Medielagring"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artist"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Standard ringelyd"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Stå opp"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Svai"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Logre"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Legg til ringelyd"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Slett"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Kan ikke legge til egendefinert ringelyd"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Kan ikke slette egendefinert ringelyd"</string>
 </resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne/strings.xml
similarity index 78%
rename from res/values-ne-rNP/strings.xml
rename to res/values-ne/strings.xml
index 91f5f09..856f3ef 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"मिडिया"</string>
+    <string name="storage_description" msgid="4081716890357580107">"स्थानीय भण्डारण"</string>
     <string name="app_label" msgid="9035307001052716210">"मिडिया भण्डारण"</string>
     <string name="artist_label" msgid="8105600993099120273">"कलाकार"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"पूर्वनिर्धारित रिङटोन"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"रिङटोन थप्नुहोस्"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"मेट्नुहोस्"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"आफू अनुकूल रिङटोन थप्न सकिएन"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"आफू अनुकूल रिङटोनलाई मेट्न सकिएन"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index df4e7f0..043c577 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Lokale opslag"</string>
     <string name="app_label" msgid="9035307001052716210">"Mediaopslag"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artiest"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Standaardbeltoon"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Beltoon toevoegen"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Verwijderen"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Toevoegen van aangepaste beltoon is mislukt"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Verwijderen van aangepaste beltoon is mislukt"</string>
 </resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa/strings.xml
similarity index 77%
rename from res/values-pa-rIN/strings.xml
rename to res/values-pa/strings.xml
index 19db4e4..b962f9a 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"ਮੀਡੀਆ"</string>
+    <string name="storage_description" msgid="4081716890357580107">"ਸਥਾਨਕ ਸਟੋਰੇਜ"</string>
     <string name="app_label" msgid="9035307001052716210">"ਮੀਡੀਆ ਸਟੋਰੇਜ"</string>
     <string name="artist_label" msgid="8105600993099120273">"ਕਲਾਕਾਰ"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਰਿੰਗਟੋਨ"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"ਰਾਇਜ਼"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"ਸਵੇਅ"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"ਵੈਗ"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"ਰਿੰਗਟੋਨ ਸ਼ਾਮਲ ਕਰੋ"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"ਮਿਟਾਓ"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤੀ ਰਿੰਗਟੋਨ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਦੇ ਅਯੋਗ"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤੀ ਰਿੰਗਟੋਨ ਨੂੰ ਮਿਟਾਉਣ ਦੇ ਅਯੋਗ"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 2387bc4..68aee64 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multimedia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Pamięć lokalna"</string>
     <string name="app_label" msgid="9035307001052716210">"Przechowywanie multimediów"</string>
     <string name="artist_label" msgid="8105600993099120273">"Wykonawca"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Dzwonek domyślny"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Wschód"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Kołysanie"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Machanie"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Dodaj dzwonek"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Usuń"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Nie można dodać dzwonka niestandardowego"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Nie można usunąć dzwonka niestandardowego"</string>
 </resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index abccf78..6ce0021 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Mídia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Armazenamento local"</string>
     <string name="app_label" msgid="9035307001052716210">"Armazenamento de mídia"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artista"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Toque padrão"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Adicionar toque"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Excluir"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Não foi possível adicionar o toque personalizado"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Não foi possível excluir o toque personalizado"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 70c523d..e53c849 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multimédia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Armazenamento local"</string>
     <string name="app_label" msgid="9035307001052716210">"Armazenamento de multimédia"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artista"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Toque predefinido"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Subir"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Balançar"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Abanar"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Adicionar toque"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Eliminar"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Não foi possível adicionar o toque personalizado"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Não foi possível eliminar o toque personalizado"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index abccf78..6ce0021 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Mídia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Armazenamento local"</string>
     <string name="app_label" msgid="9035307001052716210">"Armazenamento de mídia"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artista"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Toque padrão"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Adicionar toque"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Excluir"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Não foi possível adicionar o toque personalizado"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Não foi possível excluir o toque personalizado"</string>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index eba3f1d..37cf42a 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Conținut media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Stocare locală"</string>
     <string name="app_label" msgid="9035307001052716210">"Stocarea conținutului media"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artist"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Ton de sonerie prestabilit"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Adăugați un ton de sonerie"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Ștergeți"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Nu se poate adăuga tonul de sonerie personalizat"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Nu se poate șterge tonul de sonerie personalizat"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 85f1ee0..6a43bb1 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Мультимедиа"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Локальное хранилище"</string>
     <string name="app_label" msgid="9035307001052716210">"Хранилище мультимедиа"</string>
     <string name="artist_label" msgid="8105600993099120273">"Исполнитель"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Рингтон по умолчанию"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Добавить рингтон"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Удалить"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Не удалось добавить рингтон"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Не удалось удалить рингтон"</string>
 </resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si/strings.xml
similarity index 79%
rename from res/values-si-rLK/strings.xml
rename to res/values-si/strings.xml
index fce0079..0f89f28 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"මාධ්‍ය"</string>
+    <string name="storage_description" msgid="4081716890357580107">"පෙදෙසි ආචයනය"</string>
     <string name="app_label" msgid="9035307001052716210">"මාධ්‍ය ගබඩාව"</string>
     <string name="artist_label" msgid="8105600993099120273">"කලාකරු"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"පෙරනිමි රිංග්ටෝනය"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"නැගීම"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"පැද්දීම"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"එහා මෙහා යාම"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"නාද රිද්මය එක් කරන්න"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"මකන්න"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"අභිරුචි නාද රිද්මය එක් කළ නොහැකිය"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"අභිරුචි නාද රිද්මය මැකිය නොහැකිය"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 0bd36c8..a011e60 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Médiá"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Miestne úložisko"</string>
     <string name="app_label" msgid="9035307001052716210">"Úložisko médií"</string>
     <string name="artist_label" msgid="8105600993099120273">"Interpret"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Predvolený tón zvonenia"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Pridať tón zvonenia"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Odstrániť"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Nepodarilo sa pridať vlastný tón zvonenia"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Nepodarilo sa odstrániť vlastný tón zvonenia"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 4767d72..de566cf 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Predstavnost"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Lokalna shramba"</string>
     <string name="app_label" msgid="9035307001052716210">"Shramba za predstavnost"</string>
     <string name="artist_label" msgid="8105600993099120273">"Izvajalec"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Privzeti ton zvonjenja"</string>
@@ -24,7 +25,7 @@
     <string name="alarm_sound_default" msgid="5488847775252870314">"Privzeti zvok alarma"</string>
     <string name="root_images" msgid="5861633549189045666">"Slike"</string>
     <string name="root_videos" msgid="8792703517064649453">"Videoposnetki"</string>
-    <string name="root_audio" msgid="3505830755201326018">"Zvok"</string>
+    <string name="root_audio" msgid="3505830755201326018">"Zvočni posnetki"</string>
     <string name="sound_name_awaken" msgid="5266892392848526147">"Prebujanje"</string>
     <string name="sound_name_bounce" msgid="8771447635446665231">"Poskakovanje"</string>
     <string name="sound_name_drip" msgid="1744684469020662152">"Curljanje"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Pokonci"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Guganje"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Mahanje"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Dodaj ton zvonjenja"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Izbriši"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Tona zvonjenja po meri ni mogoče dodati"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Tona zvonjenja po meri ni mogoče izbrisati"</string>
 </resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq/strings.xml
similarity index 81%
rename from res/values-sq-rAL/strings.xml
rename to res/values-sq/strings.xml
index ce3ca01..e919dc4 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Hapësira ruajtëse lokale"</string>
     <string name="app_label" msgid="9035307001052716210">"Hapësira ruajtëse e medias"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artisti"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Zilja e parazgjedhur"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Ngritje"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Lëkundje"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Tundje"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Shto zile"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Fshi"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Nuk mund të shtojë ton zileje të personalizuar"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Nuk mund të fshijë ton zileje të personalizuar"</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index c359261..d6ac126 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Медији"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Локални меморијски простор"</string>
     <string name="app_label" msgid="9035307001052716210">"Меморијски простор за медије"</string>
     <string name="artist_label" msgid="8105600993099120273">"Извођач"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Подразумевана мелодија звона"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"успон"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"њихање"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"махање"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Додај мелодију звона"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Избриши"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Додавање прилагођене мелодије звона није успело"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Брисање прилагођене мелодије звона није успело"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index d454f54..12bd0f3 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Lokal lagring"</string>
     <string name="app_label" msgid="9035307001052716210">"Medialagring"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artist"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Standardringsignal"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Lägg till ringsignal"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Radera"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Det gick inte att lägga till en egen ringsignal"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Det gick inte att radera den egna ringsignalen"</string>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 5315427..805930a 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Maudhui"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Hifadhi ya ndani"</string>
     <string name="app_label" msgid="9035307001052716210">"Hifadhi ya Maudhui"</string>
     <string name="artist_label" msgid="8105600993099120273">"Msanii"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Mlio chaguo-msingi wa simu"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Ongeza mlio wa simu"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Futa"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Imeshindwa kuongeza mlio maalum wa simu"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Imeshindwa kufuta mlio maalum wa simu"</string>
 </resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta/strings.xml
similarity index 77%
rename from res/values-ta-rIN/strings.xml
rename to res/values-ta/strings.xml
index b67fa5c..5a298f3 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"மீடியா"</string>
+    <string name="storage_description" msgid="4081716890357580107">"சாதனச் சேமிப்பகம்"</string>
     <string name="app_label" msgid="9035307001052716210">"மீடியா சேமிப்பிடம்"</string>
     <string name="artist_label" msgid="8105600993099120273">"கலைஞர்"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"இயல்பு ரிங்டோன்"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"ரைஸ்"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"ஸ்வே"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"வேக்"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"ரிங்டோனைச் சேர்"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"நீக்கு"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"தனிப்பயன் ரிங்டோனைச் சேர்க்க முடியவில்லை"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"தனிப்பயன் ரிங்டோனை நீக்க முடியவில்லை"</string>
 </resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te/strings.xml
similarity index 77%
rename from res/values-te-rIN/strings.xml
rename to res/values-te/strings.xml
index e30803a..e95a88d 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"మీడియా"</string>
+    <string name="storage_description" msgid="4081716890357580107">"స్థానిక నిల్వ"</string>
     <string name="app_label" msgid="9035307001052716210">"మీడియా నిల్వ"</string>
     <string name="artist_label" msgid="8105600993099120273">"కళాకారుడు"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"డిఫాల్ట్ రింగ్‌టోన్"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"రైస్"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"స్వే"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"వాగ్"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"రింగ్‌టోన్‌ను జోడించు"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"తొలగించు"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"అనుకూల రింగ్‌టోన్‌ను జోడించలేకపోయింది"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"అనుకూల రింగ్‌టోన్‌ను తొలగించలేకపోయింది"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index e9d7f67..4337331 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"สื่อ"</string>
+    <string name="storage_description" msgid="4081716890357580107">"พื้นที่เก็บข้อมูลในเครื่อง"</string>
     <string name="app_label" msgid="9035307001052716210">"พื้นที่เก็บข้อมูลสื่อ"</string>
     <string name="artist_label" msgid="8105600993099120273">"ศิลปิน"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"เสียงเรียกเข้าเริ่มต้น"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"เพิ่มเสียงเรียกเข้า"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"ลบ"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"ไม่สามารถเพิ่มเสียงเรียกเข้าที่กำหนดเอง"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"ไม่สามารถลบเสียงเรียกเข้าที่กำหนดเอง"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 86480e2..d708cc0 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Media"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Lokal na storage"</string>
     <string name="app_label" msgid="9035307001052716210">"Storage ng Media"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artist"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Default na ringtone"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Magdagdag ng ringtone"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"I-delete"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Hindi maidagdag ang custom na ringtone"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Hindi ma-delete ang custom na ringtone"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index a79f6ee..a7ea4b3 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Medya"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Yerel depolama"</string>
     <string name="app_label" msgid="9035307001052716210">"Medya Deposu"</string>
     <string name="artist_label" msgid="8105600993099120273">"Sanatçı"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Varsayılan zil sesi"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Zil sesi ekle"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Sil"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Özel zil sesi eklenemiyor"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Özel zil sesi silinemiyor"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 625eca2..dc7e3fd 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Медіа-файли"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Локальна пам’ять"</string>
     <string name="app_label" msgid="9035307001052716210">"Сховище медіа-файлів"</string>
     <string name="artist_label" msgid="8105600993099120273">"Виконавець"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Сигнал дзвінка за умовчанням"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Додати сигнал дзвінка"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Видалити"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Не вдалося додати користувацький сигнал дзвінка"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Не вдалося видалити користувацький сигнал дзвінка"</string>
 </resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur/strings.xml
similarity index 79%
rename from res/values-ur-rPK/strings.xml
rename to res/values-ur/strings.xml
index e00e9df..1792d89 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"میڈیا"</string>
+    <string name="storage_description" msgid="4081716890357580107">"مقامی اسٹوریج"</string>
     <string name="app_label" msgid="9035307001052716210">"میڈیا اسٹوریج"</string>
     <string name="artist_label" msgid="8105600993099120273">"فنکار"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"ڈیفالٹ رنگ ٹون"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"طلوع"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"جھولن"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"جنبش"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"رنگ ٹون شامل کریں"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"حذف کریں"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"حسب ضرورت رنگ ٹون شامل کرنے سے قاصر ہے"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"حسب ضرورت رنگ ٹون حذف کرنے سے قاصر ہے"</string>
 </resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz/strings.xml
similarity index 81%
rename from res/values-uz-rUZ/strings.xml
rename to res/values-uz/strings.xml
index bb6d500..830b77e 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Multimedia"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Mahalliy xotira"</string>
     <string name="app_label" msgid="9035307001052716210">"Multimedia xotirasi"</string>
     <string name="artist_label" msgid="8105600993099120273">"Ijrochi"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Standart rington"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Ko‘tarilish"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Chayqalish"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Silkitish"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Rington qo‘shish"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"O‘chirish"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Maxsus rington qo‘shib bo‘lmadi"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Maxsus ringtonni o‘chirib bo‘lmadi"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 91b15d6..df4085d 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Phương tiện"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Bộ nhớ cục bộ"</string>
     <string name="app_label" msgid="9035307001052716210">"Bộ nhớ phương tiện"</string>
     <string name="artist_label" msgid="8105600993099120273">"Nghệ sĩ"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Nhạc chuông mặc định"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Trỗi dậy"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Đu đưa"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Thoảng qua"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Thêm nhạc chuông"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Xóa"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Không thể thêm nhạc chuông tùy chỉnh"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Không thể xóa nhạc chuông tùy chỉnh"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index b8ae08a..645d836 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"媒体"</string>
+    <string name="storage_description" msgid="4081716890357580107">"本地存储空间"</string>
     <string name="app_label" msgid="9035307001052716210">"媒体存储设备"</string>
     <string name="artist_label" msgid="8105600993099120273">"音乐人"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"默认铃声"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"添加铃声"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"删除"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"无法添加自定义铃声"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"无法删除自定义铃声"</string>
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 4a81d44..4b8149f 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"媒體"</string>
+    <string name="storage_description" msgid="4081716890357580107">"本機儲存空間"</string>
     <string name="app_label" msgid="9035307001052716210">"媒體儲存空間"</string>
     <string name="artist_label" msgid="8105600993099120273">"歌手"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"預設鈴聲"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"加入鈴聲"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"刪除"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"無法加入自訂鈴聲"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"無法刪除自訂鈴聲"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 392914f..68616ff 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"媒體"</string>
+    <string name="storage_description" msgid="4081716890357580107">"本機儲存空間"</string>
     <string name="app_label" msgid="9035307001052716210">"媒體儲存空間"</string>
     <string name="artist_label" msgid="8105600993099120273">"演出者"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"預設鈴聲"</string>
@@ -25,7 +26,7 @@
     <string name="root_images" msgid="5861633549189045666">"圖片"</string>
     <string name="root_videos" msgid="8792703517064649453">"影片"</string>
     <string name="root_audio" msgid="3505830755201326018">"音訊"</string>
-    <string name="sound_name_awaken" msgid="5266892392848526147">"Awaken"</string>
+    <string name="sound_name_awaken" msgid="5266892392848526147">"喚醒"</string>
     <string name="sound_name_bounce" msgid="8771447635446665231">"Bounce"</string>
     <string name="sound_name_drip" msgid="1744684469020662152">"Drip"</string>
     <string name="sound_name_gallop" msgid="2664454314532060876">"Gallop"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"新增鈴聲"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"刪除"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"無法新增自訂鈴聲"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"無法刪除自訂鈴聲"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 33b33ba..ea4405e 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="uid_label" msgid="8421971615411294156">"Abezind"</string>
+    <string name="storage_description" msgid="4081716890357580107">"Isitoreji sasendaweni"</string>
     <string name="app_label" msgid="9035307001052716210">"Isitoreji Semidiya"</string>
     <string name="artist_label" msgid="8105600993099120273">"Umculi"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Ithoni yokukhala ezenzakalelayo"</string>
@@ -34,4 +35,8 @@
     <string name="sound_name_rise" msgid="2200258555031675806">"I-Rise"</string>
     <string name="sound_name_sway" msgid="348448316663085643">"I-Sway"</string>
     <string name="sound_name_wag" msgid="2730733083078126563">"I-Wag"</string>
+    <string name="add_ringtone_text" msgid="8077717303037760418">"Engeza ithoni yokukhala"</string>
+    <string name="delete_ringtone_text" msgid="2963662097583300181">"Susa"</string>
+    <string name="unable_to_add_ringtone" msgid="6256097521165711269">"Ayikwazi ukwengeza ithoni yokukhala yangokwezifiso"</string>
+    <string name="unable_to_delete_ringtone" msgid="2258180073859253495">"Ayikwazi ukususa ithoni yokukhala yangokwezifiso"</string>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f90d2a3..3672f52 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4,9 +4,9 @@
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
-  
+
           http://www.apache.org/licenses/LICENSE-2.0
-  
+
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,6 +18,9 @@
     <!-- Label to show to user for all apps using this UID. -->
     <string name="uid_label">Media</string>
 
+    <!-- Label to show client applications a short description of storage location -->
+    <string name="storage_description">Local storage</string>
+
     <!-- Label to show to user for this package. -->
     <string name="app_label">Media Storage</string>
 
@@ -68,6 +71,15 @@
     <!-- Name of alarm in the alarm sound picker: theme:motion, style:sound design tempo:mid -->
     <string name="sound_name_wag">Wag</string>
 
+    <!-- Text for the RingtonePicker item that allows adding a new ringtone. -->
+    <string name="add_ringtone_text">Add ringtone</string>
+    <!-- Text for the RingtonePicker item ContextMenu that allows deleting a custom ringtone. -->
+    <string name="delete_ringtone_text">Delete</string>
+    <!-- Text for the Toast displayed when adding a custom ringtone fails. -->
+    <string name="unable_to_add_ringtone">Unable to add custom ringtone</string>
+    <!-- Text for the Toast displayed when deleting a custom ringtone fails. -->
+    <string name="unable_to_delete_ringtone">Unable to delete custom ringtone</string>
+
     <!--  When adding sounds as overlays, you can use the resources defined below.
           For the translation of the names to be picked up by the RingtonePicker:
           - in the sound files, set the "TITLE" tag as "alarm_XX" or "notification_XX"
diff --git a/src/com/android/providers/media/CheckedListItem.java b/src/com/android/providers/media/CheckedListItem.java
new file mode 100644
index 0000000..90e09f7
--- /dev/null
+++ b/src/com/android/providers/media/CheckedListItem.java
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ * 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.providers.media;
+
+import android.content.Context;
+import android.widget.Checkable;
+import android.widget.CheckedTextView;
+import android.widget.RelativeLayout;
+import android.util.AttributeSet;
+
+/**
+ * The {@link CheckedListItem} is a layout item that represents a ringtone, and is used in
+ * {@link RingtonePickerActivity}. It contains the ringtone's name, and a work badge to right of the
+ * name if the ringtone belongs to a work profile.
+ */
+public class CheckedListItem extends RelativeLayout implements Checkable {
+
+    public CheckedListItem(Context context) {
+        super(context);
+    }
+
+    public CheckedListItem(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public CheckedListItem(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public CheckedListItem(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    public void setChecked(boolean checked) {
+        getCheckedTextView().setChecked(checked);
+    }
+
+    @Override
+    public boolean isChecked() {
+        return getCheckedTextView().isChecked();
+    }
+
+    @Override
+    public void toggle() {
+        getCheckedTextView().toggle();
+    }
+
+    private CheckedTextView getCheckedTextView() {
+        return (CheckedTextView) findViewById(R.id.checked_text_view);
+    }
+
+}
diff --git a/src/com/android/providers/media/MediaDocumentsProvider.java b/src/com/android/providers/media/MediaDocumentsProvider.java
index 7c3d773..65a6769 100644
--- a/src/com/android/providers/media/MediaDocumentsProvider.java
+++ b/src/com/android/providers/media/MediaDocumentsProvider.java
@@ -230,6 +230,7 @@
         final ContentResolver resolver = getContext().getContentResolver();
         final MatrixCursor result = new MatrixCursor(resolveDocumentProjection(projection));
         final Ident ident = getIdentForDocId(docId);
+        final String[] queryArgs = new String[] { Long.toString(ident.id) } ;
 
         final long token = Binder.clearCallingIdentity();
         Cursor cursor = null;
@@ -240,8 +241,8 @@
             } else if (TYPE_IMAGES_BUCKET.equals(ident.type)) {
                 // single bucket
                 cursor = resolver.query(Images.Media.EXTERNAL_CONTENT_URI,
-                        ImagesBucketQuery.PROJECTION, ImageColumns.BUCKET_ID + "=" + ident.id,
-                        null, ImagesBucketQuery.SORT_ORDER);
+                        ImagesBucketQuery.PROJECTION, ImageColumns.BUCKET_ID + "=?",
+                        queryArgs, ImagesBucketQuery.SORT_ORDER);
                 copyNotificationUri(result, cursor);
                 if (cursor.moveToFirst()) {
                     includeImagesBucket(result, cursor);
@@ -249,7 +250,7 @@
             } else if (TYPE_IMAGE.equals(ident.type)) {
                 // single image
                 cursor = resolver.query(Images.Media.EXTERNAL_CONTENT_URI,
-                        ImageQuery.PROJECTION, BaseColumns._ID + "=" + ident.id, null,
+                        ImageQuery.PROJECTION, BaseColumns._ID + "=?", queryArgs,
                         null);
                 copyNotificationUri(result, cursor);
                 if (cursor.moveToFirst()) {
@@ -261,8 +262,8 @@
             } else if (TYPE_VIDEOS_BUCKET.equals(ident.type)) {
                 // single bucket
                 cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI,
-                        VideosBucketQuery.PROJECTION, VideoColumns.BUCKET_ID + "=" + ident.id,
-                        null, VideosBucketQuery.SORT_ORDER);
+                        VideosBucketQuery.PROJECTION, VideoColumns.BUCKET_ID + "=?",
+                        queryArgs, VideosBucketQuery.SORT_ORDER);
                 copyNotificationUri(result, cursor);
                 if (cursor.moveToFirst()) {
                     includeVideosBucket(result, cursor);
@@ -270,7 +271,7 @@
             } else if (TYPE_VIDEO.equals(ident.type)) {
                 // single video
                 cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI,
-                        VideoQuery.PROJECTION, BaseColumns._ID + "=" + ident.id, null,
+                        VideoQuery.PROJECTION, BaseColumns._ID + "=?", queryArgs,
                         null);
                 copyNotificationUri(result, cursor);
                 if (cursor.moveToFirst()) {
@@ -282,7 +283,7 @@
             } else if (TYPE_ARTIST.equals(ident.type)) {
                 // single artist
                 cursor = resolver.query(Artists.EXTERNAL_CONTENT_URI,
-                        ArtistQuery.PROJECTION, BaseColumns._ID + "=" + ident.id, null,
+                        ArtistQuery.PROJECTION, BaseColumns._ID + "=?", queryArgs,
                         null);
                 copyNotificationUri(result, cursor);
                 if (cursor.moveToFirst()) {
@@ -291,7 +292,7 @@
             } else if (TYPE_ALBUM.equals(ident.type)) {
                 // single album
                 cursor = resolver.query(Albums.EXTERNAL_CONTENT_URI,
-                        AlbumQuery.PROJECTION, BaseColumns._ID + "=" + ident.id, null,
+                        AlbumQuery.PROJECTION, BaseColumns._ID + "=?", queryArgs,
                         null);
                 copyNotificationUri(result, cursor);
                 if (cursor.moveToFirst()) {
@@ -300,7 +301,7 @@
             } else if (TYPE_AUDIO.equals(ident.type)) {
                 // single song
                 cursor = resolver.query(Audio.Media.EXTERNAL_CONTENT_URI,
-                        SongQuery.PROJECTION, BaseColumns._ID + "=" + ident.id, null,
+                        SongQuery.PROJECTION, BaseColumns._ID + "=?", queryArgs,
                         null);
                 copyNotificationUri(result, cursor);
                 if (cursor.moveToFirst()) {
@@ -322,6 +323,7 @@
         final ContentResolver resolver = getContext().getContentResolver();
         final MatrixCursor result = new MatrixCursor(resolveDocumentProjection(projection));
         final Ident ident = getIdentForDocId(docId);
+        final String[] queryArgs = new String[] { Long.toString(ident.id) } ;
 
         final long token = Binder.clearCallingIdentity();
         Cursor cursor = null;
@@ -343,8 +345,8 @@
             } else if (TYPE_IMAGES_BUCKET.equals(ident.type)) {
                 // include images under bucket
                 cursor = resolver.query(Images.Media.EXTERNAL_CONTENT_URI,
-                        ImageQuery.PROJECTION, ImageColumns.BUCKET_ID + "=" + ident.id,
-                        null, null);
+                        ImageQuery.PROJECTION, ImageColumns.BUCKET_ID + "=?",
+                        queryArgs, null);
                 copyNotificationUri(result, cursor);
                 while (cursor.moveToNext()) {
                     includeImage(result, cursor);
@@ -365,8 +367,8 @@
             } else if (TYPE_VIDEOS_BUCKET.equals(ident.type)) {
                 // include videos under bucket
                 cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI,
-                        VideoQuery.PROJECTION, VideoColumns.BUCKET_ID + "=" + ident.id,
-                        null, null);
+                        VideoQuery.PROJECTION, VideoColumns.BUCKET_ID + "=?",
+                        queryArgs, null);
                 copyNotificationUri(result, cursor);
                 while (cursor.moveToNext()) {
                     includeVideo(result, cursor);
@@ -390,8 +392,8 @@
             } else if (TYPE_ALBUM.equals(ident.type)) {
                 // include all songs under album
                 cursor = resolver.query(Audio.Media.EXTERNAL_CONTENT_URI,
-                        SongQuery.PROJECTION, AudioColumns.ALBUM_ID + "=" + ident.id,
-                        null, null);
+                        SongQuery.PROJECTION, AudioColumns.ALBUM_ID + "=?",
+                        queryArgs, null);
                 copyNotificationUri(result, cursor);
                 while (cursor.moveToNext()) {
                     includeAudio(result, cursor);
@@ -442,6 +444,50 @@
     }
 
     @Override
+    public Cursor querySearchDocuments(String rootId, String query, String[] projection)
+            throws FileNotFoundException {
+        final ContentResolver resolver = getContext().getContentResolver();
+        final MatrixCursor result = new MatrixCursor(resolveDocumentProjection(projection));
+
+        final long token = Binder.clearCallingIdentity();
+        final String[] queryArgs = new String[] { "%" + query + "%" };
+        Cursor cursor = null;
+        try {
+            if (TYPE_IMAGES_ROOT.equals(rootId)) {
+                cursor = resolver.query(Images.Media.EXTERNAL_CONTENT_URI, ImageQuery.PROJECTION,
+                        ImageColumns.DISPLAY_NAME + " LIKE ?", queryArgs,
+                        ImageColumns.DATE_MODIFIED + " DESC");
+                copyNotificationUri(result, cursor);
+                while (cursor.moveToNext()) {
+                    includeImage(result, cursor);
+                }
+            } else if (TYPE_VIDEOS_ROOT.equals(rootId)) {
+                cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI, VideoQuery.PROJECTION,
+                        VideoColumns.DISPLAY_NAME + " LIKE ?", queryArgs,
+                        VideoColumns.DATE_MODIFIED + " DESC");
+                copyNotificationUri(result, cursor);
+                while (cursor.moveToNext()) {
+                    includeVideo(result, cursor);
+                }
+            } else if (TYPE_AUDIO_ROOT.equals(rootId)) {
+                cursor = resolver.query(Audio.Media.EXTERNAL_CONTENT_URI, SongQuery.PROJECTION,
+                        AudioColumns.TITLE + " LIKE ?", queryArgs,
+                        AudioColumns.DATE_MODIFIED + " DESC");
+                copyNotificationUri(result, cursor);
+                while (cursor.moveToNext()) {
+                    includeAudio(result, cursor);
+                }
+            } else {
+                throw new UnsupportedOperationException("Unsupported root " + rootId);
+            }
+        } finally {
+            IoUtils.closeQuietly(cursor);
+            Binder.restoreCallingIdentity(token);
+        }
+        return result;
+    }
+
+    @Override
     public ParcelFileDescriptor openDocument(String docId, String mode, CancellationSignal signal)
             throws FileNotFoundException {
         final Uri target = getUriForDocumentId(docId);
@@ -462,7 +508,6 @@
     @Override
     public AssetFileDescriptor openDocumentThumbnail(
             String docId, Point sizeHint, CancellationSignal signal) throws FileNotFoundException {
-        final ContentResolver resolver = getContext().getContentResolver();
         final Ident ident = getIdentForDocId(docId);
 
         final long token = Binder.clearCallingIdentity();
@@ -500,7 +545,7 @@
     }
 
     private void includeImagesRoot(MatrixCursor result) {
-        int flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_RECENTS;
+        int flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_RECENTS | Root.FLAG_SUPPORTS_SEARCH;
         if (isEmpty(Images.Media.EXTERNAL_CONTENT_URI)) {
             flags |= Root.FLAG_EMPTY;
             sReturnedImagesEmpty = true;
@@ -515,7 +560,7 @@
     }
 
     private void includeVideosRoot(MatrixCursor result) {
-        int flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_RECENTS;
+        int flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_RECENTS | Root.FLAG_SUPPORTS_SEARCH;
         if (isEmpty(Video.Media.EXTERNAL_CONTENT_URI)) {
             flags |= Root.FLAG_EMPTY;
             sReturnedVideosEmpty = true;
@@ -530,7 +575,7 @@
     }
 
     private void includeAudioRoot(MatrixCursor result) {
-        int flags = Root.FLAG_LOCAL_ONLY;
+        int flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_SEARCH;
         if (isEmpty(Audio.Media.EXTERNAL_CONTENT_URI)) {
             flags |= Root.FLAG_EMPTY;
             sReturnedAudioEmpty = true;
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index e181e59..a3a0c71 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -17,6 +17,7 @@
 package com.android.providers.media;
 
 import static android.Manifest.permission.ACCESS_CACHE_FILESYSTEM;
+import static android.Manifest.permission.INTERACT_ACROSS_USERS;
 import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
 import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
 import static android.Manifest.permission.WRITE_MEDIA_STORAGE;
@@ -62,6 +63,7 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
+import android.os.FileUtils;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.Message;
@@ -73,7 +75,6 @@
 import android.os.storage.StorageVolume;
 import android.os.storage.VolumeInfo;
 import android.preference.PreferenceManager;
-import android.provider.BaseColumns;
 import android.provider.MediaStore;
 import android.provider.MediaStore.Audio;
 import android.provider.MediaStore.Audio.Playlists;
@@ -135,7 +136,6 @@
 
     private void updateStoragePaths() {
         mExternalStoragePaths = mStorageManager.getVolumePaths();
-
         try {
             mExternalPath =
                     Environment.getExternalStorageDirectory().getCanonicalPath() + File.separator;
@@ -759,11 +759,176 @@
 
     private static final String PLAYLIST_COLUMNS = "_data,name,date_added,date_modified";
 
+    // restore the database to a clean slate
+    private static void makePristine(SQLiteDatabase db) {
+        // drop all triggers
+        Cursor c = db.query("sqlite_master", new String[] {"name"}, "type is 'trigger'",
+                null, null, null, null);
+        while (c.moveToNext()) {
+            db.execSQL("DROP TRIGGER IF EXISTS " + c.getString(0));
+        }
+        c.close();
+
+        // drop all views
+        c = db.query("sqlite_master", new String[] {"name"}, "type is 'view'",
+                null, null, null, null);
+        while (c.moveToNext()) {
+            db.execSQL("DROP VIEW IF EXISTS " + c.getString(0));
+        }
+        c.close();
+
+        // drop all indexes
+        c = db.query("sqlite_master", new String[] {"name"}, "type is 'index'",
+                null, null, null, null);
+        while (c.moveToNext()) {
+            db.execSQL("DROP INDEX IF EXISTS " + c.getString(0));
+        }
+        c.close();
+
+        // drop all tables
+        c = db.query("sqlite_master", new String[] {"name"}, "type is 'table'",
+                null, null, null, null);
+        while (c.moveToNext()) {
+            db.execSQL("DROP TABLE IF EXISTS " + c.getString(0));
+        }
+        c.close();
+    }
+
+    private static void createLatestSchema(SQLiteDatabase db, boolean internal) {
+        makePristine(db);
+
+        db.execSQL("CREATE TABLE android_metadata (locale TEXT)");
+        db.execSQL("CREATE TABLE thumbnails (_id INTEGER PRIMARY KEY,_data TEXT,image_id INTEGER,"
+                + "kind INTEGER,width INTEGER,height INTEGER)");
+        db.execSQL("CREATE TABLE artists (artist_id INTEGER PRIMARY KEY,"
+                + "artist_key TEXT NOT NULL UNIQUE,artist TEXT NOT NULL)");
+        db.execSQL("CREATE TABLE albums (album_id INTEGER PRIMARY KEY,"
+                + "album_key TEXT NOT NULL UNIQUE,album TEXT NOT NULL)");
+        db.execSQL("CREATE TABLE album_art (album_id INTEGER PRIMARY KEY,_data TEXT)");
+        db.execSQL("CREATE TABLE videothumbnails (_id INTEGER PRIMARY KEY,_data TEXT,"
+                + "video_id INTEGER,kind INTEGER,width INTEGER,height INTEGER)");
+        db.execSQL("CREATE TABLE files (_id INTEGER PRIMARY KEY AUTOINCREMENT,"
+                + "_data TEXT UNIQUE COLLATE NOCASE,_size INTEGER,format INTEGER,parent INTEGER,"
+                + "date_added INTEGER,date_modified INTEGER,mime_type TEXT,title TEXT,"
+                + "description TEXT,_display_name TEXT,picasa_id TEXT,orientation INTEGER,"
+                + "latitude DOUBLE,longitude DOUBLE,datetaken INTEGER,mini_thumb_magic INTEGER,"
+                + "bucket_id TEXT,bucket_display_name TEXT,isprivate INTEGER,title_key TEXT,"
+                + "artist_id INTEGER,album_id INTEGER,composer TEXT,track INTEGER,"
+                + "year INTEGER CHECK(year!=0),is_ringtone INTEGER,is_music INTEGER,"
+                + "is_alarm INTEGER,is_notification INTEGER,is_podcast INTEGER,album_artist TEXT,"
+                + "duration INTEGER,bookmark INTEGER,artist TEXT,album TEXT,resolution TEXT,"
+                + "tags TEXT,category TEXT,language TEXT,mini_thumb_data TEXT,name TEXT,"
+                + "media_type INTEGER,old_id INTEGER,storage_id INTEGER,is_drm INTEGER,"
+                + "width INTEGER, height INTEGER)");
+        db.execSQL("CREATE TABLE log (time DATETIME, message TEXT)");
+        if (!internal) {
+            db.execSQL("CREATE TABLE audio_genres (_id INTEGER PRIMARY KEY,name TEXT NOT NULL)");
+            db.execSQL("CREATE TABLE audio_genres_map (_id INTEGER PRIMARY KEY,"
+                    + "audio_id INTEGER NOT NULL,genre_id INTEGER NOT NULL,"
+                    + "UNIQUE (audio_id,genre_id) ON CONFLICT IGNORE)");
+            db.execSQL("CREATE TABLE audio_playlists_map (_id INTEGER PRIMARY KEY,"
+                    + "audio_id INTEGER NOT NULL,playlist_id INTEGER NOT NULL,"
+                    + "play_order INTEGER NOT NULL)");
+            db.execSQL("CREATE TRIGGER audio_genres_cleanup DELETE ON audio_genres BEGIN DELETE"
+                    + " FROM audio_genres_map WHERE genre_id = old._id;END");
+            db.execSQL("CREATE TRIGGER audio_playlists_cleanup DELETE ON files"
+                    + " WHEN old.media_type=4"
+                    + " BEGIN DELETE FROM audio_playlists_map WHERE playlist_id = old._id;"
+                    + "SELECT _DELETE_FILE(old._data);END");
+            db.execSQL("CREATE TRIGGER files_cleanup DELETE ON files"
+                    + " BEGIN SELECT _OBJECT_REMOVED(old._id);END");
+            db.execSQL("CREATE VIEW audio_playlists AS SELECT _id,_data,name,date_added,date_modified"
+                    + " FROM files WHERE media_type=4");
+        }
+
+        db.execSQL("CREATE INDEX image_id_index on thumbnails(image_id)");
+        db.execSQL("CREATE INDEX album_idx on albums(album)");
+        db.execSQL("CREATE INDEX albumkey_index on albums(album_key)");
+        db.execSQL("CREATE INDEX artist_idx on artists(artist)");
+        db.execSQL("CREATE INDEX artistkey_index on artists(artist_key)");
+        db.execSQL("CREATE INDEX video_id_index on videothumbnails(video_id)");
+        db.execSQL("CREATE INDEX album_id_idx ON files(album_id)");
+        db.execSQL("CREATE INDEX artist_id_idx ON files(artist_id)");
+        db.execSQL("CREATE INDEX bucket_index on files(bucket_id,media_type,datetaken, _id)");
+        db.execSQL("CREATE INDEX bucket_name on files(bucket_id,media_type,bucket_display_name)");
+        db.execSQL("CREATE INDEX format_index ON files(format)");
+        db.execSQL("CREATE INDEX media_type_index ON files(media_type)");
+        db.execSQL("CREATE INDEX parent_index ON files(parent)");
+        db.execSQL("CREATE INDEX path_index ON files(_data)");
+        db.execSQL("CREATE INDEX sort_index ON files(datetaken ASC, _id ASC)");
+        db.execSQL("CREATE INDEX title_idx ON files(title)");
+        db.execSQL("CREATE INDEX titlekey_index ON files(title_key)");
+
+        db.execSQL("CREATE VIEW audio_meta AS SELECT _id,_data,_display_name,_size,mime_type,"
+                + "date_added,is_drm,date_modified,title,title_key,duration,artist_id,composer,"
+                + "album_id,track,year,is_ringtone,is_music,is_alarm,is_notification,is_podcast,"
+                + "bookmark,album_artist FROM files WHERE media_type=2");
+        db.execSQL("CREATE VIEW artists_albums_map AS SELECT DISTINCT artist_id, album_id"
+                + " FROM audio_meta");
+        db.execSQL("CREATE VIEW audio as SELECT * FROM audio_meta LEFT OUTER JOIN artists"
+                + " ON audio_meta.artist_id=artists.artist_id LEFT OUTER JOIN albums"
+                + " ON audio_meta.album_id=albums.album_id");
+        db.execSQL("CREATE VIEW album_info AS SELECT audio.album_id AS _id, album, album_key,"
+                + " MIN(year) AS minyear, MAX(year) AS maxyear, artist, artist_id, artist_key,"
+                + " count(*) AS numsongs,album_art._data AS album_art FROM audio"
+                + " LEFT OUTER JOIN album_art ON audio.album_id=album_art.album_id WHERE is_music=1"
+                + " GROUP BY audio.album_id");
+        db.execSQL("CREATE VIEW searchhelpertitle AS SELECT * FROM audio ORDER BY title_key");
+        db.execSQL("CREATE VIEW artist_info AS SELECT artist_id AS _id, artist, artist_key,"
+                + " COUNT(DISTINCT album_key) AS number_of_albums, COUNT(*) AS number_of_tracks"
+                + " FROM audio"
+                + " WHERE is_music=1 GROUP BY artist_key");
+        db.execSQL("CREATE VIEW search AS SELECT _id,'artist' AS mime_type,artist,NULL AS album,"
+                + "NULL AS title,artist AS text1,NULL AS text2,number_of_albums AS data1,"
+                + "number_of_tracks AS data2,artist_key AS match,"
+                + "'content://media/external/audio/artists/'||_id AS suggest_intent_data,"
+                + "1 AS grouporder FROM artist_info WHERE (artist!='<unknown>')"
+                + " UNION ALL SELECT _id,'album' AS mime_type,artist,album,"
+                + "NULL AS title,album AS text1,artist AS text2,NULL AS data1,"
+                + "NULL AS data2,artist_key||' '||album_key AS match,"
+                + "'content://media/external/audio/albums/'||_id AS suggest_intent_data,"
+                + "2 AS grouporder FROM album_info"
+                + " WHERE (album!='<unknown>')"
+                + " UNION ALL SELECT searchhelpertitle._id AS _id,mime_type,artist,album,title,"
+                + "title AS text1,artist AS text2,NULL AS data1,"
+                + "NULL AS data2,artist_key||' '||album_key||' '||title_key AS match,"
+                + "'content://media/external/audio/media/'||searchhelpertitle._id"
+                + " AS suggest_intent_data,"
+                + "3 AS grouporder FROM searchhelpertitle WHERE (title != '')");
+        db.execSQL("CREATE VIEW audio_genres_map_noid AS SELECT audio_id,genre_id"
+                + " FROM audio_genres_map");
+        db.execSQL("CREATE VIEW images AS SELECT _id,_data,_size,_display_name,mime_type,title,"
+                + "date_added,date_modified,description,picasa_id,isprivate,latitude,longitude,"
+                + "datetaken,orientation,mini_thumb_magic,bucket_id,bucket_display_name,width,"
+                + "height FROM files WHERE media_type=1");
+        db.execSQL("CREATE VIEW video AS SELECT _id,_data,_display_name,_size,mime_type,"
+                + "date_added,date_modified,title,duration,artist,album,resolution,description,"
+                + "isprivate,tags,category,language,mini_thumb_data,latitude,longitude,datetaken,"
+                + "mini_thumb_magic,bucket_id,bucket_display_name,bookmark,width,height"
+                + " FROM files WHERE media_type=3");
+
+        db.execSQL("CREATE TRIGGER albumart_cleanup1 DELETE ON albums BEGIN DELETE FROM album_art"
+                + " WHERE album_id = old.album_id;END");
+        db.execSQL("CREATE TRIGGER albumart_cleanup2 DELETE ON album_art"
+                + " BEGIN SELECT _DELETE_FILE(old._data);END");
+    }
+
+    private static void updateFromKKSchema(SQLiteDatabase db, boolean internal, int fromVersion) {
+        // Delete albums and artists, then clear the modification time on songs, which
+        // will cause the media scanner to rescan everything, rebuilding the artist and
+        // album tables along the way, while preserving playlists.
+        // We need this rescan because ICU also changed, and now generates different
+        // collation keys
+        db.execSQL("DELETE from albums");
+        db.execSQL("DELETE from artists");
+        db.execSQL("UPDATE files SET date_modified=0;");
+    }
+
     /**
      * This method takes care of updating all the tables in the database to the
      * current version, creating them if necessary.
-     * This method can only update databases at schema 63 or higher, which was
-     * created August 1, 2008. Older database will be cleared and recreated.
+     * This method can only update databases at schema 700 or higher, which was
+     * used by the KitKat release. Older database will be cleared and recreated.
      * @param db Database
      * @param internal True if this is the internal media database
      */
@@ -782,1133 +947,11 @@
         }
         long startTime = SystemClock.currentTimeMicro();
 
-        // Revisions 84-86 were a failed attempt at supporting the "album artist" id3 tag.
-        // We can't downgrade from those revisions, so start over.
-        // (the initial change to do this was wrong, so now we actually need to start over
-        // if the database version is 84-89)
-        // Post-gingerbread, revisions 91-94 were broken in a way that is not easy to repair.
-        // However version 91 was reused in a divergent development path for gingerbread,
-        // so we need to support upgrades from 91.
-        // Therefore we will only force a reset for versions 92 - 94.
-        if (fromVersion < 63 || (fromVersion >= 84 && fromVersion <= 89) ||
-                    (fromVersion >= 92 && fromVersion <= 94)) {
-            // Drop everything and start over.
-            Log.i(TAG, "Upgrading media database from version " +
-                    fromVersion + " to " + toVersion + ", which will destroy all old data");
-            fromVersion = 63;
-            db.execSQL("DROP TABLE IF EXISTS images");
-            db.execSQL("DROP TRIGGER IF EXISTS images_cleanup");
-            db.execSQL("DROP TABLE IF EXISTS thumbnails");
-            db.execSQL("DROP TRIGGER IF EXISTS thumbnails_cleanup");
-            db.execSQL("DROP TABLE IF EXISTS audio_meta");
-            db.execSQL("DROP TABLE IF EXISTS artists");
-            db.execSQL("DROP TABLE IF EXISTS albums");
-            db.execSQL("DROP TABLE IF EXISTS album_art");
-            db.execSQL("DROP VIEW IF EXISTS artist_info");
-            db.execSQL("DROP VIEW IF EXISTS album_info");
-            db.execSQL("DROP VIEW IF EXISTS artists_albums_map");
-            db.execSQL("DROP TRIGGER IF EXISTS audio_meta_cleanup");
-            db.execSQL("DROP TABLE IF EXISTS audio_genres");
-            db.execSQL("DROP TABLE IF EXISTS audio_genres_map");
-            db.execSQL("DROP TRIGGER IF EXISTS audio_genres_cleanup");
-            db.execSQL("DROP TABLE IF EXISTS audio_playlists");
-            db.execSQL("DROP TABLE IF EXISTS audio_playlists_map");
-            db.execSQL("DROP TRIGGER IF EXISTS audio_playlists_cleanup");
-            db.execSQL("DROP TRIGGER IF EXISTS albumart_cleanup1");
-            db.execSQL("DROP TRIGGER IF EXISTS albumart_cleanup2");
-            db.execSQL("DROP TABLE IF EXISTS video");
-            db.execSQL("DROP TRIGGER IF EXISTS video_cleanup");
-            db.execSQL("DROP TABLE IF EXISTS objects");
-            db.execSQL("DROP TRIGGER IF EXISTS images_objects_cleanup");
-            db.execSQL("DROP TRIGGER IF EXISTS audio_objects_cleanup");
-            db.execSQL("DROP TRIGGER IF EXISTS video_objects_cleanup");
-            db.execSQL("DROP TRIGGER IF EXISTS playlists_objects_cleanup");
-
-            db.execSQL("CREATE TABLE IF NOT EXISTS images (" +
-                    "_id INTEGER PRIMARY KEY," +
-                    "_data TEXT," +
-                    "_size INTEGER," +
-                    "_display_name TEXT," +
-                    "mime_type TEXT," +
-                    "title TEXT," +
-                    "date_added INTEGER," +
-                    "date_modified INTEGER," +
-                    "description TEXT," +
-                    "picasa_id TEXT," +
-                    "isprivate INTEGER," +
-                    "latitude DOUBLE," +
-                    "longitude DOUBLE," +
-                    "datetaken INTEGER," +
-                    "orientation INTEGER," +
-                    "mini_thumb_magic INTEGER," +
-                    "bucket_id TEXT," +
-                    "bucket_display_name TEXT" +
-                   ");");
-
-            db.execSQL("CREATE INDEX IF NOT EXISTS mini_thumb_magic_index on images(mini_thumb_magic);");
-
-            db.execSQL("CREATE TRIGGER IF NOT EXISTS images_cleanup DELETE ON images " +
-                    "BEGIN " +
-                        "DELETE FROM thumbnails WHERE image_id = old._id;" +
-                        "SELECT _DELETE_FILE(old._data);" +
-                    "END");
-
-            // create image thumbnail table
-            db.execSQL("CREATE TABLE IF NOT EXISTS thumbnails (" +
-                       "_id INTEGER PRIMARY KEY," +
-                       "_data TEXT," +
-                       "image_id INTEGER," +
-                       "kind INTEGER," +
-                       "width INTEGER," +
-                       "height INTEGER" +
-                       ");");
-
-            db.execSQL("CREATE INDEX IF NOT EXISTS image_id_index on thumbnails(image_id);");
-
-            db.execSQL("CREATE TRIGGER IF NOT EXISTS thumbnails_cleanup DELETE ON thumbnails " +
-                    "BEGIN " +
-                        "SELECT _DELETE_FILE(old._data);" +
-                    "END");
-
-            // Contains meta data about audio files
-            db.execSQL("CREATE TABLE IF NOT EXISTS audio_meta (" +
-                       "_id INTEGER PRIMARY KEY," +
-                       "_data TEXT UNIQUE NOT NULL," +
-                       "_display_name TEXT," +
-                       "_size INTEGER," +
-                       "mime_type TEXT," +
-                       "date_added INTEGER," +
-                       "date_modified INTEGER," +
-                       "title TEXT NOT NULL," +
-                       "title_key TEXT NOT NULL," +
-                       "duration INTEGER," +
-                       "artist_id INTEGER," +
-                       "composer TEXT," +
-                       "album_id INTEGER," +
-                       "track INTEGER," +    // track is an integer to allow proper sorting
-                       "year INTEGER CHECK(year!=0)," +
-                       "is_ringtone INTEGER," +
-                       "is_music INTEGER," +
-                       "is_alarm INTEGER," +
-                       "is_notification INTEGER" +
-                       ");");
-
-            // Contains a sort/group "key" and the preferred display name for artists
-            db.execSQL("CREATE TABLE IF NOT EXISTS artists (" +
-                        "artist_id INTEGER PRIMARY KEY," +
-                        "artist_key TEXT NOT NULL UNIQUE," +
-                        "artist TEXT NOT NULL" +
-                       ");");
-
-            // Contains a sort/group "key" and the preferred display name for albums
-            db.execSQL("CREATE TABLE IF NOT EXISTS albums (" +
-                        "album_id INTEGER PRIMARY KEY," +
-                        "album_key TEXT NOT NULL UNIQUE," +
-                        "album TEXT NOT NULL" +
-                       ");");
-
-            db.execSQL("CREATE TABLE IF NOT EXISTS album_art (" +
-                    "album_id INTEGER PRIMARY KEY," +
-                    "_data TEXT" +
-                   ");");
-
-            recreateAudioView(db);
-
-
-            // Provides some extra info about artists, like the number of tracks
-            // and albums for this artist
-            db.execSQL("CREATE VIEW IF NOT EXISTS artist_info AS " +
-                        "SELECT artist_id AS _id, artist, artist_key, " +
-                        "COUNT(DISTINCT album) AS number_of_albums, " +
-                        "COUNT(*) AS number_of_tracks FROM audio WHERE is_music=1 "+
-                        "GROUP BY artist_key;");
-
-            // Provides extra info albums, such as the number of tracks
-            db.execSQL("CREATE VIEW IF NOT EXISTS album_info AS " +
-                    "SELECT audio.album_id AS _id, album, album_key, " +
-                    "MIN(year) AS minyear, " +
-                    "MAX(year) AS maxyear, artist, artist_id, artist_key, " +
-                    "count(*) AS " + MediaStore.Audio.Albums.NUMBER_OF_SONGS +
-                    ",album_art._data AS album_art" +
-                    " FROM audio LEFT OUTER JOIN album_art ON audio.album_id=album_art.album_id" +
-                    " WHERE is_music=1 GROUP BY audio.album_id;");
-
-            // For a given artist_id, provides the album_id for albums on
-            // which the artist appears.
-            db.execSQL("CREATE VIEW IF NOT EXISTS artists_albums_map AS " +
-                    "SELECT DISTINCT artist_id, album_id FROM audio_meta;");
-
-            /*
-             * Only external media volumes can handle genres, playlists, etc.
-             */
-            if (!internal) {
-                // Cleans up when an audio file is deleted
-                db.execSQL("CREATE TRIGGER IF NOT EXISTS audio_meta_cleanup DELETE ON audio_meta " +
-                           "BEGIN " +
-                               "DELETE FROM audio_genres_map WHERE audio_id = old._id;" +
-                               "DELETE FROM audio_playlists_map WHERE audio_id = old._id;" +
-                           "END");
-
-                // Contains audio genre definitions
-                db.execSQL("CREATE TABLE IF NOT EXISTS audio_genres (" +
-                           "_id INTEGER PRIMARY KEY," +
-                           "name TEXT NOT NULL" +
-                           ");");
-
-                // Contains mappings between audio genres and audio files
-                db.execSQL("CREATE TABLE IF NOT EXISTS audio_genres_map (" +
-                           "_id INTEGER PRIMARY KEY," +
-                           "audio_id INTEGER NOT NULL," +
-                           "genre_id INTEGER NOT NULL" +
-                           ");");
-
-                // Cleans up when an audio genre is delete
-                db.execSQL("CREATE TRIGGER IF NOT EXISTS audio_genres_cleanup DELETE ON audio_genres " +
-                           "BEGIN " +
-                               "DELETE FROM audio_genres_map WHERE genre_id = old._id;" +
-                           "END");
-
-                // Contains audio playlist definitions
-                db.execSQL("CREATE TABLE IF NOT EXISTS audio_playlists (" +
-                           "_id INTEGER PRIMARY KEY," +
-                           "_data TEXT," +  // _data is path for file based playlists, or null
-                           "name TEXT NOT NULL," +
-                           "date_added INTEGER," +
-                           "date_modified INTEGER" +
-                           ");");
-
-                // Contains mappings between audio playlists and audio files
-                db.execSQL("CREATE TABLE IF NOT EXISTS audio_playlists_map (" +
-                           "_id INTEGER PRIMARY KEY," +
-                           "audio_id INTEGER NOT NULL," +
-                           "playlist_id INTEGER NOT NULL," +
-                           "play_order INTEGER NOT NULL" +
-                           ");");
-
-                // Cleans up when an audio playlist is deleted
-                db.execSQL("CREATE TRIGGER IF NOT EXISTS audio_playlists_cleanup DELETE ON audio_playlists " +
-                           "BEGIN " +
-                               "DELETE FROM audio_playlists_map WHERE playlist_id = old._id;" +
-                               "SELECT _DELETE_FILE(old._data);" +
-                           "END");
-
-                // Cleans up album_art table entry when an album is deleted
-                db.execSQL("CREATE TRIGGER IF NOT EXISTS albumart_cleanup1 DELETE ON albums " +
-                        "BEGIN " +
-                            "DELETE FROM album_art WHERE album_id = old.album_id;" +
-                        "END");
-
-                // Cleans up album_art when an album is deleted
-                db.execSQL("CREATE TRIGGER IF NOT EXISTS albumart_cleanup2 DELETE ON album_art " +
-                        "BEGIN " +
-                            "SELECT _DELETE_FILE(old._data);" +
-                        "END");
-            }
-
-            // Contains meta data about video files
-            db.execSQL("CREATE TABLE IF NOT EXISTS video (" +
-                       "_id INTEGER PRIMARY KEY," +
-                       "_data TEXT NOT NULL," +
-                       "_display_name TEXT," +
-                       "_size INTEGER," +
-                       "mime_type TEXT," +
-                       "date_added INTEGER," +
-                       "date_modified INTEGER," +
-                       "title TEXT," +
-                       "duration INTEGER," +
-                       "artist TEXT," +
-                       "album TEXT," +
-                       "resolution TEXT," +
-                       "description TEXT," +
-                       "isprivate INTEGER," +   // for YouTube videos
-                       "tags TEXT," +           // for YouTube videos
-                       "category TEXT," +       // for YouTube videos
-                       "language TEXT," +       // for YouTube videos
-                       "mini_thumb_data TEXT," +
-                       "latitude DOUBLE," +
-                       "longitude DOUBLE," +
-                       "datetaken INTEGER," +
-                       "mini_thumb_magic INTEGER" +
-                       ");");
-
-            db.execSQL("CREATE TRIGGER IF NOT EXISTS video_cleanup DELETE ON video " +
-                    "BEGIN " +
-                        "SELECT _DELETE_FILE(old._data);" +
-                    "END");
-        }
-
-        // At this point the database is at least at schema version 63 (it was
-        // either created at version 63 by the code above, or was already at
-        // version 63 or later)
-
-        if (fromVersion < 64) {
-            // create the index that updates the database to schema version 64
-            db.execSQL("CREATE INDEX IF NOT EXISTS sort_index on images(datetaken ASC, _id ASC);");
-        }
-
-        /*
-         *  Android 1.0 shipped with database version 64
-         */
-
-        if (fromVersion < 65) {
-            // create the index that updates the database to schema version 65
-            db.execSQL("CREATE INDEX IF NOT EXISTS titlekey_index on audio_meta(title_key);");
-        }
-
-        // In version 66, originally we updateBucketNames(db, "images"),
-        // but we need to do it in version 89 and therefore save the update here.
-
-        if (fromVersion < 67) {
-            // create the indices that update the database to schema version 67
-            db.execSQL("CREATE INDEX IF NOT EXISTS albumkey_index on albums(album_key);");
-            db.execSQL("CREATE INDEX IF NOT EXISTS artistkey_index on artists(artist_key);");
-        }
-
-        if (fromVersion < 68) {
-            // Create bucket_id and bucket_display_name columns for the video table.
-            db.execSQL("ALTER TABLE video ADD COLUMN bucket_id TEXT;");
-            db.execSQL("ALTER TABLE video ADD COLUMN bucket_display_name TEXT");
-
-            // In version 68, originally we updateBucketNames(db, "video"),
-            // but we need to do it in version 89 and therefore save the update here.
-        }
-
-        if (fromVersion < 69) {
-            updateDisplayName(db, "images");
-        }
-
-        if (fromVersion < 70) {
-            // Create bookmark column for the video table.
-            db.execSQL("ALTER TABLE video ADD COLUMN bookmark INTEGER;");
-        }
-
-        if (fromVersion < 71) {
-            // There is no change to the database schema, however a code change
-            // fixed parsing of metadata for certain files bought from the
-            // iTunes music store, so we want to rescan files that might need it.
-            // We do this by clearing the modification date in the database for
-            // those files, so that the media scanner will see them as updated
-            // and rescan them.
-            db.execSQL("UPDATE audio_meta SET date_modified=0 WHERE _id IN (" +
-                    "SELECT _id FROM audio where mime_type='audio/mp4' AND " +
-                    "artist='" + MediaStore.UNKNOWN_STRING + "' AND " +
-                    "album='" + MediaStore.UNKNOWN_STRING + "'" +
-                    ");");
-        }
-
-        if (fromVersion < 72) {
-            // Create is_podcast and bookmark columns for the audio table.
-            db.execSQL("ALTER TABLE audio_meta ADD COLUMN is_podcast INTEGER;");
-            db.execSQL("UPDATE audio_meta SET is_podcast=1 WHERE _data LIKE '%/podcasts/%';");
-            db.execSQL("UPDATE audio_meta SET is_music=0 WHERE is_podcast=1" +
-                    " AND _data NOT LIKE '%/music/%';");
-            db.execSQL("ALTER TABLE audio_meta ADD COLUMN bookmark INTEGER;");
-
-            // New columns added to tables aren't visible in views on those tables
-            // without opening and closing the database (or using the 'vacuum' command,
-            // which we can't do here because all this code runs inside a transaction).
-            // To work around this, we drop and recreate the affected view and trigger.
-            recreateAudioView(db);
-        }
-
-        /*
-         *  Android 1.5 shipped with database version 72
-         */
-
-        if (fromVersion < 73) {
-            // There is no change to the database schema, but we now do case insensitive
-            // matching of folder names when determining whether something is music, a
-            // ringtone, podcast, etc, so we might need to reclassify some files.
-            db.execSQL("UPDATE audio_meta SET is_music=1 WHERE is_music=0 AND " +
-                    "_data LIKE '%/music/%';");
-            db.execSQL("UPDATE audio_meta SET is_ringtone=1 WHERE is_ringtone=0 AND " +
-                    "_data LIKE '%/ringtones/%';");
-            db.execSQL("UPDATE audio_meta SET is_notification=1 WHERE is_notification=0 AND " +
-                    "_data LIKE '%/notifications/%';");
-            db.execSQL("UPDATE audio_meta SET is_alarm=1 WHERE is_alarm=0 AND " +
-                    "_data LIKE '%/alarms/%';");
-            db.execSQL("UPDATE audio_meta SET is_podcast=1 WHERE is_podcast=0 AND " +
-                    "_data LIKE '%/podcasts/%';");
-        }
-
-        if (fromVersion < 74) {
-            // This view is used instead of the audio view by the union below, to force
-            // sqlite to use the title_key index. This greatly reduces memory usage
-            // (no separate copy pass needed for sorting, which could cause errors on
-            // large datasets) and improves speed (by about 35% on a large dataset)
-            db.execSQL("CREATE VIEW IF NOT EXISTS searchhelpertitle AS SELECT * FROM audio " +
-                    "ORDER BY title_key;");
-
-            db.execSQL("CREATE VIEW IF NOT EXISTS search AS " +
-                    "SELECT _id," +
-                    "'artist' AS mime_type," +
-                    "artist," +
-                    "NULL AS album," +
-                    "NULL AS title," +
-                    "artist AS text1," +
-                    "NULL AS text2," +
-                    "number_of_albums AS data1," +
-                    "number_of_tracks AS data2," +
-                    "artist_key AS match," +
-                    "'content://media/external/audio/artists/'||_id AS suggest_intent_data," +
-                    "1 AS grouporder " +
-                    "FROM artist_info WHERE (artist!='" + MediaStore.UNKNOWN_STRING + "') " +
-                "UNION ALL " +
-                    "SELECT _id," +
-                    "'album' AS mime_type," +
-                    "artist," +
-                    "album," +
-                    "NULL AS title," +
-                    "album AS text1," +
-                    "artist AS text2," +
-                    "NULL AS data1," +
-                    "NULL AS data2," +
-                    "artist_key||' '||album_key AS match," +
-                    "'content://media/external/audio/albums/'||_id AS suggest_intent_data," +
-                    "2 AS grouporder " +
-                    "FROM album_info WHERE (album!='" + MediaStore.UNKNOWN_STRING + "') " +
-                "UNION ALL " +
-                    "SELECT searchhelpertitle._id AS _id," +
-                    "mime_type," +
-                    "artist," +
-                    "album," +
-                    "title," +
-                    "title AS text1," +
-                    "artist AS text2," +
-                    "NULL AS data1," +
-                    "NULL AS data2," +
-                    "artist_key||' '||album_key||' '||title_key AS match," +
-                    "'content://media/external/audio/media/'||searchhelpertitle._id AS " +
-                    "suggest_intent_data," +
-                    "3 AS grouporder " +
-                    "FROM searchhelpertitle WHERE (title != '') "
-                    );
-        }
-
-        if (fromVersion < 75) {
-            // Force a rescan of the audio entries so we can apply the new logic to
-            // distinguish same-named albums.
-            db.execSQL("UPDATE audio_meta SET date_modified=0;");
-            db.execSQL("DELETE FROM albums");
-        }
-
-        if (fromVersion < 76) {
-            // We now ignore double quotes when building the key, so we have to remove all of them
-            // from existing keys.
-            db.execSQL("UPDATE audio_meta SET title_key=" +
-                    "REPLACE(title_key,x'081D08C29F081D',x'081D') " +
-                    "WHERE title_key LIKE '%'||x'081D08C29F081D'||'%';");
-            db.execSQL("UPDATE albums SET album_key=" +
-                    "REPLACE(album_key,x'081D08C29F081D',x'081D') " +
-                    "WHERE album_key LIKE '%'||x'081D08C29F081D'||'%';");
-            db.execSQL("UPDATE artists SET artist_key=" +
-                    "REPLACE(artist_key,x'081D08C29F081D',x'081D') " +
-                    "WHERE artist_key LIKE '%'||x'081D08C29F081D'||'%';");
-        }
-
-        /*
-         *  Android 1.6 shipped with database version 76
-         */
-
-        if (fromVersion < 77) {
-            // create video thumbnail table
-            db.execSQL("CREATE TABLE IF NOT EXISTS videothumbnails (" +
-                    "_id INTEGER PRIMARY KEY," +
-                    "_data TEXT," +
-                    "video_id INTEGER," +
-                    "kind INTEGER," +
-                    "width INTEGER," +
-                    "height INTEGER" +
-                    ");");
-
-            db.execSQL("CREATE INDEX IF NOT EXISTS video_id_index on videothumbnails(video_id);");
-
-            db.execSQL("CREATE TRIGGER IF NOT EXISTS videothumbnails_cleanup DELETE ON videothumbnails " +
-                    "BEGIN " +
-                        "SELECT _DELETE_FILE(old._data);" +
-                    "END");
-        }
-
-        /*
-         *  Android 2.0 and 2.0.1 shipped with database version 77
-         */
-
-        if (fromVersion < 78) {
-            // Force a rescan of the video entries so we can update
-            // latest changed DATE_TAKEN units (in milliseconds).
-            db.execSQL("UPDATE video SET date_modified=0;");
-        }
-
-        /*
-         *  Android 2.1 shipped with database version 78
-         */
-
-        if (fromVersion < 79) {
-            // move /sdcard/albumthumbs to
-            // /sdcard/Android/data/com.android.providers.media/albumthumbs,
-            // and update the database accordingly
-
-            final StorageManager sm = context.getSystemService(StorageManager.class);
-            final StorageVolume vol = sm.getPrimaryVolume();
-
-            String oldthumbspath = vol.getPath() + "/albumthumbs";
-            String newthumbspath = vol.getPath() + "/" + ALBUM_THUMB_FOLDER;
-            File thumbsfolder = new File(oldthumbspath);
-            if (thumbsfolder.exists()) {
-                // move folder to its new location
-                File newthumbsfolder = new File(newthumbspath);
-                newthumbsfolder.getParentFile().mkdirs();
-                if(thumbsfolder.renameTo(newthumbsfolder)) {
-                    // update the database
-                    db.execSQL("UPDATE album_art SET _data=REPLACE(_data, '" +
-                            oldthumbspath + "','" + newthumbspath + "');");
-                }
-            }
-        }
-
-        if (fromVersion < 80) {
-            // Force rescan of image entries to update DATE_TAKEN as UTC timestamp.
-            db.execSQL("UPDATE images SET date_modified=0;");
-        }
-
-        if (fromVersion < 81 && !internal) {
-            // Delete entries starting with /mnt/sdcard. This is for the benefit
-            // of users running builds between 2.0.1 and 2.1 final only, since
-            // users updating from 2.0 or earlier will not have such entries.
-
-            // First we need to update the _data fields in the affected tables, since
-            // otherwise deleting the entries will also delete the underlying files
-            // (via a trigger), and we want to keep them.
-            db.execSQL("UPDATE audio_playlists SET _data='////' WHERE _data LIKE '/mnt/sdcard/%';");
-            db.execSQL("UPDATE images SET _data='////' WHERE _data LIKE '/mnt/sdcard/%';");
-            db.execSQL("UPDATE video SET _data='////' WHERE _data LIKE '/mnt/sdcard/%';");
-            db.execSQL("UPDATE videothumbnails SET _data='////' WHERE _data LIKE '/mnt/sdcard/%';");
-            db.execSQL("UPDATE thumbnails SET _data='////' WHERE _data LIKE '/mnt/sdcard/%';");
-            db.execSQL("UPDATE album_art SET _data='////' WHERE _data LIKE '/mnt/sdcard/%';");
-            db.execSQL("UPDATE audio_meta SET _data='////' WHERE _data LIKE '/mnt/sdcard/%';");
-            // Once the paths have been renamed, we can safely delete the entries
-            db.execSQL("DELETE FROM audio_playlists WHERE _data IS '////';");
-            db.execSQL("DELETE FROM images WHERE _data IS '////';");
-            db.execSQL("DELETE FROM video WHERE _data IS '////';");
-            db.execSQL("DELETE FROM videothumbnails WHERE _data IS '////';");
-            db.execSQL("DELETE FROM thumbnails WHERE _data IS '////';");
-            db.execSQL("DELETE FROM audio_meta WHERE _data  IS '////';");
-            db.execSQL("DELETE FROM album_art WHERE _data  IS '////';");
-
-            // rename existing entries starting with /sdcard to /mnt/sdcard
-            db.execSQL("UPDATE audio_meta" +
-                    " SET _data='/mnt/sdcard'||SUBSTR(_data,8) WHERE _data LIKE '/sdcard/%';");
-            db.execSQL("UPDATE audio_playlists" +
-                    " SET _data='/mnt/sdcard'||SUBSTR(_data,8) WHERE _data LIKE '/sdcard/%';");
-            db.execSQL("UPDATE images" +
-                    " SET _data='/mnt/sdcard'||SUBSTR(_data,8) WHERE _data LIKE '/sdcard/%';");
-            db.execSQL("UPDATE video" +
-                    " SET _data='/mnt/sdcard'||SUBSTR(_data,8) WHERE _data LIKE '/sdcard/%';");
-            db.execSQL("UPDATE videothumbnails" +
-                    " SET _data='/mnt/sdcard'||SUBSTR(_data,8) WHERE _data LIKE '/sdcard/%';");
-            db.execSQL("UPDATE thumbnails" +
-                    " SET _data='/mnt/sdcard'||SUBSTR(_data,8) WHERE _data LIKE '/sdcard/%';");
-            db.execSQL("UPDATE album_art" +
-                    " SET _data='/mnt/sdcard'||SUBSTR(_data,8) WHERE _data LIKE '/sdcard/%';");
-
-            // Delete albums and artists, then clear the modification time on songs, which
-            // will cause the media scanner to rescan everything, rebuilding the artist and
-            // album tables along the way, while preserving playlists.
-            // We need this rescan because ICU also changed, and now generates different
-            // collation keys
-            db.execSQL("DELETE from albums");
-            db.execSQL("DELETE from artists");
-            db.execSQL("UPDATE audio_meta SET date_modified=0;");
-        }
-
-        if (fromVersion < 82) {
-            // recreate this view with the correct "group by" specifier
-            db.execSQL("DROP VIEW IF EXISTS artist_info");
-            db.execSQL("CREATE VIEW IF NOT EXISTS artist_info AS " +
-                        "SELECT artist_id AS _id, artist, artist_key, " +
-                        "COUNT(DISTINCT album_key) AS number_of_albums, " +
-                        "COUNT(*) AS number_of_tracks FROM audio WHERE is_music=1 "+
-                        "GROUP BY artist_key;");
-        }
-
-        /* we skipped over version 83, and reverted versions 84, 85 and 86 */
-
-        if (fromVersion < 87) {
-            // The fastscroll thumb needs an index on the strings being displayed,
-            // otherwise the queries it does to determine the correct position
-            // becomes really inefficient
-            db.execSQL("CREATE INDEX IF NOT EXISTS title_idx on audio_meta(title);");
-            db.execSQL("CREATE INDEX IF NOT EXISTS artist_idx on artists(artist);");
-            db.execSQL("CREATE INDEX IF NOT EXISTS album_idx on albums(album);");
-        }
-
-        if (fromVersion < 88) {
-            // Clean up a few more things from versions 84/85/86, and recreate
-            // the few things worth keeping from those changes.
-            db.execSQL("DROP TRIGGER IF EXISTS albums_update1;");
-            db.execSQL("DROP TRIGGER IF EXISTS albums_update2;");
-            db.execSQL("DROP TRIGGER IF EXISTS albums_update3;");
-            db.execSQL("DROP TRIGGER IF EXISTS albums_update4;");
-            db.execSQL("DROP TRIGGER IF EXISTS artist_update1;");
-            db.execSQL("DROP TRIGGER IF EXISTS artist_update2;");
-            db.execSQL("DROP TRIGGER IF EXISTS artist_update3;");
-            db.execSQL("DROP TRIGGER IF EXISTS artist_update4;");
-            db.execSQL("DROP VIEW IF EXISTS album_artists;");
-            db.execSQL("CREATE INDEX IF NOT EXISTS album_id_idx on audio_meta(album_id);");
-            db.execSQL("CREATE INDEX IF NOT EXISTS artist_id_idx on audio_meta(artist_id);");
-            // For a given artist_id, provides the album_id for albums on
-            // which the artist appears.
-            db.execSQL("CREATE VIEW IF NOT EXISTS artists_albums_map AS " +
-                    "SELECT DISTINCT artist_id, album_id FROM audio_meta;");
-        }
-
-        // In version 89, originally we updateBucketNames(db, "images") and
-        // updateBucketNames(db, "video"), but in version 101 we now updateBucketNames
-        //  for all files and therefore can save the update here.
-
-        if (fromVersion < 91) {
-            // Never query by mini_thumb_magic_index
-            db.execSQL("DROP INDEX IF EXISTS mini_thumb_magic_index");
-
-            // sort the items by taken date in each bucket
-            db.execSQL("CREATE INDEX IF NOT EXISTS image_bucket_index ON images(bucket_id, datetaken)");
-            db.execSQL("CREATE INDEX IF NOT EXISTS video_bucket_index ON video(bucket_id, datetaken)");
-        }
-
-
-        // Gingerbread ended up going to version 100, but didn't yet have the "files"
-        // table, so we need to create that if we're at 100 or lower. This means
-        // we won't be able to upgrade pre-release Honeycomb.
-        if (fromVersion <= 100) {
-            // Remove various stages of work in progress for MTP support
-            db.execSQL("DROP TABLE IF EXISTS objects");
-            db.execSQL("DROP TABLE IF EXISTS files");
-            db.execSQL("DROP TRIGGER IF EXISTS images_objects_cleanup;");
-            db.execSQL("DROP TRIGGER IF EXISTS audio_objects_cleanup;");
-            db.execSQL("DROP TRIGGER IF EXISTS video_objects_cleanup;");
-            db.execSQL("DROP TRIGGER IF EXISTS playlists_objects_cleanup;");
-            db.execSQL("DROP TRIGGER IF EXISTS files_cleanup_images;");
-            db.execSQL("DROP TRIGGER IF EXISTS files_cleanup_audio;");
-            db.execSQL("DROP TRIGGER IF EXISTS files_cleanup_video;");
-            db.execSQL("DROP TRIGGER IF EXISTS files_cleanup_playlists;");
-            db.execSQL("DROP TRIGGER IF EXISTS media_cleanup;");
-
-            // Create a new table to manage all files in our storage.
-            // This contains a union of all the columns from the old
-            // images, audio_meta, videos and audio_playlist tables.
-            db.execSQL("CREATE TABLE files (" +
-                        "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
-                        "_data TEXT," +     // this can be null for playlists
-                        "_size INTEGER," +
-                        "format INTEGER," +
-                        "parent INTEGER," +
-                        "date_added INTEGER," +
-                        "date_modified INTEGER," +
-                        "mime_type TEXT," +
-                        "title TEXT," +
-                        "description TEXT," +
-                        "_display_name TEXT," +
-
-                        // for images
-                        "picasa_id TEXT," +
-                        "orientation INTEGER," +
-
-                        // for images and video
-                        "latitude DOUBLE," +
-                        "longitude DOUBLE," +
-                        "datetaken INTEGER," +
-                        "mini_thumb_magic INTEGER," +
-                        "bucket_id TEXT," +
-                        "bucket_display_name TEXT," +
-                        "isprivate INTEGER," +
-
-                        // for audio
-                        "title_key TEXT," +
-                        "artist_id INTEGER," +
-                        "album_id INTEGER," +
-                        "composer TEXT," +
-                        "track INTEGER," +
-                        "year INTEGER CHECK(year!=0)," +
-                        "is_ringtone INTEGER," +
-                        "is_music INTEGER," +
-                        "is_alarm INTEGER," +
-                        "is_notification INTEGER," +
-                        "is_podcast INTEGER," +
-                        "album_artist TEXT," +
-
-                        // for audio and video
-                        "duration INTEGER," +
-                        "bookmark INTEGER," +
-
-                        // for video
-                        "artist TEXT," +
-                        "album TEXT," +
-                        "resolution TEXT," +
-                        "tags TEXT," +
-                        "category TEXT," +
-                        "language TEXT," +
-                        "mini_thumb_data TEXT," +
-
-                        // for playlists
-                        "name TEXT," +
-
-                        // media_type is used by the views to emulate the old
-                        // images, audio_meta, videos and audio_playlist tables.
-                        "media_type INTEGER," +
-
-                        // Value of _id from the old media table.
-                        // Used only for updating other tables during database upgrade.
-                        "old_id INTEGER" +
-                       ");");
-
-            db.execSQL("CREATE INDEX path_index ON files(_data);");
-            db.execSQL("CREATE INDEX media_type_index ON files(media_type);");
-
-            // Copy all data from our obsolete tables to the new files table
-
-            // Copy audio records first, preserving the _id column.
-            // We do this to maintain compatibility for content Uris for ringtones.
-            // Unfortunately we cannot do this for images and videos as well.
-            // We choose to do this for the audio table because the fragility of Uris
-            // for ringtones are the most common problem we need to avoid.
-            db.execSQL("INSERT INTO files (_id," + AUDIO_COLUMNSv99 + ",old_id,media_type)" +
-                    " SELECT _id," + AUDIO_COLUMNSv99 + ",_id," + FileColumns.MEDIA_TYPE_AUDIO +
-                    " FROM audio_meta;");
-
-            db.execSQL("INSERT INTO files (" + IMAGE_COLUMNSv407 + ",old_id,media_type) SELECT "
-                    + IMAGE_COLUMNSv407 + ",_id," + FileColumns.MEDIA_TYPE_IMAGE + " FROM images;");
-            db.execSQL("INSERT INTO files (" + VIDEO_COLUMNSv407 + ",old_id,media_type) SELECT "
-                    + VIDEO_COLUMNSv407 + ",_id," + FileColumns.MEDIA_TYPE_VIDEO + " FROM video;");
-            if (!internal) {
-                db.execSQL("INSERT INTO files (" + PLAYLIST_COLUMNS + ",old_id,media_type) SELECT "
-                        + PLAYLIST_COLUMNS + ",_id," + FileColumns.MEDIA_TYPE_PLAYLIST
-                        + " FROM audio_playlists;");
-            }
-
-            // Delete the old tables
-            db.execSQL("DROP TABLE IF EXISTS images");
-            db.execSQL("DROP TABLE IF EXISTS audio_meta");
-            db.execSQL("DROP TABLE IF EXISTS video");
-            db.execSQL("DROP TABLE IF EXISTS audio_playlists");
-
-            // Create views to replace our old tables
-            db.execSQL("CREATE VIEW images AS SELECT _id," + IMAGE_COLUMNSv407 +
-                        " FROM files WHERE " + FileColumns.MEDIA_TYPE + "="
-                        + FileColumns.MEDIA_TYPE_IMAGE + ";");
-            db.execSQL("CREATE VIEW audio_meta AS SELECT _id," + AUDIO_COLUMNSv100 +
-                        " FROM files WHERE " + FileColumns.MEDIA_TYPE + "="
-                        + FileColumns.MEDIA_TYPE_AUDIO + ";");
-            db.execSQL("CREATE VIEW video AS SELECT _id," + VIDEO_COLUMNSv407 +
-                        " FROM files WHERE " + FileColumns.MEDIA_TYPE + "="
-                        + FileColumns.MEDIA_TYPE_VIDEO + ";");
-            if (!internal) {
-                db.execSQL("CREATE VIEW audio_playlists AS SELECT _id," + PLAYLIST_COLUMNS +
-                        " FROM files WHERE " + FileColumns.MEDIA_TYPE + "="
-                        + FileColumns.MEDIA_TYPE_PLAYLIST + ";");
-            }
-
-            // create temporary index to make the updates go faster
-            db.execSQL("CREATE INDEX tmp ON files(old_id);");
-
-            // update the image_id column in the thumbnails table.
-            db.execSQL("UPDATE thumbnails SET image_id = (SELECT _id FROM files "
-                        + "WHERE files.old_id = thumbnails.image_id AND files.media_type = "
-                        + FileColumns.MEDIA_TYPE_IMAGE + ");");
-
-            if (!internal) {
-                // update audio_id in the audio_genres_map table, and
-                // audio_playlists_map tables and playlist_id in the audio_playlists_map table
-                db.execSQL("UPDATE audio_genres_map SET audio_id = (SELECT _id FROM files "
-                        + "WHERE files.old_id = audio_genres_map.audio_id AND files.media_type = "
-                        + FileColumns.MEDIA_TYPE_AUDIO + ");");
-                db.execSQL("UPDATE audio_playlists_map SET audio_id = (SELECT _id FROM files "
-                        + "WHERE files.old_id = audio_playlists_map.audio_id "
-                        + "AND files.media_type = " + FileColumns.MEDIA_TYPE_AUDIO + ");");
-                db.execSQL("UPDATE audio_playlists_map SET playlist_id = (SELECT _id FROM files "
-                        + "WHERE files.old_id = audio_playlists_map.playlist_id "
-                        + "AND files.media_type = " + FileColumns.MEDIA_TYPE_PLAYLIST + ");");
-            }
-
-            // update video_id in the videothumbnails table.
-            db.execSQL("UPDATE videothumbnails SET video_id = (SELECT _id FROM files "
-                        + "WHERE files.old_id = videothumbnails.video_id AND files.media_type = "
-                        + FileColumns.MEDIA_TYPE_VIDEO + ");");
-
-            // we don't need this index anymore now
-            db.execSQL("DROP INDEX tmp;");
-
-            // update indices to work on the files table
-            db.execSQL("DROP INDEX IF EXISTS title_idx");
-            db.execSQL("DROP INDEX IF EXISTS album_id_idx");
-            db.execSQL("DROP INDEX IF EXISTS image_bucket_index");
-            db.execSQL("DROP INDEX IF EXISTS video_bucket_index");
-            db.execSQL("DROP INDEX IF EXISTS sort_index");
-            db.execSQL("DROP INDEX IF EXISTS titlekey_index");
-            db.execSQL("DROP INDEX IF EXISTS artist_id_idx");
-            db.execSQL("CREATE INDEX title_idx ON files(title);");
-            db.execSQL("CREATE INDEX album_id_idx ON files(album_id);");
-            db.execSQL("CREATE INDEX bucket_index ON files(bucket_id, datetaken);");
-            db.execSQL("CREATE INDEX sort_index ON files(datetaken ASC, _id ASC);");
-            db.execSQL("CREATE INDEX titlekey_index ON files(title_key);");
-            db.execSQL("CREATE INDEX artist_id_idx ON files(artist_id);");
-
-            // Recreate triggers for our obsolete tables on the new files table
-            db.execSQL("DROP TRIGGER IF EXISTS images_cleanup");
-            db.execSQL("DROP TRIGGER IF EXISTS audio_meta_cleanup");
-            db.execSQL("DROP TRIGGER IF EXISTS video_cleanup");
-            db.execSQL("DROP TRIGGER IF EXISTS audio_playlists_cleanup");
-            db.execSQL("DROP TRIGGER IF EXISTS audio_delete");
-
-            db.execSQL("CREATE TRIGGER IF NOT EXISTS images_cleanup DELETE ON files " +
-                    "WHEN old.media_type = " + FileColumns.MEDIA_TYPE_IMAGE + " " +
-                    "BEGIN " +
-                        "DELETE FROM thumbnails WHERE image_id = old._id;" +
-                        "SELECT _DELETE_FILE(old._data);" +
-                    "END");
-
-            db.execSQL("CREATE TRIGGER IF NOT EXISTS video_cleanup DELETE ON files " +
-                    "WHEN old.media_type = " + FileColumns.MEDIA_TYPE_VIDEO + " " +
-                    "BEGIN " +
-                        "SELECT _DELETE_FILE(old._data);" +
-                    "END");
-
-            if (!internal) {
-                db.execSQL("CREATE TRIGGER IF NOT EXISTS audio_meta_cleanup DELETE ON files " +
-                       "WHEN old.media_type = " + FileColumns.MEDIA_TYPE_AUDIO + " " +
-                       "BEGIN " +
-                           "DELETE FROM audio_genres_map WHERE audio_id = old._id;" +
-                           "DELETE FROM audio_playlists_map WHERE audio_id = old._id;" +
-                       "END");
-
-                db.execSQL("CREATE TRIGGER IF NOT EXISTS audio_playlists_cleanup DELETE ON files " +
-                       "WHEN old.media_type = " + FileColumns.MEDIA_TYPE_PLAYLIST + " " +
-                       "BEGIN " +
-                           "DELETE FROM audio_playlists_map WHERE playlist_id = old._id;" +
-                           "SELECT _DELETE_FILE(old._data);" +
-                       "END");
-
-                db.execSQL("CREATE TRIGGER IF NOT EXISTS audio_delete INSTEAD OF DELETE ON audio " +
-                        "BEGIN " +
-                            "DELETE from files where _id=old._id;" +
-                            "DELETE from audio_playlists_map where audio_id=old._id;" +
-                            "DELETE from audio_genres_map where audio_id=old._id;" +
-                        "END");
-            }
-        }
-
-        if (fromVersion < 301) {
-            db.execSQL("DROP INDEX IF EXISTS bucket_index");
-            db.execSQL("CREATE INDEX bucket_index on files(bucket_id, media_type, datetaken, _id)");
-            db.execSQL("CREATE INDEX bucket_name on files(bucket_id, media_type, bucket_display_name)");
-        }
-
-        if (fromVersion < 302) {
-            db.execSQL("CREATE INDEX parent_index ON files(parent);");
-            db.execSQL("CREATE INDEX format_index ON files(format);");
-        }
-
-        if (fromVersion < 303) {
-            // the album disambiguator hash changed, so rescan songs and force
-            // albums to be updated. Artists are unaffected.
-            db.execSQL("DELETE from albums");
-            db.execSQL("UPDATE files SET date_modified=0 WHERE " + FileColumns.MEDIA_TYPE + "="
-                    + FileColumns.MEDIA_TYPE_AUDIO + ";");
-        }
-
-        if (fromVersion < 304 && !internal) {
-            // notifies host when files are deleted
-            db.execSQL("CREATE TRIGGER IF NOT EXISTS files_cleanup DELETE ON files " +
-                    "BEGIN " +
-                        "SELECT _OBJECT_REMOVED(old._id);" +
-                    "END");
-
-        }
-
-        if (fromVersion < 305 && internal) {
-            // version 304 erroneously added this trigger to the internal database
-            db.execSQL("DROP TRIGGER IF EXISTS files_cleanup");
-        }
-
-        if (fromVersion < 306 && !internal) {
-            // The genre list was expanded and genre string parsing was tweaked, so
-            // rebuild the genre list
-            db.execSQL("UPDATE files SET date_modified=0 WHERE " + FileColumns.MEDIA_TYPE + "="
-                    + FileColumns.MEDIA_TYPE_AUDIO + ";");
-            db.execSQL("DELETE FROM audio_genres_map");
-            db.execSQL("DELETE FROM audio_genres");
-        }
-
-        if (fromVersion < 307 && !internal) {
-            // Force rescan of image entries to update DATE_TAKEN by either GPSTimeStamp or
-            // EXIF local time.
-            db.execSQL("UPDATE files SET date_modified=0 WHERE " + FileColumns.MEDIA_TYPE + "="
-                    + FileColumns.MEDIA_TYPE_IMAGE + ";");
-        }
-
-        // Honeycomb went up to version 307, ICS started at 401
-
-        // Database version 401 did not add storage_id to the internal database.
-        // We need it there too, so add it in version 402
-        if (fromVersion < 401 || (fromVersion == 401 && internal)) {
-            // Add column for MTP storage ID
-            db.execSQL("ALTER TABLE files ADD COLUMN storage_id INTEGER;");
-            // Anything in the database before this upgrade step will be in the primary storage
-            db.execSQL("UPDATE files SET storage_id=" + StorageVolume.STORAGE_ID_PRIMARY + ";");
-        }
-
-        if (fromVersion < 403 && !internal) {
-            db.execSQL("CREATE VIEW audio_genres_map_noid AS " +
-                    "SELECT audio_id,genre_id from audio_genres_map;");
-        }
-
-        if (fromVersion < 404) {
-            // There was a bug that could cause distinct same-named albums to be
-            // combined again. Delete albums and force a rescan.
-            db.execSQL("DELETE from albums");
-            db.execSQL("UPDATE files SET date_modified=0 WHERE " + FileColumns.MEDIA_TYPE + "="
-                    + FileColumns.MEDIA_TYPE_AUDIO + ";");
-        }
-
-        if (fromVersion < 405) {
-            // Add is_drm column.
-            db.execSQL("ALTER TABLE files ADD COLUMN is_drm INTEGER;");
-
-            db.execSQL("DROP VIEW IF EXISTS audio_meta");
-            db.execSQL("CREATE VIEW audio_meta AS SELECT _id," + AUDIO_COLUMNSv405 +
-                        " FROM files WHERE " + FileColumns.MEDIA_TYPE + "="
-                        + FileColumns.MEDIA_TYPE_AUDIO + ";");
-
-            recreateAudioView(db);
-        }
-
-        if (fromVersion < 407) {
-            // Rescan files in the media database because a new column has been added
-            // in table files in version 405 and to recover from problems populating
-            // the genre tables
-            db.execSQL("UPDATE files SET date_modified=0;");
-        }
-
-        if (fromVersion < 408) {
-            // Add the width/height columns for images and video
-            db.execSQL("ALTER TABLE files ADD COLUMN width INTEGER;");
-            db.execSQL("ALTER TABLE files ADD COLUMN height INTEGER;");
-
-            // Rescan files to fill the columns
-            db.execSQL("UPDATE files SET date_modified=0;");
-
-            // Update images and video views to contain the width/height columns
-            db.execSQL("DROP VIEW IF EXISTS images");
-            db.execSQL("DROP VIEW IF EXISTS video");
-            db.execSQL("CREATE VIEW images AS SELECT _id," + IMAGE_COLUMNS +
-                        " FROM files WHERE " + FileColumns.MEDIA_TYPE + "="
-                        + FileColumns.MEDIA_TYPE_IMAGE + ";");
-            db.execSQL("CREATE VIEW video AS SELECT _id," + VIDEO_COLUMNS +
-                        " FROM files WHERE " + FileColumns.MEDIA_TYPE + "="
-                        + FileColumns.MEDIA_TYPE_VIDEO + ";");
-        }
-
-        if (fromVersion < 409 && !internal) {
-            // A bug that prevented numeric genres from being parsed was fixed, so
-            // rebuild the genre list
-            db.execSQL("UPDATE files SET date_modified=0 WHERE " + FileColumns.MEDIA_TYPE + "="
-                    + FileColumns.MEDIA_TYPE_AUDIO + ";");
-            db.execSQL("DELETE FROM audio_genres_map");
-            db.execSQL("DELETE FROM audio_genres");
-        }
-
-        // ICS went out with database version 409, JB started at 500
-
-        if (fromVersion < 500) {
-            // we're now deleting the file in mediaprovider code, rather than via a trigger
-            db.execSQL("DROP TRIGGER IF EXISTS videothumbnails_cleanup;");
-        }
-        if (fromVersion < 501) {
-            // we're now deleting the file in mediaprovider code, rather than via a trigger
-            // the images_cleanup trigger would delete the image file and the entry
-            // in the thumbnail table, which in turn would trigger thumbnails_cleanup
-            // to delete the thumbnail image
-            db.execSQL("DROP TRIGGER IF EXISTS images_cleanup;");
-            db.execSQL("DROP TRIGGER IF EXISTS thumbnails_cleanup;");
-        }
-        if (fromVersion < 502) {
-            // we're now deleting the file in mediaprovider code, rather than via a trigger
-            db.execSQL("DROP TRIGGER IF EXISTS video_cleanup;");
-        }
-        if (fromVersion < 503) {
-            // genre and playlist cleanup now done in mediaprovider code, instead of in a trigger
-            db.execSQL("DROP TRIGGER IF EXISTS audio_delete");
-            db.execSQL("DROP TRIGGER IF EXISTS audio_meta_cleanup");
-        }
-        if (fromVersion < 504) {
-            // add an index to help with case-insensitive matching of paths
-            db.execSQL(
-                    "CREATE INDEX IF NOT EXISTS path_index_lower ON files(_data COLLATE NOCASE);");
-        }
-        if (fromVersion < 505) {
-            // Starting with schema 505 we fill in the width/height/resolution columns for videos,
-            // so force a rescan of videos to fill in the blanks
-            db.execSQL("UPDATE files SET date_modified=0 WHERE " + FileColumns.MEDIA_TYPE + "="
-                    + FileColumns.MEDIA_TYPE_VIDEO + ";");
-        }
-        if (fromVersion < 506) {
-            // sd card storage got moved to /storage/sdcard0
-            // first delete everything that already got scanned in /storage before this
-            // update step was added
-            db.execSQL("DROP TRIGGER IF EXISTS files_cleanup");
-            db.execSQL("DELETE FROM files WHERE _data LIKE '/storage/%';");
-            db.execSQL("DELETE FROM album_art WHERE _data LIKE '/storage/%';");
-            db.execSQL("DELETE FROM thumbnails WHERE _data LIKE '/storage/%';");
-            db.execSQL("DELETE FROM videothumbnails WHERE _data LIKE '/storage/%';");
-            // then rename everything from /mnt/sdcard/ to /storage/sdcard0,
-            // and from /mnt/external1 to /storage/sdcard1
-            db.execSQL("UPDATE files SET " +
-                "_data='/storage/sdcard0'||SUBSTR(_data,12) WHERE _data LIKE '/mnt/sdcard/%';");
-            db.execSQL("UPDATE files SET " +
-                "_data='/storage/sdcard1'||SUBSTR(_data,15) WHERE _data LIKE '/mnt/external1/%';");
-            db.execSQL("UPDATE album_art SET " +
-                "_data='/storage/sdcard0'||SUBSTR(_data,12) WHERE _data LIKE '/mnt/sdcard/%';");
-            db.execSQL("UPDATE album_art SET " +
-                "_data='/storage/sdcard1'||SUBSTR(_data,15) WHERE _data LIKE '/mnt/external1/%';");
-            db.execSQL("UPDATE thumbnails SET " +
-                "_data='/storage/sdcard0'||SUBSTR(_data,12) WHERE _data LIKE '/mnt/sdcard/%';");
-            db.execSQL("UPDATE thumbnails SET " +
-                "_data='/storage/sdcard1'||SUBSTR(_data,15) WHERE _data LIKE '/mnt/external1/%';");
-            db.execSQL("UPDATE videothumbnails SET " +
-                "_data='/storage/sdcard0'||SUBSTR(_data,12) WHERE _data LIKE '/mnt/sdcard/%';");
-            db.execSQL("UPDATE videothumbnails SET " +
-                "_data='/storage/sdcard1'||SUBSTR(_data,15) WHERE _data LIKE '/mnt/external1/%';");
-
-            if (!internal) {
-                db.execSQL("CREATE TRIGGER IF NOT EXISTS files_cleanup DELETE ON files " +
-                    "BEGIN " +
-                        "SELECT _OBJECT_REMOVED(old._id);" +
-                    "END");
-            }
-        }
-        if (fromVersion < 507) {
-            // we update _data in version 506, we need to update the bucket_id as well
-            updateBucketNames(db);
-        }
-        if (fromVersion < 508 && !internal) {
-            // ensure we don't get duplicate entries in the genre map
-            db.execSQL("CREATE TABLE IF NOT EXISTS audio_genres_map_tmp (" +
-                    "_id INTEGER PRIMARY KEY," +
-                    "audio_id INTEGER NOT NULL," +
-                    "genre_id INTEGER NOT NULL," +
-                    "UNIQUE (audio_id,genre_id) ON CONFLICT IGNORE" +
-                    ");");
-            db.execSQL("INSERT INTO audio_genres_map_tmp (audio_id,genre_id)" +
-                    " SELECT DISTINCT audio_id,genre_id FROM audio_genres_map;");
-            db.execSQL("DROP TABLE audio_genres_map;");
-            db.execSQL("ALTER TABLE audio_genres_map_tmp RENAME TO audio_genres_map;");
-        }
-
-        if (fromVersion < 509) {
-            db.execSQL("CREATE TABLE IF NOT EXISTS log (time DATETIME PRIMARY KEY, message TEXT);");
-        }
-
-        // Emulated external storage moved to user-specific paths
-        if (fromVersion < 510 && Environment.isExternalStorageEmulated()) {
-            // File.fixSlashes() removes any trailing slashes
-            final String externalStorage = Environment.getExternalStorageDirectory().toString();
-            Log.d(TAG, "Adjusting external storage paths to: " + externalStorage);
-
-            final String[] tables = {
-                    TABLE_FILES, TABLE_ALBUM_ART, TABLE_THUMBNAILS, TABLE_VIDEO_THUMBNAILS };
-            for (String table : tables) {
-                db.execSQL("UPDATE " + table + " SET " + "_data='" + externalStorage
-                        + "'||SUBSTR(_data,17) WHERE _data LIKE '/storage/sdcard0/%';");
-            }
-        }
-        if (fromVersion < 511) {
-            // we update _data in version 510, we need to update the bucket_id as well
-            updateBucketNames(db);
-        }
-
-        // JB 4.2 went out with database version 511, starting next release with 600
-
-        if (fromVersion < 600) {
-            // modify _data column to be unique and collate nocase. Because this drops the original
-            // table and replaces it with a new one by the same name, we need to also recreate all
-            // indices and triggers that refer to the files table.
-            // Views don't need to be recreated.
-
-            db.execSQL("CREATE TABLE files2 (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
-                    "_data TEXT UNIQUE" +
-                    // the internal filesystem is case-sensitive
-                    (internal ? "," : " COLLATE NOCASE,") +
-                    "_size INTEGER,format INTEGER,parent INTEGER,date_added INTEGER," +
-                    "date_modified INTEGER,mime_type TEXT,title TEXT,description TEXT," +
-                    "_display_name TEXT,picasa_id TEXT,orientation INTEGER,latitude DOUBLE," +
-                    "longitude DOUBLE,datetaken INTEGER,mini_thumb_magic INTEGER,bucket_id TEXT," +
-                    "bucket_display_name TEXT,isprivate INTEGER,title_key TEXT,artist_id INTEGER," +
-                    "album_id INTEGER,composer TEXT,track INTEGER,year INTEGER CHECK(year!=0)," +
-                    "is_ringtone INTEGER,is_music INTEGER,is_alarm INTEGER," +
-                    "is_notification INTEGER,is_podcast INTEGER,album_artist TEXT," +
-                    "duration INTEGER,bookmark INTEGER,artist TEXT,album TEXT,resolution TEXT," +
-                    "tags TEXT,category TEXT,language TEXT,mini_thumb_data TEXT,name TEXT," +
-                    "media_type INTEGER,old_id INTEGER,storage_id INTEGER,is_drm INTEGER," +
-                    "width INTEGER, height INTEGER);");
-
-            // copy data from old table, squashing entries with duplicate _data
-            db.execSQL("INSERT OR REPLACE INTO files2 SELECT * FROM files;");
-            db.execSQL("DROP TABLE files;");
-            db.execSQL("ALTER TABLE files2 RENAME TO files;");
-
-            // recreate indices and triggers
-            db.execSQL("CREATE INDEX album_id_idx ON files(album_id);");
-            db.execSQL("CREATE INDEX artist_id_idx ON files(artist_id);");
-            db.execSQL("CREATE INDEX bucket_index on files(bucket_id,media_type," +
-                    "datetaken, _id);");
-            db.execSQL("CREATE INDEX bucket_name on files(bucket_id,media_type," +
-                    "bucket_display_name);");
-            db.execSQL("CREATE INDEX format_index ON files(format);");
-            db.execSQL("CREATE INDEX media_type_index ON files(media_type);");
-            db.execSQL("CREATE INDEX parent_index ON files(parent);");
-            db.execSQL("CREATE INDEX path_index ON files(_data);");
-            db.execSQL("CREATE INDEX sort_index ON files(datetaken ASC, _id ASC);");
-            db.execSQL("CREATE INDEX title_idx ON files(title);");
-            db.execSQL("CREATE INDEX titlekey_index ON files(title_key);");
-            if (!internal) {
-                db.execSQL("CREATE TRIGGER audio_playlists_cleanup DELETE ON files" +
-                        " WHEN old.media_type=4" +
-                        " BEGIN DELETE FROM audio_playlists_map WHERE playlist_id = old._id;" +
-                        "SELECT _DELETE_FILE(old._data);END;");
-                db.execSQL("CREATE TRIGGER files_cleanup DELETE ON files" +
-                        " BEGIN SELECT _OBJECT_REMOVED(old._id);END;");
-            }
-        }
-
-        if (fromVersion < 601) {
-            // remove primary key constraint because column time is not necessarily unique
-            db.execSQL("CREATE TABLE IF NOT EXISTS log_tmp (time DATETIME, message TEXT);");
-            db.execSQL("DELETE FROM log_tmp;");
-            db.execSQL("INSERT INTO log_tmp SELECT time, message FROM log order by rowid;");
-            db.execSQL("DROP TABLE log;");
-            db.execSQL("ALTER TABLE log_tmp RENAME TO log;");
-        }
-
         if (fromVersion < 700) {
-            // fix datetaken fields that were added with an incorrect timestamp
-            // datetaken needs to be in milliseconds, so should generally be a few orders of
-            // magnitude larger than date_modified. If it's within the same order of magnitude, it
-            // is probably wrong.
-            // (this could do the wrong thing if your picture was actually taken before ~3/21/1970)
-            db.execSQL("UPDATE files set datetaken=date_modified*1000"
-                    + " WHERE date_modified IS NOT NULL"
-                    + " AND datetaken IS NOT NULL"
-                    + " AND datetaken<date_modified*5;");
-        }
-
-       if (fromVersion < 800) {
-            // Delete albums and artists, then clear the modification time on songs, which
-            // will cause the media scanner to rescan everything, rebuilding the artist and
-            // album tables along the way, while preserving playlists.
-            // We need this rescan because ICU also changed, and now generates different
-            // collation keys
-            db.execSQL("DELETE from albums");
-            db.execSQL("DELETE from artists");
-            db.execSQL("UPDATE files SET date_modified=0;");
+            // Anything older than KK is recreated from scratch
+            createLatestSchema(db, internal);
+        } else if (fromVersion < 800) {
+            updateFromKKSchema(db, internal, fromVersion);
         }
 
         sanityCheck(db, fromVersion);
@@ -1957,88 +1000,6 @@
         }
     }
 
-    private static void recreateAudioView(SQLiteDatabase db) {
-        // Provides a unified audio/artist/album info view.
-        db.execSQL("DROP VIEW IF EXISTS audio");
-        db.execSQL("CREATE VIEW IF NOT EXISTS audio as SELECT * FROM audio_meta " +
-                    "LEFT OUTER JOIN artists ON audio_meta.artist_id=artists.artist_id " +
-                    "LEFT OUTER JOIN albums ON audio_meta.album_id=albums.album_id;");
-    }
-
-    /**
-     * Update the bucket_id and bucket_display_name columns for images and videos
-     * @param db
-     * @param tableName
-     */
-    private static void updateBucketNames(SQLiteDatabase db) {
-        // Rebuild the bucket_display_name column using the natural case rather than lower case.
-        db.beginTransaction();
-        try {
-            String[] columns = {BaseColumns._ID, MediaColumns.DATA};
-            // update only images and videos
-            Cursor cursor = db.query("files", columns, "media_type=1 OR media_type=3",
-                    null, null, null, null);
-            try {
-                final int idColumnIndex = cursor.getColumnIndex(BaseColumns._ID);
-                final int dataColumnIndex = cursor.getColumnIndex(MediaColumns.DATA);
-                String [] rowId = new String[1];
-                ContentValues values = new ContentValues();
-                while (cursor.moveToNext()) {
-                    String data = cursor.getString(dataColumnIndex);
-                    rowId[0] = cursor.getString(idColumnIndex);
-                    if (data != null) {
-                        values.clear();
-                        computeBucketValues(data, values);
-                        db.update("files", values, "_id=?", rowId);
-                    } else {
-                        Log.w(TAG, "null data at id " + rowId);
-                    }
-                }
-            } finally {
-                IoUtils.closeQuietly(cursor);
-            }
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-    }
-
-    /**
-     * Iterate through the rows of a table in a database, ensuring that the
-     * display name column has a value.
-     * @param db
-     * @param tableName
-     */
-    private static void updateDisplayName(SQLiteDatabase db, String tableName) {
-        // Fill in default values for null displayName values
-        db.beginTransaction();
-        try {
-            String[] columns = {BaseColumns._ID, MediaColumns.DATA, MediaColumns.DISPLAY_NAME};
-            Cursor cursor = db.query(tableName, columns, null, null, null, null, null);
-            try {
-                final int idColumnIndex = cursor.getColumnIndex(BaseColumns._ID);
-                final int dataColumnIndex = cursor.getColumnIndex(MediaColumns.DATA);
-                final int displayNameIndex = cursor.getColumnIndex(MediaColumns.DISPLAY_NAME);
-                ContentValues values = new ContentValues();
-                while (cursor.moveToNext()) {
-                    String displayName = cursor.getString(displayNameIndex);
-                    if (displayName == null) {
-                        String data = cursor.getString(dataColumnIndex);
-                        values.clear();
-                        computeDisplayName(data, values);
-                        int rowId = cursor.getInt(idColumnIndex);
-                        db.update(tableName, values, "_id=" + rowId, null);
-                    }
-                }
-            } finally {
-                IoUtils.closeQuietly(cursor);
-            }
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-    }
-
     /**
      * @param data The input path
      * @param values the content values, where the bucked id name and bucket display name are updated.
@@ -2892,21 +1853,24 @@
             return setObjectReferences(helper, db, handle, values);
         }
 
-
-        db.beginTransaction();
         ArrayList<Long> notifyRowIds = new ArrayList<Long>();
         int numInserted = 0;
-        try {
-            int len = values.length;
-            for (int i = 0; i < len; i++) {
-                if (values[i] != null) {
-                    insertInternal(uri, match, values[i], notifyRowIds);
+        // insert may need to call getParent(), which in turn may need to update the database,
+        // so synchronize on mDirectoryCache to avoid deadlocks
+        synchronized (mDirectoryCache) {
+            db.beginTransaction();
+            try {
+                int len = values.length;
+                for (int i = 0; i < len; i++) {
+                    if (values[i] != null) {
+                        insertInternal(uri, match, values[i], notifyRowIds);
+                    }
                 }
+                numInserted = len;
+                db.setTransactionSuccessful();
+            } finally {
+                db.endTransaction();
             }
-            numInserted = len;
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
         }
 
         // Notify MTP (outside of successful transaction)
@@ -3688,6 +2652,14 @@
                 }
                 break;
 
+            case FILES_DIRECTORY:
+                rowId = insertDirectory(helper, helper.getWritableDatabase(),
+                        initialValues.getAsString(FileColumns.DATA));
+                if (rowId > 0) {
+                    newUri = Files.getContentUri(volumeName, rowId);
+                }
+                break;
+
             default:
                 throw new UnsupportedOperationException("Invalid URI " + uri);
         }
@@ -3877,33 +2849,42 @@
     public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
                 throws OperationApplicationException {
 
-        // The operations array provides no overall information about the URI(s) being operated
-        // on, so begin a transaction for ALL of the databases.
-        DatabaseHelper ihelper = getDatabaseForUri(MediaStore.Audio.Media.INTERNAL_CONTENT_URI);
-        DatabaseHelper ehelper = getDatabaseForUri(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
-        SQLiteDatabase idb = ihelper.getWritableDatabase();
-        idb.beginTransaction();
-        SQLiteDatabase edb = null;
-        if (ehelper != null) {
-            edb = ehelper.getWritableDatabase();
-            edb.beginTransaction();
-        }
-        try {
-            ContentProviderResult[] result = super.applyBatch(operations);
-            idb.setTransactionSuccessful();
-            if (edb != null) {
-                edb.setTransactionSuccessful();
-            }
-            // Rather than sending targeted change notifications for every Uri
-            // affected by the batch operation, just invalidate the entire internal
-            // and external name space.
-            ContentResolver res = getContext().getContentResolver();
-            res.notifyChange(Uri.parse("content://media/"), null);
-            return result;
-        } finally {
-            idb.endTransaction();
-            if (edb != null) {
-                edb.endTransaction();
+        // batched operations are likely to need to call getParent(), which in turn may need to
+        // update the database, so synchronize on mDirectoryCache to avoid deadlocks
+        synchronized (mDirectoryCache) {
+            // The operations array provides no overall information about the URI(s) being operated
+            // on, so begin a transaction for ALL of the databases.
+            DatabaseHelper ihelper = getDatabaseForUri(MediaStore.Audio.Media.INTERNAL_CONTENT_URI);
+            DatabaseHelper ehelper = getDatabaseForUri(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
+            SQLiteDatabase idb = ihelper.getWritableDatabase();
+            idb.beginTransaction();
+            SQLiteDatabase edb = null;
+            try {
+                if (ehelper != null) {
+                    edb = ehelper.getWritableDatabase();
+                }
+                if (edb != null) {
+                    edb.beginTransaction();
+                }
+                ContentProviderResult[] result = super.applyBatch(operations);
+                idb.setTransactionSuccessful();
+                if (edb != null) {
+                    edb.setTransactionSuccessful();
+                }
+                // Rather than sending targeted change notifications for every Uri
+                // affected by the batch operation, just invalidate the entire internal
+                // and external name space.
+                ContentResolver res = getContext().getContentResolver();
+                res.notifyChange(Uri.parse("content://media/"), null);
+                return result;
+            } finally {
+                try {
+                    idb.endTransaction();
+                } finally {
+                    if (edb != null) {
+                        edb.endTransaction();
+                    }
+                }
             }
         }
     }
@@ -4091,6 +3072,7 @@
             case MTP_OBJECTS_ID:
                 where = "_id=" + uri.getPathSegments().get(2);
             case FILES:
+            case FILES_DIRECTORY:
             case MTP_OBJECTS:
                 out.table = "files";
                 break;
@@ -4354,10 +3336,10 @@
         synchronized (sGetTableAndWhereParam) {
             getTableAndWhere(uri, match, userWhere, sGetTableAndWhereParam);
 
-            // special case renaming directories via MTP.
+            // special case renaming directories via MTP and ESP.
             // in this case we must update all paths in the database with
             // the directory name as a prefix
-            if ((match == MTP_OBJECTS || match == MTP_OBJECTS_ID)
+            if ((match == MTP_OBJECTS || match == MTP_OBJECTS_ID || match == FILES_DIRECTORY)
                     && initialValues != null && initialValues.size() == 1) {
                 String oldPath = null;
                 String newPath = initialValues.getAsString(MediaStore.MediaColumns.DATA);
@@ -4875,10 +3857,34 @@
             // don't write to non-cache, non-sdcard files.
             throw new FileNotFoundException("Can't access " + file);
         } else {
+            boolean hasWriteMediaStorage = c.checkCallingOrSelfPermission(WRITE_MEDIA_STORAGE)
+                    == PackageManager.PERMISSION_GRANTED;
+            boolean hasInteractAcrossUsers = c.checkCallingOrSelfPermission(INTERACT_ACROSS_USERS)
+                    == PackageManager.PERMISSION_GRANTED;
+            if (!hasWriteMediaStorage && !hasInteractAcrossUsers && isOtherUserExternalDir(path)) {
+                throw new FileNotFoundException("Can't access across users " + file);
+            }
             checkWorldReadAccess(path);
         }
     }
 
+    private boolean isOtherUserExternalDir(String path) {
+        List<VolumeInfo> volumes = mStorageManager.getVolumes();
+        for (VolumeInfo volume : volumes) {
+            if (FileUtils.contains(volume.path, path)) {
+                // If any of mExternalStoragePaths belongs to this volume and doesn't include
+                // the path, then we consider the path to be from another user
+                for (String externalStoragePath : mExternalStoragePaths) {
+                    if (FileUtils.contains(volume.path, externalStoragePath)
+                            && !FileUtils.contains(externalStoragePath, path)) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
     private boolean isSecondaryExternalPath(String path) {
         for (int i = 1; i < mExternalStoragePaths.length; i++) {
             if (path.startsWith(mExternalStoragePaths[i])) {
@@ -5748,6 +4754,9 @@
     // when MTP is connected and disconnected
     private static final int MTP_CONNECTED = 705;
 
+    // Used only to invoke special logic for directories
+    private static final int FILES_DIRECTORY = 706;
+
     private static final UriMatcher URI_MATCHER =
             new UriMatcher(UriMatcher.NO_MATCH);
 
@@ -5828,6 +4837,9 @@
         URI_MATCHER.addURI("media", "*/object/#", MTP_OBJECTS_ID);
         URI_MATCHER.addURI("media", "*/object/#/references", MTP_OBJECT_REFERENCES);
 
+        // Used only to trigger special logic for directories
+        URI_MATCHER.addURI("media", "*/dir", FILES_DIRECTORY);
+
         /**
          * @deprecated use the 'basic' or 'fancy' search Uris instead
          */
diff --git a/src/com/android/providers/media/MediaUpgradeReceiver.java b/src/com/android/providers/media/MediaUpgradeReceiver.java
index 58a6ab8..c3a22d2 100644
--- a/src/com/android/providers/media/MediaUpgradeReceiver.java
+++ b/src/com/android/providers/media/MediaUpgradeReceiver.java
@@ -18,7 +18,6 @@
 
 import java.io.File;
 
-import android.app.ActivityManagerNative;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
diff --git a/src/com/android/providers/media/MtpReceiver.java b/src/com/android/providers/media/MtpReceiver.java
index 00f460c..0895c5e 100644
--- a/src/com/android/providers/media/MtpReceiver.java
+++ b/src/com/android/providers/media/MtpReceiver.java
@@ -56,7 +56,7 @@
         boolean configChanged = extras.getBoolean(UsbManager.USB_CONFIG_CHANGED);
         boolean isCurrentUser = UserHandle.myUserId() == ActivityManager.getCurrentUser();
 
-        if (configChanged && (mtpEnabled || ptpEnabled)) {
+        if ((configChanged || (connected && !configured)) && (mtpEnabled || ptpEnabled)) {
             if (!isCurrentUser)
                 return;
             MtpServer.configure(ptpEnabled);
diff --git a/src/com/android/providers/media/MtpService.java b/src/com/android/providers/media/MtpService.java
index b178c6f..b9ea3ed 100644
--- a/src/com/android/providers/media/MtpService.java
+++ b/src/com/android/providers/media/MtpService.java
@@ -16,6 +16,7 @@
 
 package com.android.providers.media;
 
+import android.annotation.NonNull;
 import android.app.ActivityManager;
 import android.app.Service;
 import android.content.Intent;
@@ -32,6 +33,9 @@
 import android.os.storage.StorageVolume;
 import android.util.Log;
 
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.util.Preconditions;
+
 import java.io.File;
 import java.util.HashMap;
 
@@ -66,7 +70,7 @@
     private final StorageEventListener mStorageEventListener = new StorageEventListener() {
         @Override
         public void onStorageStateChanged(String path, String oldState, String newState) {
-            synchronized (mBinder) {
+            synchronized (MtpService.this) {
                 Log.d(TAG, "onStorageStateChanged " + path + " " + oldState + " -> " + newState);
                 if (Environment.MEDIA_MOUNTED.equals(newState)) {
                     volumeMountedLocked(path);
@@ -80,21 +84,38 @@
         }
     };
 
-    private MtpDatabase mDatabase;
-    private MtpServer mServer;
+    /**
+     * Static state of MtpServer. MtpServer opens FD for MTP driver internally and we cannot open
+     * multiple MtpServer at the same time. The static field used to handle the case where MtpServer
+     * lives beyond the lifetime of MtpService.
+     *
+     * Lock MtpService.this before locking MtpService.class if needed. Otherwise it goes to
+     * deadlock.
+     */
+    @GuardedBy("MtpService.class")
+    private static ServerHolder sServerHolder;
+
     private StorageManager mStorageManager;
+
     /** Flag indicating if MTP is disabled due to keyguard */
+    @GuardedBy("this")
     private boolean mMtpDisabled;
+    @GuardedBy("this")
     private boolean mUnlocked;
+    @GuardedBy("this")
     private boolean mPtpMode;
+
+    @GuardedBy("this")
     private final HashMap<String, StorageVolume> mVolumeMap = new HashMap<String, StorageVolume>();
+    @GuardedBy("this")
     private final HashMap<String, MtpStorage> mStorageMap = new HashMap<String, MtpStorage>();
+    @GuardedBy("this")
     private StorageVolume[] mVolumes;
 
     @Override
     public void onCreate() {
         mStorageManager = StorageManager.from(this);
-        synchronized (mBinder) {
+        synchronized (this) {
             updateDisabledStateLocked();
             mStorageManager.registerListener(mStorageEventListener);
             StorageVolume[] volumes = mStorageManager.getVolumeList();
@@ -111,9 +132,9 @@
 
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
-        mUnlocked = intent.getBooleanExtra(UsbManager.USB_DATA_UNLOCKED, false);
-        if (LOGD) { Log.d(TAG, "onStartCommand intent=" + intent + " mUnlocked=" + mUnlocked); }
-        synchronized (mBinder) {
+        synchronized (this) {
+            mUnlocked = intent.getBooleanExtra(UsbManager.USB_DATA_UNLOCKED, false);
+            if (LOGD) { Log.d(TAG, "onStartCommand intent=" + intent + " mUnlocked=" + mUnlocked); }
             updateDisabledStateLocked();
             mPtpMode = (intent == null ? false
                     : intent.getBooleanExtra(UsbManager.USB_FUNCTION_PTP, false));
@@ -130,9 +151,6 @@
                 }
             }
             final StorageVolume primary = StorageManager.getPrimaryVolume(mVolumes);
-            if (mDatabase != null) {
-                mDatabase.setServer(null);
-            }
             manageServiceLocked(primary, subdirs);
         }
 
@@ -153,59 +171,71 @@
      */
     private void manageServiceLocked(StorageVolume primary, String[] subdirs) {
         final boolean isCurrentUser = UserHandle.myUserId() == ActivityManager.getCurrentUser();
-        if (mServer == null && isCurrentUser) {
+
+        synchronized (MtpService.class) {
+            if (sServerHolder != null) {
+                if (LOGD) {
+                    Log.d(TAG, "Cannot launch second MTP server.");
+                }
+                // Previously executed MtpServer is still running. It will be terminated
+                // because MTP device FD will become invalid soon. Also MtpService will get new
+                // intent after that when UsbDeviceManager configures USB with new state.
+                return;
+            }
+            if (!isCurrentUser) {
+                return;
+            }
+
             Log.d(TAG, "starting MTP server in " + (mPtpMode ? "PTP mode" : "MTP mode"));
-            mDatabase = new MtpDatabase(this, MediaProvider.EXTERNAL_VOLUME,
+            final MtpDatabase database = new MtpDatabase(this, MediaProvider.EXTERNAL_VOLUME,
                     primary.getPath(), subdirs);
             String deviceSerialNumber = Build.SERIAL;
             if (Build.UNKNOWN.equals(deviceSerialNumber)) {
                 deviceSerialNumber = "????????";
             }
-            mServer =
+            final MtpServer server =
                     new MtpServer(
-                            mDatabase,
+                            database,
                             mPtpMode,
+                            new OnServerTerminated(),
                             Build.MANUFACTURER, // MTP DeviceInfo: Manufacturer
                             Build.MODEL,        // MTP DeviceInfo: Model
                             "1.0",              // MTP DeviceInfo: Device Version
                             deviceSerialNumber  // MTP DeviceInfo: Serial Number
                             );
-            mDatabase.setServer(mServer);
+            database.setServer(server);
+            sServerHolder = new ServerHolder(server, database);
+
+            // Need to run addStorageDevicesLocked after sServerHolder is set since it accesses
+            // sServerHolder.
             if (!mMtpDisabled) {
                 addStorageDevicesLocked();
             }
-            mServer.start();
-        } else if (mServer != null && !isCurrentUser) {
-            Log.d(TAG, "no longer current user; shutting down MTP server");
-            // Internally, kernel will close our FD, and server thread will
-            // handle cleanup.
-            mServer = null;
-            mDatabase.setServer(null);
+            server.start();
         }
     }
 
     @Override
     public void onDestroy() {
         mStorageManager.unregisterListener(mStorageEventListener);
-        if (mDatabase != null) {
-            mDatabase.setServer(null);
-        }
     }
 
     private final IMtpService.Stub mBinder =
             new IMtpService.Stub() {
+        @Override
         public void sendObjectAdded(int objectHandle) {
-            synchronized (mBinder) {
-                if (mServer != null) {
-                    mServer.sendObjectAdded(objectHandle);
+            synchronized (MtpService.class) {
+                if (sServerHolder != null) {
+                    sServerHolder.server.sendObjectAdded(objectHandle);
                 }
             }
         }
 
+        @Override
         public void sendObjectRemoved(int objectHandle) {
-            synchronized (mBinder) {
-                if (mServer != null) {
-                    mServer.sendObjectRemoved(objectHandle);
+            synchronized (MtpService.class) {
+                if (sServerHolder != null) {
+                    sServerHolder.server.sendObjectRemoved(objectHandle);
                 }
             }
         }
@@ -244,11 +274,11 @@
                     + " at " + storage.getPath());
         }
 
-        if (mDatabase != null) {
-            mDatabase.addStorage(storage);
-        }
-        if (mServer != null) {
-            mServer.addStorage(storage);
+        synchronized (MtpService.class) {
+            if (sServerHolder != null) {
+                sServerHolder.database.addStorage(storage);
+                sServerHolder.server.addStorage(storage);
+            }
         }
     }
 
@@ -261,11 +291,42 @@
 
         Log.d(TAG, "Removing MTP storage " + Integer.toHexString(storage.getStorageId()) + " at "
                 + storage.getPath());
-        if (mDatabase != null) {
-            mDatabase.removeStorage(storage);
+
+        synchronized (MtpService.class) {
+            if (sServerHolder != null) {
+                sServerHolder.database.removeStorage(storage);
+                sServerHolder.server.removeStorage(storage);
+            }
         }
-        if (mServer != null) {
-            mServer.removeStorage(storage);
+    }
+
+    private static class ServerHolder {
+        @NonNull final MtpServer server;
+        @NonNull final MtpDatabase database;
+
+        ServerHolder(@NonNull MtpServer server, @NonNull MtpDatabase database) {
+            Preconditions.checkNotNull(server);
+            Preconditions.checkNotNull(database);
+            this.server = server;
+            this.database = database;
+        }
+
+        void close() {
+            this.database.setServer(null);
+        }
+    }
+
+    private class OnServerTerminated implements Runnable {
+        @Override
+        public void run() {
+            synchronized (MtpService.class) {
+                if (sServerHolder == null) {
+                    Log.e(TAG, "sServerHolder is unexpectedly null.");
+                    return;
+                }
+                sServerHolder.close();
+                sServerHolder = null;
+            }
         }
     }
 }
diff --git a/src/com/android/providers/media/RingtonePickerActivity.java b/src/com/android/providers/media/RingtonePickerActivity.java
index 710787a..7d91b6b 100644
--- a/src/com/android/providers/media/RingtonePickerActivity.java
+++ b/src/com/android/providers/media/RingtonePickerActivity.java
@@ -16,6 +16,8 @@
 
 package com.android.providers.media;
 
+import android.content.ContentProvider;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -26,20 +28,30 @@
 import android.media.Ringtone;
 import android.media.RingtoneManager;
 import android.net.Uri;
+import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.Environment;
 import android.os.Handler;
+import android.os.UserHandle;
+import android.os.UserManager;
 import android.provider.MediaStore;
 import android.provider.Settings;
 import android.util.Log;
 import android.util.TypedValue;
+import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.AdapterView;
+import android.widget.CursorAdapter;
+import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.android.internal.app.AlertActivity;
 import com.android.internal.app.AlertController;
 
+import java.io.IOException;
 import java.util.Objects;
 import java.util.regex.Pattern;
 
@@ -65,11 +77,14 @@
 
     private static final String SOUND_NAME_RES_PREFIX = "sound_name_";
 
+    private static final int ADD_FILE_REQUEST_CODE = 300;
+
     private RingtoneManager mRingtoneManager;
     private int mType;
 
     private Cursor mCursor;
     private Handler mHandler;
+    private BadgedRingtoneAdapter mAdapter;
 
     /** The position in the list of the 'Silent' item. */
     private int mSilentPos = POS_UNKNOWN;
@@ -77,9 +92,6 @@
     /** The position in the list of the 'Default' item. */
     private int mDefaultRingtonePos = POS_UNKNOWN;
 
-    /** The position in the list of the last clicked item. */
-    private int mClickedPos = POS_UNKNOWN;
-
     /** The position in the list of the ringtone to sample. */
     private int mSampleRingtonePos = POS_UNKNOWN;
 
@@ -98,6 +110,12 @@
     /** The Uri to play when the 'Default' item is clicked. */
     private Uri mUriForDefaultItem;
 
+    /** Id of the user to which the ringtone picker should list the ringtones */
+    private int mPickerUserId;
+
+    /** Context of the user specified by mPickerUserId */
+    private Context mTargetContext;
+
     /**
      * A Ringtone for the default ringtone. In most cases, the RingtoneManager
      * will stop the previous ringtone. However, the RingtoneManager doesn't
@@ -111,6 +129,11 @@
      */
     private Ringtone mCurrentRingtone;
 
+    /**
+     * Stable ID for the ringtone that is currently checked (may be -1 if no ringtone is checked).
+     */
+    private long mCheckedItemId = -1;
+
     private int mAttributesFlags;
 
     private boolean mShowOkCancelButtons;
@@ -128,8 +151,19 @@
          * On item clicked
          */
         public void onClick(DialogInterface dialog, int which) {
+            if (which == mCursor.getCount() + mStaticItemCount) {
+                // The "Add new ringtone" item was clicked. Start a file picker intent to select
+                // only audio files (MIME type "audio/*")
+                final Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
+                chooseFile.setType("audio/*");
+                chooseFile.putExtra(Intent.EXTRA_MIME_TYPES,
+                        new String[] { "audio/*", "application/ogg" });
+                startActivityForResult(chooseFile, ADD_FILE_REQUEST_CODE);
+                return;
+            }
+
             // Save the position of most recently clicked item
-            mClickedPos = which;
+            setCheckedItem(which);
 
             // In the buttonless (watch-only) version, preemptively set our result since we won't
             // have another chance to do so before the activity closes.
@@ -150,15 +184,12 @@
         mHandler = new Handler();
 
         Intent intent = getIntent();
-
-        // Give the Activity so it can do managed queries
-        mRingtoneManager = new RingtoneManager(this);
+        mPickerUserId = UserHandle.myUserId();
+        mTargetContext = this;
 
         // Get the types of ringtones to show
         mType = intent.getIntExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, -1);
-        if (mType != -1) {
-            mRingtoneManager.setType(mType);
-        }
+        initRingtoneManager();
 
         /*
          * Get whether to show the 'Default' item, and the URI to play when the
@@ -179,9 +210,6 @@
             }
         }
 
-        if (savedInstanceState != null) {
-            mClickedPos = savedInstanceState.getInt(SAVE_CLICKED_POS, POS_UNKNOWN);
-        }
         // Get whether to show the 'Silent' item
         mHasSilentItem = intent.getBooleanExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
         // AudioAttributes flags
@@ -191,9 +219,6 @@
 
         mShowOkCancelButtons = getResources().getBoolean(R.bool.config_showOkCancelButtons);
 
-
-        mCursor = new LocalizedCursor(mRingtoneManager.getCursor(), getResources(), COLUMN_LABEL);
-
         // The volume keys will control the stream that we are choosing a ringtone for
         setVolumeControlStream(mRingtoneManager.inferStreamType());
 
@@ -201,8 +226,15 @@
         mExistingUri = intent
                 .getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI);
 
+        // Create the list of ringtones and hold on to it so we can update later.
+        mAdapter = new BadgedRingtoneAdapter(this, mCursor,
+                /* isManagedProfile = */ UserManager.get(this).isManagedProfile(mPickerUserId));
+        if (savedInstanceState != null) {
+            setCheckedItem(savedInstanceState.getInt(SAVE_CLICKED_POS, POS_UNKNOWN));
+        }
+
         final AlertController.AlertParams p = mAlertParams;
-        p.mCursor = mCursor;
+        p.mAdapter = mAdapter;
         p.mOnClickListener = mRingtoneClickListener;
         p.mLabelColumn = COLUMN_LABEL;
         p.mIsSingleChoice = true;
@@ -217,7 +249,14 @@
 
         p.mTitle = intent.getCharSequenceExtra(RingtoneManager.EXTRA_RINGTONE_TITLE);
         if (p.mTitle == null) {
-            p.mTitle = getString(com.android.internal.R.string.ringtone_picker_title);
+          if (mType == RingtoneManager.TYPE_ALARM) {
+              p.mTitle = getString(com.android.internal.R.string.ringtone_picker_title_alarm);
+          } else if (mType == RingtoneManager.TYPE_NOTIFICATION) {
+              p.mTitle =
+                  getString(com.android.internal.R.string.ringtone_picker_title_notification);
+          } else {
+              p.mTitle = getString(com.android.internal.R.string.ringtone_picker_title);
+          }
         }
 
         setupAlert();
@@ -225,16 +264,95 @@
     @Override
     public void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
-        outState.putInt(SAVE_CLICKED_POS, mClickedPos);
+        outState.putInt(SAVE_CLICKED_POS, getCheckedItem());
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        if (requestCode == ADD_FILE_REQUEST_CODE && resultCode == RESULT_OK) {
+            // Add the custom ringtone in a separate thread
+            final AsyncTask<Uri, Void, Uri> installTask = new AsyncTask<Uri, Void, Uri>() {
+                @Override
+                protected Uri doInBackground(Uri... params) {
+                    try {
+                        return mRingtoneManager.addCustomExternalRingtone(params[0], mType);
+                    } catch (IOException | IllegalArgumentException e) {
+                        Log.e(TAG, "Unable to add new ringtone", e);
+                    }
+                    return null;
+                }
+
+                @Override
+                protected void onPostExecute(Uri ringtoneUri) {
+                    if (ringtoneUri != null) {
+                        requeryForAdapter();
+                    } else {
+                        // Ringtone was not added, display error Toast
+                        Toast.makeText(RingtonePickerActivity.this, R.string.unable_to_add_ringtone,
+                                Toast.LENGTH_SHORT).show();
+                    }
+                }
+            };
+            installTask.execute(data.getData());
+        }
+    }
+
+    // Disabled because context menus aren't Material Design :(
+    /*
+    @Override
+    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
+        int position = ((AdapterContextMenuInfo) menuInfo).position;
+
+        Ringtone ringtone = getRingtone(getRingtoneManagerPosition(position));
+        if (ringtone != null && mRingtoneManager.isCustomRingtone(ringtone.getUri())) {
+            // It's a custom ringtone so we display the context menu
+            menu.setHeaderTitle(ringtone.getTitle(this));
+            menu.add(Menu.NONE, Menu.FIRST, Menu.NONE, R.string.delete_ringtone_text);
+        }
+    }
+
+    @Override
+    public boolean onContextItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case Menu.FIRST: {
+                int deletedRingtonePos = ((AdapterContextMenuInfo) item.getMenuInfo()).position;
+                Uri deletedRingtoneUri = getRingtone(
+                        getRingtoneManagerPosition(deletedRingtonePos)).getUri();
+                if(mRingtoneManager.deleteExternalRingtone(deletedRingtoneUri)) {
+                    requeryForAdapter();
+                } else {
+                    Toast.makeText(this, R.string.unable_to_delete_ringtone, Toast.LENGTH_SHORT)
+                            .show();
+                }
+                return true;
+            }
+            default: {
+                return false;
+            }
+        }
+    }
+    */
+
+    @Override
+    public void onDestroy() {
+        if (mCursor != null) {
+            mCursor.close();
+            mCursor = null;
+        }
+        super.onDestroy();
     }
 
     public void onPrepareListView(ListView listView) {
+        // Reset the static item count, as this method can be called multiple times
+        mStaticItemCount = 0;
 
         if (mHasDefaultItem) {
             mDefaultRingtonePos = addDefaultRingtoneItem(listView);
 
-            if (mClickedPos == POS_UNKNOWN && RingtoneManager.isDefault(mExistingUri)) {
-                mClickedPos = mDefaultRingtonePos;
+            if (getCheckedItem() == POS_UNKNOWN && RingtoneManager.isDefault(mExistingUri)) {
+                setCheckedItem(mDefaultRingtonePos);
             }
         }
 
@@ -242,13 +360,13 @@
             mSilentPos = addSilentItem(listView);
 
             // The 'Silent' item should use a null Uri
-            if (mClickedPos == POS_UNKNOWN && mExistingUri == null) {
-                mClickedPos = mSilentPos;
+            if (getCheckedItem() == POS_UNKNOWN && mExistingUri == null) {
+                setCheckedItem(mSilentPos);
             }
         }
 
-        if (mClickedPos == POS_UNKNOWN) {
-            mClickedPos = getListPosition(mRingtoneManager.getRingtonePosition(mExistingUri));
+        if (getCheckedItem() == POS_UNKNOWN) {
+            setCheckedItem(getListPosition(mRingtoneManager.getRingtonePosition(mExistingUri)));
         }
 
         // In the buttonless (watch-only) version, preemptively set our result since we won't
@@ -256,8 +374,39 @@
         if (!mShowOkCancelButtons) {
             setResultFromSelection();
         }
-        // Put a checkmark next to an item.
-        mAlertParams.mCheckedItem = mClickedPos;
+        // If external storage is available, add a button to install sounds from storage.
+        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+            addNewRingtoneItem(listView);
+        }
+
+        // Enable context menu in ringtone items
+        registerForContextMenu(listView);
+    }
+
+    /**
+     * Re-query RingtoneManager for the most recent set of installed ringtones. May move the
+     * selected item position to match the new position of the chosen sound.
+     *
+     * This should only need to happen after adding or removing a ringtone.
+     */
+    private void requeryForAdapter() {
+        // Refresh and set a new cursor, closing the old one.
+        initRingtoneManager();
+        mAdapter.changeCursor(mCursor);
+
+        // Update checked item location.
+        int checkedPosition = POS_UNKNOWN;
+        for (int i = 0; i < mAdapter.getCount(); i++) {
+            if (mAdapter.getItemId(i) == mCheckedItemId) {
+                checkedPosition = getListPosition(i);
+                break;
+            }
+        }
+        if (mHasSilentItem && checkedPosition == POS_UNKNOWN) {
+            checkedPosition = mSilentPos;
+        }
+        setCheckedItem(checkedPosition);
+        setupAlert();
     }
 
     /**
@@ -291,6 +440,37 @@
         return addStaticItem(listView, com.android.internal.R.string.ringtone_silent);
     }
 
+    private void addNewRingtoneItem(ListView listView) {
+        listView.addFooterView(getLayoutInflater().inflate(R.layout.add_ringtone_item, listView,
+                false /* attachToRoot */));
+    }
+
+    private void initRingtoneManager() {
+        // Reinstantiate the RingtoneManager. Cursor.requery() was deprecated and calling it
+        // causes unexpected behavior.
+        mRingtoneManager = new RingtoneManager(mTargetContext, /* includeParentRingtones */ true);
+        if (mType != -1) {
+            mRingtoneManager.setType(mType);
+        }
+        mCursor = new LocalizedCursor(mRingtoneManager.getCursor(), getResources(), COLUMN_LABEL);
+    }
+
+    private Ringtone getRingtone(int ringtoneManagerPosition) {
+        if (ringtoneManagerPosition < 0) {
+            return null;
+        }
+        return mRingtoneManager.getRingtone(ringtoneManagerPosition);
+    }
+
+    private int getCheckedItem() {
+        return mAlertParams.mCheckedItem;
+    }
+
+    private void setCheckedItem(int pos) {
+        mAlertParams.mCheckedItem = pos;
+        mCheckedItemId = mAdapter.getItemId(getRingtoneManagerPosition(pos));
+    }
+
     /*
      * On click of Ok/Cancel buttons
      */
@@ -313,7 +493,6 @@
      * On item selected via keys
      */
     public void onItemSelected(AdapterView parent, View view, int position, long id) {
-        mClickedPos = position;
         playRingtone(position, DELAY_MS_SELECTION_PLAYED);
 
         // In the buttonless (watch-only) version, preemptively set our result since we won't
@@ -371,7 +550,6 @@
     @Override
     protected void onStop() {
         super.onStop();
-        mCursor.deactivate();
 
         if (!isChangingConfigurations()) {
             stopAnyPlayingRingtone();
@@ -391,14 +569,14 @@
     private void setResultFromSelection() {
         // Obtain the currently selected ringtone
         Uri uri = null;
-        if (mClickedPos == mDefaultRingtonePos) {
+        if (getCheckedItem() == mDefaultRingtonePos) {
             // Set it to the default Uri that they originally gave us
             uri = mUriForDefaultItem;
-        } else if (mClickedPos == mSilentPos) {
+        } else if (getCheckedItem() == mSilentPos) {
             // A null Uri is for the 'Silent' item
             uri = null;
         } else {
-            uri = mRingtoneManager.getRingtoneUri(getRingtoneManagerPosition(mClickedPos));
+            uri = mRingtoneManager.getRingtoneUri(getRingtoneManagerPosition(getCheckedItem()));
         }
 
         // Return new URI if another ringtone was selected, as there's no ok/cancel button
@@ -515,4 +693,61 @@
             }
         }
     }
+
+    private class BadgedRingtoneAdapter extends CursorAdapter {
+        private final boolean mIsManagedProfile;
+
+        public BadgedRingtoneAdapter(Context context, Cursor cursor, boolean isManagedProfile) {
+            super(context, cursor);
+            mIsManagedProfile = isManagedProfile;
+        }
+
+        @Override
+        public long getItemId(int position) {
+            if (position < 0) {
+                return position;
+            }
+            return super.getItemId(position);
+        }
+
+        @Override
+        public View newView(Context context, Cursor cursor, ViewGroup parent) {
+            LayoutInflater inflater = LayoutInflater.from(context);
+            return inflater.inflate(R.layout.radio_with_work_badge, parent, false);
+        }
+
+        @Override
+        public void bindView(View view, Context context, Cursor cursor) {
+            // Set text as the title of the ringtone
+            ((TextView) view.findViewById(R.id.checked_text_view))
+                    .setText(cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX));
+
+            boolean isWorkRingtone = false;
+            if (mIsManagedProfile) {
+                /*
+                 * Display the work icon if the ringtone belongs to a work profile. We can tell that
+                 * a ringtone belongs to a work profile if the picker user is a managed profile, the
+                 * ringtone Uri is in external storage, and either the uri has no user id or has the
+                 * id of the picker user
+                 */
+                Uri currentUri = mRingtoneManager.getRingtoneUri(cursor.getPosition());
+                int uriUserId = ContentProvider.getUserIdFromUri(currentUri, mPickerUserId);
+                Uri uriWithoutUserId = ContentProvider.getUriWithoutUserId(currentUri);
+
+                if (uriUserId == mPickerUserId && uriWithoutUserId.toString()
+                        .startsWith(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.toString())) {
+                    isWorkRingtone = true;
+                }
+            }
+
+            ImageView workIcon = (ImageView) view.findViewById(R.id.work_icon);
+            if(isWorkRingtone) {
+                workIcon.setImageDrawable(getPackageManager().getUserBadgeForDensityNoBackground(
+                        UserHandle.of(mPickerUserId), -1 /* density */));
+                workIcon.setVisibility(View.VISIBLE);
+            } else {
+                workIcon.setVisibility(View.GONE);
+            }
+        }
+    }
 }
