summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk4
-rw-r--r--AndroidManifest.xml2
-rw-r--r--res/drawable-nodpi/letter_indicator.9.pngbin0 -> 3614 bytes
-rw-r--r--res/drawable/empty_seek_bar.xml19
-rw-r--r--res/drawable/scrubber_back.xml19
-rw-r--r--res/drawable/seek_back.xml30
-rw-r--r--res/layout-land/launcher.xml6
-rw-r--r--res/layout-port/launcher.xml5
-rw-r--r--res/layout-sw720dp/launcher.xml6
-rw-r--r--res/layout/app_drawer_container.xml83
-rw-r--r--res/layout/app_drawer_item.xml47
-rw-r--r--res/layout/drawer_icon.xml38
-rw-r--r--res/layout/scrub_layout.xml44
-rw-r--r--res/mipmap-hdpi/ic_launcher_application.pngbin8430 -> 3418 bytes
-rw-r--r--res/mipmap-hdpi/ic_launcher_home.pngbin464 -> 5650 bytes
-rw-r--r--res/mipmap-mdpi/ic_launcher_application.pngbin4953 -> 2206 bytes
-rw-r--r--res/mipmap-mdpi/ic_launcher_home.pngbin416 -> 3403 bytes
-rw-r--r--res/mipmap-xhdpi/ic_launcher_application.pngbin11814 -> 4842 bytes
-rw-r--r--res/mipmap-xhdpi/ic_launcher_home.pngbin443 -> 8133 bytes
-rw-r--r--res/mipmap-xxhdpi/ic_launcher_application.pngbin19388 -> 7718 bytes
-rw-r--r--res/mipmap-xxhdpi/ic_launcher_home.pngbin473 -> 13218 bytes
-rw-r--r--res/mipmap-xxxhdpi/ic_launcher_application.pngbin0 -> 7718 bytes
-rw-r--r--res/mipmap-xxxhdpi/ic_launcher_home.pngbin0 -> 19286 bytes
-rw-r--r--res/values-af/cm_arrays.xml35
-rw-r--r--res/values-af/cm_strings.xml46
-rw-r--r--res/values-ar/cm_arrays.xml35
-rw-r--r--res/values-ar/cm_strings.xml45
-rw-r--r--res/values-ast-rES/cm_arrays.xml35
-rw-r--r--res/values-ast-rES/cm_strings.xml46
-rw-r--r--res/values-ast-rES/strings.xml127
-rw-r--r--res/values-az-rAZ/cm_arrays.xml35
-rw-r--r--res/values-az-rAZ/cm_strings.xml43
-rw-r--r--res/values-be/strings.xml212
-rw-r--r--res/values-bn-rBD/cm_arrays.xml35
-rw-r--r--res/values-bn-rBD/cm_strings.xml20
-rw-r--r--res/values-ca/cm_arrays.xml35
-rw-r--r--res/values-ca/cm_strings.xml46
-rw-r--r--res/values-cs/cm_arrays.xml35
-rw-r--r--res/values-cs/cm_strings.xml46
-rw-r--r--res/values-da/cm_arrays.xml35
-rw-r--r--res/values-da/cm_strings.xml46
-rw-r--r--res/values-de/cm_arrays.xml35
-rw-r--r--res/values-de/cm_strings.xml46
-rw-r--r--res/values-el/cm_arrays.xml35
-rw-r--r--res/values-el/cm_strings.xml46
-rw-r--r--res/values-en-rAU/cm_strings.xml46
-rw-r--r--res/values-es/cm_arrays.xml35
-rw-r--r--res/values-es/cm_strings.xml46
-rw-r--r--res/values-et-rEE/cm_arrays.xml35
-rw-r--r--res/values-et-rEE/cm_strings.xml45
-rw-r--r--res/values-eu-rES/cm_arrays.xml35
-rw-r--r--res/values-eu-rES/cm_strings.xml45
-rw-r--r--res/values-fi/cm_arrays.xml35
-rw-r--r--res/values-fi/cm_strings.xml46
-rw-r--r--res/values-fr/cm_arrays.xml35
-rw-r--r--res/values-fr/cm_strings.xml46
-rw-r--r--res/values-gl-rES/cm_arrays.xml35
-rw-r--r--res/values-hu/cm_arrays.xml35
-rw-r--r--res/values-hu/cm_strings.xml46
-rw-r--r--res/values-in/cm_arrays.xml35
-rw-r--r--res/values-in/cm_strings.xml46
-rw-r--r--res/values-it/cm_arrays.xml35
-rw-r--r--res/values-it/cm_strings.xml46
-rw-r--r--res/values-iw/cm_arrays.xml35
-rw-r--r--res/values-iw/cm_strings.xml46
-rw-r--r--res/values-ja/cm_arrays.xml35
-rw-r--r--res/values-ja/cm_strings.xml46
-rw-r--r--res/values-ko/cm_arrays.xml35
-rw-r--r--res/values-ko/cm_strings.xml46
-rw-r--r--res/values-ku/cm_arrays.xml35
-rw-r--r--res/values-ku/cm_strings.xml45
-rw-r--r--res/values-ku/strings.xml111
-rw-r--r--res/values-lb/cm_arrays.xml35
-rw-r--r--res/values-lb/cm_strings.xml46
-rw-r--r--res/values-lb/strings.xml122
-rw-r--r--res/values-lt/cm_arrays.xml35
-rw-r--r--res/values-lt/cm_strings.xml46
-rw-r--r--res/values-lv/cm_arrays.xml35
-rw-r--r--res/values-lv/cm_strings.xml46
-rw-r--r--res/values-nb/cm_arrays.xml35
-rw-r--r--res/values-nb/cm_strings.xml46
-rw-r--r--res/values-nl/cm_arrays.xml35
-rw-r--r--res/values-nl/cm_strings.xml46
-rw-r--r--res/values-pl/cm_arrays.xml35
-rw-r--r--res/values-pl/cm_strings.xml46
-rw-r--r--res/values-pt-rBR/cm_arrays.xml35
-rw-r--r--res/values-pt-rBR/cm_strings.xml46
-rw-r--r--res/values-pt-rPT/cm_arrays.xml35
-rw-r--r--res/values-pt-rPT/cm_strings.xml46
-rw-r--r--res/values-ro/cm_arrays.xml35
-rw-r--r--res/values-ro/cm_strings.xml46
-rw-r--r--res/values-ru/cm_arrays.xml35
-rw-r--r--res/values-ru/cm_strings.xml46
-rw-r--r--res/values-si-rLK/cm_arrays.xml35
-rw-r--r--res/values-si-rLK/cm_strings.xml45
-rw-r--r--res/values-sk/cm_arrays.xml35
-rw-r--r--res/values-sk/cm_strings.xml46
-rw-r--r--res/values-sr/cm_arrays.xml35
-rw-r--r--res/values-sr/cm_strings.xml46
-rw-r--r--res/values-sv/cm_arrays.xml35
-rw-r--r--res/values-sv/cm_strings.xml45
-rw-r--r--res/values-th/cm_arrays.xml35
-rw-r--r--res/values-th/cm_strings.xml45
-rw-r--r--res/values-tr/cm_arrays.xml35
-rw-r--r--res/values-tr/cm_strings.xml46
-rw-r--r--res/values-uk/cm_arrays.xml35
-rw-r--r--res/values-uk/cm_strings.xml46
-rw-r--r--res/values-zh-rCN/cm_strings.xml7
-rw-r--r--res/values-zh-rCN/strings.xml3
-rw-r--r--res/values-zh-rHK/cm_arrays.xml35
-rw-r--r--res/values-zh-rHK/cm_strings.xml34
-rw-r--r--res/values-zh-rTW/cm_arrays.xml35
-rw-r--r--res/values-zh-rTW/cm_strings.xml46
-rw-r--r--res/values/attrs.xml5
-rw-r--r--res/values/cm_strings.xml8
-rw-r--r--res/values/colors.xml4
-rw-r--r--res/values/dimens.xml6
-rw-r--r--res/values/preferences_defaults.xml1
-rw-r--r--res/xml/default_workspace_4x4.xml155
-rw-r--r--res/xml/default_workspace_5x5.xml159
-rw-r--r--res/xml/default_workspace_5x6.xml164
-rw-r--r--src/com/android/launcher3/AppDrawerIconView.java74
-rw-r--r--src/com/android/launcher3/AppDrawerListAdapter.java566
-rw-r--r--src/com/android/launcher3/AppDrawerScrubber.java130
-rw-r--r--src/com/android/launcher3/AutoFitTextView.java381
-rw-r--r--src/com/android/launcher3/BubbleTextView.java10
-rw-r--r--src/com/android/launcher3/DragLayer.java21
-rw-r--r--src/com/android/launcher3/Launcher.java231
-rw-r--r--src/com/android/launcher3/OverviewSettingsPanel.java1
-rw-r--r--src/com/android/launcher3/PagedViewIcon.java134
-rw-r--r--src/com/android/launcher3/Utilities.java8
-rw-r--r--src/com/android/launcher3/WidgetPreviewLoader.java2
-rw-r--r--src/com/android/launcher3/Workspace.java2
-rw-r--r--src/com/android/launcher3/list/SettingsPinnedHeaderAdapter.java84
-rw-r--r--src/com/android/launcher3/locale/HanziToPinyin.java186
-rw-r--r--src/com/android/launcher3/locale/LocaleSet.java253
-rw-r--r--src/com/android/launcher3/locale/LocaleSetManager.java82
-rw-r--r--src/com/android/launcher3/locale/LocaleUtils.java484
-rw-r--r--src/com/android/launcher3/settings/SettingsProvider.java1
139 files changed, 6989 insertions, 402 deletions
diff --git a/Android.mk b/Android.mk
index 1f98b76d8..b4f2e69e1 100644
--- a/Android.mk
+++ b/Android.mk
@@ -23,7 +23,9 @@ include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13 \
+ android-support-v7-recyclerview \
+ guava
LOCAL_SRC_FILES := $(call all-java-files-under, src) \
$(call all-java-files-under, WallpaperPicker/src) \
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4965c0c8e..e60ae5865 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -82,7 +82,7 @@
android:backupAgent="com.android.launcher3.LauncherBackupAgentHelper"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher_home"
- android:label="@string/application_name"
+ android:label="@string/cm_application_name"
android:largeHeap="@bool/config_largeHeap"
android:restoreAnyVersion="true"
android:supportsRtl="true" >
diff --git a/res/drawable-nodpi/letter_indicator.9.png b/res/drawable-nodpi/letter_indicator.9.png
new file mode 100644
index 000000000..af3578ece
--- /dev/null
+++ b/res/drawable-nodpi/letter_indicator.9.png
Binary files differ
diff --git a/res/drawable/empty_seek_bar.xml b/res/drawable/empty_seek_bar.xml
new file mode 100644
index 000000000..e3cf61d64
--- /dev/null
+++ b/res/drawable/empty_seek_bar.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The CyanogenMod 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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="#00000000"/>
+</shape> \ No newline at end of file
diff --git a/res/drawable/scrubber_back.xml b/res/drawable/scrubber_back.xml
new file mode 100644
index 000000000..c5022dec5
--- /dev/null
+++ b/res/drawable/scrubber_back.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (C) 2015 The CyanogenMod 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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/scrubber_background"/>
+</shape>
diff --git a/res/drawable/seek_back.xml b/res/drawable/seek_back.xml
new file mode 100644
index 000000000..d97a870ea
--- /dev/null
+++ b/res/drawable/seek_back.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The CyanogenMod 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="360dp"
+ android:height="48dp"
+ android:viewportWidth="360"
+ android:viewportHeight="48">
+
+ <path
+ android:strokeColor="#FFFFFF"
+ android:strokeWidth="2"
+ android:strokeMiterLimit="10"
+ android:strokeLineCap="round"
+ android:pathData="M16,24h328" />
+</vector> \ No newline at end of file
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml
index 8cd867366..4c097ba0a 100644
--- a/res/layout-land/launcher.xml
+++ b/res/layout-land/launcher.xml
@@ -62,5 +62,11 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible" />
+
+ <include layout="@layout/app_drawer_container"
+ android:id="@+id/app_drawer_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone" />
</com.android.launcher3.DragLayer>
</FrameLayout>
diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml
index ad1027829..e193e4820 100644
--- a/res/layout-port/launcher.xml
+++ b/res/layout-port/launcher.xml
@@ -83,5 +83,10 @@
android:id="@+id/overview_panel"
android:visibility="gone" />
+ <include layout="@layout/app_drawer_container"
+ android:id="@+id/app_drawer_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone" />
</com.android.launcher3.DragLayer>
</FrameLayout>
diff --git a/res/layout-sw720dp/launcher.xml b/res/layout-sw720dp/launcher.xml
index 62615411f..772110527 100644
--- a/res/layout-sw720dp/launcher.xml
+++ b/res/layout-sw720dp/launcher.xml
@@ -81,5 +81,11 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible" />
+
+ <include layout="@layout/app_drawer_container"
+ android:id="@+id/app_drawer_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone" />
</com.android.launcher3.DragLayer>
</FrameLayout>
diff --git a/res/layout/app_drawer_container.xml b/res/layout/app_drawer_container.xml
new file mode 100644
index 000000000..f5db08ce1
--- /dev/null
+++ b/res/layout/app_drawer_container.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The CyanogenMod Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <FrameLayout
+ android:id="@+id/fake_page_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false">
+ <FrameLayout
+ android:id="@+id/fake_page"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="invisible"
+ android:clipToPadding="false" />
+ </FrameLayout>
+ <FrameLayout
+ android:id="@+id/app_drawer_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false">
+ <android.support.v7.widget.RecyclerView
+ android:id="@+id/app_drawer_recyclerview"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipToPadding="false"
+ android:paddingBottom="@dimen/scrubber_height"
+ android:overScrollMode="never"/>
+ </FrameLayout>
+
+ <RelativeLayout
+ android:id="@+id/scrubber_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:clipToPadding="false">
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:layout_below="@+id/scrubberIndicator"
+ android:background="@drawable/scrubber_back"
+ android:clipToPadding="false">
+
+ <com.android.launcher3.AppDrawerScrubber
+ android:id="@+id/app_drawer_scrubber"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clickable="true"
+ android:layout_gravity="bottom"/>
+ </FrameLayout>
+
+ <TextView
+ android:id="@+id/scrubberIndicator"
+ android:background="@drawable/letter_indicator"
+ android:layout_width="80dp"
+ android:textSize="30sp"
+ android:gravity="center"
+ android:textColor="@android:color/white"
+ android:clickable="false"
+ android:layout_marginBottom="-20dp"
+ android:visibility="invisible"
+ android:layout_height="100dp" />
+ </RelativeLayout>
+</FrameLayout> \ No newline at end of file
diff --git a/res/layout/app_drawer_item.xml b/res/layout/app_drawer_item.xml
new file mode 100644
index 000000000..08043eb1f
--- /dev/null
+++ b/res/layout/app_drawer_item.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The CyanogenMod Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:autofit="http://schemas.android.com/apk/res-auto"
+ android:orientation="vertical"
+ android:splitMotionEvents="false"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <LinearLayout
+ android:layout_marginTop="10dp"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
+ <com.android.launcher3.AutoFitTextView
+ android:id="@+id/drawer_item_title"
+ android:layout_width="30dp"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="10dp"
+ android:includeFontPadding="false"
+ android:gravity="start|top"
+ android:singleLine="true"
+ autofit:minTextSize="8sp"
+ android:textSize="24sp"
+ android:layout_gravity="center"
+ android:fontFamily="sans-serif-light"
+ android:textColor="@android:color/white"/>
+ <LinearLayout
+ android:id="@+id/drawer_item_flow"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" />
+ </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/drawer_icon.xml b/res/layout/drawer_icon.xml
new file mode 100644
index 000000000..6c804f17c
--- /dev/null
+++ b/res/layout/drawer_icon.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The CyanogenMod 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.launcher3.AppDrawerIconView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="wrap_content"
+ android:paddingLeft="@dimen/vertical_app_drawer_icon_padding"
+ android:paddingRight="@dimen/vertical_app_drawer_icon_padding"
+ android:layout_height="wrap_content">
+
+ <ImageView
+ android:id="@+id/image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"/>
+
+ <TextView
+ android:id="@+id/label"
+ style="@style/WorkspaceIcon"
+ android:shadowRadius="0"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+</com.android.launcher3.AppDrawerIconView>
diff --git a/res/layout/scrub_layout.xml b/res/layout/scrub_layout.xml
new file mode 100644
index 000000000..90a9d094d
--- /dev/null
+++ b/res/layout/scrub_layout.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The CyanogenMod 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.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/app_drawer_scrubber_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/seek_back"
+ android:layout_alignParentBottom="true">
+
+ <LinearLayout
+ android:clickable="true"
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_marginLeft="20dp"
+ android:layout_marginRight="20dp"
+ android:layout_height="@dimen/scrubber_height">
+
+ <SeekBar
+ android:id="@+id/scrubber"
+ android:paddingLeft="0dp"
+ android:paddingRight="0dp"
+ android:thumb="@android:color/transparent"
+ android:progressDrawable="@drawable/empty_seek_bar"
+ android:layout_width="match_parent"
+ android:layout_gravity="center"
+ android:layout_height="match_parent" />
+
+ </LinearLayout>
+
+</RelativeLayout>
diff --git a/res/mipmap-hdpi/ic_launcher_application.png b/res/mipmap-hdpi/ic_launcher_application.png
index b9aa101ad..cde69bccc 100644
--- a/res/mipmap-hdpi/ic_launcher_application.png
+++ b/res/mipmap-hdpi/ic_launcher_application.png
Binary files differ
diff --git a/res/mipmap-hdpi/ic_launcher_home.png b/res/mipmap-hdpi/ic_launcher_home.png
index b556d7aba..dc40251c2 100644
--- a/res/mipmap-hdpi/ic_launcher_home.png
+++ b/res/mipmap-hdpi/ic_launcher_home.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_application.png b/res/mipmap-mdpi/ic_launcher_application.png
index 4771b855f..c133a0cbd 100644
--- a/res/mipmap-mdpi/ic_launcher_application.png
+++ b/res/mipmap-mdpi/ic_launcher_application.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_home.png b/res/mipmap-mdpi/ic_launcher_home.png
index 961bb7dbd..e2625e431 100644
--- a/res/mipmap-mdpi/ic_launcher_home.png
+++ b/res/mipmap-mdpi/ic_launcher_home.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_application.png b/res/mipmap-xhdpi/ic_launcher_application.png
index 932f0f791..bfa42f0e7 100644
--- a/res/mipmap-xhdpi/ic_launcher_application.png
+++ b/res/mipmap-xhdpi/ic_launcher_application.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_home.png b/res/mipmap-xhdpi/ic_launcher_home.png
index 46ec2b775..70e72523c 100644
--- a/res/mipmap-xhdpi/ic_launcher_home.png
+++ b/res/mipmap-xhdpi/ic_launcher_home.png
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_application.png b/res/mipmap-xxhdpi/ic_launcher_application.png
index 7fc739aaf..324e72cdd 100644
--- a/res/mipmap-xxhdpi/ic_launcher_application.png
+++ b/res/mipmap-xxhdpi/ic_launcher_application.png
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_home.png b/res/mipmap-xxhdpi/ic_launcher_home.png
index d2975a39f..9652a687f 100644
--- a/res/mipmap-xxhdpi/ic_launcher_home.png
+++ b/res/mipmap-xxhdpi/ic_launcher_home.png
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_launcher_application.png b/res/mipmap-xxxhdpi/ic_launcher_application.png
new file mode 100644
index 000000000..324e72cdd
--- /dev/null
+++ b/res/mipmap-xxxhdpi/ic_launcher_application.png
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_launcher_home.png b/res/mipmap-xxxhdpi/ic_launcher_home.png
new file mode 100644
index 000000000..652593d3f
--- /dev/null
+++ b/res/mipmap-xxxhdpi/ic_launcher_home.png
Binary files differ
diff --git a/res/values-af/cm_arrays.xml b/res/values-af/cm_arrays.xml
new file mode 100644
index 000000000..4f3440029
--- /dev/null
+++ b/res/values-af/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Geen</item>
+ <item>Vergroot</item>
+ <item>Verklein</item>
+ <item>Roteer op</item>
+ <item>Roteer af</item>
+ <item>Blokkie in</item>
+ <item>Blokkie uit</item>
+ <item>Stapel</item>
+ <item>Trek klavier</item>
+ <item>Spieël</item>
+ <item>Silinder in</item>
+ <item>Silinder uit</item>
+ <item>Rondomtalie</item>
+ <item>Oorsig</item>
+ </string-array>
+</resources>
diff --git a/res/values-af/cm_strings.xml b/res/values-af/cm_strings.xml
new file mode 100644
index 000000000..44d557399
--- /dev/null
+++ b/res/values-af/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">TUIS SKERM INSTELLINGS</string>
+ <string name="drawer_settings">LAAI INSTELLINGS</string>
+ <string name="app_settings">PROGRAM INSTELLINGS</string>
+ <string name="setting_state_on">AAN</string>
+ <string name="setting_state_off">AF</string>
+ <string name="themes_button_text">Temas</string>
+ <string name="scrolling_page_outlines">Bladsy buitelyne</string>
+ <string name="scrolling_fade_adjacent">Vervaag kant bladsye</string>
+ <string name="scrolling_wallpaper">Rol agtergrond</string>
+ <string name="grid_size_text">Rooster grootte</string>
+ <string name="grid_size_comfortable">Gemaklik</string>
+ <string name="grid_size_cozy">Snoesig</string>
+ <string name="grid_size_condensed">Verkorte</string>
+ <string name="grid_size_custom">Persoonlik (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Kies persoonlike grootte</string>
+ <string name="scroll_effect_text">Rol effek</string>
+ <string name="drawer_sorting_text">Sorteer metode</string>
+ <string name="sort_mode_title">Titel</string>
+ <string name="sort_mode_launch_count">Begin telling</string>
+ <string name="sort_mode_install_time">Iinstalleer tyd</string>
+ <string name="home_screen_search_text">Soekbalk</string>
+ <string name="larger_icons_text">Groter ikone</string>
+ <string name="icon_labels">Ikoon etikette</string>
+ <string name="icon_labels_show">Vertoon</string>
+ <string name="icon_labels_hide">Wegsteek</string>
+ <string name="protected_app_settings">Beskermde programme</string>
+ <string name="dialog_confirm">Bevestig</string>
+</resources>
diff --git a/res/values-ar/cm_arrays.xml b/res/values-ar/cm_arrays.xml
new file mode 100644
index 000000000..01a5ec0e2
--- /dev/null
+++ b/res/values-ar/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>لا شيء</item>
+ <item>تكبير</item>
+ <item>تصغير</item>
+ <item>تدوير للأعلى</item>
+ <item>تدوير للأسفل</item>
+ <item>مكعب لداخل</item>
+ <item>مكعب للخارج</item>
+ <item>جميع</item>
+ <item>Accordion</item>
+ <item>لف</item>
+ <item>اسطوانة لداخل</item>
+ <item>اسطوانة للخارج</item>
+ <item>دائري</item>
+ <item>نظرة عامّة</item>
+ </string-array>
+</resources>
diff --git a/res/values-ar/cm_strings.xml b/res/values-ar/cm_strings.xml
new file mode 100644
index 000000000..637e159c3
--- /dev/null
+++ b/res/values-ar/cm_strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">إعدادات الشاشة الرئيسية</string>
+ <string name="drawer_settings">إعدادات الفراغ</string>
+ <string name="app_settings">إعدادات التطبيق</string>
+ <string name="setting_state_on">يعمل</string>
+ <string name="setting_state_off">لايعمل</string>
+ <string name="themes_button_text">المواضيع</string>
+ <string name="scrolling_page_outlines">الخطوط العريضة لي الصفحة</string>
+ <string name="scrolling_fade_adjacent">تتلاشى الصفحات الجانبية</string>
+ <string name="scrolling_wallpaper">تمرير الخلفية</string>
+ <string name="grid_size_text">حجم الشبكة</string>
+ <string name="grid_size_comfortable">مريحة</string>
+ <string name="grid_size_cozy">مريح</string>
+ <string name="grid_size_condensed">مكثف</string>
+ <string name="preferences_interface_homescreen_custom">حدد حجم مخصص</string>
+ <string name="scroll_effect_text">تأثير التمرير</string>
+ <string name="drawer_sorting_text">وضع الفرز</string>
+ <string name="sort_mode_title">العنوان</string>
+ <string name="sort_mode_launch_count">عداد الإنطلاق</string>
+ <string name="sort_mode_install_time">وقت التثبيت</string>
+ <string name="home_screen_search_text">شريط البحث</string>
+ <string name="larger_icons_text">أيقونات كبيرة</string>
+ <string name="icon_labels">تسميات الرمز</string>
+ <string name="icon_labels_show">إظهار</string>
+ <string name="icon_labels_hide">إخفاء</string>
+ <string name="protected_app_settings">التطبيقات المحمية</string>
+ <string name="dialog_confirm">تأكيد</string>
+</resources>
diff --git a/res/values-ast-rES/cm_arrays.xml b/res/values-ast-rES/cm_arrays.xml
new file mode 100644
index 000000000..85ecc70f1
--- /dev/null
+++ b/res/values-ast-rES/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Nengún</item>
+ <item>Acercar</item>
+ <item>Allonxar</item>
+ <item>Xirar arriba</item>
+ <item>Xirar abaxo</item>
+ <item>Cúbicu entrante</item>
+ <item>Cúbicu saliente</item>
+ <item>Empilar</item>
+ <item>Acordión</item>
+ <item>Voltiar</item>
+ <item>Cilíndricu entrante</item>
+ <item>Cilíndricu saliente</item>
+ <item>Carrusel</item>
+ <item>Perspeutiva</item>
+ </string-array>
+</resources>
diff --git a/res/values-ast-rES/cm_strings.xml b/res/values-ast-rES/cm_strings.xml
new file mode 100644
index 000000000..7d8ccbd8e
--- /dev/null
+++ b/res/values-ast-rES/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">AXUSTES DE PANTALLA D\'ANICIU</string>
+ <string name="drawer_settings">AXUSTES DE LES APLICACIONES</string>
+ <string name="app_settings">AXUSTES D\'APLICACIÓN</string>
+ <string name="setting_state_on">SÍ</string>
+ <string name="setting_state_off">NON</string>
+ <string name="themes_button_text">Temes</string>
+ <string name="scrolling_page_outlines">Berbesos de pantalla</string>
+ <string name="scrolling_fade_adjacent">Efeutu de dilíu</string>
+ <string name="scrolling_wallpaper">Desplazar fondu</string>
+ <string name="grid_size_text">Tamañu del rexáu</string>
+ <string name="grid_size_comfortable">Confortable</string>
+ <string name="grid_size_cozy">Acoyedor</string>
+ <string name="grid_size_condensed">Condensáu</string>
+ <string name="grid_size_custom">Personalizar (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Esbilla\'l tamañu personalizáu</string>
+ <string name="scroll_effect_text">Efeutu de desplazamientu</string>
+ <string name="drawer_sorting_text">Mou d\'ordenación</string>
+ <string name="sort_mode_title">Títulu</string>
+ <string name="sort_mode_launch_count">Vegaes executáu</string>
+ <string name="sort_mode_install_time">Data d\'instalación</string>
+ <string name="home_screen_search_text">Barra de gueta</string>
+ <string name="larger_icons_text">Iconos grandes</string>
+ <string name="icon_labels">Etiquetes de los iconos</string>
+ <string name="icon_labels_show">Amosar</string>
+ <string name="icon_labels_hide">Anubrir</string>
+ <string name="protected_app_settings">Apps protexíes</string>
+ <string name="dialog_confirm">Confirmar</string>
+</resources>
diff --git a/res/values-ast-rES/strings.xml b/res/values-ast-rES/strings.xml
new file mode 100644
index 000000000..cdae678a7
--- /dev/null
+++ b/res/values-ast-rES/strings.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+/*
+* Copyright (C) 2008 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="application_name">Launcher3</string>
+ <string name="home">Aniciu</string>
+ <string name="uid_name">Aplicaciones básiques d\'Android</string>
+ <string name="activity_not_found">L\'aplicación nun ta instalada.</string>
+ <string name="safemode_shortcut_error">Descargar app deshabilitada en Mou Seguru</string>
+ <string name="widgets_tab_label">Widgets</string>
+ <string name="widget_adder">Widgets</string>
+ <string name="toggle_weight_watcher">Amosar memoria</string>
+ <string name="long_press_widget_to_add">Caltén primíu\'l widget que quieras esbillar.</string>
+ <string name="market">Tienda</string>
+ <string name="widget_dims_format">%1$d \u00d7 %2$d</string>
+ <string name="external_drop_widget_error">Fallu al arrastrar l\'elementu a la pantalla d\'aniciu.</string>
+ <string name="external_drop_widget_pick_title">Esbilla un widget p\'amestar</string>
+ <string name="rename_folder_label">Nome de carpeta</string>
+ <string name="rename_folder_title">Camudar nome de carpeta</string>
+ <string name="rename_action">Aceutar</string>
+ <string name="cancel_action">Encaboxar</string>
+ <string name="menu_item_add_item">Amestar a la pantalla d\'aniciu</string>
+ <string name="group_applications">Aplicaciones</string>
+ <string name="group_shortcuts">Accesos direutos</string>
+ <string name="group_widgets">Widgets</string>
+ <string name="completely_out_of_space">Nun queda espaciu nes pantalles d\'aniciu.</string>
+ <string name="out_of_space">Nun queda espaciu na pantalla d\'aniciu.</string>
+ <string name="hotseat_out_of_space">Nun queda espaciu na barra d\'accesos direutos</string>
+ <string name="invalid_hotseat_item">Esti widget ye abondo grande pa la barra d\'accesos direutos</string>
+ <string name="shortcut_installed">Creóse l\'accesu direutu \"<xliff:g id="NAME">%s</xliff:g>\".</string>
+ <string name="shortcut_uninstalled">Desanicióse l\'accesu direutu \"<xliff:g id="NAME">%s</xliff:g>\".</string>
+ <string name="shortcut_duplicate">L\'accesu direutu \"<xliff:g id="NAME">%s</xliff:g>\" yá esiste.</string>
+ <string name="title_select_shortcut">Esbilla un accesu direutu</string>
+ <string name="title_select_application">Esbilla una aplicación</string>
+ <string name="all_apps_button_label">Aplicaciones</string>
+ <string name="all_apps_home_button_label">Aniciu</string>
+ <string name="delete_zone_label_workspace">Desaniciar</string>
+ <string name="delete_zone_label_all_apps">Desinstalar</string>
+ <string name="delete_target_label">Desaniciar</string>
+ <string name="delete_target_uninstall_label">Desinstalar</string>
+ <string name="info_target_label">Información de l\'aplicación</string>
+ <string name="accessibility_search_button">Guetar</string>
+ <string name="accessibility_voice_search_button">Gueta por voz</string>
+ <string name="accessibility_all_apps_button">Aplicaciones</string>
+ <string name="accessibility_delete_button">Desaniciar</string>
+ <string name="delete_zone_label_all_apps_system_app">Desinstalar anovamientu</string>
+ <string name="cab_menu_delete_app">Desinstalar aplicación</string>
+ <string name="cab_menu_app_info">Información de l\'aplicación</string>
+ <string name="cab_app_selection_text">1 aplicación esbillada</string>
+ <string name="cab_widget_selection_text">1 widget esbilláu</string>
+ <string name="cab_folder_selection_text">1 carpeta esbillada</string>
+ <string name="cab_shortcut_selection_text">1 accesu direutu esbilláu</string>
+ <string name="permlab_install_shortcut">instalar accesos direutos</string>
+ <string name="permdesc_install_shortcut">Permite qu\'una aplicación amieste accesos direutos ensin intervención del usuariu.</string>
+ <string name="permlab_uninstall_shortcut">desinstalar accesos direutos</string>
+ <string name="permdesc_uninstall_shortcut">Permite que l\'aplicación desanicie
+ accesos direutos ensin intervención del usuariu.</string>
+ <string name="permlab_read_settings">lleer información d\'accesos direutos y d\'axustes</string>
+ <string name="permdesc_read_settings">Permite que l\'aplicación consulte los axustes y
+ los accesos direutos de la pantalla d\'aniciu.</string>
+ <string name="permlab_write_settings">escribir información d\'atayos y d\'axustes de la pantalla d\'aniciu</string>
+ <string name="permdesc_write_settings">Permite que les aplicaciones camuden los axustes y los accesos direutos de la pantalla d\'aniciu.</string>
+ <string name="gadget_error_text">Fallu al cargar el widget</string>
+ <string name="gadget_setup_text">Configuración</string>
+ <string name="uninstall_system_app_text">Esta aplicación ye del sistema y nun pue desinstalase.</string>
+ <string name="dream_name">Rocket Launcher</string>
+ <string name="folder_hint_text">Carpeta ensin nome</string>
+ <string name="workspace_description_format">Pantalla d\'aniciu %1$d</string>
+ <string name="default_scroll_format">Páxina %1$d de %2$d</string>
+ <string name="workspace_scroll_format">Pantalla d\'aniciu %1$d de %2$d</string>
+ <string name="apps_customize_apps_scroll_format">Páxina d\'aplicaciones %1$d de %2$d</string>
+ <string name="apps_customize_widgets_scroll_format">Páxina de widgets %1$d de %2$d</string>
+ <string name="first_run_cling_title">Dámoste l\'acoyida</string>
+ <string name="first_run_cling_description">Personaliza la to pantalla d\'aniciu.</string>
+ <string name="first_run_cling_create_screens_hint">Crea más pantalles p\'aplicaciones y carpetes</string>
+ <string name="migration_cling_title">Copia los tos iconos d\'aplicación</string>
+ <string name="migration_cling_description">¿Importar los iconos y carpetes de les tos pantalles d\'aniciu vieyes?</string>
+ <string name="migration_cling_copy_apps">COPIAR ICONOS</string>
+ <string name="migration_cling_use_default">ANICIAR REFRESCU</string>
+ <string name="workspace_cling_title">Organiza\'l to espaciu</string>
+ <string name="workspace_cling_move_item">Caltén primíu\'l fondu p\'alministrar el fondu pantalla, los widgets y los axustes.</string>
+ <string name="workspace_cling_longpress_title">Fondos pantalla, widgets, &amp; axustes</string>
+ <string name="workspace_cling_longpress_description">Toca y caltén fondu pa personalizar</string>
+ <string name="workspace_cling_longpress_dismiss">FECHO</string>
+ <string name="folder_cling_title">Esto ye una carpeta</string>
+ <string name="folder_cling_create_folder">Pa crear una carpeta como esta, caltén primida una aplicación y muévila sobre otra.</string>
+ <string name="cling_dismiss">Aceutar</string>
+ <string name="dummy_custom_cling_error_message">Error: custom workspace layout passed in but custom cling was not overwritten</string>
+ <string name="folder_opened">Carpeta abierta, <xliff:g id="WIDTH">%1$d</xliff:g> por <xliff:g id="HEIGHT">%2$d</xliff:g></string>
+ <string name="folder_tap_to_close">Primi pa zarrar la carpeta</string>
+ <string name="folder_tap_to_rename">Primi pa camudar el nome nuevu</string>
+ <string name="folder_closed">Carpeta zarrada</string>
+ <string name="folder_renamed">Camudóse\'l nome la carpeta a <xliff:g id="NAME">%1$s</xliff:g></string>
+ <string name="folder_name_format">Carpeta: <xliff:g id="NAME">%1$s</xliff:g></string>
+ <string name="debug_memory_activity">* HPROF</string>
+ <string name="widget_button_text">Widgets</string>
+ <string name="wallpaper_button_text">Fondos de pantalla</string>
+ <string name="settings_button_text">Axustes</string>
+ <string name="package_state_enqueued">Esperando</string>
+ <string name="package_state_downloading">Descargando</string>
+ <string name="package_state_installing">Instalando</string>
+ <string name="package_state_unknown">Desconocíu</string>
+ <string name="package_state_error">Non restauráu</string>
+ <string name="abandoned_clean_all">Desanicialo too</string>
+ <string name="abandoned_clean_this">Desaniciar</string>
+ <string name="abandoned_search">Guetar</string>
+ <string name="abandoned_promises_title">Esta app nun ta instalada</string>
+ <string name="abandoned_promise_explanation">La app pa esti iconu nun ta instalada.
+ Pues desanicialu, o guetar la app ya instalala manualmente.
+ </string>
+</resources>
diff --git a/res/values-az-rAZ/cm_arrays.xml b/res/values-az-rAZ/cm_arrays.xml
new file mode 100644
index 000000000..0e0df59fa
--- /dev/null
+++ b/res/values-az-rAZ/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Heç bir</item>
+ <item>Yaxınlaşdır</item>
+ <item>Uzaqlaşdır</item>
+ <item>Yuxarı döndər</item>
+ <item>Aşağı döndər</item>
+ <item>Kub daxili</item>
+ <item>Kub xarici</item>
+ <item>Yığın</item>
+ <item>Akkordion</item>
+ <item>Çevir</item>
+ <item>Silindir daxili</item>
+ <item>Silindir xarici</item>
+ <item>Karusel</item>
+ <item>İcmal</item>
+ </string-array>
+</resources>
diff --git a/res/values-az-rAZ/cm_strings.xml b/res/values-az-rAZ/cm_strings.xml
new file mode 100644
index 000000000..f9dcf3279
--- /dev/null
+++ b/res/values-az-rAZ/cm_strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">ƏSAS EKRAN TƏNZİMLƏMƏLƏRİ</string>
+ <string name="drawer_settings">TƏTBİQETMƏ MENYUSU</string>
+ <string name="app_settings">TƏTBİQETMƏ TƏNZİMLƏMƏLƏRİ</string>
+ <string name="setting_state_on">AÇIQ</string>
+ <string name="setting_state_off">BAĞLI</string>
+ <string name="themes_button_text">Temalar</string>
+ <string name="scrolling_page_outlines">Səhifə sərhədi</string>
+ <string name="scrolling_fade_adjacent">Yan səhifələri soldur</string>
+ <string name="scrolling_wallpaper">Divar kağızını sürüşdür</string>
+ <string name="grid_size_text">Tor ölçüsü</string>
+ <string name="grid_size_cozy">Rahat</string>
+ <string name="grid_size_condensed">Sıx</string>
+ <string name="preferences_interface_homescreen_custom">Xüsusi ölçü seçin</string>
+ <string name="scroll_effect_text">Sürüşdürmə effekti</string>
+ <string name="sort_mode_title">Başlıq</string>
+ <string name="sort_mode_launch_count">Başlatma sayı</string>
+ <string name="sort_mode_install_time">Quraşdırma müddəti</string>
+ <string name="home_screen_search_text">Axtarış sətri</string>
+ <string name="larger_icons_text">Böyük nişanlar</string>
+ <string name="icon_labels">Nişan etiketləri</string>
+ <string name="icon_labels_show">Göstər</string>
+ <string name="icon_labels_hide">Gizlət</string>
+ <string name="protected_app_settings">Qorunan tətbiqetmələr</string>
+ <string name="dialog_confirm">Təsdiqlə</string>
+</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
deleted file mode 100644
index 2015158d9..000000000
--- a/res/values-be/strings.xml
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
-* Copyright (C) 2008 The Android Open Source Project
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for application_name (5181331383435256801) -->
- <skip />
- <!-- no translation found for home (7658288663002113681) -->
- <skip />
- <!-- no translation found for uid_name (7820867637514617527) -->
- <skip />
- <string name="folder_name" msgid="7371454440695724752"></string>
- <!-- no translation found for wallpaper_instructions (563973358787555519) -->
- <skip />
- <!-- no translation found for image_load_fail (2821429163328561136) -->
- <skip />
- <!-- no translation found for wallpaper_load_fail (1261270681127096352) -->
- <skip />
- <!-- no translation found for number_of_items_selected:zero (7464587177007785408) -->
- <!-- no translation found for number_of_items_selected:one (142482526010824029) -->
- <!-- no translation found for number_of_items_selected:other (1418352074806573570) -->
- <!-- no translation found for wallpaper_accessibility_name (1655953108132967972) -->
- <skip />
- <!-- no translation found for announce_selection (8338254712932127413) -->
- <skip />
- <!-- no translation found for wallpaper_delete (8095005658756613921) -->
- <skip />
- <!-- no translation found for pick_image (1272073934062909527) -->
- <skip />
- <!-- no translation found for pick_wallpaper (8179698221502010609) -->
- <skip />
- <!-- no translation found for crop_wallpaper (8334345984491368009) -->
- <skip />
- <!-- no translation found for activity_not_found (8071924732094499514) -->
- <skip />
- <!-- no translation found for widgets_tab_label (2921133187116603919) -->
- <skip />
- <!-- no translation found for widget_adder (3201040140710381657) -->
- <skip />
- <!-- no translation found for toggle_weight_watcher (5645299835184636119) -->
- <skip />
- <!-- no translation found for long_press_widget_to_add (7699152356777458215) -->
- <skip />
- <!-- no translation found for market (2619650989819296998) -->
- <skip />
- <!-- no translation found for widget_dims_format (2370757736025621599) -->
- <skip />
- <!-- no translation found for external_drop_widget_error (3165821058322217155) -->
- <skip />
- <!-- no translation found for external_drop_widget_pick_title (3486317258037690630) -->
- <skip />
- <!-- no translation found for rename_folder_label (3727762225964550653) -->
- <skip />
- <!-- no translation found for rename_folder_title (3771389277707820891) -->
- <skip />
- <!-- no translation found for rename_action (5559600076028658757) -->
- <skip />
- <!-- no translation found for cancel_action (7009134900002915310) -->
- <skip />
- <!-- no translation found for menu_item_add_item (1264911265836810421) -->
- <skip />
- <!-- no translation found for group_applications (3797214114206693605) -->
- <skip />
- <!-- no translation found for group_shortcuts (6012256992764410535) -->
- <skip />
- <!-- no translation found for group_widgets (1569030723286851002) -->
- <skip />
- <!-- no translation found for completely_out_of_space (6106288382070760318) -->
- <skip />
- <!-- no translation found for out_of_space (4691004494942118364) -->
- <skip />
- <!-- no translation found for hotseat_out_of_space (9139760413395605841) -->
- <skip />
- <!-- no translation found for invalid_hotseat_item (1211534262129849507) -->
- <skip />
- <!-- no translation found for shortcut_installed (1701742129426969556) -->
- <skip />
- <!-- no translation found for shortcut_uninstalled (8176767991305701821) -->
- <skip />
- <!-- no translation found for shortcut_duplicate (9167217446062498127) -->
- <skip />
- <!-- no translation found for title_select_shortcut (6680642571148153868) -->
- <skip />
- <!-- no translation found for title_select_application (3280812711670683644) -->
- <skip />
- <!-- no translation found for all_apps_button_label (9110807029020582876) -->
- <skip />
- <!-- no translation found for all_apps_home_button_label (252062713717058851) -->
- <skip />
- <!-- no translation found for delete_zone_label_workspace (4009607676751398685) -->
- <skip />
- <!-- no translation found for delete_zone_label_all_apps (8083826390278958980) -->
- <skip />
- <!-- no translation found for delete_target_label (1822697352535677073) -->
- <skip />
- <!-- no translation found for delete_target_uninstall_label (5100785476250872595) -->
- <skip />
- <!-- no translation found for info_target_label (8053346143994679532) -->
- <skip />
- <!-- no translation found for accessibility_search_button (1628520399424565142) -->
- <skip />
- <!-- no translation found for accessibility_voice_search_button (4637324840434406584) -->
- <skip />
- <!-- no translation found for accessibility_all_apps_button (2603132375383800483) -->
- <skip />
- <!-- no translation found for accessibility_delete_button (6466114477993744621) -->
- <skip />
- <!-- no translation found for delete_zone_label_all_apps_system_app (449755632749610895) -->
- <skip />
- <!-- no translation found for cab_menu_delete_app (7435191475867183689) -->
- <skip />
- <!-- no translation found for cab_menu_app_info (8593722221450362342) -->
- <skip />
- <!-- no translation found for cab_app_selection_text (374688303047985416) -->
- <skip />
- <!-- no translation found for cab_widget_selection_text (1833458597831541241) -->
- <skip />
- <!-- no translation found for cab_folder_selection_text (7999992513806132118) -->
- <skip />
- <!-- no translation found for cab_shortcut_selection_text (2103811025667946450) -->
- <skip />
- <!-- no translation found for permlab_install_shortcut (5632423390354674437) -->
- <skip />
- <!-- no translation found for permdesc_install_shortcut (923466509822011139) -->
- <skip />
- <!-- no translation found for permlab_uninstall_shortcut (864595034498083837) -->
- <skip />
- <!-- no translation found for permdesc_uninstall_shortcut (5134129545001836849) -->
- <skip />
- <!-- no translation found for permlab_read_settings (1941457408239617576) -->
- <skip />
- <!-- no translation found for permdesc_read_settings (5833423719057558387) -->
- <skip />
- <!-- no translation found for permlab_write_settings (3574213698004620587) -->
- <skip />
- <!-- no translation found for permdesc_write_settings (5440712911516509985) -->
- <skip />
- <!-- no translation found for gadget_error_text (6081085226050792095) -->
- <skip />
- <!-- no translation found for uninstall_system_app_text (4172046090762920660) -->
- <skip />
- <!-- no translation found for dream_name (1530253749244328964) -->
- <skip />
- <!-- no translation found for folder_hint_text (6617836969016293992) -->
- <skip />
- <!-- no translation found for workspace_description_format (2950174241104043327) -->
- <skip />
- <!-- no translation found for default_scroll_format (7475544710230993317) -->
- <skip />
- <!-- no translation found for workspace_scroll_format (8458889198184077399) -->
- <skip />
- <!-- no translation found for apps_customize_apps_scroll_format (370005296147130238) -->
- <skip />
- <!-- no translation found for apps_customize_widgets_scroll_format (3106209519974971521) -->
- <skip />
- <!-- no translation found for first_run_cling_title (7257389003637362144) -->
- <skip />
- <!-- no translation found for first_run_cling_description (6447072552696253358) -->
- <skip />
- <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string>
- <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string>
- <!-- no translation found for first_run_cling_create_screens_hint (6950729526680114157) -->
- <skip />
- <!-- no translation found for workspace_cling_title (5626202359865825661) -->
- <skip />
- <!-- no translation found for workspace_cling_move_item (528201129978005352) -->
- <skip />
- <!-- no translation found for folder_cling_title (3894908818693254164) -->
- <skip />
- <!-- no translation found for folder_cling_create_folder (6158215559475836131) -->
- <skip />
- <!-- no translation found for cling_dismiss (8962359497601507581) -->
- <skip />
- <!-- no translation found for folder_opened (94695026776264709) -->
- <skip />
- <!-- no translation found for folder_tap_to_close (1884479294466410023) -->
- <skip />
- <!-- no translation found for folder_tap_to_rename (9191075570492871147) -->
- <skip />
- <!-- no translation found for folder_closed (4100806530910930934) -->
- <skip />
- <!-- no translation found for folder_renamed (1794088362165669656) -->
- <skip />
- <!-- no translation found for folder_name_format (6629239338071103179) -->
- <skip />
- <string name="custom_workspace_cling_title_1" msgid="3750880082935033085"></string>
- <string name="custom_workspace_cling_description_1" msgid="939966842147696724"></string>
- <string name="custom_workspace_cling_title_2" msgid="662588444436552198"></string>
- <string name="custom_workspace_cling_description_2" msgid="8097921091798539310"></string>
- <!-- no translation found for widget_button_text (2880537293434387943) -->
- <skip />
- <!-- no translation found for wallpaper_button_text (8404103075899945851) -->
- <skip />
- <!-- no translation found for settings_button_text (8119458837558863227) -->
- <skip />
-</resources>
diff --git a/res/values-bn-rBD/cm_arrays.xml b/res/values-bn-rBD/cm_arrays.xml
new file mode 100644
index 000000000..886fce712
--- /dev/null
+++ b/res/values-bn-rBD/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>কোনটি না</item>
+ <item>জুম ইন</item>
+ <item>জুম আউট</item>
+ <item>Rotate up</item>
+ <item>Rotate down</item>
+ <item>Cube in</item>
+ <item>Cube out</item>
+ <item>Stack</item>
+ <item>Accordion</item>
+ <item>Flip</item>
+ <item>Cylinder in</item>
+ <item>Cylinder out</item>
+ <item>Carousel</item>
+ <item>Overview</item>
+ </string-array>
+</resources>
diff --git a/res/values-bn-rBD/cm_strings.xml b/res/values-bn-rBD/cm_strings.xml
new file mode 100644
index 000000000..a54889156
--- /dev/null
+++ b/res/values-bn-rBD/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_settings">অ্যাপ এর রুপান্তর নির্ধারণ</string>
+</resources>
diff --git a/res/values-ca/cm_arrays.xml b/res/values-ca/cm_arrays.xml
new file mode 100644
index 000000000..9895c3eb5
--- /dev/null
+++ b/res/values-ca/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Cap</item>
+ <item>Amplia</item>
+ <item>Allunya</item>
+ <item>Rota amunt</item>
+ <item>Rota avall</item>
+ <item>Cúbic entrant</item>
+ <item>Cúbic sortint</item>
+ <item>Apila</item>
+ <item>Acordió</item>
+ <item>Regira</item>
+ <item>Cilíndric entrant</item>
+ <item>Cilíndric sortint</item>
+ <item>Carrusel</item>
+ <item>Perspectiva general</item>
+ </string-array>
+</resources>
diff --git a/res/values-ca/cm_strings.xml b/res/values-ca/cm_strings.xml
new file mode 100644
index 000000000..665cb3c75
--- /dev/null
+++ b/res/values-ca/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">CONFIGURACIÓ DE LA PANTALLA D\'INICI</string>
+ <string name="drawer_settings">CONFIGURACIÓ DEL CALAIX</string>
+ <string name="app_settings">CONFIGURACIÓ DE L\'APP</string>
+ <string name="setting_state_on">SÍ</string>
+ <string name="setting_state_off">NO</string>
+ <string name="themes_button_text">Temes</string>
+ <string name="scrolling_page_outlines">Vores de la pàgina</string>
+ <string name="scrolling_fade_adjacent">Esvaeix els costats de les pàgines</string>
+ <string name="scrolling_wallpaper">Desplaça el fons de pantalla</string>
+ <string name="grid_size_text">Mida de la graella</string>
+ <string name="grid_size_comfortable">Còmoda</string>
+ <string name="grid_size_cozy">Acollidora</string>
+ <string name="grid_size_condensed">Condensada</string>
+ <string name="grid_size_custom">Personalitzat (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Selecciona la mida personalitzada</string>
+ <string name="scroll_effect_text">Efecte desplaçament</string>
+ <string name="drawer_sorting_text">Mode d\'ordenació</string>
+ <string name="sort_mode_title">Títol</string>
+ <string name="sort_mode_launch_count">Vegades executat</string>
+ <string name="sort_mode_install_time">Hora d\'instal·lació</string>
+ <string name="home_screen_search_text">Barra de cerca</string>
+ <string name="larger_icons_text">Icones grans</string>
+ <string name="icon_labels">Etiquetes de les icones</string>
+ <string name="icon_labels_show">Mostra</string>
+ <string name="icon_labels_hide">Amaga</string>
+ <string name="protected_app_settings">Apps protegides</string>
+ <string name="dialog_confirm">Confirma</string>
+</resources>
diff --git a/res/values-cs/cm_arrays.xml b/res/values-cs/cm_arrays.xml
new file mode 100644
index 000000000..43a35bb7a
--- /dev/null
+++ b/res/values-cs/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Žádný</item>
+ <item>Příblížení</item>
+ <item>Oddálení</item>
+ <item>Otočení nahoru</item>
+ <item>Otočení dolu</item>
+ <item>Uvnitř krychle</item>
+ <item>Vně krychle</item>
+ <item>Vrstvy</item>
+ <item>Harmonika</item>
+ <item>Překlopení</item>
+ <item>Uvnitř válce</item>
+ <item>Mimo válec</item>
+ <item>Kolotoč</item>
+ <item>Přehled</item>
+ </string-array>
+</resources>
diff --git a/res/values-cs/cm_strings.xml b/res/values-cs/cm_strings.xml
new file mode 100644
index 000000000..2b4257195
--- /dev/null
+++ b/res/values-cs/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">NASTAVENÍ DOMOVSKÉ OBRAZOVKY</string>
+ <string name="drawer_settings">NASTAVENÍ SLOŽKY</string>
+ <string name="app_settings">NASTAVENÍ APL</string>
+ <string name="setting_state_on">Zap.</string>
+ <string name="setting_state_off">Vyp.</string>
+ <string name="themes_button_text">Motivy</string>
+ <string name="scrolling_page_outlines">Ohraničení stránek</string>
+ <string name="scrolling_fade_adjacent">Prolínat hrany ploch</string>
+ <string name="scrolling_wallpaper">Posouvání tapety</string>
+ <string name="grid_size_text">Velikost mřížky</string>
+ <string name="grid_size_comfortable">Komfortní</string>
+ <string name="grid_size_cozy">Pohodlná</string>
+ <string name="grid_size_condensed">Zůžená</string>
+ <string name="grid_size_custom">Vlastní (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Zvolte vlastní velikost</string>
+ <string name="scroll_effect_text">Efekt přechodu</string>
+ <string name="drawer_sorting_text">Režim třídění</string>
+ <string name="sort_mode_title">Název</string>
+ <string name="sort_mode_launch_count">Počet spuštění</string>
+ <string name="sort_mode_install_time">Čas instalace</string>
+ <string name="home_screen_search_text">Vyhledávací lišta</string>
+ <string name="larger_icons_text">Větší ikony</string>
+ <string name="icon_labels">Popisky ikon</string>
+ <string name="icon_labels_show">Zobrazit</string>
+ <string name="icon_labels_hide">Skrýt</string>
+ <string name="protected_app_settings">Chráněné aplikace</string>
+ <string name="dialog_confirm">Potvrdit</string>
+</resources>
diff --git a/res/values-da/cm_arrays.xml b/res/values-da/cm_arrays.xml
new file mode 100644
index 000000000..43c85521d
--- /dev/null
+++ b/res/values-da/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Ingen</item>
+ <item>Zoom ind</item>
+ <item>Zoom ud</item>
+ <item>Rotere op</item>
+ <item>Rotere ned</item>
+ <item>Indvendig terning</item>
+ <item>Udvendig terning</item>
+ <item>Stak</item>
+ <item>Harmonika</item>
+ <item>Flip</item>
+ <item>Indvendig cylinder</item>
+ <item>Udvendig cylinder</item>
+ <item>Karrusel</item>
+ <item>Overblik</item>
+ </string-array>
+</resources>
diff --git a/res/values-da/cm_strings.xml b/res/values-da/cm_strings.xml
new file mode 100644
index 000000000..0f571e564
--- /dev/null
+++ b/res/values-da/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">INDSTILLINGER FOR STARTSKÆRM</string>
+ <string name="drawer_settings">INDSTILLINGER FOR OVERSIGT</string>
+ <string name="app_settings">APP-INDSTILLINGER</string>
+ <string name="setting_state_on">TIL</string>
+ <string name="setting_state_off">FRA</string>
+ <string name="themes_button_text">Temaer</string>
+ <string name="scrolling_page_outlines">Sideomrids</string>
+ <string name="scrolling_fade_adjacent">Sideovergange</string>
+ <string name="scrolling_wallpaper">Rul baggrund</string>
+ <string name="grid_size_text">Gitterstørrelse</string>
+ <string name="grid_size_comfortable">Behageligt</string>
+ <string name="grid_size_cozy">Hyggeligt</string>
+ <string name="grid_size_condensed">Sammentrængt</string>
+ <string name="grid_size_custom">Brugerdefineret (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Vælg brugerdefineret størrelse</string>
+ <string name="scroll_effect_text">Rulleeffekt</string>
+ <string name="drawer_sorting_text">Sorteringstilstand</string>
+ <string name="sort_mode_title">Titel</string>
+ <string name="sort_mode_launch_count">Antal gange brugt</string>
+ <string name="sort_mode_install_time">Installationstidspunkt</string>
+ <string name="home_screen_search_text">Søgelinje</string>
+ <string name="larger_icons_text">Større ikoner</string>
+ <string name="icon_labels">Ikontekster</string>
+ <string name="icon_labels_show">Vis</string>
+ <string name="icon_labels_hide">Skjul</string>
+ <string name="protected_app_settings">Beskyttede apps</string>
+ <string name="dialog_confirm">Bekræft</string>
+</resources>
diff --git a/res/values-de/cm_arrays.xml b/res/values-de/cm_arrays.xml
new file mode 100644
index 000000000..a4ea2ce1b
--- /dev/null
+++ b/res/values-de/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Keine</item>
+ <item>Hineinzoomen</item>
+ <item>Herauszoomen</item>
+ <item>Rotieren oben</item>
+ <item>Rotieren unten</item>
+ <item>Würfel innen</item>
+ <item>Würfel außen</item>
+ <item>Stapeln</item>
+ <item>Akkordeon</item>
+ <item>Blättern</item>
+ <item>Zylinder innen</item>
+ <item>Zylinder außen</item>
+ <item>Karussell</item>
+ <item>Übersicht</item>
+ </string-array>
+</resources>
diff --git a/res/values-de/cm_strings.xml b/res/values-de/cm_strings.xml
new file mode 100644
index 000000000..872d728a2
--- /dev/null
+++ b/res/values-de/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">STARTBILDSCHIRM-EINSTELLUNGEN</string>
+ <string name="drawer_settings">APP-ÜBERSICHT-EINSTELLUNGEN</string>
+ <string name="app_settings">APP-EINSTELLUNGEN</string>
+ <string name="setting_state_on">AN</string>
+ <string name="setting_state_off">AUS</string>
+ <string name="themes_button_text">Designs</string>
+ <string name="scrolling_page_outlines">Seitenumriss anzeigen</string>
+ <string name="scrolling_fade_adjacent">Seiten einblenden</string>
+ <string name="scrolling_wallpaper">Hintergrundbild scrollen</string>
+ <string name="grid_size_text">Rastergröße</string>
+ <string name="grid_size_comfortable">Normal</string>
+ <string name="grid_size_cozy">Mittel</string>
+ <string name="grid_size_condensed">Klein</string>
+ <string name="grid_size_custom">Benutzerdefiniert (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Benutzerdefinierte Größe auswählen</string>
+ <string name="scroll_effect_text">Scroll-Effekt</string>
+ <string name="drawer_sorting_text">Sortiermodus</string>
+ <string name="sort_mode_title">Titel</string>
+ <string name="sort_mode_launch_count">Aufrufanzahl</string>
+ <string name="sort_mode_install_time">Installationsdatum</string>
+ <string name="home_screen_search_text">Suchleiste</string>
+ <string name="larger_icons_text">Große Symbole</string>
+ <string name="icon_labels">Symbol-Beschriftungen</string>
+ <string name="icon_labels_show">Anzeigen</string>
+ <string name="icon_labels_hide">Verbergen</string>
+ <string name="protected_app_settings">Geschützte Apps</string>
+ <string name="dialog_confirm">Bestätigen</string>
+</resources>
diff --git a/res/values-el/cm_arrays.xml b/res/values-el/cm_arrays.xml
new file mode 100644
index 000000000..561f2611d
--- /dev/null
+++ b/res/values-el/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Κανένα</item>
+ <item>Μεγέθυνση</item>
+ <item>Σμίκρυνση</item>
+ <item>Περιστροφή επάνω</item>
+ <item>Περιστροφή κάτω</item>
+ <item>Κύβος μέσα</item>
+ <item>Κύβος έξω</item>
+ <item>Στοίβα</item>
+ <item>Ακορντεόν</item>
+ <item>Αναποδογύρισμα</item>
+ <item>Κύλινδρος μέσα</item>
+ <item>Κύλινδρος έξω</item>
+ <item>Καρουσέλ</item>
+ <item>Επισκόπηση</item>
+ </string-array>
+</resources>
diff --git a/res/values-el/cm_strings.xml b/res/values-el/cm_strings.xml
new file mode 100644
index 000000000..a49e89176
--- /dev/null
+++ b/res/values-el/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">ΡΥΘΜΙΣΕΙΣ ΑΡΧΙΚΗΣ ΟΘΟΝΗΣ</string>
+ <string name="drawer_settings">ΡΥΘΜΙΣΕΙΣ ΣΥΡΤΑΡΙΟΥ</string>
+ <string name="app_settings">ΡΥΘΜΙΣΕΙΣ ΕΦΑΡΜΟΓΩΝ</string>
+ <string name="setting_state_on">ΕΝΕΡΓΟ</string>
+ <string name="setting_state_off">ΑΝΕΝΕΡΓΟ</string>
+ <string name="themes_button_text">Θέματα</string>
+ <string name="scrolling_page_outlines">Περίγραμμα σελιδών</string>
+ <string name="scrolling_fade_adjacent">Ξεθώριασμα πλευρικών σελίδων</string>
+ <string name="scrolling_wallpaper">Κύλιση ταπετσαρίας</string>
+ <string name="grid_size_text">Μέγεθος πλέγματος</string>
+ <string name="grid_size_comfortable">Άνετο</string>
+ <string name="grid_size_cozy">Κανονικό</string>
+ <string name="grid_size_condensed">Συμπυκνωμένο</string>
+ <string name="grid_size_custom">Προσαρμοσμένο (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Επιλέξτε προσαρμοσμένο μέγεθος</string>
+ <string name="scroll_effect_text">Εφέ κύλισης</string>
+ <string name="drawer_sorting_text">Ταξινόμηση</string>
+ <string name="sort_mode_title">Τίτλος</string>
+ <string name="sort_mode_launch_count">Αριθμός εκκινήσεων</string>
+ <string name="sort_mode_install_time">Χρόνος εγκατάστασης</string>
+ <string name="home_screen_search_text">Μπάρα αναζήτησης</string>
+ <string name="larger_icons_text">Μεγαλύτερα εικονίδια</string>
+ <string name="icon_labels">Ετικέτες εικονιδίων</string>
+ <string name="icon_labels_show">Εμφάνιση</string>
+ <string name="icon_labels_hide">Απόκρυψη</string>
+ <string name="protected_app_settings">Προστατευμένες εφαρμογές</string>
+ <string name="dialog_confirm">Επιβεβαίωση</string>
+</resources>
diff --git a/res/values-en-rAU/cm_strings.xml b/res/values-en-rAU/cm_strings.xml
new file mode 100644
index 000000000..4b4145c2c
--- /dev/null
+++ b/res/values-en-rAU/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">HOME SCREEN SETTINGS</string>
+ <string name="drawer_settings">DRAWER SETTINGS</string>
+ <string name="app_settings">APP SETTINGS</string>
+ <string name="setting_state_on">ON</string>
+ <string name="setting_state_off">OFF</string>
+ <string name="themes_button_text">Themes</string>
+ <string name="scrolling_page_outlines">Page outlines</string>
+ <string name="scrolling_fade_adjacent">Fade side pages</string>
+ <string name="scrolling_wallpaper">Scroll wallpaper</string>
+ <string name="grid_size_text">Grid size</string>
+ <string name="grid_size_comfortable">Comfortable</string>
+ <string name="grid_size_cozy">Cozy</string>
+ <string name="grid_size_condensed">Condensed</string>
+ <string name="grid_size_custom">Custom (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Select custom size</string>
+ <string name="scroll_effect_text">Scroll effect</string>
+ <string name="drawer_sorting_text">Sorting mode</string>
+ <string name="sort_mode_title">Title</string>
+ <string name="sort_mode_launch_count">Launch count</string>
+ <string name="sort_mode_install_time">Install time</string>
+ <string name="home_screen_search_text">Search bar</string>
+ <string name="larger_icons_text">Larger icons</string>
+ <string name="icon_labels">Icon labels</string>
+ <string name="icon_labels_show">Show</string>
+ <string name="icon_labels_hide">Hide</string>
+ <string name="protected_app_settings">Protected apps</string>
+ <string name="dialog_confirm">Confirm</string>
+</resources>
diff --git a/res/values-es/cm_arrays.xml b/res/values-es/cm_arrays.xml
new file mode 100644
index 000000000..1d16cfd00
--- /dev/null
+++ b/res/values-es/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Ninguno</item>
+ <item>Zoom entrante</item>
+ <item>Zoom saliente</item>
+ <item>Rotar arriba</item>
+ <item>Rotar abajo</item>
+ <item>Cúbico entrante</item>
+ <item>Cúbico saliente</item>
+ <item>Apilar</item>
+ <item>Acordeón</item>
+ <item>Voltear</item>
+ <item>Cilíndrico entrante</item>
+ <item>Cilíndrico saliente</item>
+ <item>Carrusel</item>
+ <item>Perspectiva</item>
+ </string-array>
+</resources>
diff --git a/res/values-es/cm_strings.xml b/res/values-es/cm_strings.xml
new file mode 100644
index 000000000..15880f3f7
--- /dev/null
+++ b/res/values-es/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">AJUSTES DE INICIO</string>
+ <string name="drawer_settings">AJUSTES DE LAS APLICACIONES</string>
+ <string name="app_settings">AJUSTES DE LAS APLICACIONES</string>
+ <string name="setting_state_on">SÍ</string>
+ <string name="setting_state_off">NO</string>
+ <string name="themes_button_text">Temas</string>
+ <string name="scrolling_page_outlines">Bordes de pantalla</string>
+ <string name="scrolling_fade_adjacent">Efecto de fundido</string>
+ <string name="scrolling_wallpaper">Desplazar fondo de pantalla</string>
+ <string name="grid_size_text">Tamaño de la cuadrícula</string>
+ <string name="grid_size_comfortable">Normal</string>
+ <string name="grid_size_cozy">Cómoda</string>
+ <string name="grid_size_condensed">Comprimida</string>
+ <string name="grid_size_custom">Personalizado (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Selecciona el tamaño personalizado</string>
+ <string name="scroll_effect_text">Efecto de desplazamiento</string>
+ <string name="drawer_sorting_text">Modo de ordenación</string>
+ <string name="sort_mode_title">Título</string>
+ <string name="sort_mode_launch_count">Veces ejecutado</string>
+ <string name="sort_mode_install_time">Fecha de instalación</string>
+ <string name="home_screen_search_text">Barra de búsqueda</string>
+ <string name="larger_icons_text">Iconos grandes</string>
+ <string name="icon_labels">Etiquetas de iconos</string>
+ <string name="icon_labels_show">Mostrar</string>
+ <string name="icon_labels_hide">Ocultar</string>
+ <string name="protected_app_settings">Aplicaciones protegidas</string>
+ <string name="dialog_confirm">Confirmar</string>
+</resources>
diff --git a/res/values-et-rEE/cm_arrays.xml b/res/values-et-rEE/cm_arrays.xml
new file mode 100644
index 000000000..420fd97e3
--- /dev/null
+++ b/res/values-et-rEE/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Puudub</item>
+ <item>Suumi sisse</item>
+ <item>Suumi välja</item>
+ <item>Pööra üles</item>
+ <item>Pööra alla</item>
+ <item>Kuubik sisse</item>
+ <item>Kuubik välja</item>
+ <item>Kihid</item>
+ <item>Akordion</item>
+ <item>Pööra ümber</item>
+ <item>Silinder sisse</item>
+ <item>Silinder välja</item>
+ <item>Karussell</item>
+ <item>Ülevaade</item>
+ </string-array>
+</resources>
diff --git a/res/values-et-rEE/cm_strings.xml b/res/values-et-rEE/cm_strings.xml
new file mode 100644
index 000000000..84860e737
--- /dev/null
+++ b/res/values-et-rEE/cm_strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">KODUEKRAANI SEADED</string>
+ <string name="drawer_settings">SAHTLI SEADED</string>
+ <string name="app_settings">RAKENDUSE SEADED</string>
+ <string name="setting_state_on">SEES</string>
+ <string name="setting_state_off">VÄLJAS</string>
+ <string name="themes_button_text">Teemad</string>
+ <string name="scrolling_page_outlines">Lehe äärisjooned</string>
+ <string name="scrolling_fade_adjacent">Sulanda äärislehed</string>
+ <string name="scrolling_wallpaper">Keri taustapilti</string>
+ <string name="grid_size_text">Ruudustiku suurus</string>
+ <string name="grid_size_comfortable">Mugav</string>
+ <string name="grid_size_cozy">Kodune</string>
+ <string name="grid_size_condensed">Kärbitud</string>
+ <string name="preferences_interface_homescreen_custom">Vali sobiv suurus</string>
+ <string name="scroll_effect_text">Kerimisefekt</string>
+ <string name="drawer_sorting_text">Sortimisrežiim</string>
+ <string name="sort_mode_title">Pealkiri</string>
+ <string name="sort_mode_launch_count">Käivitamiste arv</string>
+ <string name="sort_mode_install_time">Installeerimise aeg</string>
+ <string name="home_screen_search_text">Otsinguriba</string>
+ <string name="larger_icons_text">Suuremad ikoonid</string>
+ <string name="icon_labels">Ikooni sildid</string>
+ <string name="icon_labels_show">Näita</string>
+ <string name="icon_labels_hide">Peida</string>
+ <string name="protected_app_settings">Kaitstud rakendused</string>
+ <string name="dialog_confirm">Kinnita</string>
+</resources>
diff --git a/res/values-eu-rES/cm_arrays.xml b/res/values-eu-rES/cm_arrays.xml
new file mode 100644
index 000000000..7f2cc6518
--- /dev/null
+++ b/res/values-eu-rES/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Bat ere ez</item>
+ <item>Zoom sarkorra</item>
+ <item>Zoom irtenkorra</item>
+ <item>Gorantz biratu</item>
+ <item>Beherantz biratu</item>
+ <item>Kubiko sarkorra</item>
+ <item>Kubiko irtenkorra</item>
+ <item>Pilatu</item>
+ <item>Akordeoia</item>
+ <item>Irauli</item>
+ <item>Zilindro sarkorra</item>
+ <item>Zilindro irtenkorra</item>
+ <item>Zaldiko-maldikoa</item>
+ <item>Perspektiba</item>
+ </string-array>
+</resources>
diff --git a/res/values-eu-rES/cm_strings.xml b/res/values-eu-rES/cm_strings.xml
new file mode 100644
index 000000000..23a547386
--- /dev/null
+++ b/res/values-eu-rES/cm_strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">HASIERA PANTAILAREN EZARPENAK</string>
+ <string name="drawer_settings">APLIKAZIOEN EZARPENAK</string>
+ <string name="app_settings">APLIKAZIOAREN EZARPENAK</string>
+ <string name="setting_state_on">BAI</string>
+ <string name="setting_state_off">EZ</string>
+ <string name="themes_button_text">Gaiak</string>
+ <string name="scrolling_page_outlines">Pantaila ertzak</string>
+ <string name="scrolling_fade_adjacent">Bat egite efektua</string>
+ <string name="scrolling_wallpaper">Hormairudia mugitu</string>
+ <string name="grid_size_text">Sarearen tamaina</string>
+ <string name="grid_size_comfortable">Arrunta</string>
+ <string name="grid_size_cozy">Erosoa</string>
+ <string name="grid_size_condensed">Konprimatua</string>
+ <string name="preferences_interface_homescreen_custom">Tamaina pertsonalizatua hautatu</string>
+ <string name="scroll_effect_text">Mugitze efektua</string>
+ <string name="drawer_sorting_text">Antolatze era</string>
+ <string name="sort_mode_title">Izena</string>
+ <string name="sort_mode_launch_count">Zenbat aldiz exekutatua</string>
+ <string name="sort_mode_install_time">Noiz instalatua</string>
+ <string name="home_screen_search_text">Bilaketa barra</string>
+ <string name="larger_icons_text">Ikono handiak</string>
+ <string name="icon_labels">Ikonoen etiketak</string>
+ <string name="icon_labels_show">Erakutsi</string>
+ <string name="icon_labels_hide">izkutatu</string>
+ <string name="protected_app_settings">Babesturiko aplikazioak</string>
+ <string name="dialog_confirm">Berretsi</string>
+</resources>
diff --git a/res/values-fi/cm_arrays.xml b/res/values-fi/cm_arrays.xml
new file mode 100644
index 000000000..d6218f8d2
--- /dev/null
+++ b/res/values-fi/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Ei mitään</item>
+ <item>Lähennä</item>
+ <item>Loitonna</item>
+ <item>Käännä ylös</item>
+ <item>Käännä alas</item>
+ <item>Kuutio sisään</item>
+ <item>Kuutio ulos</item>
+ <item>Pino</item>
+ <item>Harmonikka</item>
+ <item>Käännä</item>
+ <item>Sylinteri sisään</item>
+ <item>Sylinteri ulos</item>
+ <item>Karuselli</item>
+ <item>Yhteenveto</item>
+ </string-array>
+</resources>
diff --git a/res/values-fi/cm_strings.xml b/res/values-fi/cm_strings.xml
new file mode 100644
index 000000000..a6eab9f23
--- /dev/null
+++ b/res/values-fi/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">KOTINÄYTÖN ASETUKSET</string>
+ <string name="drawer_settings">SOVELLUSVALIKON ASETUKSET</string>
+ <string name="app_settings">SOVELLUKSEN ASETUKSET</string>
+ <string name="setting_state_on">PÄÄLLÄ</string>
+ <string name="setting_state_off">POIS</string>
+ <string name="themes_button_text">Teemat</string>
+ <string name="scrolling_page_outlines">Sivun ulkoreunat</string>
+ <string name="scrolling_fade_adjacent">Häivytä sivun reunat</string>
+ <string name="scrolling_wallpaper">Vieritä taustakuvaa</string>
+ <string name="grid_size_text">Ruudukon koko</string>
+ <string name="grid_size_comfortable">Mukava</string>
+ <string name="grid_size_cozy">Kodikas</string>
+ <string name="grid_size_condensed">Tiivistetty</string>
+ <string name="grid_size_custom">Mukautettu (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Valitse mukautettu koko</string>
+ <string name="scroll_effect_text">Vieritysefekti</string>
+ <string name="drawer_sorting_text">Lajittelu</string>
+ <string name="sort_mode_title">Nimi</string>
+ <string name="sort_mode_launch_count">Käynnistyskerrat</string>
+ <string name="sort_mode_install_time">Asennuspäivä</string>
+ <string name="home_screen_search_text">Hakupalkki</string>
+ <string name="larger_icons_text">Suuremmat kuvakkeet</string>
+ <string name="icon_labels">Kuvakkeiden otsikot</string>
+ <string name="icon_labels_show">Näytä</string>
+ <string name="icon_labels_hide">Piilota</string>
+ <string name="protected_app_settings">Suojatut sovellukset</string>
+ <string name="dialog_confirm">Vahvista</string>
+</resources>
diff --git a/res/values-fr/cm_arrays.xml b/res/values-fr/cm_arrays.xml
new file mode 100644
index 000000000..6d8e088cd
--- /dev/null
+++ b/res/values-fr/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Aucun</item>
+ <item>Zoom</item>
+ <item>Dézoom</item>
+ <item>Rotation vers le haut</item>
+ <item>Rotation vers le bas</item>
+ <item>Cube intérieur</item>
+ <item>Cube extérieur</item>
+ <item>Empilement</item>
+ <item>Accordéon</item>
+ <item>Retourner</item>
+ <item>Cylindre intérieur</item>
+ <item>Cylindre extérieur</item>
+ <item>Carrousel</item>
+ <item>Aperçu</item>
+ </string-array>
+</resources>
diff --git a/res/values-fr/cm_strings.xml b/res/values-fr/cm_strings.xml
new file mode 100644
index 000000000..a7d826a48
--- /dev/null
+++ b/res/values-fr/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">PARAMÈTRES DE L\'ÉCRAN D\'ACCUEIL</string>
+ <string name="drawer_settings">PARAMÈTRES DE L\'ÉCRAN DES APPLICATIONS</string>
+ <string name="app_settings">PARAMÈTRES DE L\'APPLICATION</string>
+ <string name="setting_state_on">OUI</string>
+ <string name="setting_state_off">NON</string>
+ <string name="themes_button_text">Thèmes</string>
+ <string name="scrolling_page_outlines">Espacement des pages</string>
+ <string name="scrolling_fade_adjacent">Estomper les pages adjacentes</string>
+ <string name="scrolling_wallpaper">Défilement du fond d\'écran</string>
+ <string name="grid_size_text">Taille de la grille</string>
+ <string name="grid_size_comfortable">Confortable</string>
+ <string name="grid_size_cozy">Cosy</string>
+ <string name="grid_size_condensed">Condensé</string>
+ <string name="grid_size_custom">Personnalisé (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Sélectionner la taille personnalisée</string>
+ <string name="scroll_effect_text">Effet de défilement</string>
+ <string name="drawer_sorting_text">Mode de tri</string>
+ <string name="sort_mode_title">Titre</string>
+ <string name="sort_mode_launch_count">Nombre de lancements</string>
+ <string name="sort_mode_install_time">Date d\'installation</string>
+ <string name="home_screen_search_text">Barre de recherche</string>
+ <string name="larger_icons_text">Grandes icônes</string>
+ <string name="icon_labels">Nom des icônes</string>
+ <string name="icon_labels_show">Afficher</string>
+ <string name="icon_labels_hide">Masquer</string>
+ <string name="protected_app_settings">Applications protégées</string>
+ <string name="dialog_confirm">Confirmer</string>
+</resources>
diff --git a/res/values-gl-rES/cm_arrays.xml b/res/values-gl-rES/cm_arrays.xml
new file mode 100644
index 000000000..b74a88ee3
--- /dev/null
+++ b/res/values-gl-rES/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>None</item>
+ <item>Achegar</item>
+ <item>Afastar</item>
+ <item>Rotate up</item>
+ <item>Rotate down</item>
+ <item>Cube in</item>
+ <item>Cube out</item>
+ <item>Stack</item>
+ <item>Acordeón</item>
+ <item>Flip</item>
+ <item>Cilindro para dentro</item>
+ <item>Cilindro para fóra</item>
+ <item>Carrusel</item>
+ <item>Overview</item>
+ </string-array>
+</resources>
diff --git a/res/values-hu/cm_arrays.xml b/res/values-hu/cm_arrays.xml
new file mode 100644
index 000000000..fa175897c
--- /dev/null
+++ b/res/values-hu/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Nincs</item>
+ <item>Nagyítás</item>
+ <item>Kicsinyítés</item>
+ <item>Forgatás felfelé</item>
+ <item>Forgatás lefelé</item>
+ <item>Kocka belül</item>
+ <item>Kocka kívül</item>
+ <item>Kártyapakli</item>
+ <item>Harmónika</item>
+ <item>Forgatás</item>
+ <item>Henger belül</item>
+ <item>Henger kívül</item>
+ <item>Körhinta</item>
+ <item>Áttekintés</item>
+ </string-array>
+</resources>
diff --git a/res/values-hu/cm_strings.xml b/res/values-hu/cm_strings.xml
new file mode 100644
index 000000000..2b177b158
--- /dev/null
+++ b/res/values-hu/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">KEZDŐKÉPERNYŐ BEÁLLÍTÁSOK</string>
+ <string name="drawer_settings">ALKALMAZÁSKÉPERNYŐ BEÁLLÍTÁSOK</string>
+ <string name="app_settings">ALKALMAZÁS BEÁLLÍTÁSAI</string>
+ <string name="setting_state_on">BE</string>
+ <string name="setting_state_off">KI</string>
+ <string name="themes_button_text">Témák</string>
+ <string name="scrolling_page_outlines">Oldal körvonalak</string>
+ <string name="scrolling_fade_adjacent">Elhalványuló váltás az oldalak közt</string>
+ <string name="scrolling_wallpaper">Háttérkép görgetése</string>
+ <string name="grid_size_text">Rácsméret</string>
+ <string name="grid_size_comfortable">Kényelmes</string>
+ <string name="grid_size_cozy">Hangulatos</string>
+ <string name="grid_size_condensed">Tömörített</string>
+ <string name="grid_size_custom">Egyéni (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Válassza ki az egyéni méretet</string>
+ <string name="scroll_effect_text">Görgetés effekt</string>
+ <string name="drawer_sorting_text">Rendezési mód</string>
+ <string name="sort_mode_title">Név</string>
+ <string name="sort_mode_launch_count">Indítások száma</string>
+ <string name="sort_mode_install_time">Telepítés ideje</string>
+ <string name="home_screen_search_text">Keresési sáv</string>
+ <string name="larger_icons_text">Nagyobb ikonok</string>
+ <string name="icon_labels">Ikon feliratok</string>
+ <string name="icon_labels_show">Megjelenítés</string>
+ <string name="icon_labels_hide">Elrejtés</string>
+ <string name="protected_app_settings">Védett alkalmazások</string>
+ <string name="dialog_confirm">Megerősítés</string>
+</resources>
diff --git a/res/values-in/cm_arrays.xml b/res/values-in/cm_arrays.xml
new file mode 100644
index 000000000..14b59cc8c
--- /dev/null
+++ b/res/values-in/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Tidak Ada</item>
+ <item>Memperbesar</item>
+ <item>Memperkecil</item>
+ <item>Memutar keatas</item>
+ <item>Memutar kebawah</item>
+ <item>Kubus masuk</item>
+ <item>Kubus keluar</item>
+ <item>Tumpukan</item>
+ <item>Akordion</item>
+ <item>Membalik</item>
+ <item>Silinder masuk</item>
+ <item>Silinder keluar</item>
+ <item>Komedi putar</item>
+ <item>Overview</item>
+ </string-array>
+</resources>
diff --git a/res/values-in/cm_strings.xml b/res/values-in/cm_strings.xml
new file mode 100644
index 000000000..92c473f5d
--- /dev/null
+++ b/res/values-in/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">PENGATURAN LAYAR HOME</string>
+ <string name="drawer_settings">PENGATURAN DRAWER</string>
+ <string name="app_settings">PENGATURAN APL</string>
+ <string name="setting_state_on">ON</string>
+ <string name="setting_state_off">OFF</string>
+ <string name="themes_button_text">Tema</string>
+ <string name="scrolling_page_outlines">Garis luar halaman</string>
+ <string name="scrolling_fade_adjacent">Fade side pages</string>
+ <string name="scrolling_wallpaper">Gulir wallpaper</string>
+ <string name="grid_size_text">Ukuran grid</string>
+ <string name="grid_size_comfortable">Comfortable</string>
+ <string name="grid_size_cozy">Cozy</string>
+ <string name="grid_size_condensed">Condensed</string>
+ <string name="grid_size_custom">Kustom (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Pilih ukuran kustom</string>
+ <string name="scroll_effect_text">Efek gulir</string>
+ <string name="drawer_sorting_text">Mode penyortiran</string>
+ <string name="sort_mode_title">Judul</string>
+ <string name="sort_mode_launch_count">Hitungan peluncur</string>
+ <string name="sort_mode_install_time">Waktu pemasangan</string>
+ <string name="home_screen_search_text">Bar pencarian</string>
+ <string name="larger_icons_text">Ikon lebih besar</string>
+ <string name="icon_labels">Label ikon</string>
+ <string name="icon_labels_show">Tampilkan</string>
+ <string name="icon_labels_hide">Sembunyikan</string>
+ <string name="protected_app_settings">Aplikasi yang di lindungi</string>
+ <string name="dialog_confirm">Konfirmasi</string>
+</resources>
diff --git a/res/values-it/cm_arrays.xml b/res/values-it/cm_arrays.xml
new file mode 100644
index 000000000..d9ec497c7
--- /dev/null
+++ b/res/values-it/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Nessuno</item>
+ <item>Ingrandisci</item>
+ <item>Riduci</item>
+ <item>Ruota su</item>
+ <item>Ruota giù</item>
+ <item>Cubo interno</item>
+ <item>Cubo esterno</item>
+ <item>Pila</item>
+ <item>Fisarmonica</item>
+ <item>Specchia</item>
+ <item>Cilindro interno</item>
+ <item>Cilindro esterno</item>
+ <item>Carosello</item>
+ <item>Panoramica</item>
+ </string-array>
+</resources>
diff --git a/res/values-it/cm_strings.xml b/res/values-it/cm_strings.xml
new file mode 100644
index 000000000..bd7b96021
--- /dev/null
+++ b/res/values-it/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">IMPOSTAZIONI SCHERMATA HOME</string>
+ <string name="drawer_settings">IMPOSTAZIONI DRAWER</string>
+ <string name="app_settings">IMPOSTAZIONI APP</string>
+ <string name="setting_state_on">ON</string>
+ <string name="setting_state_off">OFF</string>
+ <string name="themes_button_text">Temi</string>
+ <string name="scrolling_page_outlines">Contorni pagina</string>
+ <string name="scrolling_fade_adjacent">Dissolvenza pagine laterali</string>
+ <string name="scrolling_wallpaper">Sfondo scorrevole</string>
+ <string name="grid_size_text">Dimensione griglia</string>
+ <string name="grid_size_comfortable">Confortevole</string>
+ <string name="grid_size_cozy">Accogliente</string>
+ <string name="grid_size_condensed">Condensato</string>
+ <string name="grid_size_custom">Personalizzato (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Personalizza dimensione</string>
+ <string name="scroll_effect_text">Effetto scorrimento</string>
+ <string name="drawer_sorting_text">Modalità ordinamento</string>
+ <string name="sort_mode_title">Titolo</string>
+ <string name="sort_mode_launch_count">Numero avvii</string>
+ <string name="sort_mode_install_time">Tempo installazione</string>
+ <string name="home_screen_search_text">Barra di ricerca</string>
+ <string name="larger_icons_text">Icone grandi</string>
+ <string name="icon_labels">Etichette icone</string>
+ <string name="icon_labels_show">Mostra</string>
+ <string name="icon_labels_hide">Nascondi</string>
+ <string name="protected_app_settings">App protette</string>
+ <string name="dialog_confirm">Conferma</string>
+</resources>
diff --git a/res/values-iw/cm_arrays.xml b/res/values-iw/cm_arrays.xml
new file mode 100644
index 000000000..870511f8f
--- /dev/null
+++ b/res/values-iw/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>ללא</item>
+ <item>התקרבות</item>
+ <item>התרחקות</item>
+ <item>סובב למעלה</item>
+ <item>סובב למטע</item>
+ <item>קובייה פנימה</item>
+ <item>קוביה החוצה</item>
+ <item>מחסנית</item>
+ <item>אקורדיון</item>
+ <item>היפוך</item>
+ <item>גליל פנימה</item>
+ <item>גליל החוצה</item>
+ <item>קרוסלה</item>
+ <item>תקציר</item>
+ </string-array>
+</resources>
diff --git a/res/values-iw/cm_strings.xml b/res/values-iw/cm_strings.xml
new file mode 100644
index 000000000..ea9316d4e
--- /dev/null
+++ b/res/values-iw/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">הגדרות מסך הבית</string>
+ <string name="drawer_settings">הגדרות מגירת יישומים</string>
+ <string name="app_settings">הגדרות יישום</string>
+ <string name="setting_state_on">מופעל</string>
+ <string name="setting_state_off">מושבת</string>
+ <string name="themes_button_text">ערכות עיצוב</string>
+ <string name="scrolling_page_outlines">תיאור דף</string>
+ <string name="scrolling_fade_adjacent">עימום דפים צדדיים</string>
+ <string name="scrolling_wallpaper">גלילת טפט</string>
+ <string name="grid_size_text">גודל רשת</string>
+ <string name="grid_size_comfortable">נוח</string>
+ <string name="grid_size_cozy">נעים</string>
+ <string name="grid_size_condensed">מרוכז</string>
+ <string name="grid_size_custom">מותאם אישית (<xliff:g id="rows">%1$d </xliff:g> \u00d7 <xliff:g id="columns">%2$d </xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">בחר גודל מותאם אישית</string>
+ <string name="scroll_effect_text">אפקט גלילה</string>
+ <string name="drawer_sorting_text">מצב המיון</string>
+ <string name="sort_mode_title">כותרת</string>
+ <string name="sort_mode_launch_count">מספר הפעלות</string>
+ <string name="sort_mode_install_time">זמן התקנה</string>
+ <string name="home_screen_search_text">סרגל החיפוש</string>
+ <string name="larger_icons_text">סמלים גדולים יותר</string>
+ <string name="icon_labels">תוויות סמלים</string>
+ <string name="icon_labels_show">הצג</string>
+ <string name="icon_labels_hide">הסתר</string>
+ <string name="protected_app_settings">יישומים מוגנים</string>
+ <string name="dialog_confirm">אשר</string>
+</resources>
diff --git a/res/values-ja/cm_arrays.xml b/res/values-ja/cm_arrays.xml
new file mode 100644
index 000000000..b53618465
--- /dev/null
+++ b/res/values-ja/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>なし</item>
+ <item>Zoom in</item>
+ <item>Zoom out</item>
+ <item>Rotate up</item>
+ <item>Rotate down</item>
+ <item>Cube in</item>
+ <item>Cube out</item>
+ <item>Stack</item>
+ <item>Accordion</item>
+ <item>Flip</item>
+ <item>Cylinder in</item>
+ <item>Cylinder out</item>
+ <item>Carousel</item>
+ <item>Overview</item>
+ </string-array>
+</resources>
diff --git a/res/values-ja/cm_strings.xml b/res/values-ja/cm_strings.xml
new file mode 100644
index 000000000..757417f0c
--- /dev/null
+++ b/res/values-ja/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">ホーム画面の設定</string>
+ <string name="drawer_settings">ドロワーの設定</string>
+ <string name="app_settings">アプリの設定</string>
+ <string name="setting_state_on">ON</string>
+ <string name="setting_state_off">OFF</string>
+ <string name="themes_button_text">テーマ</string>
+ <string name="scrolling_page_outlines">ページの外枠</string>
+ <string name="scrolling_fade_adjacent">側面のページをフェード</string>
+ <string name="scrolling_wallpaper">壁紙をスクロール</string>
+ <string name="grid_size_text">グリッドサイズ</string>
+ <string name="grid_size_comfortable">Comfortable</string>
+ <string name="grid_size_cozy">Cozy</string>
+ <string name="grid_size_condensed">Condensed</string>
+ <string name="grid_size_custom">カスタム(<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">カスタムのサイズを選択</string>
+ <string name="scroll_effect_text">スクロール効果</string>
+ <string name="drawer_sorting_text">並べ替えモード</string>
+ <string name="sort_mode_title">タイトル</string>
+ <string name="sort_mode_launch_count">起動回数</string>
+ <string name="sort_mode_install_time">インストール日時</string>
+ <string name="home_screen_search_text">検索バー</string>
+ <string name="larger_icons_text">大きいアイコン</string>
+ <string name="icon_labels">アイコンラベル</string>
+ <string name="icon_labels_show">表示する</string>
+ <string name="icon_labels_hide">表示しない</string>
+ <string name="protected_app_settings">アプリの保護</string>
+ <string name="dialog_confirm">確認</string>
+</resources>
diff --git a/res/values-ko/cm_arrays.xml b/res/values-ko/cm_arrays.xml
new file mode 100644
index 000000000..7ce4da79c
--- /dev/null
+++ b/res/values-ko/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>없음</item>
+ <item>확대</item>
+ <item>축소</item>
+ <item>위로 회전</item>
+ <item>아래로 회전</item>
+ <item>큐브 인</item>
+ <item>큐브 아웃</item>
+ <item>스택</item>
+ <item>아코디언</item>
+ <item>뒤집기</item>
+ <item>실린더 인</item>
+ <item>실린더 아웃</item>
+ <item>회전목마</item>
+ <item>개요</item>
+ </string-array>
+</resources>
diff --git a/res/values-ko/cm_strings.xml b/res/values-ko/cm_strings.xml
new file mode 100644
index 000000000..743a859c5
--- /dev/null
+++ b/res/values-ko/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">홈 화면 설정</string>
+ <string name="drawer_settings">서랍 설정</string>
+ <string name="app_settings">애플리케이션 설정</string>
+ <string name="setting_state_on">켜짐</string>
+ <string name="setting_state_off">꺼짐</string>
+ <string name="themes_button_text">테마</string>
+ <string name="scrolling_page_outlines">페이지 외곽선</string>
+ <string name="scrolling_fade_adjacent">옆 페이지를 페이드</string>
+ <string name="scrolling_wallpaper">배경 스크롤</string>
+ <string name="grid_size_text">격자 크기</string>
+ <string name="grid_size_comfortable">느슨하게</string>
+ <string name="grid_size_cozy">적당히</string>
+ <string name="grid_size_condensed">빽빽하게</string>
+ <string name="grid_size_custom">사용자 지정 (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">사용자 정의 크기 선택</string>
+ <string name="scroll_effect_text">스크롤 효과</string>
+ <string name="drawer_sorting_text">정렬 모드</string>
+ <string name="sort_mode_title">이름</string>
+ <string name="sort_mode_launch_count">실행 횟수</string>
+ <string name="sort_mode_install_time">설치 시간</string>
+ <string name="home_screen_search_text">검색 바</string>
+ <string name="larger_icons_text">큰 아이콘</string>
+ <string name="icon_labels">아이콘 레이블</string>
+ <string name="icon_labels_show">보이기</string>
+ <string name="icon_labels_hide">숨기기</string>
+ <string name="protected_app_settings">보호된 앱</string>
+ <string name="dialog_confirm">확인</string>
+</resources>
diff --git a/res/values-ku/cm_arrays.xml b/res/values-ku/cm_arrays.xml
new file mode 100644
index 000000000..8b5b93e9b
--- /dev/null
+++ b/res/values-ku/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>هیچ</item>
+ <item>زومکردن بۆ ناو</item>
+ <item>زومکردن بۆ دەرەوە</item>
+ <item>سوڕانەوە بۆ سەرەوە</item>
+ <item>سوڕانەوە بۆ خوارەوە</item>
+ <item>شەشپاڵو بۆ ناو</item>
+ <item>شەشپاڵو دەرەوە</item>
+ <item>كەتەكە</item>
+ <item>ئۆكۆردێون</item>
+ <item>قاتکردن</item>
+ <item>لولەک لەناو</item>
+ <item>لولەک بۆ دەرەوە</item>
+ <item>غارغارێن</item>
+ <item>پیشاندانی گشتی</item>
+ </string-array>
+</resources>
diff --git a/res/values-ku/cm_strings.xml b/res/values-ku/cm_strings.xml
new file mode 100644
index 000000000..b7f7fbc5b
--- /dev/null
+++ b/res/values-ku/cm_strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">رێکخستنی ڕوونمای سەرەکی</string>
+ <string name="drawer_settings">ڕێکخستنی کێشان</string>
+ <string name="app_settings">ڕێکخستنەکانی بەرنامە</string>
+ <string name="setting_state_on">هەڵگیرساو</string>
+ <string name="setting_state_off">کووژاوە</string>
+ <string name="themes_button_text">رووکارەکان</string>
+ <string name="scrolling_page_outlines">ده‌رهێڵی لاپه‌ڕه‌</string>
+ <string name="scrolling_fade_adjacent">کاڵبوونه‌وه‌ی لاپه‌ڕه‌ هێڵ</string>
+ <string name="scrolling_wallpaper">بابۆڵه‌کردنی سه‌رڕوونما</string>
+ <string name="grid_size_text">قه‌باره‌ی تۆڕ</string>
+ <string name="grid_size_comfortable">ئاسووده‌</string>
+ <string name="grid_size_cozy">پێدانی ئاسوده‌یی</string>
+ <string name="grid_size_condensed">خه‌ستکراو</string>
+ <string name="preferences_interface_homescreen_custom">دیاریکردنی قه‌باره‌ی خوازراو</string>
+ <string name="scroll_effect_text">کاریگه‌ری بابۆڵه‌کردن</string>
+ <string name="drawer_sorting_text">جۆری پۆڵێنکردن</string>
+ <string name="sort_mode_title">ناونیشان</string>
+ <string name="sort_mode_launch_count">دانانی هه‌ژمار</string>
+ <string name="sort_mode_install_time">کاتی دامەزراندن</string>
+ <string name="home_screen_search_text">شریتی گەڕان</string>
+ <string name="larger_icons_text">وێنۆچکەی گەورەتر</string>
+ <string name="icon_labels">ته‌خته‌ی وێنۆچکه‌کان</string>
+ <string name="icon_labels_show">پیشاندان</string>
+ <string name="icon_labels_hide">شاردنەوە</string>
+ <string name="protected_app_settings">بەرنامە پارێزراوەکان</string>
+ <string name="dialog_confirm">دلنیاکردنەوە</string>
+</resources>
diff --git a/res/values-ku/strings.xml b/res/values-ku/strings.xml
new file mode 100644
index 000000000..b8eb048ed
--- /dev/null
+++ b/res/values-ku/strings.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+/*
+* Copyright (C) 2008 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="application_name">کارخەری٣</string>
+ <string name="home">ماڵەوە</string>
+ <string name="uid_name">نەرمەواڵاکانی ناوەکی ئەندرۆید</string>
+ <string name="activity_not_found">بەرنامە دانه‌به‌زیوه‌.</string>
+ <string name="widgets_tab_label">ویدجێتەکان</string>
+ <string name="widget_adder">ویدجێتەکان</string>
+ <string name="toggle_weight_watcher">پیشاندانی بیرگە</string>
+ <string name="long_press_widget_to_add">بیسوو &amp; دەست ڕاگرە بۆ هەڵگرتنی ویجێتێک.</string>
+ <string name="market">فرۆشگا</string>
+ <string name="widget_dims_format">%1$d \u00d7 %2$d</string>
+ <string name="external_drop_widget_error">نەیتوانی بڕگەکە فڕێداتە سەر ئەم ڕوونمایە.</string>
+ <string name="external_drop_widget_pick_title">ویجێت هەڵبژێرە بۆ دروستکردن</string>
+ <string name="rename_folder_label">ناوی بوخچە</string>
+ <string name="rename_folder_title">ناولێنانەوەی بوخچە</string>
+ <string name="rename_action">باشه‌</string>
+ <string name="cancel_action">لابردن</string>
+ <string name="menu_item_add_item">زیاکردن بۆ پاشبنەمای ڕوونما</string>
+ <string name="group_applications">بەرنامەکان</string>
+ <string name="group_shortcuts">کورتەرێگەکان</string>
+ <string name="group_widgets">ویجێتەکان</string>
+ <string name="completely_out_of_space">لە ناو ماڵی ڕوونماکانت دیوی تری لێ نییە.</string>
+ <string name="out_of_space">لەم ماڵی ڕوونمایەدا دیوی تر نییە.</string>
+ <string name="hotseat_out_of_space">لە کەشەفەی دڵخوازەکانت دیوی تری لێ نییە</string>
+ <string name="invalid_hotseat_item">ئەم ویجێتە زۆر گەورەیە بۆ کەشەفەی دڵخوازەکان</string>
+ <string name="shortcut_installed">کورتەڕێی \"<xliff:g id="name" example="Browser">%s</xliff:g>\" دروست کرا.</string>
+ <string name="shortcut_uninstalled">کورتەڕێی \"<xliff:g id="name" example="Browser">%s</xliff:g>\" لا برابوو.</string>
+ <string name="shortcut_duplicate">کورتەڕێی \"<xliff:g id="name" example="Browser">%s</xliff:g>\" پێشتر هەیە.</string>
+ <string name="title_select_shortcut">کورتەڕێ دیاری بکە</string>
+ <string name="title_select_application">بەرنامە هەڵبژێرە</string>
+ <string name="all_apps_button_label">بەرنامەکان</string>
+ <string name="all_apps_home_button_label">ماڵەوە</string>
+ <string name="delete_zone_label_workspace">لابردن</string>
+ <string name="delete_zone_label_all_apps">دامه‌زرانسڕینه‌وه‌</string>
+ <string name="delete_target_label">لابردن</string>
+ <string name="delete_target_uninstall_label">دامه‌زرانسڕینه‌وه‌</string>
+ <string name="info_target_label">زانیاریی بەرنامە</string>
+ <string name="accessibility_search_button">گه‌ڕان</string>
+ <string name="accessibility_voice_search_button">گەڕانی دەنگی</string>
+ <string name="accessibility_all_apps_button">بەرنامەکان</string>
+ <string name="accessibility_delete_button">لابردن</string>
+ <string name="delete_zone_label_all_apps_system_app">دامه‌زرانسڕینه‌وه‌ی بەڕۆژکردنەوە</string>
+ <string name="cab_menu_delete_app">دامه‌زرانسڕینه‌وه‌ی بەرنامە</string>
+ <string name="cab_menu_app_info">وردەکارییەکانی بەرنامە</string>
+ <string name="cab_app_selection_text">١ بەرنامە دیاری کرا</string>
+ <string name="cab_widget_selection_text">١ ویجێت دیاری کرا</string>
+ <string name="cab_folder_selection_text">١ بۆخچە دیاری کرا</string>
+ <string name="cab_shortcut_selection_text">١ کورتەڕێ دیاری کرا</string>
+ <string name="permlab_install_shortcut">دامەزراندنی کورتەڕێگەکان</string>
+ <string name="permdesc_install_shortcut">ڕێگە بە بەرنامەیەک بدە بۆ
+ زیاکردنی کورتەڕێگەکان بەبێ دەستێوەردانی بەکارهێنەر.</string>
+ <string name="permlab_uninstall_shortcut">دامەزرانسڕینەوەی کورتەڕێگەکان</string>
+ <string name="permdesc_uninstall_shortcut">ڕێگە بە بەرنامەکە بدە بۆ
+ لابردنی کورتەڕێگەکان بەبێ دەستێوەردانی بەکارهێنەر.</string>
+ <string name="permlab_read_settings">خوێندنەوەی ڕێکخستنەکانی ماڵەوە و کورتەڕێگەکان</string>
+ <string name="permdesc_read_settings">ڕێگە بە بەرنامەکە بدە بۆ خوێندنەوەی ڕێکخستنەکان و
+ کورتەڕێگەکانی سەر ماڵ.</string>
+ <string name="permlab_write_settings">نووسینی ڕێکخستنەکانی ماڵەوە و کورتەڕێگەکان</string>
+ <string name="permdesc_write_settings">ڕێگە بە بەرنامەکە بدە بۆ نووسینی ڕێکخستنەکان و
+ کورتەڕێگەکانی سەر ماڵ.</string>
+ <string name="gadget_error_text">کێشەی بارکردنی ویجێت</string>
+ <string name="uninstall_system_app_text">ئەمە بەرنامەیەکی سیستەمییە و ناتوانرێت دامەزرانسڕینەوەی بۆ بکرێت.</string>
+ <string name="dream_name">داگیرسێنەری مووشەک</string>
+ <string name="folder_hint_text">بوخچەی ناونەنراو</string>
+ <string name="workspace_description_format">ڕوونمای ماڵەوە %1$d</string>
+ <string name="default_scroll_format">پەڕەی %1$d لە %2$d</string>
+ <string name="workspace_scroll_format">ڕوونمای ماڵەوە %1$d of %2$d</string>
+ <string name="apps_customize_apps_scroll_format">پەڕەی بەرنامەکان %1$d لە %2$d</string>
+ <string name="apps_customize_widgets_scroll_format">پەڕەی ویجێتەکان %1$d لە %2$d</string>
+ <string name="first_run_cling_title">بە خێربێيت</string>
+ <string name="first_run_cling_description">خۆت بخەرە ماڵەوە.</string>
+ <string name="first_run_cling_create_screens_hint">ڕوونمای زیاتر دروست بکە بۆ بەرنامەکان و بوخچەکان</string>
+ <string name="migration_cling_title">وێنۆچکه‌ی به‌رنامه‌که‌ت لەبەر بگرەوە</string>
+ <string name="migration_cling_description">هاوردنی وێنۆچکە و بوخچەکان لە ماڵی ڕوونما کۆنەکانتەوە؟</string>
+ <string name="migration_cling_copy_apps">له‌به‌رگرتنه‌وه‌ی وێنۆچکه‌کان</string>
+ <string name="migration_cling_use_default">ده‌ستپێکردنی بووژاندنەوە</string>
+ <string name="workspace_cling_title">بۆشایییەکەت بەڕێوەبەرە</string>
+ <string name="workspace_cling_move_item">بسوو &amp; یان پاشبنەما ڕاگرە بۆ بەڕێوەبردنی دیوارپۆش، ویجێتەکان و ڕێکخستنەکان.</string>
+ <string name="folder_cling_title">لێرە بۆخچەیەک هەیە</string>
+ <string name="folder_cling_create_folder">بۆ دروستکردنی دانەیەک وەکوو ئەم, بسوو &amp; و دەست ڕاگرە لەسەر بەرنامەیەک، پاشان بیگوازەوە بۆ سەر ئەوی تر.</string>
+ <string name="cling_dismiss">باشه‌</string>
+ <string name="folder_opened">بوخچە کراوە, <xliff:g id="width" example="5">%1$d</xliff:g> لەلایەن <xliff:g id="height" example="3">%2$d</xliff:g></string>
+ <string name="folder_tap_to_close">بسوو بۆ داخستنی بوخچە</string>
+ <string name="folder_tap_to_rename">بسوو بۆ پاشەکەوتکردنی ناولێنانەوە</string>
+ <string name="folder_closed">بوخچە داخرا</string>
+ <string name="folder_renamed">بوخچە نالێنرایەوە بۆ <xliff:g id="name" example="Games">%1$s</xliff:g></string>
+ <string name="folder_name_format">بوخچە: <xliff:g id="name" example="Games">%1$s</xliff:g></string>
+ <string name="debug_memory_activity">* HPROF</string>
+ <string name="widget_button_text">ویجێتەکان</string>
+ <string name="wallpaper_button_text">دیوارپۆشەکان</string>
+ <string name="settings_button_text">ڕێکخستنەکان</string>
+</resources>
diff --git a/res/values-lb/cm_arrays.xml b/res/values-lb/cm_arrays.xml
new file mode 100644
index 000000000..365ac5eec
--- /dev/null
+++ b/res/values-lb/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Keen</item>
+ <item>Erazoomen</item>
+ <item>Erauszoomen</item>
+ <item>Eroprotéieren</item>
+ <item>Erofrotéieren</item>
+ <item>Cube eran</item>
+ <item>Cube eraus</item>
+ <item>Koup</item>
+ <item>Akkordeon</item>
+ <item>Ëmdréinen</item>
+ <item>Zylinder eran</item>
+ <item>Zylinder eraus</item>
+ <item>Karussell</item>
+ <item>Iwwersiicht</item>
+ </string-array>
+</resources>
diff --git a/res/values-lb/cm_strings.xml b/res/values-lb/cm_strings.xml
new file mode 100644
index 000000000..14f7a1217
--- /dev/null
+++ b/res/values-lb/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">STARTSCHIERM-ASTELLUNGEN</string>
+ <string name="drawer_settings">ASTELLUNGE VUN DER APP-IWWERSIICHT</string>
+ <string name="app_settings">APP-ASTELLUNGEN</string>
+ <string name="setting_state_on">UN</string>
+ <string name="setting_state_off">AUS</string>
+ <string name="themes_button_text">Designen</string>
+ <string name="scrolling_page_outlines">Säiterummen</string>
+ <string name="scrolling_fade_adjacent">Säiten um Rand ausblenden</string>
+ <string name="scrolling_wallpaper">Hannergrondbild scrollen</string>
+ <string name="grid_size_text">Gittergréisst</string>
+ <string name="grid_size_comfortable">Gemittlech</string>
+ <string name="grid_size_cozy">Heemlech</string>
+ <string name="grid_size_condensed">Schmuel</string>
+ <string name="grid_size_custom">Personaliséiert (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Personaliséiert Gréisst auswielen</string>
+ <string name="scroll_effect_text">Scrolleffekt</string>
+ <string name="drawer_sorting_text">Zortéiermodus</string>
+ <string name="sort_mode_title">Titel</string>
+ <string name="sort_mode_launch_count">Startunzuel</string>
+ <string name="sort_mode_install_time">Installatiounszäit</string>
+ <string name="home_screen_search_text">Sichkëscht</string>
+ <string name="larger_icons_text">Grouss Symboler</string>
+ <string name="icon_labels">Symbol-Beschrëftungen</string>
+ <string name="icon_labels_show">Uweisen</string>
+ <string name="icon_labels_hide">Verstoppen</string>
+ <string name="protected_app_settings">Geschützt Appen</string>
+ <string name="dialog_confirm">Bestätegen</string>
+</resources>
diff --git a/res/values-lb/strings.xml b/res/values-lb/strings.xml
new file mode 100644
index 000000000..f56d6b912
--- /dev/null
+++ b/res/values-lb/strings.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+/*
+* Copyright (C) 2008 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="application_name">Launcher3</string>
+ <string name="home">Startschierm</string>
+ <string name="uid_name">Kär-Appe vun Android</string>
+ <string name="activity_not_found">D\'App ass net installéiert.</string>
+ <string name="safemode_shortcut_error">Erofgelueden App am séchere Modus desaktivéiert</string>
+ <string name="widgets_tab_label">Widgeten</string>
+ <string name="widget_adder">Widgeten</string>
+ <string name="toggle_weight_watcher">Späicher uweisen</string>
+ <string name="long_press_widget_to_add">Drécken an halen, fir e Widget opzerafen.</string>
+ <string name="market">Geschäft</string>
+ <string name="widget_dims_format">%1$d \u00d7 %2$d</string>
+ <string name="external_drop_widget_error">Konnt d\'Element net um Startschierm ofleeën.</string>
+ <string name="external_drop_widget_pick_title">Widget auswielen den erstallt soll ginn</string>
+ <string name="rename_folder_label">Dossiersnumm</string>
+ <string name="rename_folder_title">Dossier ëmbenennen</string>
+ <string name="rename_action">OK</string>
+ <string name="cancel_action">Ofbriechen</string>
+ <string name="menu_item_add_item">Op de Startschierm setzen</string>
+ <string name="group_applications">Appen</string>
+ <string name="group_shortcuts">Ofkierzungen</string>
+ <string name="group_widgets">Widgeten</string>
+ <string name="completely_out_of_space">Keng Plaz méi op de Startschiermer.</string>
+ <string name="out_of_space">Keng Plaz méi op dësem Startschierm.</string>
+ <string name="hotseat_out_of_space">Keng Plaz méi an der Favoritteläischt</string>
+ <string name="invalid_hotseat_item">Dëse Widget ass ze breet fir d\'Favoritteläischt</string>
+ <string name="shortcut_installed">Ofkierzung \"<xliff:g id="name" example="Browser">%s</xliff:g>\" erstallt.</string>
+ <string name="shortcut_uninstalled">Ofkierzung \"<xliff:g id="name" example="Browser">%s</xliff:g>\" ewechgeholl.</string>
+ <string name="shortcut_duplicate">D\'Ofkierzung \"<xliff:g id="name" example="Browser">%s</xliff:g>\" existéiert schonn.</string>
+ <string name="title_select_shortcut">Ofkierzung auswielen</string>
+ <string name="title_select_application">App auswielen</string>
+ <string name="all_apps_button_label">Appen</string>
+ <string name="all_apps_home_button_label">Startschierm</string>
+ <string name="delete_zone_label_workspace">Ewechhuelen</string>
+ <string name="delete_zone_label_all_apps">Desinstalléieren</string>
+ <string name="delete_target_label">Läschen</string>
+ <string name="delete_target_uninstall_label">Desinstalléieren</string>
+ <string name="info_target_label">App-Info</string>
+ <string name="accessibility_search_button">Sichen</string>
+ <string name="accessibility_voice_search_button">Stëmmsich</string>
+ <string name="accessibility_all_apps_button">Appen</string>
+ <string name="accessibility_delete_button">Ewechhuelen</string>
+ <string name="delete_zone_label_all_apps_system_app">Aktualiséierung desinstalléieren</string>
+ <string name="cab_menu_delete_app">App desinstalléieren</string>
+ <string name="cab_menu_app_info">App-Detailer</string>
+ <string name="cab_app_selection_text">1 App ausgewielt</string>
+ <string name="cab_widget_selection_text">1 Widget ausgewielt</string>
+ <string name="cab_folder_selection_text">1 Dossier ausgewielt</string>
+ <string name="cab_shortcut_selection_text">1 Ofkierzung ausgewielt</string>
+ <string name="permlab_install_shortcut">Ofkierzungen installéieren</string>
+ <string name="permdesc_install_shortcut">Erlaabt der App, Ofkierzungen ouni Benotzerinterventioun dobäizesetzen.</string>
+ <string name="permlab_uninstall_shortcut">Ofkierzungen desinstalléieren</string>
+ <string name="permdesc_uninstall_shortcut">Erlaabt der App, Ofkierzungen ouni Benotzerinterventioun ewechzehuelen.</string>
+ <string name="permlab_read_settings">Startschierm-Astellungen an Ofkierzunge liesen</string>
+ <string name="permdesc_read_settings">Erlaabt der App, d\'Startschierm-Astellungen an -Ofkierzungen ze liesen.</string>
+ <string name="permlab_write_settings">Startschierm-Astellungen an Ofkierzunge schreiwen</string>
+ <string name="permdesc_write_settings">Erlaabt der App, d\'Startschierm-Astellungen an -Ofkierzungen z\'änneren.</string>
+ <string name="gadget_error_text">Problem beim Luede vum Widget</string>
+ <string name="gadget_setup_text">Astellen</string>
+ <string name="uninstall_system_app_text">Dëst ass eng System-App a kann net desinstalléiert ginn.</string>
+ <string name="dream_name">Rocket Launcher</string>
+ <string name="folder_hint_text">Onbenannten Dossier</string>
+ <string name="workspace_description_format">Startschierm %1$d</string>
+ <string name="default_scroll_format">Säit %1$d / %2$d</string>
+ <string name="workspace_scroll_format">Startschierm %1$d / %2$d</string>
+ <string name="apps_customize_apps_scroll_format">Appe-Säit %1$d / %2$d</string>
+ <string name="apps_customize_widgets_scroll_format">Widgete-Säit %1$d / %2$d</string>
+ <string name="first_run_cling_title">Wëllkomm</string>
+ <string name="first_run_cling_description">Fill dech wéi doheem.</string>
+ <string name="first_run_cling_create_screens_hint">Méi Schiermer fir Appen an Dossieren dobäisetzen</string>
+ <string name="migration_cling_title">App-Symboler kopéieren</string>
+ <string name="migration_cling_description">Symboler an Dossieren vun dengem ale Startschierm importéieren?</string>
+ <string name="migration_cling_copy_apps">SYMBOLER KOPÉIEREN</string>
+ <string name="migration_cling_use_default">FRËSCH UFÄNKEN</string>
+ <string name="workspace_cling_title">Aarbechtsberäich organiséieren</string>
+ <string name="workspace_cling_move_item">Hannergrond drécken an halen, fir d\'Hannergrondbiller, Widgeten an Astellungen ze geréieren.</string>
+ <string name="workspace_cling_longpress_title">Hannergrondbiller, Widgeten an Astellungen</string>
+ <string name="workspace_cling_longpress_description">Hannergrond drécken an hale fir unzepassen</string>
+ <string name="workspace_cling_longpress_dismiss">OK</string>
+ <string name="folder_cling_title">Hei ass en Dossier</string>
+ <string name="folder_cling_create_folder">Dréck an hal eng App, an da réckel s\'iwwer eng aner, fir en Dossier z\'erstellen.</string>
+ <string name="cling_dismiss">OK</string>
+ <string name="folder_opened">Dossier opgemaach, <xliff:g id="width" example="5">%1$d</xliff:g>-mol <xliff:g id="height" example="3">%2$d</xliff:g></string>
+ <string name="folder_tap_to_close">Dréck fir den Dossier zouzemaachen</string>
+ <string name="folder_tap_to_rename">Dréck fir den ëmbenannten Dossier ze späicheren</string>
+ <string name="folder_closed">Dossier zougemaach</string>
+ <string name="folder_renamed">Dossier ëmbenannt a(n) <xliff:g id="name" example="Games">%1$s</xliff:g></string>
+ <string name="folder_name_format">Dossier: <xliff:g id="name" example="Games">%1$s</xliff:g></string>
+ <string name="debug_memory_activity">* HPROF</string>
+ <string name="widget_button_text">Widgeten</string>
+ <string name="wallpaper_button_text">Hannergrondbiller</string>
+ <string name="settings_button_text">Astellungen</string>
+ <string name="package_state_enqueued">Waarden</string>
+ <string name="package_state_downloading">Gëtt erofgelueden</string>
+ <string name="package_state_installing">Installatioun leeft</string>
+ <string name="package_state_unknown">Onbekannt</string>
+ <string name="package_state_error">Net erëmhiergestallt</string>
+ <string name="abandoned_clean_all">All ewechhuelen</string>
+ <string name="abandoned_clean_this">Ewechhuelen</string>
+ <string name="abandoned_search">Sichen</string>
+ <string name="abandoned_promises_title">Dës App ass net installéiert</string>
+ <string name="abandoned_promise_explanation">D\'App fir dëst Symbol ass net installéiert. Du kanns et läschen, oder no der App sichen a se manuell installéieren.</string>
+</resources>
diff --git a/res/values-lt/cm_arrays.xml b/res/values-lt/cm_arrays.xml
new file mode 100644
index 000000000..96ffba2c7
--- /dev/null
+++ b/res/values-lt/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Joks</item>
+ <item>Padidinti</item>
+ <item>Pamažinti</item>
+ <item>Pasukti aukštyn</item>
+ <item>Pasukti žemyn</item>
+ <item>Kubo vidus</item>
+ <item>Kubo išorė</item>
+ <item>Krūva</item>
+ <item>Akordeonas</item>
+ <item>Apversti</item>
+ <item>Cilindro vidus</item>
+ <item>Cilindro išorė</item>
+ <item>Karuselė</item>
+ <item>Apžvalga</item>
+ </string-array>
+</resources>
diff --git a/res/values-lt/cm_strings.xml b/res/values-lt/cm_strings.xml
new file mode 100644
index 000000000..92753f469
--- /dev/null
+++ b/res/values-lt/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">PAGRINDINIO EKRANO NUSTATYMAI</string>
+ <string name="drawer_settings">STALČIAUS NUSTATYMAI</string>
+ <string name="app_settings">PROGRAMOS NUSTATYMAI</string>
+ <string name="setting_state_on">ĮJUNGTA</string>
+ <string name="setting_state_off">IŠJUNGTA</string>
+ <string name="themes_button_text">Temos</string>
+ <string name="scrolling_page_outlines">Puslapio kontūrai</string>
+ <string name="scrolling_fade_adjacent">Išblukinti šoninius puslapius</string>
+ <string name="scrolling_wallpaper">Slinkti darbalaukio foną</string>
+ <string name="grid_size_text">Tinklelio dydis</string>
+ <string name="grid_size_comfortable">Patogus</string>
+ <string name="grid_size_cozy">Jaukus</string>
+ <string name="grid_size_condensed">Suglaustas</string>
+ <string name="grid_size_custom">Priskirtas (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Pasirinkite tinkintą dydį</string>
+ <string name="scroll_effect_text">Slinkimo efektas</string>
+ <string name="drawer_sorting_text">Rūšiavimo režimas</string>
+ <string name="sort_mode_title">Pavadinimas</string>
+ <string name="sort_mode_launch_count">Paleidimų kiekis</string>
+ <string name="sort_mode_install_time">Įdiegimo laikas</string>
+ <string name="home_screen_search_text">Paieškos juosta</string>
+ <string name="larger_icons_text">Didesnės piktogramos</string>
+ <string name="icon_labels">Piktogramų pavadinimai</string>
+ <string name="icon_labels_show">Rodyti</string>
+ <string name="icon_labels_hide">Paslėpti</string>
+ <string name="protected_app_settings">Apsaugotos programos</string>
+ <string name="dialog_confirm">Patvirtinti</string>
+</resources>
diff --git a/res/values-lv/cm_arrays.xml b/res/values-lv/cm_arrays.xml
new file mode 100644
index 000000000..5c26e733f
--- /dev/null
+++ b/res/values-lv/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Neviens</item>
+ <item>Tuvināt</item>
+ <item>Tālināt</item>
+ <item>Pagriezt uz augšu</item>
+ <item>Pagriezt uz leju</item>
+ <item>Kubs uz iekšu</item>
+ <item>Kubs uz āru</item>
+ <item>Kaudzē</item>
+ <item>Akordeons</item>
+ <item>Apmest</item>
+ <item>Cilindrs uz iekšu</item>
+ <item>Cilindrs uz āru</item>
+ <item>Karuselis</item>
+ <item>Pārskats</item>
+ </string-array>
+</resources>
diff --git a/res/values-lv/cm_strings.xml b/res/values-lv/cm_strings.xml
new file mode 100644
index 000000000..3edfe25c7
--- /dev/null
+++ b/res/values-lv/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">MĀJAS EKRĀNA IESTATĪJUMI</string>
+ <string name="drawer_settings">ATVILKTNES IESTATĪJUMI</string>
+ <string name="app_settings">LIETOTŅU IESTATĪJUMI</string>
+ <string name="setting_state_on">IESLĒGTS</string>
+ <string name="setting_state_off">IZSLĒGTS</string>
+ <string name="themes_button_text">Tēmas</string>
+ <string name="scrolling_page_outlines">Lapas struktūra</string>
+ <string name="scrolling_fade_adjacent">Izbalināt malējās lapas</string>
+ <string name="scrolling_wallpaper">Pārtīt tapeti</string>
+ <string name="grid_size_text">Režģa izmērs</string>
+ <string name="grid_size_comfortable">Ērts</string>
+ <string name="grid_size_cozy">Mājīgs</string>
+ <string name="grid_size_condensed">Saīspiests</string>
+ <string name="grid_size_custom">Pielāgots (<xliff:g id="rows">%1$d </xliff:g> \u00d7 <xliff:g id="columns">%2$d </xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Izvēlieties pielāgotu izmēru</string>
+ <string name="scroll_effect_text">Ritināšanas efekts</string>
+ <string name="drawer_sorting_text">Kārtošanas režīms</string>
+ <string name="sort_mode_title">Nosaukums</string>
+ <string name="sort_mode_launch_count">Palaišanas reizes</string>
+ <string name="sort_mode_install_time">Uzstādīšanas laiks</string>
+ <string name="home_screen_search_text">Meklēšanas josla</string>
+ <string name="larger_icons_text">Lielākas ikonas</string>
+ <string name="icon_labels">Ikonas etiķete</string>
+ <string name="icon_labels_show">Rādīt</string>
+ <string name="icon_labels_hide">Slēpt</string>
+ <string name="protected_app_settings">Aizsargātās lietotnes</string>
+ <string name="dialog_confirm">Apstiprināt</string>
+</resources>
diff --git a/res/values-nb/cm_arrays.xml b/res/values-nb/cm_arrays.xml
new file mode 100644
index 000000000..1e730b230
--- /dev/null
+++ b/res/values-nb/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Ingen</item>
+ <item>Zoome inn</item>
+ <item>Zoome ut</item>
+ <item>Rotere opp</item>
+ <item>Rotere ned</item>
+ <item>Kube inn</item>
+ <item>Kube ut</item>
+ <item>Stabel</item>
+ <item>Trekkspill</item>
+ <item>Vend</item>
+ <item>Sylinder inn</item>
+ <item>Sylinder ut</item>
+ <item>Karusell</item>
+ <item>Oversikt</item>
+ </string-array>
+</resources>
diff --git a/res/values-nb/cm_strings.xml b/res/values-nb/cm_strings.xml
new file mode 100644
index 000000000..5e2a93587
--- /dev/null
+++ b/res/values-nb/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">HJEMMESKJERM INNSTILLINGER</string>
+ <string name="drawer_settings">SKUFF INNSTILLINGER</string>
+ <string name="app_settings">APP-INNSTILLINGER</string>
+ <string name="setting_state_on">PÅ</string>
+ <string name="setting_state_off">AV</string>
+ <string name="themes_button_text">Temaer</string>
+ <string name="scrolling_page_outlines">Skjermkontur</string>
+ <string name="scrolling_fade_adjacent">Fade skjermsider</string>
+ <string name="scrolling_wallpaper">Scroll bakgrunn</string>
+ <string name="grid_size_text">Rutenettstørrelse</string>
+ <string name="grid_size_comfortable">Komfortabel</string>
+ <string name="grid_size_cozy">Koselig</string>
+ <string name="grid_size_condensed">Kondensert</string>
+ <string name="grid_size_custom">Egendefinert (<xliff:g id="rows">%1$d </xliff:g> \u00d7 <xliff:g id="columns">%2$d </xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Velg egendefinert størrelse</string>
+ <string name="scroll_effect_text">Bla effekt</string>
+ <string name="drawer_sorting_text">Sorteringsmodus</string>
+ <string name="sort_mode_title">Tittel</string>
+ <string name="sort_mode_launch_count">Start teller</string>
+ <string name="sort_mode_install_time">Installeringstid</string>
+ <string name="home_screen_search_text">Søkefelt</string>
+ <string name="larger_icons_text">Større ikoner</string>
+ <string name="icon_labels">Ikonetiketter</string>
+ <string name="icon_labels_show">Vis</string>
+ <string name="icon_labels_hide">Skjul</string>
+ <string name="protected_app_settings">Beskyttede apps</string>
+ <string name="dialog_confirm">Bekreft</string>
+</resources>
diff --git a/res/values-nl/cm_arrays.xml b/res/values-nl/cm_arrays.xml
new file mode 100644
index 000000000..dadaedf0b
--- /dev/null
+++ b/res/values-nl/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Geen</item>
+ <item>Inzoomen</item>
+ <item>Uitzoomen</item>
+ <item>Naar boven draaien</item>
+ <item>Naar beneden draaien</item>
+ <item>Kubus-in</item>
+ <item>Kubus-uit</item>
+ <item>Stapelen</item>
+ <item>Accordeon</item>
+ <item>Spiegelen</item>
+ <item>Cilinder-in</item>
+ <item>Cilinder-uit</item>
+ <item>Carrousel</item>
+ <item>Overzicht</item>
+ </string-array>
+</resources>
diff --git a/res/values-nl/cm_strings.xml b/res/values-nl/cm_strings.xml
new file mode 100644
index 000000000..78008fd73
--- /dev/null
+++ b/res/values-nl/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">INSTELLINGEN THUISSCHERM</string>
+ <string name="drawer_settings">INSTELLINGEN OVERZICHT</string>
+ <string name="app_settings">INSTELLINGEN APPS</string>
+ <string name="setting_state_on">AAN</string>
+ <string name="setting_state_off">UIT</string>
+ <string name="themes_button_text">Thema\'s</string>
+ <string name="scrolling_page_outlines">Paginacontouren</string>
+ <string name="scrolling_fade_adjacent">Zijkant pagina\'s vervagen</string>
+ <string name="scrolling_wallpaper">Achtergrond schuiven</string>
+ <string name="grid_size_text">Rastergrootte</string>
+ <string name="grid_size_comfortable">Comfortabel</string>
+ <string name="grid_size_cozy">Knus</string>
+ <string name="grid_size_condensed">Smal</string>
+ <string name="grid_size_custom">Aangepast (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Aangepaste grootte</string>
+ <string name="scroll_effect_text">Overgangseffect</string>
+ <string name="drawer_sorting_text">Sorteren op</string>
+ <string name="sort_mode_title">Titel</string>
+ <string name="sort_mode_launch_count">Aantal starts</string>
+ <string name="sort_mode_install_time">Tijd van installatie</string>
+ <string name="home_screen_search_text">Zoekbalk</string>
+ <string name="larger_icons_text">Grote pictogrammen</string>
+ <string name="icon_labels">Pictogramlabels</string>
+ <string name="icon_labels_show">Aan</string>
+ <string name="icon_labels_hide">Uit</string>
+ <string name="protected_app_settings">Beschermde apps</string>
+ <string name="dialog_confirm">Bevestig</string>
+</resources>
diff --git a/res/values-pl/cm_arrays.xml b/res/values-pl/cm_arrays.xml
new file mode 100644
index 000000000..f93e1b4e9
--- /dev/null
+++ b/res/values-pl/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Brak</item>
+ <item>Zbliżanie</item>
+ <item>Oddalanie</item>
+ <item>Obrót do góry</item>
+ <item>Obrót w dół</item>
+ <item>Kostka (w środku)</item>
+ <item>Kostka (na zewnątrz)</item>
+ <item>Stos</item>
+ <item>Akordeon</item>
+ <item>Obrót</item>
+ <item>Cylinder (w środku)</item>
+ <item>Cylinder (na zewnątrz)</item>
+ <item>Karuzela</item>
+ <item>Przegląd</item>
+ </string-array>
+</resources>
diff --git a/res/values-pl/cm_strings.xml b/res/values-pl/cm_strings.xml
new file mode 100644
index 000000000..1d1fbd08d
--- /dev/null
+++ b/res/values-pl/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">USTAWIENIA EKRANU GŁÓWNEGO</string>
+ <string name="drawer_settings">USTAWIENIA SZUFLADY APLIKACJI</string>
+ <string name="app_settings">USTAWIENIA APLIKACJI</string>
+ <string name="setting_state_on">WŁĄCZONE</string>
+ <string name="setting_state_off">WYŁĄCZONE</string>
+ <string name="themes_button_text">Motywy</string>
+ <string name="scrolling_page_outlines">Kontury strony</string>
+ <string name="scrolling_fade_adjacent">Przenikaj strony boczne</string>
+ <string name="scrolling_wallpaper">Przewijanie tapety</string>
+ <string name="grid_size_text">Rozmiar siatki</string>
+ <string name="grid_size_comfortable">Wygodny</string>
+ <string name="grid_size_cozy">Luźny</string>
+ <string name="grid_size_condensed">Zagęszczony</string>
+ <string name="grid_size_custom">Niestandardowy (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Wybierz własny rozmiar</string>
+ <string name="scroll_effect_text">Efekt przewijania</string>
+ <string name="drawer_sorting_text">Tryb sortowania</string>
+ <string name="sort_mode_title">Tytuł</string>
+ <string name="sort_mode_launch_count">Liczba uruchomień</string>
+ <string name="sort_mode_install_time">Data instalacji</string>
+ <string name="home_screen_search_text">Pasek wyszukiwania</string>
+ <string name="larger_icons_text">Większe ikony</string>
+ <string name="icon_labels">Etykiety ikon</string>
+ <string name="icon_labels_show">Pokaż</string>
+ <string name="icon_labels_hide">Ukryj</string>
+ <string name="protected_app_settings">Chronione aplikacje</string>
+ <string name="dialog_confirm">Potwierdź</string>
+</resources>
diff --git a/res/values-pt-rBR/cm_arrays.xml b/res/values-pt-rBR/cm_arrays.xml
new file mode 100644
index 000000000..81f8c5f4d
--- /dev/null
+++ b/res/values-pt-rBR/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Nenhum</item>
+ <item>Aumentar zoom</item>
+ <item>Diminuir o zoom</item>
+ <item>Girar para cima</item>
+ <item>Girar para baixo</item>
+ <item>Cubo interno</item>
+ <item>Cubo externo</item>
+ <item>Pilha</item>
+ <item>Acordeão</item>
+ <item>Girar</item>
+ <item>Cilindro Interno</item>
+ <item>Cilindro Externo</item>
+ <item>Carrossel</item>
+ <item>Visão Geral</item>
+ </string-array>
+</resources>
diff --git a/res/values-pt-rBR/cm_strings.xml b/res/values-pt-rBR/cm_strings.xml
new file mode 100644
index 000000000..db3a1f260
--- /dev/null
+++ b/res/values-pt-rBR/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">CONFIGURAÇÕES DA TELA DE INÍCIO</string>
+ <string name="drawer_settings">CONFIGURAÇÕES DA GAVETA APLICAÇÕES</string>
+ <string name="app_settings">CONFIGURAÇÕES DE APLICATIVO</string>
+ <string name="setting_state_on">LIG</string>
+ <string name="setting_state_off">DESL</string>
+ <string name="themes_button_text">Temas</string>
+ <string name="scrolling_page_outlines">Contorno de página</string>
+ <string name="scrolling_fade_adjacent">Esmaecer páginas laterais</string>
+ <string name="scrolling_wallpaper">Rolar papel de parede</string>
+ <string name="grid_size_text">Tamanho da grade</string>
+ <string name="grid_size_comfortable">Confortável</string>
+ <string name="grid_size_cozy">Aconchegante</string>
+ <string name="grid_size_condensed">Condensado</string>
+ <string name="grid_size_custom">Personalizado (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Selecione tamanho personalizado</string>
+ <string name="scroll_effect_text">Efeito de rolagem</string>
+ <string name="drawer_sorting_text">Modo de ordenação</string>
+ <string name="sort_mode_title">Título</string>
+ <string name="sort_mode_launch_count">Contador de inicialização</string>
+ <string name="sort_mode_install_time">Hora da instalação</string>
+ <string name="home_screen_search_text">Barra de pesquisa</string>
+ <string name="larger_icons_text">Ícones grandes</string>
+ <string name="icon_labels">Etiquetas de ícones</string>
+ <string name="icon_labels_show">Mostrar</string>
+ <string name="icon_labels_hide">Ocultar</string>
+ <string name="protected_app_settings">Aplicativos protegidos</string>
+ <string name="dialog_confirm">Confirmar</string>
+</resources>
diff --git a/res/values-pt-rPT/cm_arrays.xml b/res/values-pt-rPT/cm_arrays.xml
new file mode 100644
index 000000000..85f7cfa64
--- /dev/null
+++ b/res/values-pt-rPT/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Nenhum</item>
+ <item>Zoom para dentro</item>
+ <item>Zoom para fora</item>
+ <item>Rodar para cima</item>
+ <item>Rodar para baixo</item>
+ <item>Cubo para dentro</item>
+ <item>Cubo para fora</item>
+ <item>Pilha</item>
+ <item>Acordeão</item>
+ <item>Virar</item>
+ <item>Cilindro para dentro</item>
+ <item>Cilindro para Fora</item>
+ <item>Carrossel</item>
+ <item>Vista geral</item>
+ </string-array>
+</resources>
diff --git a/res/values-pt-rPT/cm_strings.xml b/res/values-pt-rPT/cm_strings.xml
new file mode 100644
index 000000000..b3faf639e
--- /dev/null
+++ b/res/values-pt-rPT/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">DEFINIÇÕES DO ECRÃ INICIAL</string>
+ <string name="drawer_settings">DEFINIÇÕES DA GAVETA APLICAÇÕES</string>
+ <string name="app_settings">DEFINIÇÕES DA APLICAÇÃO</string>
+ <string name="setting_state_on">LIG.</string>
+ <string name="setting_state_off">DESL.</string>
+ <string name="themes_button_text">Temas</string>
+ <string name="scrolling_page_outlines">Contorno das páginas</string>
+ <string name="scrolling_fade_adjacent">Desvanecer as laterais das páginas</string>
+ <string name="scrolling_wallpaper">Deslizar imagem de fundo</string>
+ <string name="grid_size_text">Tamanho da grelha</string>
+ <string name="grid_size_comfortable">Confortável</string>
+ <string name="grid_size_cozy">Cómodo</string>
+ <string name="grid_size_condensed">Condensado</string>
+ <string name="grid_size_custom">Personalizado (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Selecionar o tamanho personalizado</string>
+ <string name="scroll_effect_text">Efeito de transição</string>
+ <string name="drawer_sorting_text">Ordenar por</string>
+ <string name="sort_mode_title">Título</string>
+ <string name="sort_mode_launch_count">Contagem de inicializações</string>
+ <string name="sort_mode_install_time">Data de instalação</string>
+ <string name="home_screen_search_text">Barra de pesquisa</string>
+ <string name="larger_icons_text">Ícones grandes</string>
+ <string name="icon_labels">Legendas dos ícones</string>
+ <string name="icon_labels_show">Mostrar</string>
+ <string name="icon_labels_hide">Ocultar</string>
+ <string name="protected_app_settings">Aplicações protegidas</string>
+ <string name="dialog_confirm">Confirmar</string>
+</resources>
diff --git a/res/values-ro/cm_arrays.xml b/res/values-ro/cm_arrays.xml
new file mode 100644
index 000000000..a888a8793
--- /dev/null
+++ b/res/values-ro/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Nimic</item>
+ <item>Zoom in</item>
+ <item>Zoom out</item>
+ <item>Rotire în sus</item>
+ <item>Rotire în jos</item>
+ <item>Cub interior</item>
+ <item>Cub exterior</item>
+ <item>Stivă</item>
+ <item>Acordeon</item>
+ <item>Flip</item>
+ <item>Cilindru interor</item>
+ <item>Cilindru exterior</item>
+ <item>Carusel</item>
+ <item>Privire de ansamblu</item>
+ </string-array>
+</resources>
diff --git a/res/values-ro/cm_strings.xml b/res/values-ro/cm_strings.xml
new file mode 100644
index 000000000..183467af8
--- /dev/null
+++ b/res/values-ro/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">SETĂRI ECRAN PRINCIPAL</string>
+ <string name="drawer_settings">SETĂRI ECRAN APLICAȚII</string>
+ <string name="app_settings">SETĂRI APLICAȚIE</string>
+ <string name="setting_state_on">ACTIV</string>
+ <string name="setting_state_off">INACTIV</string>
+ <string name="themes_button_text">Teme</string>
+ <string name="scrolling_page_outlines">Contururi pagină</string>
+ <string name="scrolling_fade_adjacent">Estompează paginile secundare</string>
+ <string name="scrolling_wallpaper">Scroll-ează fundal</string>
+ <string name="grid_size_text">Dimensiune grilă</string>
+ <string name="grid_size_comfortable">Confortabil</string>
+ <string name="grid_size_cozy">Comod</string>
+ <string name="grid_size_condensed">Condensat</string>
+ <string name="grid_size_custom">Particularizat (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Selectare dimensiune particularizată</string>
+ <string name="scroll_effect_text">Efect scroll</string>
+ <string name="drawer_sorting_text">Mod sortare</string>
+ <string name="sort_mode_title">Titlu</string>
+ <string name="sort_mode_launch_count">Numărare lansare</string>
+ <string name="sort_mode_install_time">Timp de instalare</string>
+ <string name="home_screen_search_text">Bară de căutare</string>
+ <string name="larger_icons_text">Icon-uri mai mari</string>
+ <string name="icon_labels">Etichete icon-uri</string>
+ <string name="icon_labels_show">Arată</string>
+ <string name="icon_labels_hide">Ascunde</string>
+ <string name="protected_app_settings">Aplicații protejate</string>
+ <string name="dialog_confirm">Confirmă</string>
+</resources>
diff --git a/res/values-ru/cm_arrays.xml b/res/values-ru/cm_arrays.xml
new file mode 100644
index 000000000..4003a4b44
--- /dev/null
+++ b/res/values-ru/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Нет</item>
+ <item>Увеличение</item>
+ <item>Уменьшение</item>
+ <item>Поворот вверх</item>
+ <item>Поворот вниз</item>
+ <item>Внутри куба</item>
+ <item>Снаружи куба</item>
+ <item>Стопка</item>
+ <item>Сжатие</item>
+ <item>Переворот</item>
+ <item>Внутри цилиндра</item>
+ <item>Снаружи цилиндра</item>
+ <item>Карусель</item>
+ <item>Обзор</item>
+ </string-array>
+</resources>
diff --git a/res/values-ru/cm_strings.xml b/res/values-ru/cm_strings.xml
new file mode 100644
index 000000000..2a6ba41a6
--- /dev/null
+++ b/res/values-ru/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">ДОМАШНИЙ ЭКРАН</string>
+ <string name="drawer_settings">МЕНЮ ПРИЛОЖЕНИЙ</string>
+ <string name="app_settings">НАСТРОЙКИ ПРИЛОЖЕНИЯ</string>
+ <string name="setting_state_on">ВКЛ.</string>
+ <string name="setting_state_off">ВЫКЛ.</string>
+ <string name="themes_button_text">Темы</string>
+ <string name="scrolling_page_outlines">Границы страниц</string>
+ <string name="scrolling_fade_adjacent">Затемнять края при переходе</string>
+ <string name="scrolling_wallpaper">Прокрутка обоев</string>
+ <string name="grid_size_text">Размер сетки</string>
+ <string name="grid_size_comfortable">Комфортная</string>
+ <string name="grid_size_cozy">Удобная</string>
+ <string name="grid_size_condensed">Сжатая</string>
+ <string name="grid_size_custom">Своя (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Выберите размер сетки</string>
+ <string name="scroll_effect_text">Эффект прокрутки</string>
+ <string name="drawer_sorting_text">Режим сортировки</string>
+ <string name="sort_mode_title">По назв.</string>
+ <string name="sort_mode_launch_count">По частоте исп.</string>
+ <string name="sort_mode_install_time">По врем. устан.</string>
+ <string name="home_screen_search_text">Строка поиска</string>
+ <string name="larger_icons_text">Крупные значки</string>
+ <string name="icon_labels">Подписи значков</string>
+ <string name="icon_labels_show">Показ.</string>
+ <string name="icon_labels_hide">Скрывать</string>
+ <string name="protected_app_settings">Заблокированные приложения</string>
+ <string name="dialog_confirm">Подтвердить</string>
+</resources>
diff --git a/res/values-si-rLK/cm_arrays.xml b/res/values-si-rLK/cm_arrays.xml
new file mode 100644
index 000000000..09a4544ed
--- /dev/null
+++ b/res/values-si-rLK/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>කිසිවක් නැත</item>
+ <item>ඇතුලට විශාලනය</item>
+ <item>පිටතට විශාලනය</item>
+ <item>ඉහළට භ්‍රමණය</item>
+ <item>පහළට භ්‍රමණය</item>
+ <item>ඇතුලට ඝනකය</item>
+ <item>පිටතට ඝනකය</item>
+ <item>අට්ටි ගැසීම</item>
+ <item>එකෝඩින්</item>
+ <item>පෙරළීම</item>
+ <item>ඇතුලට සිලින්ඩරය</item>
+ <item>පිටතට සිලින්ඩරය</item>
+ <item>බීමත්වූ</item>
+ <item>දළ විශ්ලේෂණය</item>
+ </string-array>
+</resources>
diff --git a/res/values-si-rLK/cm_strings.xml b/res/values-si-rLK/cm_strings.xml
new file mode 100644
index 000000000..18a9a152b
--- /dev/null
+++ b/res/values-si-rLK/cm_strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">මුල් තිරයේ සැකසීම්</string>
+ <string name="drawer_settings">ලාච්චුවේ සැකසීම්</string>
+ <string name="app_settings">යෙදුම් සැකසීම්</string>
+ <string name="setting_state_on">සක්‍රීයයි</string>
+ <string name="setting_state_off">අක්‍රීයයි</string>
+ <string name="themes_button_text">තේමා</string>
+ <string name="scrolling_page_outlines">පිටුවේ පිට මායිම්</string>
+ <string name="scrolling_fade_adjacent">පැති පිටු අවපැහැ කරන්න</string>
+ <string name="scrolling_wallpaper">වෝල්පේපරය අනුචලනය කරන්න</string>
+ <string name="grid_size_text">කොටු සැලැස්මේ ප්‍රමාණය</string>
+ <string name="grid_size_comfortable">සැපපහසු</string>
+ <string name="grid_size_cozy">ප්‍රියජනක</string>
+ <string name="grid_size_condensed">ඝනීභූත</string>
+ <string name="preferences_interface_homescreen_custom">රිසිකළ ප්‍රමාණය තෝරන්න</string>
+ <string name="scroll_effect_text">අනුචලන ආටෝපය</string>
+ <string name="drawer_sorting_text">සුබෙදීමේ ප්‍රකාරය</string>
+ <string name="sort_mode_title">පටබැඳිනාමය</string>
+ <string name="sort_mode_launch_count">දියත් කල වාර ගණන</string>
+ <string name="sort_mode_install_time">ස්ථාපිත වේලාව</string>
+ <string name="home_screen_search_text">සෙවුම් තීරුව</string>
+ <string name="larger_icons_text">විශාල අයිකන</string>
+ <string name="icon_labels">අයිකන ලේබල</string>
+ <string name="icon_labels_show">පෙන්වන්න</string>
+ <string name="icon_labels_hide">සඟවන්න</string>
+ <string name="protected_app_settings">ආරක්ෂිත යෙදුම්</string>
+ <string name="dialog_confirm">තහවුරු කරන්න</string>
+</resources>
diff --git a/res/values-sk/cm_arrays.xml b/res/values-sk/cm_arrays.xml
new file mode 100644
index 000000000..0de34705b
--- /dev/null
+++ b/res/values-sk/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Žiadny</item>
+ <item>Priblíženie</item>
+ <item>Oddialenie</item>
+ <item>Otočenie hore</item>
+ <item>Otočenie dolu</item>
+ <item>Kocka zvnútra</item>
+ <item>Kocka zvonku</item>
+ <item>Hromadenie</item>
+ <item>Akordeón</item>
+ <item>Preklopenie</item>
+ <item>Valec zvnútra</item>
+ <item>Valec zvonku</item>
+ <item>Kolotoč</item>
+ <item>Prehľad</item>
+ </string-array>
+</resources>
diff --git a/res/values-sk/cm_strings.xml b/res/values-sk/cm_strings.xml
new file mode 100644
index 000000000..c37ad8f0a
--- /dev/null
+++ b/res/values-sk/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">NASTAVENIA DOMOVSKEJ OBRAZOVKY</string>
+ <string name="drawer_settings">NASTAVENIA PONUKY</string>
+ <string name="app_settings">NASTAVENIA APLIKÁCIÍ</string>
+ <string name="setting_state_on">Zapnuté</string>
+ <string name="setting_state_off">VYPNUTÉ</string>
+ <string name="themes_button_text">Témy</string>
+ <string name="scrolling_page_outlines">Obrysy stránky</string>
+ <string name="scrolling_fade_adjacent">Stmavnuté bočné strany</string>
+ <string name="scrolling_wallpaper">Posun tapety</string>
+ <string name="grid_size_text">Veľkosť mriežky</string>
+ <string name="grid_size_comfortable">Pohodlná</string>
+ <string name="grid_size_cozy">Útulná</string>
+ <string name="grid_size_condensed">Zhustená</string>
+ <string name="grid_size_custom">Vlastná (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Vyberte vlastnú veľkosť</string>
+ <string name="scroll_effect_text">Efekt posunu</string>
+ <string name="drawer_sorting_text">Režim triedenia</string>
+ <string name="sort_mode_title">Názov</string>
+ <string name="sort_mode_launch_count">Počet spustení</string>
+ <string name="sort_mode_install_time">Čas inštalácie</string>
+ <string name="home_screen_search_text">Vyhľadávací panel</string>
+ <string name="larger_icons_text">Väčšie ikony</string>
+ <string name="icon_labels">Menovky ikon</string>
+ <string name="icon_labels_show">Zobraziť</string>
+ <string name="icon_labels_hide">Skryť</string>
+ <string name="protected_app_settings">Chránené aplikácie</string>
+ <string name="dialog_confirm">Potvrdiť</string>
+</resources>
diff --git a/res/values-sr/cm_arrays.xml b/res/values-sr/cm_arrays.xml
new file mode 100644
index 000000000..011ea479c
--- /dev/null
+++ b/res/values-sr/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Ниједан</item>
+ <item>Увећавање</item>
+ <item>Умањивање</item>
+ <item>Ротирање нагоре</item>
+ <item>Ротирање надоле</item>
+ <item>Коцка унутра</item>
+ <item>Коцка споља</item>
+ <item>Листање карата</item>
+ <item>Хармоника</item>
+ <item>Окрет</item>
+ <item>Цилиндар унутра</item>
+ <item>Цилиндар споља</item>
+ <item>Рингишпил</item>
+ <item>Преглед</item>
+ </string-array>
+</resources>
diff --git a/res/values-sr/cm_strings.xml b/res/values-sr/cm_strings.xml
new file mode 100644
index 000000000..cddf785f0
--- /dev/null
+++ b/res/values-sr/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">ПОДЕШАВАЊА ПОЧЕТНОГ ЕКРАНА</string>
+ <string name="drawer_settings">ПОДЕШАВАЊА ФИОКЕ</string>
+ <string name="app_settings">ПОДЕШАВАЊА АПЛИКАЦИЈА</string>
+ <string name="setting_state_on">ДА</string>
+ <string name="setting_state_off">НЕ</string>
+ <string name="themes_button_text">Теме</string>
+ <string name="scrolling_page_outlines">Контура странице</string>
+ <string name="scrolling_fade_adjacent">Замагљени крајеви страница</string>
+ <string name="scrolling_wallpaper">Скроловање позадине</string>
+ <string name="grid_size_text">Величина мреже</string>
+ <string name="grid_size_comfortable">Комфорно</string>
+ <string name="grid_size_cozy">Удобно</string>
+ <string name="grid_size_condensed">Кондензовано</string>
+ <string name="grid_size_custom">Прилагођено (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Изабери прилагођену величину</string>
+ <string name="scroll_effect_text">Ефекат</string>
+ <string name="drawer_sorting_text">Сортирање</string>
+ <string name="sort_mode_title">Наслов</string>
+ <string name="sort_mode_launch_count">Број покретања</string>
+ <string name="sort_mode_install_time">Време инсталирања</string>
+ <string name="home_screen_search_text">Трака за претрагу</string>
+ <string name="larger_icons_text">Веће иконе</string>
+ <string name="icon_labels">Ознаке икона</string>
+ <string name="icon_labels_show">Прикажи</string>
+ <string name="icon_labels_hide">Сакриј</string>
+ <string name="protected_app_settings">Заштићене апликације</string>
+ <string name="dialog_confirm">Потврди</string>
+</resources>
diff --git a/res/values-sv/cm_arrays.xml b/res/values-sv/cm_arrays.xml
new file mode 100644
index 000000000..9ccd98016
--- /dev/null
+++ b/res/values-sv/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Ingen</item>
+ <item>Zooma in</item>
+ <item>Zooma ut</item>
+ <item>Rotera uppåt</item>
+ <item>Rotera nedåt</item>
+ <item>Kub inåt</item>
+ <item>Kub utåt</item>
+ <item>Stack</item>
+ <item>Dragspel</item>
+ <item>Vänd</item>
+ <item>Cylinder inåt</item>
+ <item>Cylinder utåt</item>
+ <item>Karusell</item>
+ <item>Översikt</item>
+ </string-array>
+</resources>
diff --git a/res/values-sv/cm_strings.xml b/res/values-sv/cm_strings.xml
new file mode 100644
index 000000000..36a0d9cf1
--- /dev/null
+++ b/res/values-sv/cm_strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">HEMSKÄRMSINSTÄLLNINGAR</string>
+ <string name="drawer_settings">APPMENYINSTÄLLNINGAR</string>
+ <string name="app_settings">APPINSTÄLLNINGAR</string>
+ <string name="setting_state_on">PÅ</string>
+ <string name="setting_state_off">AV</string>
+ <string name="themes_button_text">Teman</string>
+ <string name="scrolling_page_outlines">Skärmkonturer</string>
+ <string name="scrolling_fade_adjacent">Tona skärmsidor</string>
+ <string name="scrolling_wallpaper">Rulla bakgrundsbild</string>
+ <string name="grid_size_text">Rutnätsstorlek</string>
+ <string name="grid_size_comfortable">Komfortabel</string>
+ <string name="grid_size_cozy">Mysig</string>
+ <string name="grid_size_condensed">Kondenserad</string>
+ <string name="preferences_interface_homescreen_custom">Välj anpassad storlek</string>
+ <string name="scroll_effect_text">Rullningseffekt</string>
+ <string name="drawer_sorting_text">Sorteringsläge</string>
+ <string name="sort_mode_title">Titel</string>
+ <string name="sort_mode_launch_count">Startantal</string>
+ <string name="sort_mode_install_time">Installationstillfälle</string>
+ <string name="home_screen_search_text">Sökfält</string>
+ <string name="larger_icons_text">Större ikoner</string>
+ <string name="icon_labels">Ikonetiketter</string>
+ <string name="icon_labels_show">Visa</string>
+ <string name="icon_labels_hide">Dölj</string>
+ <string name="protected_app_settings">Skyddade appar</string>
+ <string name="dialog_confirm">Bekräfta</string>
+</resources>
diff --git a/res/values-th/cm_arrays.xml b/res/values-th/cm_arrays.xml
new file mode 100644
index 000000000..8640fb156
--- /dev/null
+++ b/res/values-th/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>ไม่มี</item>
+ <item>ซูมเข้า</item>
+ <item>ซูมออก</item>
+ <item>หมุนขึ้น</item>
+ <item>หมุนลง</item>
+ <item>เข้าลูกบาศก์</item>
+ <item>ออกลูกบาศก์</item>
+ <item>ไพ่</item>
+ <item>หีบเพลง</item>
+ <item>พลิก</item>
+ <item>เข้าทรงกระบอก</item>
+ <item>ออกทรงกระบอก</item>
+ <item>Carousel</item>
+ <item>ภาพรวม</item>
+ </string-array>
+</resources>
diff --git a/res/values-th/cm_strings.xml b/res/values-th/cm_strings.xml
new file mode 100644
index 000000000..c32e370c5
--- /dev/null
+++ b/res/values-th/cm_strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">ตั้งค่าหน้าจอหลัก</string>
+ <string name="drawer_settings">ตั้งค่าแผงแสดงแอป</string>
+ <string name="app_settings">ตั้งค่าแอป</string>
+ <string name="setting_state_on">เปิด</string>
+ <string name="setting_state_off">ปิด</string>
+ <string name="themes_button_text">ชุดรูปแบบ</string>
+ <string name="scrolling_page_outlines">โครงร่างหน้า</string>
+ <string name="scrolling_fade_adjacent">จากหน้าด้านข้าง</string>
+ <string name="scrolling_wallpaper">เลื่อนภาพพื้นหลัง</string>
+ <string name="grid_size_text">ขนาดกริด</string>
+ <string name="grid_size_comfortable">สะดวกสบาย</string>
+ <string name="grid_size_cozy">โคซี่</string>
+ <string name="grid_size_condensed">บีบ</string>
+ <string name="preferences_interface_homescreen_custom">เลือกขนาดกำหนดเอง</string>
+ <string name="scroll_effect_text">เอฟเฟกต์เลื่อน</string>
+ <string name="drawer_sorting_text">วิธีการเรียง</string>
+ <string name="sort_mode_title">ชื่อเรื่อง</string>
+ <string name="sort_mode_launch_count">ตัวนับครั้งการเปิด</string>
+ <string name="sort_mode_install_time">เวลาติดตั้ง</string>
+ <string name="home_screen_search_text">แถบค้นหา</string>
+ <string name="larger_icons_text">ไอคอนขนาดใหญ่</string>
+ <string name="icon_labels">ป้ายชื่อไอคอน</string>
+ <string name="icon_labels_show">แสดง</string>
+ <string name="icon_labels_hide">ซ่อน</string>
+ <string name="protected_app_settings">แอปที่ป้องกัน</string>
+ <string name="dialog_confirm">Google</string>
+</resources>
diff --git a/res/values-tr/cm_arrays.xml b/res/values-tr/cm_arrays.xml
new file mode 100644
index 000000000..a43170d91
--- /dev/null
+++ b/res/values-tr/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Hiçbiri</item>
+ <item>Yakınlaştır</item>
+ <item>Uzaklaştır</item>
+ <item>Yukarı döndür</item>
+ <item>Aşağı döndür</item>
+ <item>Küp içi</item>
+ <item>Küp dışı</item>
+ <item>Yığın</item>
+ <item>Akordiyon</item>
+ <item>Çevir</item>
+ <item>Silindir içi</item>
+ <item>Silindir dışı</item>
+ <item>Karusel</item>
+ <item>Genel Görünüm</item>
+ </string-array>
+</resources>
diff --git a/res/values-tr/cm_strings.xml b/res/values-tr/cm_strings.xml
new file mode 100644
index 000000000..1eefcf37b
--- /dev/null
+++ b/res/values-tr/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">ANA EKRAN AYARLARI</string>
+ <string name="drawer_settings">ÇEKMECE AYARLARI</string>
+ <string name="app_settings">UYGULAMA AYARLARI</string>
+ <string name="setting_state_on">AÇIK</string>
+ <string name="setting_state_off">KAPALI</string>
+ <string name="themes_button_text">Temalar</string>
+ <string name="scrolling_page_outlines">Sayfa anahatları</string>
+ <string name="scrolling_fade_adjacent">Yan sayfaları soldur</string>
+ <string name="scrolling_wallpaper">Duvarkağıdını kaydır</string>
+ <string name="grid_size_text">Izgara boyutu</string>
+ <string name="grid_size_comfortable">Seyrek</string>
+ <string name="grid_size_cozy">Rahat</string>
+ <string name="grid_size_condensed">Yoğun</string>
+ <string name="grid_size_custom">Özel (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Özel boyut seçin</string>
+ <string name="scroll_effect_text">Kaydırma efekti</string>
+ <string name="drawer_sorting_text">Sıralama modu</string>
+ <string name="sort_mode_title">Başlık</string>
+ <string name="sort_mode_launch_count">Çalıştırma sayısı</string>
+ <string name="sort_mode_install_time">Kurulum zamanı</string>
+ <string name="home_screen_search_text">Arama çubuğu</string>
+ <string name="larger_icons_text">Daha büyük simgeler</string>
+ <string name="icon_labels">Simge etiketleri</string>
+ <string name="icon_labels_show">Göster</string>
+ <string name="icon_labels_hide">Gizle</string>
+ <string name="protected_app_settings">Korunan uygulamalar</string>
+ <string name="dialog_confirm">Onayla</string>
+</resources>
diff --git a/res/values-uk/cm_arrays.xml b/res/values-uk/cm_arrays.xml
new file mode 100644
index 000000000..3026f97fa
--- /dev/null
+++ b/res/values-uk/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>Немає</item>
+ <item>Збільшення</item>
+ <item>Зменшення</item>
+ <item>Поворот угору</item>
+ <item>Поворот униз</item>
+ <item>Всередині куба</item>
+ <item>Зовні куба</item>
+ <item>Стек</item>
+ <item>Гармошка</item>
+ <item>Переворот</item>
+ <item>Всередині циліндра</item>
+ <item>Зовні циліндра</item>
+ <item>Карусель</item>
+ <item>Огляд</item>
+ </string-array>
+</resources>
diff --git a/res/values-uk/cm_strings.xml b/res/values-uk/cm_strings.xml
new file mode 100644
index 000000000..88ad2145e
--- /dev/null
+++ b/res/values-uk/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">НАЛАШТУВАННЯ ДОМІВКИ</string>
+ <string name="drawer_settings">МЕНЮ ПРОГРАМ</string>
+ <string name="app_settings">НАЛАШТУВАННЯ ПРОГРАМ</string>
+ <string name="setting_state_on">УВІМК</string>
+ <string name="setting_state_off">ВИМК</string>
+ <string name="themes_button_text">Теми</string>
+ <string name="scrolling_page_outlines">Межі сторінок</string>
+ <string name="scrolling_fade_adjacent">Затемняти краї при гортанні</string>
+ <string name="scrolling_wallpaper">Прокручувати шпалери</string>
+ <string name="grid_size_text">Розмір сітки</string>
+ <string name="grid_size_comfortable">Комфортна</string>
+ <string name="grid_size_cozy">Зручна</string>
+ <string name="grid_size_condensed">Стиснута</string>
+ <string name="grid_size_custom">Користувацький (<xliff:g id="rows">%1$d</xliff:g>\u00d7<xliff:g id="columns">%2$d </xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">Виберіть розмір сітки</string>
+ <string name="scroll_effect_text">Ефект гортання</string>
+ <string name="drawer_sorting_text">Режим сортування</string>
+ <string name="sort_mode_title">За назвою</string>
+ <string name="sort_mode_launch_count">За частотою використання</string>
+ <string name="sort_mode_install_time">За часом встановлення</string>
+ <string name="home_screen_search_text">Рядок пошуку</string>
+ <string name="larger_icons_text">Великі піктограми</string>
+ <string name="icon_labels">Мітки піктограм</string>
+ <string name="icon_labels_show">Показати</string>
+ <string name="icon_labels_hide">Приховати</string>
+ <string name="protected_app_settings">Заблоковані програми</string>
+ <string name="dialog_confirm">Підтвердити</string>
+</resources>
diff --git a/res/values-zh-rCN/cm_strings.xml b/res/values-zh-rCN/cm_strings.xml
index 3ce89ea6e..6c7675cd8 100644
--- a/res/values-zh-rCN/cm_strings.xml
+++ b/res/values-zh-rCN/cm_strings.xml
@@ -15,7 +15,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<resources>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="home_screen_settings">主屏幕设置</string>
<string name="drawer_settings">抽屉设置</string>
<string name="app_settings">应用设置</string>
@@ -29,9 +29,12 @@
<string name="grid_size_comfortable">宽松</string>
<string name="grid_size_cozy">合适</string>
<string name="grid_size_condensed">紧凑</string>
- <string name="grid_size_custom">自定义 %1$d \u00d7 %2$d</string>
+ <string name="grid_size_custom">自定义(<xliff:g id="rows">%1$d</xliff:g>\u00d7<xliff:g id="columns">%2$d</xliff:g>)</string>
<string name="preferences_interface_homescreen_custom">选择自定义尺寸</string>
<string name="scroll_effect_text">滚动特效</string>
+ <string name="drawer_sorting_text">排序模式</string>
+ <string name="sort_mode_title">标题</string>
+ <string name="sort_mode_launch_count">启动次数</string>
<string name="sort_mode_install_time">安装时间</string>
<string name="home_screen_search_text">搜索栏</string>
<string name="larger_icons_text">大图标</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a2f5e9ff3..6e3d85b11 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -123,7 +123,4 @@
<string name="abandoned_search" msgid="891119232568284442">"搜索"</string>
<string name="abandoned_promises_title" msgid="7096178467971716750">"未安装此应用"</string>
<string name="abandoned_promise_explanation" msgid="3990027586878167529">"未安装此图标对应的应用。您可以移除此图标,也可以尝试搜索相应的应用并手动安装。"</string>
- <string name="drawer_sorting_text">"排序"</string>
- <string name="sort_mode_title">"按字母顺序排序"</string>
- <string name="sort_mode_launch_count">"按喜爱程度排</string>
</resources>
diff --git a/res/values-zh-rHK/cm_arrays.xml b/res/values-zh-rHK/cm_arrays.xml
new file mode 100644
index 000000000..76396cfb1
--- /dev/null
+++ b/res/values-zh-rHK/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>無</item>
+ <item>放大</item>
+ <item>縮小</item>
+ <item>向上旋轉</item>
+ <item>Rotate down</item>
+ <item>Cube in</item>
+ <item>Cube out</item>
+ <item>堆疊</item>
+ <item>手風琴</item>
+ <item>翻轉</item>
+ <item>Cylinder in</item>
+ <item>Cylinder out</item>
+ <item>幻燈片 </item>
+ <item>概述</item>
+ </string-array>
+</resources>
diff --git a/res/values-zh-rHK/cm_strings.xml b/res/values-zh-rHK/cm_strings.xml
new file mode 100644
index 000000000..4891ace8c
--- /dev/null
+++ b/res/values-zh-rHK/cm_strings.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">主螢幕設定</string>
+ <string name="drawer_settings">抽屜設定</string>
+ <string name="setting_state_on">開啟</string>
+ <string name="setting_state_off">關閉</string>
+ <string name="themes_button_text">主題</string>
+ <string name="scrolling_page_outlines">頁面輪廓</string>
+ <string name="scrolling_fade_adjacent">邊頁淡出</string>
+ <string name="scrolling_wallpaper">捲動牆紙</string>
+ <string name="scroll_effect_text">滾動效果</string>
+ <string name="drawer_sorting_text">排序模式</string>
+ <string name="sort_mode_title">標題</string>
+ <string name="sort_mode_launch_count">啟動次數</string>
+ <string name="sort_mode_install_time">安裝時間</string>
+ <string name="home_screen_search_text">搜尋列</string>
+ <string name="larger_icons_text">大圖示</string>
+</resources>
diff --git a/res/values-zh-rTW/cm_arrays.xml b/res/values-zh-rTW/cm_arrays.xml
new file mode 100644
index 000000000..d7082e85e
--- /dev/null
+++ b/res/values-zh-rTW/cm_arrays.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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>
+ <string-array name="transition_effect_entries">
+ <item>無</item>
+ <item>放大</item>
+ <item>縮小</item>
+ <item>向上旋轉</item>
+ <item>向下旋轉</item>
+ <item>四方體內部</item>
+ <item>四方體外部</item>
+ <item>堆疊</item>
+ <item>手風琴</item>
+ <item>翻轉</item>
+ <item>圓柱體內部</item>
+ <item>圓柱體外部</item>
+ <item>幻燈片</item>
+ <item>概述</item>
+ </string-array>
+</resources>
diff --git a/res/values-zh-rTW/cm_strings.xml b/res/values-zh-rTW/cm_strings.xml
new file mode 100644
index 000000000..27ca54323
--- /dev/null
+++ b/res/values-zh-rTW/cm_strings.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<!--
+ Copyright (C) 2014 The CyanogenMod 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="home_screen_settings">主螢幕設定</string>
+ <string name="drawer_settings">抽屜設定</string>
+ <string name="app_settings">應用程式設定</string>
+ <string name="setting_state_on">開啟</string>
+ <string name="setting_state_off">關閉</string>
+ <string name="themes_button_text">主題</string>
+ <string name="scrolling_page_outlines">頁面邊框</string>
+ <string name="scrolling_fade_adjacent">邊頁淡出</string>
+ <string name="scrolling_wallpaper">滾動桌面</string>
+ <string name="grid_size_text">網格大小</string>
+ <string name="grid_size_comfortable">舒適</string>
+ <string name="grid_size_cozy">自在</string>
+ <string name="grid_size_condensed">密集</string>
+ <string name="grid_size_custom">自訂 (<xliff:g id="rows">%1$d</xliff:g> \u00d7 <xliff:g id="columns">%2$d</xliff:g>)</string>
+ <string name="preferences_interface_homescreen_custom">選擇自訂大小</string>
+ <string name="scroll_effect_text">滾動效果</string>
+ <string name="drawer_sorting_text">排列模式</string>
+ <string name="sort_mode_title">標題</string>
+ <string name="sort_mode_launch_count">啟動次數</string>
+ <string name="sort_mode_install_time">安裝時間</string>
+ <string name="home_screen_search_text">搜尋列</string>
+ <string name="larger_icons_text">大圖示</string>
+ <string name="icon_labels">程式名稱</string>
+ <string name="icon_labels_show">顯示</string>
+ <string name="icon_labels_hide">隱藏</string>
+ <string name="protected_app_settings">受保護的應用程式</string>
+ <string name="dialog_confirm">確認</string>
+</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 240f31171..b32c5a2bc 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -154,4 +154,9 @@
<attr name="overlay" format="boolean"/>
</declare-styleable>
+ <declare-styleable name="AutofitTextView">
+ <attr name="minTextSize" format="dimension" />
+ <attr name="precision" format="float" />
+ <attr name="sizeToFit" format="boolean" />
+ </declare-styleable>
</resources>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index df151c064..6f1899a9e 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -77,4 +77,12 @@
<!-- Dialog -->
<string name="dialog_confirm">Confirm</string>
+
+ <!-- Drawer type -->
+ <string name="drawer_type">Layout</string>
+
+ <string name="drawer_type_drawer">Vertical</string>
+ <string name="drawer_type_pager">Paged</string>
+
+ <string name="setting_state_disabled">DISABLED</string>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 948801f5b..3cf7d39a6 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -49,4 +49,8 @@
<color name="dynamic_grid_preview_background">#FFFFFFFF</color>
<color name="dynamic_grid_preview_foreground">#FF000000</color>
+
+ <color name="app_drawer_background">#76000000</color>
+
+ <color name="scrubber_background">#CC14191E</color>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index d591535d3..81e40bfb2 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -118,4 +118,10 @@
<dimen name="grid_padding">15dp</dimen>
<dimen name="grid_custom_text">50dp</dimen>
+
+ <dimen name="scrubber_bottom_padding">30dp</dimen>
+ <dimen name="scrubber_height">48dp</dimen>
+
+ <!-- Vertical app drawer padding -->
+ <dimen name="vertical_app_drawer_icon_padding">5dp</dimen>
</resources>
diff --git a/res/values/preferences_defaults.xml b/res/values/preferences_defaults.xml
index 7dab6aca2..008c42a81 100644
--- a/res/values/preferences_defaults.xml
+++ b/res/values/preferences_defaults.xml
@@ -16,4 +16,5 @@
<string name="preferences_interface_general_icons_text_font_family_default">sans-serif-condensed</string>
<integer name="preferences_interface_general_icons_text_font_style_default">0</integer>
<bool name="preferences_interface_general_app_icon_animation">false</bool>
+ <integer name="preferences_interface_drawer_type_default">1</integer>
</resources>
diff --git a/res/xml/default_workspace_4x4.xml b/res/xml/default_workspace_4x4.xml
index d2f2ccab8..ac2af79a5 100644
--- a/res/xml/default_workspace_4x4.xml
+++ b/res/xml/default_workspace_4x4.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- Copyright (C) 2015 The CyanogenMod Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -19,46 +19,111 @@
<!-- Left screen [1] -->
<appwidget
- launcher:packageName="com.android.settings"
- launcher:className="com.android.settings.widget.SettingsAppWidgetProvider"
+ launcher:packageName="com.cyanogenmod.lockclock"
+ launcher:className="com.cyanogenmod.lockclock.ClockWidgetProvider"
launcher:screen="1"
launcher:x="0"
- launcher:y="3"
+ launcher:y="0"
launcher:spanX="4"
- launcher:spanY="1" />
+ launcher:spanY="2" />
+
+ <folder launcher:screen="1" launcher:x="0" launcher:y="3" launcher:title="@string/google_title">
+ <favorite
+ launcher:className="com.google.android.gm.ConversationListActivityGmail"
+ launcher:packageName="com.google.android.gm" />
+ <favorite
+ launcher:className="com.google.android.apps.plus.phone.HomeActivity"
+ launcher:packageName="com.google.android.apps.plus" />
+ <favorite
+ launcher:className="com.google.android.maps.MapsActivity"
+ launcher:packageName="com.google.android.apps.maps" />
+ <favorite
+ launcher:className="com.android.music.activitymanagement.TopLevelActivity"
+ launcher:packageName="com.google.android.music" />
+ <favorite
+ launcher:className="com.google.android.youtube.videos.EntryPoint"
+ launcher:packageName="com.google.android.videos" />
+ <favorite
+ launcher:className="com.google.android.apps.books.app.BooksActivity"
+ launcher:packageName="com.google.android.apps.books" />
+ <favorite
+ launcher:className="com.google.apps.dots.android.app.activity.CurrentsStartActivity"
+ launcher:packageName="com.google.android.apps.magazines" />
+ <favorite
+ launcher:className="com.google.android.gms.games.ui.destination.main.MainActivity"
+ launcher:packageName="com.google.android.play.games" />
+ <favorite
+ launcher:className="com.google.android.apps.docs.app.NewMainProxyActivity"
+ launcher:packageName="com.google.android.apps.docs" />
+ <favorite
+ launcher:className="com.google.android.youtube.app.honeycomb.Shell$HomeActivity"
+ launcher:packageName="com.google.android.youtube" />
+ <favorite
+ launcher:className="com.google.android.apps.plus.phone.ConversationListActivity"
+ launcher:packageName="com.google.android.apps.plus" />
+ <favorite
+ launcher:className="com.google.android.talk.SigningInActivity"
+ launcher:packageName="com.google.android.talk" />
+ </folder>
+
+ <favorite
+ launcher:packageName="com.cyanogenmod.eleven"
+ launcher:className="com.cyanogenmod.eleven.ui.activities.HomeActivity"
+ launcher:screen="1"
+ launcher:x="0"
+ launcher:y="3" />
+
+ <resolve
+ launcher:screen="1"
+ launcher:x="3"
+ launcher:y="3" >
+ <favorite
+ launcher:packageName="com.android.vending"
+ launcher:className="com.android.vending.AssetBrowserActivity" />
+ <favorite
+ launcher:packageName="org.cyanogenmod.theme.chooser"
+ launcher:className="org.cyanogenmod.theme.chooser.ChooserActivity" />
+ </resolve>
+
+ <!-- Screen [2] -->
- <!-- Middle screen [2] -->
<appwidget
- launcher:packageName="com.android.deskclock"
- launcher:className="com.android.alarmclock.AnalogAppWidgetProvider"
+ launcher:packageName="com.android.vending"
+ launcher:className="com.google.android.finsky.widget.consumption.NowPlayingWidgetProvider"
launcher:screen="2"
- launcher:x="1"
+ launcher:x="0"
launcher:y="0"
- launcher:spanX="2"
+ launcher:spanX="4"
launcher:spanY="2" />
- <favorite
- launcher:packageName="com.android.camera"
- launcher:className="com.android.camera.Camera"
+
+ <appwidget
+ launcher:packageName="com.cyanogenmod.eleven"
+ launcher:className="com.cyanogenmod.eleven.appwidgets.AppWidgetLarge"
launcher:screen="2"
launcher:x="0"
- launcher:y="3" />
+ launcher:y="0"
+ launcher:spanX="4"
+ launcher:spanY="2" />
+
+ <resolve
+ launcher:screen="2"
+ launcher:x="0"
+ launcher:y="3" >
+ <favorite
+ launcher:packageName="com.cyngn.gallerynext"
+ launcher:className="com.cyngn.gallerynext.app.GalleryActivity" />
+ <favorite
+ launcher:packageName="com.android.gallery3d"
+ launcher:className="com.android.gallery3d.app.GalleryActivity" />
+ </resolve>
- <!-- Right screen [3] -->
- <favorite
- launcher:packageName="com.android.gallery3d"
- launcher:className="com.android.gallery3d.app.GalleryActivity"
- launcher:screen="3"
- launcher:x="1"
- launcher:y="3" />
<favorite
launcher:packageName="com.android.settings"
launcher:className="com.android.settings.Settings"
- launcher:screen="3"
- launcher:x="2"
+ launcher:screen="2"
+ launcher:x="3"
launcher:y="3" />
- <!-- Far-right screen [4] -->
-
<!-- Hotseat (We use the screen as the position of the item in the hotseat) -->
<!-- Dialer, Contacts, [All Apps], Messaging, Browser -->
<resolve
@@ -73,15 +138,23 @@
<favorite
launcher:packageName="com.android.dialer"
launcher:className="com.android.dialer.DialtactsActivity" />
+ <favorite
+ launcher:packageName="com.android.contacts"
+ launcher:className="com.android.contacts.activities.PeopleActivity" />
</resolve>
- <favorite
- launcher:packageName="com.android.contacts"
- launcher:className="com.android.contacts.activities.PeopleActivity"
+ <resolve
launcher:container="-101"
launcher:screen="1"
launcher:x="1"
- launcher:y="0" />
+ launcher:y="0" >
+ <favorite
+ launcher:packageName="com.android.mms"
+ launcher:className="com.android.mms.ui.ConversationList" />
+ <favorite
+ launcher:packageName="com.android.email"
+ launcher:className="com.android.email.activity.Welcome" />
+ </resolve>
<resolve
launcher:container="-101"
@@ -89,28 +162,24 @@
launcher:x="3"
launcher:y="0" >
<favorite
- launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MESSAGING;end" />
- <favorite launcher:uri="sms:" />
- <favorite launcher:uri="smsto:" />
- <favorite launcher:uri="mms:" />
- <favorite launcher:uri="mmsto:" />
-
+ launcher:packageName="com.android.chrome"
+ launcher:className="com.google.android.apps.chrome.Main" />
<favorite
- launcher:packageName="com.android.mms"
- launcher:className="com.android.mms.ui.ConversationList" />
+ launcher:packageName="com.android.browser"
+ launcher:className="com.android.browser.BrowserActivity" />
</resolve>
+
<resolve
launcher:container="-101"
launcher:screen="4"
launcher:x="4"
launcher:y="0" >
<favorite
- launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_BROWSER;end" />
- <favorite launcher:uri="http://www.example.com/" />
-
+ launcher:packageName="com.cyngn.cameranext"
+ launcher:className="com.android.camera.CameraLauncher" />
<favorite
- launcher:packageName="com.android.browser"
- launcher:className="com.android.browser.BrowserActivity" />
+ launcher:packageName="com.android.camera2"
+ launcher:className="com.android.camera.CameraLauncher" />
</resolve>
-</favorites>
+</favorites> \ No newline at end of file
diff --git a/res/xml/default_workspace_5x5.xml b/res/xml/default_workspace_5x5.xml
index d2f2ccab8..1d41e3f27 100644
--- a/res/xml/default_workspace_5x5.xml
+++ b/res/xml/default_workspace_5x5.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- Copyright (C) 2015 The CyanogenMod Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -19,45 +19,110 @@
<!-- Left screen [1] -->
<appwidget
- launcher:packageName="com.android.settings"
- launcher:className="com.android.settings.widget.SettingsAppWidgetProvider"
+ launcher:packageName="com.cyanogenmod.lockclock"
+ launcher:className="com.cyanogenmod.lockclock.ClockWidgetProvider"
+ launcher:screen="1"
+ launcher:x="0"
+ launcher:y="0"
+ launcher:spanX="5"
+ launcher:spanY="2" />
+
+ <folder launcher:screen="1" launcher:x="0" launcher:y="4" launcher:title="@string/google_title">
+ <favorite
+ launcher:className="com.google.android.gm.ConversationListActivityGmail"
+ launcher:packageName="com.google.android.gm" />
+ <favorite
+ launcher:className="com.google.android.apps.plus.phone.HomeActivity"
+ launcher:packageName="com.google.android.apps.plus" />
+ <favorite
+ launcher:className="com.google.android.maps.MapsActivity"
+ launcher:packageName="com.google.android.apps.maps" />
+ <favorite
+ launcher:className="com.android.music.activitymanagement.TopLevelActivity"
+ launcher:packageName="com.google.android.music" />
+ <favorite
+ launcher:className="com.google.android.youtube.videos.EntryPoint"
+ launcher:packageName="com.google.android.videos" />
+ <favorite
+ launcher:className="com.google.android.apps.books.app.BooksActivity"
+ launcher:packageName="com.google.android.apps.books" />
+ <favorite
+ launcher:className="com.google.apps.dots.android.app.activity.CurrentsStartActivity"
+ launcher:packageName="com.google.android.apps.magazines" />
+ <favorite
+ launcher:className="com.google.android.gms.games.ui.destination.main.MainActivity"
+ launcher:packageName="com.google.android.play.games" />
+ <favorite
+ launcher:className="com.google.android.apps.docs.app.NewMainProxyActivity"
+ launcher:packageName="com.google.android.apps.docs" />
+ <favorite
+ launcher:className="com.google.android.youtube.app.honeycomb.Shell$HomeActivity"
+ launcher:packageName="com.google.android.youtube" />
+ <favorite
+ launcher:className="com.google.android.apps.plus.phone.ConversationListActivity"
+ launcher:packageName="com.google.android.apps.plus" />
+ <favorite
+ launcher:className="com.google.android.talk.SigningInActivity"
+ launcher:packageName="com.google.android.talk" />
+ </folder>
+
+ <favorite
+ launcher:packageName="com.cyanogenmod.eleven"
+ launcher:className="com.cyanogenmod.eleven.ui.activities.HomeActivity"
launcher:screen="1"
launcher:x="0"
- launcher:y="3"
- launcher:spanX="4"
- launcher:spanY="1" />
+ launcher:y="4" />
+
+ <resolve
+ launcher:screen="1"
+ launcher:x="4"
+ launcher:y="4" >
+ <favorite
+ launcher:packageName="com.android.vending"
+ launcher:className="com.android.vending.AssetBrowserActivity" />
+ <favorite
+ launcher:packageName="org.cyanogenmod.theme.chooser"
+ launcher:className="org.cyanogenmod.theme.chooser.ChooserActivity" />
+ </resolve>
+
+ <!-- Screen [2] -->
- <!-- Middle screen [2] -->
<appwidget
- launcher:packageName="com.android.deskclock"
- launcher:className="com.android.alarmclock.AnalogAppWidgetProvider"
+ launcher:packageName="com.android.vending"
+ launcher:className="com.google.android.finsky.widget.consumption.NowPlayingWidgetProvider"
launcher:screen="2"
- launcher:x="1"
+ launcher:x="0"
launcher:y="0"
- launcher:spanX="2"
+ launcher:spanX="5"
launcher:spanY="2" />
- <favorite
- launcher:packageName="com.android.camera"
- launcher:className="com.android.camera.Camera"
+
+ <appwidget
+ launcher:packageName="com.cyanogenmod.eleven"
+ launcher:className="com.cyanogenmod.eleven.appwidgets.AppWidgetLarge"
launcher:screen="2"
launcher:x="0"
- launcher:y="3" />
+ launcher:y="0"
+ launcher:spanX="5"
+ launcher:spanY="2" />
+
+ <resolve
+ launcher:screen="2"
+ launcher:x="0"
+ launcher:y="4" >
+ <favorite
+ launcher:packageName="com.cyngn.gallerynext"
+ launcher:className="com.cyngn.gallerynext.app.GalleryActivity" />
+ <favorite
+ launcher:packageName="com.android.gallery3d"
+ launcher:className="com.android.gallery3d.app.GalleryActivity" />
+ </resolve>
- <!-- Right screen [3] -->
- <favorite
- launcher:packageName="com.android.gallery3d"
- launcher:className="com.android.gallery3d.app.GalleryActivity"
- launcher:screen="3"
- launcher:x="1"
- launcher:y="3" />
<favorite
launcher:packageName="com.android.settings"
launcher:className="com.android.settings.Settings"
- launcher:screen="3"
- launcher:x="2"
- launcher:y="3" />
-
- <!-- Far-right screen [4] -->
+ launcher:screen="2"
+ launcher:x="4"
+ launcher:y="4" />
<!-- Hotseat (We use the screen as the position of the item in the hotseat) -->
<!-- Dialer, Contacts, [All Apps], Messaging, Browser -->
@@ -73,15 +138,23 @@
<favorite
launcher:packageName="com.android.dialer"
launcher:className="com.android.dialer.DialtactsActivity" />
+ <favorite
+ launcher:packageName="com.android.contacts"
+ launcher:className="com.android.contacts.activities.PeopleActivity" />
</resolve>
- <favorite
- launcher:packageName="com.android.contacts"
- launcher:className="com.android.contacts.activities.PeopleActivity"
+ <resolve
launcher:container="-101"
launcher:screen="1"
launcher:x="1"
- launcher:y="0" />
+ launcher:y="0" >
+ <favorite
+ launcher:packageName="com.android.mms"
+ launcher:className="com.android.mms.ui.ConversationList" />
+ <favorite
+ launcher:packageName="com.android.email"
+ launcher:className="com.android.email.activity.Welcome" />
+ </resolve>
<resolve
launcher:container="-101"
@@ -89,28 +162,24 @@
launcher:x="3"
launcher:y="0" >
<favorite
- launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MESSAGING;end" />
- <favorite launcher:uri="sms:" />
- <favorite launcher:uri="smsto:" />
- <favorite launcher:uri="mms:" />
- <favorite launcher:uri="mmsto:" />
-
+ launcher:packageName="com.android.chrome"
+ launcher:className="com.google.android.apps.chrome.Main" />
<favorite
- launcher:packageName="com.android.mms"
- launcher:className="com.android.mms.ui.ConversationList" />
+ launcher:packageName="com.android.browser"
+ launcher:className="com.android.browser.BrowserActivity" />
</resolve>
+
<resolve
launcher:container="-101"
launcher:screen="4"
launcher:x="4"
launcher:y="0" >
<favorite
- launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_BROWSER;end" />
- <favorite launcher:uri="http://www.example.com/" />
-
+ launcher:packageName="com.cyngn.cameranext"
+ launcher:className="com.android.camera.CameraLauncher" />
<favorite
- launcher:packageName="com.android.browser"
- launcher:className="com.android.browser.BrowserActivity" />
+ launcher:packageName="com.android.camera2"
+ launcher:className="com.android.camera.CameraLauncher" />
</resolve>
-</favorites>
+</favorites> \ No newline at end of file
diff --git a/res/xml/default_workspace_5x6.xml b/res/xml/default_workspace_5x6.xml
index e98ce986f..2892991cd 100644
--- a/res/xml/default_workspace_5x6.xml
+++ b/res/xml/default_workspace_5x6.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
+<!-- Copyright (C) 2015 The CyanogenMod Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -19,71 +19,142 @@
<!-- Left screen [1] -->
<appwidget
- launcher:packageName="com.android.settings"
- launcher:className="com.android.settings.widget.SettingsAppWidgetProvider"
+ launcher:packageName="com.cyanogenmod.lockclock"
+ launcher:className="com.cyanogenmod.lockclock.ClockWidgetProvider"
launcher:screen="1"
launcher:x="0"
- launcher:y="3"
- launcher:spanX="4"
- launcher:spanY="1" />
+ launcher:y="0"
+ launcher:spanX="6"
+ launcher:spanY="2" />
+
+ <folder launcher:screen="1" launcher:x="0" launcher:y="4" launcher:title="@string/google_title">
+ <favorite
+ launcher:className="com.google.android.gm.ConversationListActivityGmail"
+ launcher:packageName="com.google.android.gm" />
+ <favorite
+ launcher:className="com.google.android.apps.plus.phone.HomeActivity"
+ launcher:packageName="com.google.android.apps.plus" />
+ <favorite
+ launcher:className="com.google.android.maps.MapsActivity"
+ launcher:packageName="com.google.android.apps.maps" />
+ <favorite
+ launcher:className="com.android.music.activitymanagement.TopLevelActivity"
+ launcher:packageName="com.google.android.music" />
+ <favorite
+ launcher:className="com.google.android.youtube.videos.EntryPoint"
+ launcher:packageName="com.google.android.videos" />
+ <favorite
+ launcher:className="com.google.android.apps.books.app.BooksActivity"
+ launcher:packageName="com.google.android.apps.books" />
+ <favorite
+ launcher:className="com.google.apps.dots.android.app.activity.CurrentsStartActivity"
+ launcher:packageName="com.google.android.apps.magazines" />
+ <favorite
+ launcher:className="com.google.android.gms.games.ui.destination.main.MainActivity"
+ launcher:packageName="com.google.android.play.games" />
+ <favorite
+ launcher:className="com.google.android.apps.docs.app.NewMainProxyActivity"
+ launcher:packageName="com.google.android.apps.docs" />
+ <favorite
+ launcher:className="com.google.android.youtube.app.honeycomb.Shell$HomeActivity"
+ launcher:packageName="com.google.android.youtube" />
+ <favorite
+ launcher:className="com.google.android.apps.plus.phone.ConversationListActivity"
+ launcher:packageName="com.google.android.apps.plus" />
+ <favorite
+ launcher:className="com.google.android.talk.SigningInActivity"
+ launcher:packageName="com.google.android.talk" />
+ </folder>
+
+ <favorite
+ launcher:packageName="com.cyanogenmod.eleven"
+ launcher:className="com.cyanogenmod.eleven.ui.activities.HomeActivity"
+ launcher:screen="1"
+ launcher:x="0"
+ launcher:y="4" />
+
+ <resolve
+ launcher:screen="1"
+ launcher:x="5"
+ launcher:y="4" >
+ <favorite
+ launcher:packageName="com.android.vending"
+ launcher:className="com.android.vending.AssetBrowserActivity" />
+ <favorite
+ launcher:packageName="org.cyanogenmod.theme.chooser"
+ launcher:className="org.cyanogenmod.theme.chooser.ChooserActivity" />
+ </resolve>
+
+ <!-- Screen [2] -->
- <!-- Middle screen [2] -->
<appwidget
- launcher:packageName="com.android.deskclock"
- launcher:className="com.android.alarmclock.AnalogAppWidgetProvider"
+ launcher:packageName="com.android.vending"
+ launcher:className="com.google.android.finsky.widget.consumption.NowPlayingWidgetProvider"
launcher:screen="2"
- launcher:x="1"
+ launcher:x="0"
launcher:y="0"
- launcher:spanX="2"
+ launcher:spanX="6"
launcher:spanY="2" />
- <favorite
- launcher:packageName="com.android.camera"
- launcher:className="com.android.camera.Camera"
+
+ <appwidget
+ launcher:packageName="com.cyanogenmod.eleven"
+ launcher:className="com.cyanogenmod.eleven.appwidgets.AppWidgetLarge"
launcher:screen="2"
launcher:x="0"
- launcher:y="3" />
+ launcher:y="0"
+ launcher:spanX="6"
+ launcher:spanY="2" />
+
+ <resolve
+ launcher:screen="2"
+ launcher:x="0"
+ launcher:y="4" >
+ <favorite
+ launcher:packageName="com.cyngn.gallerynext"
+ launcher:className="com.cyngn.gallerynext.app.GalleryActivity" />
+ <favorite
+ launcher:packageName="com.android.gallery3d"
+ launcher:className="com.android.gallery3d.app.GalleryActivity" />
+ </resolve>
- <!-- Right screen [3] -->
- <favorite
- launcher:packageName="com.android.gallery3d"
- launcher:className="com.android.gallery3d.app.GalleryActivity"
- launcher:screen="3"
- launcher:x="1"
- launcher:y="3" />
<favorite
launcher:packageName="com.android.settings"
launcher:className="com.android.settings.Settings"
- launcher:screen="3"
- launcher:x="2"
- launcher:y="3" />
-
- <!-- Far-right screen [4] -->
+ launcher:screen="2"
+ launcher:x="5"
+ launcher:y="4" />
<!-- Hotseat (We use the screen as the position of the item in the hotseat) -->
- <!-- Dialer (if available, fallback to File Manager), Contacts, [All Apps], Messaging, Browser -->
+ <!-- Dialer, Contacts, [All Apps], Messaging, Browser -->
<resolve
launcher:container="-101"
launcher:screen="1"
launcher:x="1"
launcher:y="0" >
<favorite launcher:uri="#Intent;action=android.intent.action.DIAL;end" />
+ <favorite launcher:uri="tel:123" />
<favorite launcher:uri="#Intent;action=android.intent.action.CALL_BUTTON;end" />
<favorite
launcher:packageName="com.android.dialer"
launcher:className="com.android.dialer.DialtactsActivity" />
<favorite
- launcher:packageName="com.cyanogenmod.filemanager"
- launcher:className="com.cyanogenmod.filemanager.activities.NavigationActivity" />
+ launcher:packageName="com.android.contacts"
+ launcher:className="com.android.contacts.activities.PeopleActivity" />
</resolve>
- <favorite
- launcher:packageName="com.android.contacts"
- launcher:className="com.android.contacts.activities.PeopleActivity"
+ <resolve
launcher:container="-101"
launcher:screen="2"
launcher:x="2"
- launcher:y="0" />
+ launcher:y="0" >
+ <favorite
+ launcher:packageName="com.android.mms"
+ launcher:className="com.android.mms.ui.ConversationList" />
+ <favorite
+ launcher:packageName="com.android.email"
+ launcher:className="com.android.email.activity.Welcome" />
+ </resolve>
<resolve
launcher:container="-101"
@@ -91,27 +162,24 @@
launcher:x="4"
launcher:y="0" >
<favorite
- launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MESSAGING;end" />
- <favorite launcher:uri="sms:" />
- <favorite launcher:uri="smsto:" />
- <favorite launcher:uri="mms:" />
- <favorite launcher:uri="mmsto:" />
-
+ launcher:packageName="com.android.chrome"
+ launcher:className="com.google.android.apps.chrome.Main" />
<favorite
- launcher:packageName="com.android.mms"
- launcher:className="com.android.mms.ui.ConversationList" />
+ launcher:packageName="com.android.browser"
+ launcher:className="com.android.browser.BrowserActivity" />
</resolve>
+
<resolve
launcher:container="-101"
launcher:screen="5"
launcher:x="5"
launcher:y="0" >
<favorite
- launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_BROWSER;end" />
- <favorite launcher:uri="http://www.example.com/" />
-
+ launcher:packageName="com.cyngn.cameranext"
+ launcher:className="com.android.camera.CameraLauncher" />
<favorite
- launcher:packageName="com.android.browser"
- launcher:className="com.android.browser.BrowserActivity" />
+ launcher:packageName="com.android.camera2"
+ launcher:className="com.android.camera.CameraLauncher" />
</resolve>
-</favorites>
+
+</favorites> \ No newline at end of file
diff --git a/src/com/android/launcher3/AppDrawerIconView.java b/src/com/android/launcher3/AppDrawerIconView.java
new file mode 100644
index 000000000..d8564b6ed
--- /dev/null
+++ b/src/com/android/launcher3/AppDrawerIconView.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2013 The CyanogenMod 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.launcher3;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.MotionEvent;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+/**
+ * AppDrawerIconView - represents icons in the vertical app drawer.
+ * Found to be more performant than the BubbleTextView used in the
+ * legacy app drawer.
+ */
+public class AppDrawerIconView extends LinearLayout {
+
+ TextView mLabel;
+ ImageView mIcon;
+
+ public AppDrawerIconView(Context context) {
+ super(context);
+ }
+
+ public AppDrawerIconView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public AppDrawerIconView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ mLabel = (TextView) findViewById(R.id.label);
+ mIcon = (ImageView) findViewById(R.id.image);
+ LauncherAppState app = LauncherAppState.getInstance();
+ DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
+ mLabel.setTextSize(TypedValue.COMPLEX_UNIT_PX, grid.iconTextSizePx);
+ mLabel.setShadowLayer(BubbleTextView.SHADOW_LARGE_RADIUS, 0.0f,
+ BubbleTextView.SHADOW_Y_OFFSET, BubbleTextView.SHADOW_LARGE_COLOUR);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ setAlpha(PagedViewIcon.PRESS_ALPHA);
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ setAlpha(1f);
+ break;
+ }
+ return super.onTouchEvent(event);
+ }
+} \ No newline at end of file
diff --git a/src/com/android/launcher3/AppDrawerListAdapter.java b/src/com/android/launcher3/AppDrawerListAdapter.java
new file mode 100644
index 000000000..a16937308
--- /dev/null
+++ b/src/com/android/launcher3/AppDrawerListAdapter.java
@@ -0,0 +1,566 @@
+/*
+ * Copyright (C) 2015 The CyanogenMod 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.launcher3;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.support.v7.widget.RecyclerView;
+import android.widget.LinearLayout;
+import android.widget.SectionIndexer;
+import com.android.launcher3.locale.LocaleSetManager;
+import com.android.launcher3.locale.LocaleUtils;
+import com.android.launcher3.settings.SettingsProvider;
+
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+/**
+ * AppDrawerListAdapter - list adapter for the vertical app drawer
+ */
+public class AppDrawerListAdapter extends RecyclerView.Adapter<AppDrawerListAdapter.ViewHolder>
+ implements View.OnLongClickListener, DragSource, SectionIndexer {
+
+ private static final String NUMERIC_OR_SPECIAL_HEADER = "#";
+
+ private ArrayList<AppItemIndexedInfo> mHeaderList;
+ private LayoutInflater mLayoutInflater;
+
+ private Launcher mLauncher;
+ private DeviceProfile mDeviceProfile;
+ private LinkedHashMap<String, Integer> mSectionHeaders;
+ private LinearLayout.LayoutParams mIconParams;
+ private Rect mIconRect;
+ private LocaleSetManager mLocaleSetManager;
+
+ private ArrayList<ComponentName> mProtectedApps;
+
+ private boolean mHideIconLabels;
+
+ public enum DrawerType {
+ Drawer(0),
+ Pager(1);
+
+ private final int mValue;
+ private DrawerType(int value) {
+ mValue = value;
+ }
+
+ public int getValue() {
+ return mValue;
+ }
+
+ public static DrawerType getModeForValue(int value) {
+ switch (value) {
+ case 1:
+ return Pager;
+ default :
+ return Drawer;
+ }
+ }
+ }
+
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+ public AutoFitTextView mTextView;
+ public ViewGroup mLayout;
+ public ViewHolder(View itemView) {
+ super(itemView);
+ mTextView = (AutoFitTextView) itemView.findViewById(R.id.drawer_item_title);
+ mLayout = (ViewGroup) itemView.findViewById(R.id.drawer_item_flow);
+ }
+ }
+
+ public AppDrawerListAdapter(Launcher launcher) {
+ mLauncher = launcher;
+ mHeaderList = new ArrayList<AppItemIndexedInfo>();
+ mLayoutInflater = LayoutInflater.from(launcher);
+
+ mLocaleSetManager = new LocaleSetManager(mLauncher);
+ mLocaleSetManager.updateLocaleSet(mLocaleSetManager.getSystemLocaleSet());
+ initParams();
+
+ updateProtectedAppsList(mLauncher);
+ }
+
+ private void initParams() {
+ mDeviceProfile = LauncherAppState.getInstance().getDynamicGrid().getDeviceProfile();
+
+ int width = mDeviceProfile.cellWidthPx + 2 * mDeviceProfile.edgeMarginPx;
+ mIconParams = new
+ LinearLayout.LayoutParams(width, ViewGroup.LayoutParams.WRAP_CONTENT);
+ mIconRect = new Rect(0, 0, mDeviceProfile.allAppsIconSizePx,
+ mDeviceProfile.allAppsIconSizePx);
+
+ mHideIconLabels = SettingsProvider.getBoolean(mLauncher,
+ SettingsProvider.SETTINGS_UI_DRAWER_HIDE_ICON_LABELS,
+ R.bool.preferences_interface_drawer_hide_icon_labels_default);
+ }
+
+ /**
+ * Create and populate mHeaderList (buckets for app sorting)
+ * @param info
+ */
+ public void populateByCharacter(ArrayList<AppInfo> info) {
+ if (info == null || info.size() <= 0) {
+ Collections.sort(mHeaderList);
+ return;
+ }
+
+ // Create a clone of AppInfo ArrayList to preserve data
+ ArrayList<AppInfo> tempInfo = (ArrayList<AppInfo>) info.clone();
+
+ ArrayList<AppInfo> appInfos = new ArrayList<AppInfo>();
+
+ // get next app
+ AppInfo app = tempInfo.get(0);
+
+ // get starting character
+ LocaleUtils localeUtils = LocaleUtils.getInstance();
+ int bucketIndex = localeUtils.getBucketIndex(app.title.toString());
+ String startString
+ = localeUtils.getBucketLabel(bucketIndex);
+ if (TextUtils.isEmpty(startString)) {
+ startString = NUMERIC_OR_SPECIAL_HEADER;
+ bucketIndex = localeUtils.getBucketIndex(startString);
+ }
+
+ // now iterate through
+ for (AppInfo info1 : tempInfo) {
+ int newBucketIndex = localeUtils.getBucketIndex(info1.title.toString());
+
+ String newChar
+ = localeUtils.getBucketLabel(newBucketIndex);
+ if (TextUtils.isEmpty(newChar)) {
+ newChar = NUMERIC_OR_SPECIAL_HEADER;
+ }
+ // if same character
+ if (newChar.equals(startString)) {
+ // add it
+ appInfos.add(info1);
+ }
+ }
+
+ Collections.sort(appInfos, LauncherModel.getAppNameComparator());
+
+ for (int i = 0; i < appInfos.size(); i += mDeviceProfile.numColumnsBase) {
+ int endIndex = (int) Math.min(i + mDeviceProfile.numColumnsBase, appInfos.size());
+ ArrayList<AppInfo> subList = new ArrayList<AppInfo>(appInfos.subList(i, endIndex));
+ AppItemIndexedInfo indexInfo;
+ indexInfo = new AppItemIndexedInfo(startString, bucketIndex, subList, i != 0);
+ mHeaderList.add(indexInfo);
+ }
+
+ for (AppInfo remove : appInfos) {
+ // remove from mApps
+ tempInfo.remove(remove);
+ }
+ populateByCharacter(tempInfo);
+ }
+
+ public void setApps(ArrayList<AppInfo> list) {
+ if (!LauncherAppState.isDisableAllApps()) {
+ initParams();
+
+ filterProtectedApps(list);
+
+ mHeaderList.clear();
+ populateByCharacter(list);
+ populateSectionHeaders();
+ mLauncher.updateScrubber();
+ this.notifyDataSetChanged();
+ }
+ }
+
+ private void populateSectionHeaders() {
+ if (mSectionHeaders == null || mSectionHeaders.size() != mHeaderList.size()) {
+ mSectionHeaders = new LinkedHashMap<String, Integer>();
+ }
+ int count = 0;
+ for (int i = 0; i < mHeaderList.size(); i++) {
+ AppItemIndexedInfo info = mHeaderList.get(i);
+ if (!mHeaderList.get(i).isChild) {
+ mSectionHeaders.put(String.valueOf(mHeaderList.get(i).mStartString), count);
+ }
+ if (info.mInfo.size() < mDeviceProfile.numColumnsBase) {
+ count++;
+ } else {
+ count += info.mInfo.size() / mDeviceProfile.numColumnsBase;
+ }
+ }
+ }
+
+ public void reset() {
+ ArrayList<AppInfo> infos = getAllApps();
+
+ mLauncher.mAppDrawer.getLayoutManager().removeAllViews();
+ setApps(infos);
+ }
+
+ private ArrayList<AppInfo> getAllApps() {
+ ArrayList<AppInfo> indexedInfos = new ArrayList<AppInfo>();
+
+ for (int j = 0; j < mHeaderList.size(); ++j) {
+ AppItemIndexedInfo indexedInfo = mHeaderList.get(j);
+ for (AppInfo info : indexedInfo.mInfo) {
+ indexedInfos.add(info);
+ }
+ }
+ return indexedInfos;
+ }
+
+ public void updateApps(ArrayList<AppInfo> list) {
+ // We remove and re-add the updated applications list because it's properties may have
+ // changed (ie. the title), and this will ensure that the items will be in their proper
+ // place in the list.
+ if (!LauncherAppState.isDisableAllApps()) {
+ removeAppsWithoutInvalidate(list);
+ addAppsWithoutInvalidate(list);
+ reset();
+ }
+ }
+
+
+ public void addApps(ArrayList<AppInfo> list) {
+ if (!LauncherAppState.isDisableAllApps()) {
+ addAppsWithoutInvalidate(list);
+ reset();
+ }
+ }
+
+ private void addAppsWithoutInvalidate(ArrayList<AppInfo> list) {
+ // We add it in place, in alphabetical order
+ LocaleUtils localeUtils = LocaleUtils.getInstance();
+
+ int count = list.size();
+ for (int i = 0; i < count; ++i) {
+ AppInfo info = list.get(i);
+ boolean found = false;
+ AppItemIndexedInfo lastInfoForSection = null;
+ int bucketIndex = localeUtils.getBucketIndex(info.title.toString());
+ String start = localeUtils.getBucketLabel(bucketIndex);
+ if (TextUtils.isEmpty(start)) {
+ start = NUMERIC_OR_SPECIAL_HEADER;
+ bucketIndex = localeUtils.getBucketIndex(start);
+ }
+ for (int j = 0; j < mHeaderList.size(); ++j) {
+ AppItemIndexedInfo indexedInfo = mHeaderList.get(j);
+ if (start.equals(indexedInfo.mStartString)) {
+ Collections.sort(indexedInfo.mInfo, LauncherModel.getAppNameComparator());
+ int index =
+ Collections.binarySearch(indexedInfo.mInfo,
+ info, LauncherModel.getAppNameComparator());
+ if (index >= 0) {
+ found = true;
+ break;
+ } else {
+ lastInfoForSection = indexedInfo;
+ }
+ }
+ }
+ if (!found) {
+ if (lastInfoForSection != null) {
+ lastInfoForSection.mInfo.add(info);
+ } else {
+ // we need to create a new section
+ ArrayList<AppInfo> newInfos = new ArrayList<AppInfo>();
+ newInfos.add(info);
+ AppItemIndexedInfo newInfo =
+ new AppItemIndexedInfo(start, bucketIndex, newInfos, false);
+ mHeaderList.add(newInfo);
+ Collections.sort(mHeaderList);
+ }
+ }
+ }
+ }
+
+ public void removeApps(ArrayList<AppInfo> appInfos) {
+ if (!LauncherAppState.isDisableAllApps()) {
+ removeAppsWithoutInvalidate(appInfos);
+ //recreate everything
+ reset();
+ }
+ }
+
+ private void removeAppsWithoutInvalidate(ArrayList<AppInfo> list) {
+ // loop through all the apps and remove apps that have the same component
+ int length = list.size();
+ for (int i = 0; i < length; ++i) {
+ AppInfo info = list.get(i);
+ for (int j = 0; j < mHeaderList.size(); ++j) {
+ AppItemIndexedInfo indexedInfo = mHeaderList.get(j);
+ ArrayList<AppInfo> clonedIndexedInfoApps =
+ (ArrayList<AppInfo>) indexedInfo.mInfo.clone();
+ int index =
+ findAppByComponent(clonedIndexedInfoApps, info);
+ if (index > -1) {
+ indexedInfo.mInfo.remove(info);
+ }
+ }
+ }
+ }
+
+ private int findAppByComponent(List<AppInfo> list, AppInfo item) {
+ ComponentName removeComponent = item.intent.getComponent();
+ int length = list.size();
+ for (int i = 0; i < length; ++i) {
+ AppInfo info = list.get(i);
+ if (info.intent.getComponent().equals(removeComponent)) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ /*
+ * AllAppsView implementation
+ */
+ public void setup(Launcher launcher) {
+ mLauncher = launcher;
+ }
+
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View v = LayoutInflater.from(parent.getContext()).
+ inflate(R.layout.app_drawer_item, parent, false);
+ ViewHolder holder = new ViewHolder(v);
+ holder.mTextView.setPadding(0, 0, 0, mDeviceProfile.iconTextSizePx + 10);
+ for (int i = 0; i < mDeviceProfile.numColumnsBase; i++) {
+ AppDrawerIconView icon = (AppDrawerIconView) mLayoutInflater.inflate(
+ R.layout.drawer_icon, holder.mLayout, false);
+ icon.setOnClickListener(mLauncher);
+ icon.setOnLongClickListener(this);
+ holder.mLayout.addView(icon);
+ }
+ return holder;
+ }
+
+ @Override
+ public int getItemCount() {
+ return mHeaderList.size();
+ }
+
+ public AppItemIndexedInfo getItemAt(int position) {
+ if (position < mHeaderList.size())
+ return mHeaderList.get(position);
+ return null;
+ }
+
+ @Override
+ public void onBindViewHolder(ViewHolder holder, int position) {
+ AppItemIndexedInfo indexedInfo = mHeaderList.get(position);
+ holder.mTextView.setVisibility(indexedInfo.isChild ? View.INVISIBLE : View.VISIBLE);
+ if (!indexedInfo.isChild) {
+ if (indexedInfo.mStartString.equals(NUMERIC_OR_SPECIAL_HEADER)) {
+ holder.mTextView.setText(NUMERIC_OR_SPECIAL_HEADER);
+ } else {
+ holder.mTextView.setText(String.valueOf(indexedInfo.mStartString));
+ }
+ }
+ final int size = indexedInfo.mInfo.size();
+ for (int i = 0; i < holder.mLayout.getChildCount(); i++) {
+ AppDrawerIconView icon = (AppDrawerIconView) holder.mLayout.getChildAt(i);
+ icon.setLayoutParams(mIconParams);
+ if (i >= size) {
+ icon.setVisibility(View.INVISIBLE);
+ } else {
+ icon.setVisibility(View.VISIBLE);
+ AppInfo info = indexedInfo.mInfo.get(i);
+ icon.setTag(info);
+ Drawable d = Utilities.createIconDrawable(info.iconBitmap);
+ d.setBounds(mIconRect);
+ icon.mIcon.setImageDrawable(d);
+ icon.mLabel.setText(info.title);
+ icon.mLabel.setVisibility(mHideIconLabels ? View.INVISIBLE : View.VISIBLE);
+ }
+ }
+ holder.itemView.setTag(indexedInfo);
+ }
+
+ @Override
+ public boolean onLongClick(View v) {
+ if (v instanceof AppDrawerIconView) {
+ beginDraggingApplication(v);
+ mLauncher.enterSpringLoadedDragMode();
+ }
+ return false;
+ }
+
+ @Override
+ public void onDropCompleted(View target, DropTarget.DragObject d, boolean isFlingToDelete,
+ boolean success) {
+ // Return early and wait for onFlingToDeleteCompleted if this was the result of a fling
+ if (isFlingToDelete) return;
+
+ endDragging(target, false, success);
+
+ // Display an error message if the drag failed due to there not being enough space on the
+ // target layout we were dropping on.
+ if (!success) {
+ boolean showOutOfSpaceMessage = false;
+ if (target instanceof Workspace) {
+ int currentScreen = mLauncher.getCurrentWorkspaceScreen();
+ Workspace workspace = (Workspace) target;
+ CellLayout layout = (CellLayout) workspace.getChildAt(currentScreen);
+ ItemInfo itemInfo = (ItemInfo) d.dragInfo;
+ if (layout != null) {
+ layout.calculateSpans(itemInfo);
+ showOutOfSpaceMessage =
+ !layout.findCellForSpan(null, itemInfo.spanX, itemInfo.spanY);
+ }
+ }
+ if (showOutOfSpaceMessage) {
+ mLauncher.showOutOfSpaceMessage(false);
+ }
+
+ d.deferDragViewCleanupPostAnimation = false;
+ }
+ }
+
+ /**
+ * Clean up after dragging.
+ *
+ * @param target where the item was dragged to (can be null if the item was flung)
+ */
+ private void endDragging(View target, boolean isFlingToDelete, boolean success) {
+ if (isFlingToDelete || !success || (target != mLauncher.getWorkspace() &&
+ !(target instanceof DeleteDropTarget) && !(target instanceof Folder))) {
+ // Exit spring loaded mode if we have not successfully dropped or have not handled the
+ // drop in Workspace
+ mLauncher.getWorkspace().removeExtraEmptyScreenDelayed(true, new Runnable() {
+ @Override
+ public void run() {
+ mLauncher.exitSpringLoadedDragMode();
+ mLauncher.unlockScreenOrientation(false);
+ }
+ }, 0, true);
+ } else {
+ mLauncher.unlockScreenOrientation(false);
+ }
+ }
+
+ @Override
+ public boolean supportsFlingToDelete() {
+ return false;
+ }
+
+ @Override
+ public boolean supportsAppInfoDropTarget() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsDeleteDropTarget() {
+ return false;
+ }
+
+ @Override
+ public float getIntrinsicIconScaleFactor() {
+ return (float) mDeviceProfile.allAppsIconSizePx / mDeviceProfile.iconSizePx;
+ }
+
+ private void beginDraggingApplication(View v) {
+ mLauncher.getWorkspace().beginDragShared(v, this);
+ }
+
+ @Override
+ public void onFlingToDeleteCompleted() {
+ // We just dismiss the drag when we fling, so cleanup here
+ }
+
+ public class AppItemIndexedInfo implements Comparable {
+ private boolean isChild;
+ private String mStartString;
+ private int mStringIndex;
+ private ArrayList<AppInfo> mInfo;
+
+ private AppItemIndexedInfo(String startString, int bucketIndex, ArrayList<AppInfo> info,
+ boolean isChild) {
+ this.mStartString = startString;
+ this.mStringIndex = bucketIndex;
+ this.mInfo = info;
+ this.isChild = isChild;
+
+ if (mStartString.equals(NUMERIC_OR_SPECIAL_HEADER)) {
+ this.mStringIndex = 0;
+ }
+ }
+
+ public String getString() {
+ return mStartString;
+ }
+
+ @Override
+ public int compareTo(Object o) {
+ if (o instanceof AppItemIndexedInfo) {
+ int otherBucketIndex = ((AppItemIndexedInfo) o).mStringIndex;
+ return Integer.compare(mStringIndex, otherBucketIndex);
+ }
+ return 0;
+ }
+ }
+
+ @Override
+ public Object[] getSections() {
+ return mSectionHeaders.keySet().toArray(new String[mSectionHeaders.size()]);
+ }
+
+ @Override
+ public int getPositionForSection(int sectionIndex) {
+ return mSectionHeaders.get(getSections()[sectionIndex]);
+ }
+
+ @Override
+ public int getSectionForPosition(int position) {
+ return mSectionHeaders.get(mHeaderList.get(position).mStartString);
+ }
+
+ private void filterProtectedApps(ArrayList<AppInfo> list) {
+ updateProtectedAppsList(mLauncher);
+
+ Iterator<AppInfo> iterator = list.iterator();
+ while (iterator.hasNext()) {
+ AppInfo appInfo = iterator.next();
+ if (mProtectedApps.contains(appInfo.componentName)) {
+ iterator.remove();
+ }
+ }
+ }
+
+ private void updateProtectedAppsList(Context context) {
+ String protectedComponents = Settings.Secure.getString(context.getContentResolver(),
+ LauncherModel.SETTINGS_PROTECTED_COMPONENTS);
+ protectedComponents = protectedComponents == null ? "" : protectedComponents;
+ String [] flattened = protectedComponents.split("\\|");
+ mProtectedApps = new ArrayList<ComponentName>(flattened.length);
+ for (String flat : flattened) {
+ ComponentName cmp = ComponentName.unflattenFromString(flat);
+ if (cmp != null) {
+ mProtectedApps.add(cmp);
+ }
+ }
+ }
+}
diff --git a/src/com/android/launcher3/AppDrawerScrubber.java b/src/com/android/launcher3/AppDrawerScrubber.java
new file mode 100644
index 000000000..0ace60da8
--- /dev/null
+++ b/src/com/android/launcher3/AppDrawerScrubber.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2013 The CyanogenMod 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.launcher3;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.content.Context;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.SeekBar;
+import android.widget.TextView;
+
+public class AppDrawerScrubber extends LinearLayout {
+
+ private final int SCRUBBER_INDICATOR_DISPLAY_DURATION = 200;
+ private final float SCRUBBER_INDICATOR_DISPLAY_TRANSLATIONY = 20f;
+
+ private AppDrawerListAdapter mAdapter;
+ private RecyclerView mListView;
+ private TextView mScrubberIndicator;
+ private SeekBar mSeekBar;
+ private String[] mSections;
+ private LinearLayoutManager mLayoutManager;
+
+ public AppDrawerScrubber(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context);
+ }
+
+ public AppDrawerScrubber(Context context) {
+ super(context);
+ init(context);
+ }
+
+ public void updateSections() {
+ mSections = (String[]) mAdapter.getSections();
+ mSeekBar.setMax(mSections.length - 1);
+ }
+
+ public void setSource(RecyclerView listView) {
+ mListView = listView;
+ mAdapter = (AppDrawerListAdapter) listView.getAdapter();
+ mLayoutManager = (LinearLayoutManager) listView.getLayoutManager();
+ }
+
+ public void setScrubberIndicator(TextView scrubberIndicator) {
+ mScrubberIndicator = scrubberIndicator;
+ }
+
+ private boolean isReady() {
+ return mListView != null &&
+ mAdapter != null &&
+ mSections != null;
+ }
+
+ private void init(Context context) {
+ LayoutInflater.from(context).inflate(R.layout.scrub_layout, this);
+ mSeekBar = (SeekBar) findViewById(R.id.scrubber);
+
+ mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+ @Override
+ public void onProgressChanged(SeekBar seekBar, final int progress, boolean fromUser) {
+ if (!isReady()) {
+ return;
+ }
+ resetScrubber();
+
+ String section = String.valueOf(mSections[progress]);
+
+ if (mScrubberIndicator != null) {
+ float translateX = (progress * seekBar.getWidth()) / mSections.length;
+ translateX -= (mScrubberIndicator.getWidth() / 6); // offset for alignment
+ mScrubberIndicator.setTranslationX(translateX);
+ mScrubberIndicator.setText(section);
+ }
+
+ mLayoutManager.smoothScrollToPosition(mListView, null,
+ mAdapter.getPositionForSection(progress));
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ resetScrubber();
+ if (mScrubberIndicator != null) {
+ mScrubberIndicator.setAlpha(1f);
+ mScrubberIndicator.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ resetScrubber();
+ if (mScrubberIndicator != null) {
+ mScrubberIndicator.animate().alpha(0f).translationYBy(20f)
+ .setDuration(200).setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mScrubberIndicator.setVisibility(View.INVISIBLE);
+ }
+ });
+ }
+ }
+
+ private void resetScrubber() {
+ if (mScrubberIndicator != null) {
+ mScrubberIndicator.animate().cancel();
+ mScrubberIndicator.setTranslationY(0f);
+ }
+ }
+ });
+ }
+} \ No newline at end of file
diff --git a/src/com/android/launcher3/AutoFitTextView.java b/src/com/android/launcher3/AutoFitTextView.java
new file mode 100644
index 000000000..208dd4073
--- /dev/null
+++ b/src/com/android/launcher3/AutoFitTextView.java
@@ -0,0 +1,381 @@
+/*
+ * Copyright (C) 2014 Grantland Chew
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in 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.launcher3;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.text.Layout;
+import android.text.StaticLayout;
+import android.text.TextPaint;
+import android.text.method.TransformationMethod;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.util.TypedValue;
+import android.widget.TextView;
+
+/**
+ * A TextView that resizes it's text to be no larger than the width of the view.
+ *
+ * @author Grantland Chew <grantlandchew@gmail.com>
+ */
+public class AutoFitTextView extends TextView {
+
+ private static final String TAG = "AutoFitTextView";
+ private static final boolean SPEW = false;
+
+ // Minimum size of the text in pixels
+ private static final int DEFAULT_MIN_TEXT_SIZE = 8; //sp
+ // How precise we want to be when reaching the target textWidth size
+ private static final float PRECISION = 0.5f;
+
+ // Attributes
+ private boolean mSizeToFit;
+ private int mMaxLines;
+ private float mMinTextSize;
+ private float mMaxTextSize;
+ private float mPrecision;
+ private TextPaint mPaint;
+
+ public AutoFitTextView(Context context) {
+ super(context);
+ init(context, null, 0);
+ }
+
+ public AutoFitTextView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context, attrs, 0);
+ }
+
+ public AutoFitTextView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ init(context, attrs, defStyle);
+ }
+
+ private void init(Context context, AttributeSet attrs, int defStyle) {
+ float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
+ boolean sizeToFit = true;
+ int minTextSize = (int) scaledDensity * DEFAULT_MIN_TEXT_SIZE;
+ float precision = PRECISION;
+
+ if (attrs != null) {
+ TypedArray ta = context.obtainStyledAttributes(
+ attrs,
+ R.styleable.AutofitTextView,
+ defStyle,
+ 0);
+ sizeToFit = ta.getBoolean(R.styleable.AutofitTextView_sizeToFit, sizeToFit);
+ minTextSize = ta.getDimensionPixelSize(R.styleable.AutofitTextView_minTextSize,
+ minTextSize);
+ precision = ta.getFloat(R.styleable.AutofitTextView_precision, precision);
+ ta.recycle();
+ }
+
+ mPaint = new TextPaint();
+ setSizeToFit(sizeToFit);
+ setRawTextSize(super.getTextSize());
+ setRawMinTextSize(minTextSize);
+ setPrecision(precision);
+ }
+
+ // Getters and Setters
+
+ /**
+ * @return whether or not the text will be automatically resized to fit its constraints.
+ */
+ public boolean isSizeToFit() {
+ return mSizeToFit;
+ }
+
+ /**
+ * Sets the property of this field (singleLine, to automatically resize the text to fit its constraints.
+ */
+ public void setSizeToFit() {
+ setSizeToFit(true);
+ }
+
+ /**
+ * If true, the text will automatically be resized to fit its constraints; if false, it will
+ * act like a normal TextView.
+ *
+ * @param sizeToFit
+ */
+ public void setSizeToFit(boolean sizeToFit) {
+ mSizeToFit = sizeToFit;
+ refitText();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public float getTextSize() {
+ return mMaxTextSize;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setTextSize(int unit, float size) {
+ Context context = getContext();
+ Resources r = Resources.getSystem();
+
+ if (context != null) {
+ r = context.getResources();
+ }
+
+ setRawTextSize(TypedValue.applyDimension(unit, size, r.getDisplayMetrics()));
+ }
+
+ private void setRawTextSize(float size) {
+ if (size != mMaxTextSize) {
+ mMaxTextSize = size;
+ refitText();
+ }
+ }
+
+ /**
+ * @return the minimum size (in pixels) of the text size in this AutofitTextView
+ */
+ public float getMinTextSize() {
+ return mMinTextSize;
+ }
+
+ /**
+ * Set the minimum text size to a given unit and value. See TypedValue for the possible
+ * dimension units.
+ *
+ * @param unit The desired dimension unit.
+ * @param minSize The desired size in the given units.
+ *
+ * @attr ref me.grantland.R.styleable#AutofitTextView_minTextSize
+ */
+ public void setMinTextSize(int unit, float minSize) {
+ Context context = getContext();
+ Resources r = Resources.getSystem();
+
+ if (context != null) {
+ r = context.getResources();
+ }
+
+ setRawMinTextSize(TypedValue.applyDimension(unit, minSize, r.getDisplayMetrics()));
+ }
+
+ /**
+ * Set the minimum text size to the given value, interpreted as "scaled pixel" units. This size
+ * is adjusted based on the current density and user font size preference.
+ *
+ * @param minSize The scaled pixel size.
+ *
+ * @attr ref me.grantland.R.styleable#AutofitTextView_minTextSize
+ */
+ public void setMinTextSize(int minSize) {
+ setMinTextSize(TypedValue.COMPLEX_UNIT_SP, minSize);
+ }
+
+ private void setRawMinTextSize(float minSize) {
+ if (minSize != mMinTextSize) {
+ mMinTextSize = minSize;
+ refitText();
+ }
+ }
+
+ /**
+ * @return the amount of precision used to calculate the correct text size to fit within it's
+ * bounds.
+ */
+ public float getPrecision() {
+ return mPrecision;
+ }
+
+ /**
+ * Set the amount of precision used to calculate the correct text size to fit within it's
+ * bounds. Lower precision is more precise and takes more time.
+ *
+ * @param precision The amount of precision.
+ */
+ public void setPrecision(float precision) {
+ if (precision != mPrecision) {
+ mPrecision = precision;
+ refitText();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setLines(int lines) {
+ super.setLines(lines);
+ mMaxLines = lines;
+ refitText();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int getMaxLines() {
+ return mMaxLines;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setMaxLines(int maxLines) {
+ super.setMaxLines(maxLines);
+ if (maxLines != mMaxLines) {
+ mMaxLines = maxLines;
+ refitText();
+ }
+ }
+
+ /**
+ * Re size the font so the specified text fits in the text box assuming the text box is the
+ * specified width.
+ */
+ private void refitText() {
+ if (!mSizeToFit) {
+ return;
+ }
+
+ if (mMaxLines <= 0) {
+ // Don't auto-size since there's no limit on lines.
+ return;
+ }
+
+ CharSequence text = getText();
+ TransformationMethod method = getTransformationMethod();
+ if (method != null) {
+ text = method.getTransformation(text, this);
+ }
+ int targetWidth = getWidth() - getPaddingLeft() - getPaddingRight();
+ if (targetWidth > 0) {
+ Context context = getContext();
+ Resources r = Resources.getSystem();
+ DisplayMetrics displayMetrics;
+
+ float size = mMaxTextSize;
+ float high = size;
+ float low = 0;
+
+ if (context != null) {
+ r = context.getResources();
+ }
+ displayMetrics = r.getDisplayMetrics();
+
+ mPaint.set(getPaint());
+ mPaint.setTextSize(size);
+
+ if ((mMaxLines == 1 && mPaint.measureText(text, 0, text.length()) > targetWidth)
+ || getLineCount(text, mPaint, size, targetWidth, displayMetrics) > mMaxLines) {
+ size = getTextSize(text, mPaint, targetWidth, mMaxLines, low, high, mPrecision,
+ displayMetrics);
+ }
+
+ if (size < mMinTextSize) {
+ size = mMinTextSize;
+ }
+
+ super.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
+ }
+ }
+
+ /**
+ * Recursive binary search to find the best size for the text
+ */
+ private static float getTextSize(CharSequence text, TextPaint paint,
+ float targetWidth, int maxLines,
+ float low, float high, float precision,
+ DisplayMetrics displayMetrics) {
+ float mid = (low + high) / 2.0f;
+ int lineCount = 1;
+ StaticLayout layout = null;
+
+ paint.setTextSize(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, mid,
+ displayMetrics));
+
+ if (maxLines != 1) {
+ layout = new StaticLayout(text, paint, (int)targetWidth, Layout.Alignment.ALIGN_NORMAL,
+ 1.0f, 0.0f, true);
+ lineCount = layout.getLineCount();
+ }
+
+ if (SPEW) Log.d(TAG, "low=" + low + " high=" + high + " mid=" + mid +
+ " target=" + targetWidth + " maxLines=" + maxLines + " lineCount=" + lineCount);
+
+ if (lineCount > maxLines) {
+ return getTextSize(text, paint, targetWidth, maxLines, low, mid, precision,
+ displayMetrics);
+ }
+ else if (lineCount < maxLines) {
+ return getTextSize(text, paint, targetWidth, maxLines, mid, high, precision,
+ displayMetrics);
+ }
+ else {
+ float maxLineWidth = 0;
+ if (maxLines == 1) {
+ maxLineWidth = paint.measureText(text, 0, text.length());
+ } else {
+ for (int i = 0; i < lineCount; i++) {
+ if (layout.getLineWidth(i) > maxLineWidth) {
+ maxLineWidth = layout.getLineWidth(i);
+ }
+ }
+ }
+
+ if ((high - low) < precision) {
+ return low;
+ } else if (maxLineWidth > targetWidth) {
+ return getTextSize(text, paint, targetWidth, maxLines, low, mid, precision,
+ displayMetrics);
+ } else if (maxLineWidth < targetWidth) {
+ return getTextSize(text, paint, targetWidth, maxLines, mid, high, precision,
+ displayMetrics);
+ } else {
+ return mid;
+ }
+ }
+ }
+
+ private static int getLineCount(CharSequence text, TextPaint paint, float size, float width,
+ DisplayMetrics displayMetrics) {
+ paint.setTextSize(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, size,
+ displayMetrics));
+ StaticLayout layout = new StaticLayout(text, paint, (int)width,
+ Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, true);
+ return layout.getLineCount();
+ }
+
+ @Override
+ protected void onTextChanged(final CharSequence text, final int start,
+ final int lengthBefore, final int lengthAfter) {
+ super.onTextChanged(text, start, lengthBefore, lengthAfter);
+ refitText();
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ if (w != oldw) {
+ refitText();
+ }
+ }
+} \ No newline at end of file
diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java
index 5bc17b674..c7e85575a 100644
--- a/src/com/android/launcher3/BubbleTextView.java
+++ b/src/com/android/launcher3/BubbleTextView.java
@@ -42,11 +42,11 @@ public class BubbleTextView extends TextView {
private static SparseArray<Theme> sPreloaderThemes = new SparseArray<>(2);
- private static final float SHADOW_LARGE_RADIUS = 4.0f;
- private static final float SHADOW_SMALL_RADIUS = 1.75f;
- private static final float SHADOW_Y_OFFSET = 2.0f;
- private static final int SHADOW_LARGE_COLOUR = 0xDD000000;
- private static final int SHADOW_SMALL_COLOUR = 0xCC000000;
+ public static final float SHADOW_LARGE_RADIUS = 4.0f;
+ public static final float SHADOW_SMALL_RADIUS = 1.75f;
+ public static final float SHADOW_Y_OFFSET = 2.0f;
+ public static final int SHADOW_LARGE_COLOUR = 0xDD000000;
+ public static final int SHADOW_SMALL_COLOUR = 0xCC000000;
static final float PADDING_V = 3.0f;
private HolographicOutlineHelper mOutlineHelper;
diff --git a/src/com/android/launcher3/DragLayer.java b/src/com/android/launcher3/DragLayer.java
index 691b09558..328c31173 100644
--- a/src/com/android/launcher3/DragLayer.java
+++ b/src/com/android/launcher3/DragLayer.java
@@ -135,6 +135,10 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang
lp.bottomMargin += insets.bottom - mInsets.bottom;
layout.setLayoutParams(lp);
continue;
+ } else if (child.getId() == R.id.app_drawer_container) {
+ setAppDrawerInsets(child, insets);
+
+ continue;
}
setInsets(child, insets, mInsets);
if (child.getId() == R.id.search_drop_target_bar) {
@@ -145,6 +149,23 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang
return true; // I'll take it from here
}
+ private void setAppDrawerInsets(View child, Rect insets) {
+ // List view
+ View view = child.findViewById(R.id.app_drawer_recyclerview);
+ FrameLayout.LayoutParams lp =
+ (FrameLayout.LayoutParams) view.getLayoutParams();
+ int paddingBottom = view.getPaddingBottom() + insets.bottom - mInsets.bottom;
+ int paddingTop = view.getPaddingTop() + insets.top - mInsets.top;
+ view.setLayoutParams(lp);
+ view.setPadding(view.getPaddingLeft(), paddingTop, view.getPaddingRight(), paddingBottom);
+
+ // Scrubber
+ view = child.findViewById(R.id.app_drawer_scrubber_container);
+ LinearLayout.LayoutParams llp = (LinearLayout.LayoutParams) view.getLayoutParams();
+ llp.bottomMargin += insets.bottom - mInsets.bottom;
+ view.setLayoutParams(llp);
+ }
+
Rect getInsets() {
return mInsets;
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 80781c642..15df77fe6 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -70,6 +70,8 @@ import android.os.Message;
import android.os.StrictMode;
import android.os.SystemClock;
import android.speech.RecognizerIntent;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
@@ -98,6 +100,7 @@ import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
+import android.view.animation.OvershootInterpolator;
import android.view.inputmethod.InputMethodManager;
import android.widget.Advanceable;
import android.widget.FrameLayout;
@@ -166,6 +169,8 @@ public class Launcher extends Activity
private static final int REQUEST_RECONFIGURE_APPWIDGET = 12;
public static final int REQUEST_TRANSITION_EFFECTS = 14;
+ private static final float OVERSHOOT_TENSION = 1.4f;
+
static final int REQUEST_PICK_ICON = 13;
private static final int REQUEST_LOCK_PATTERN = 14;
@@ -299,6 +304,9 @@ public class Launcher extends Activity
OverviewSettingsPanel mOverviewSettingsPanel;
private View mAllAppsButton;
+ protected RecyclerView mAppDrawer;
+ private AppDrawerListAdapter mAppDrawerAdapter;
+ private AppDrawerScrubber mScrubber;
protected SearchDropTargetBar mSearchDropTargetBar;
private AppsCustomizeTabHost mAppsCustomizeTabHost;
@@ -389,6 +397,7 @@ public class Launcher extends Activity
// Preferences
private boolean mHideIconLabels;
+ private AppDrawerListAdapter.DrawerType mDrawerType;
private Runnable mBuildLayersRunnable = new Runnable() {
public void run() {
@@ -563,6 +572,10 @@ public class Launcher extends Activity
mHideIconLabels = SettingsProvider.getBoolean(this,
SettingsProvider.SETTINGS_UI_HOMESCREEN_HIDE_ICON_LABELS,
R.bool.preferences_interface_homescreen_hide_icon_labels_default);
+ mDrawerType = AppDrawerListAdapter.DrawerType.getModeForValue(
+ SettingsProvider.getInt(this,
+ SettingsProvider.SETTINGS_UI_DRAWER_TYPE,
+ R.integer.preferences_interface_drawer_type_default));
// Determine the dynamic grid properties
Point smallestSize = new Point();
@@ -598,6 +611,24 @@ public class Launcher extends Activity
protected void populateCustomContentContainer() {
}
+ private void initializeScrubber() {
+ if (mScrubber == null) {
+ FrameLayout view = (FrameLayout) findViewById(R.id.app_drawer_container);
+ mScrubber = (AppDrawerScrubber) view.findViewById(R.id.app_drawer_scrubber);
+ mScrubber.setSource(mAppDrawer);
+ mScrubber.setScrubberIndicator((TextView) view.findViewById(R.id.scrubberIndicator));
+ }
+ }
+
+ public void updateScrubber() {
+ mScrubber.updateSections();
+ }
+
+ public void initializeAdapter() {
+ mAppDrawerAdapter = new AppDrawerListAdapter(this);
+ mAppDrawerAdapter.notifyDataSetChanged();
+ }
+
/**
* Invoked by subclasses to signal a change to the {@link #addCustomContentToLeft} value to
* ensure the custom content page is added or removed if necessary.
@@ -1239,6 +1270,17 @@ public class Launcher extends Activity
return false;
}
+ public void updateDrawerType() {
+ mDrawerType = AppDrawerListAdapter.DrawerType.getModeForValue(
+ SettingsProvider.getInt(this,
+ SettingsProvider.SETTINGS_UI_DRAWER_TYPE,
+ R.integer.preferences_interface_drawer_type_default));
+ }
+
+ public AppDrawerListAdapter.DrawerType getDrawerType() {
+ return mDrawerType;
+ }
+
public void onClickSortModeButton(View v) {
final PopupMenu popupMenu = new PopupMenu(this, v);
final Menu menu = popupMenu.getMenu();
@@ -1289,7 +1331,18 @@ public class Launcher extends Activity
public void setDynamicGridSize(DeviceProfile.GridSize size) {
int gridSize = SettingsProvider.getIntCustomDefault(this,
SettingsProvider.SETTINGS_UI_DYNAMIC_GRID_SIZE, 0);
- if (gridSize != size.getValue()) {
+ boolean customValuesChanged = false;
+ if (gridSize == size.getValue() && size == DeviceProfile.GridSize.Custom) {
+ int tempRows = SettingsProvider.getIntCustomDefault(this,
+ SettingsProvider.SETTINGS_UI_HOMESCREEN_ROWS, (int)mGrid.numRows);
+ int tempColumns = SettingsProvider.getIntCustomDefault(this,
+ SettingsProvider.SETTINGS_UI_HOMESCREEN_COLUMNS, (int)mGrid.numColumns);
+ if (tempColumns != (int) mGrid.numColumns || tempRows != (int) mGrid.numRows) {
+ customValuesChanged = true;
+ }
+ }
+
+ if (gridSize != size.getValue() || customValuesChanged) {
SettingsProvider.putInt(this,
SettingsProvider.SETTINGS_UI_DYNAMIC_GRID_SIZE, size.getValue());
@@ -1644,6 +1697,9 @@ public class Launcher extends Activity
mAppsCustomizeTabHost.findViewById(R.id.apps_customize_pane_content);
mAppsCustomizeContent.setup(this, dragController);
+ // Setup AppDrawer
+ setupAppDrawer();
+
// Setup the drag controller (drop targets have to be added in reverse order in priority)
dragController.setDragScoller(mWorkspace);
dragController.setScrollView(mDragLayer);
@@ -1669,6 +1725,20 @@ public class Launcher extends Activity
}
}
+ private void setupAppDrawer() {
+ if (mAppDrawer == null) {
+ FrameLayout view = (FrameLayout) findViewById(R.id.app_drawer_container);
+ mAppDrawer = (RecyclerView) view.findViewById(R.id.app_drawer_recyclerview);
+ mAppDrawer.setLayoutManager(new LinearLayoutManager(this));
+ if (mAppDrawerAdapter == null) {
+ initializeAdapter();
+ }
+ mAppDrawer.setHasFixedSize(true);
+ mAppDrawer.setAdapter(mAppDrawerAdapter);
+ initializeScrubber();
+ }
+ }
+
/**
* Sets the all apps button. This method is called from {@link Hotseat}.
*/
@@ -2203,11 +2273,6 @@ public class Launcher extends Activity
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
- // Reset the apps customize page
- if (!alreadyOnHome && mAppsCustomizeTabHost != null) {
- mAppsCustomizeTabHost.reset();
- }
-
onHomeIntent();
}
@@ -3205,7 +3270,7 @@ public class Launcher extends Activity
return false;
}
- boolean startActivitySafely(View v, Intent intent, Object tag) {
+ public boolean startActivitySafely(View v, Intent intent, Object tag) {
boolean success = false;
if (mIsSafeModeEnabled && !Utilities.isSystemApp(this, intent)) {
Toast.makeText(this, R.string.safemode_shortcut_error, Toast.LENGTH_SHORT).show();
@@ -3583,7 +3648,7 @@ public class Launcher extends Activity
}
boolean material = Utilities.isLmpOrAbove();
-
+ boolean drawer = mDrawerType == AppDrawerListAdapter.DrawerType.Drawer;
final Resources res = getResources();
final int duration = res.getInteger(R.integer.config_appsCustomizeZoomInTime);
@@ -3594,7 +3659,13 @@ public class Launcher extends Activity
final float scale = (float) res.getInteger(R.integer.config_appsCustomizeZoomScaleFactor);
final View fromView = mWorkspace;
- final AppsCustomizeTabHost toView = mAppsCustomizeTabHost;
+ final View toView;
+
+ if (drawer && contentType == AppsCustomizePagedView.ContentType.Applications) {
+ toView = findViewById(R.id.app_drawer_container);
+ } else {
+ toView = mAppsCustomizeTabHost;
+ }
final ArrayList<View> layerViews = new ArrayList<View>();
@@ -3616,7 +3687,8 @@ public class Launcher extends Activity
final AppsCustomizePagedView content = (AppsCustomizePagedView)
toView.findViewById(R.id.apps_customize_pane_content);
- final View page = content.getPageAt(content.getCurrentPage());
+ final View page = content != null ? content.getPageAt(content.getCurrentPage())
+ : toView.findViewById(R.id.app_drawer_view);
final View revealView = toView.findViewById(R.id.fake_page);
final float initialPanelAlpha = 1f;
@@ -3625,11 +3697,19 @@ public class Launcher extends Activity
if (isWidgetTray) {
revealView.setBackground(res.getDrawable(R.drawable.quantum_panel_dark));
} else {
- revealView.setBackground(res.getDrawable(R.drawable.quantum_panel));
+ if (drawer) {
+ revealView.setBackgroundColor(res.getColor(R.color.app_drawer_background));
+ } else {
+ revealView.setBackground(res.getDrawable(R.drawable.quantum_panel));
+ }
}
// Hide the real page background, and swap in the fake one
- content.setPageBackgroundsVisible(false);
+ if (content != null) {
+ content.setPageBackgroundsVisible(false);
+ } else {
+ toView.setBackgroundColor(Color.TRANSPARENT);
+ }
revealView.setVisibility(View.VISIBLE);
// We need to hide this view as the animation start will be posted.
revealView.setAlpha(0);
@@ -3674,6 +3754,11 @@ public class Launcher extends Activity
mStateAnimation.play(panelAlphaAndDrift);
+ final View drawerContent = content == null ?
+ toView.findViewById(R.id.app_drawer_recyclerview) : null;
+ final View drawerScrubber = content == null ?
+ toView.findViewById(R.id.scrubber_container) : null;
+
if (page != null) {
page.setVisibility(View.VISIBLE);
page.setLayerType(View.LAYER_TYPE_HARDWARE, null);
@@ -3692,14 +3777,32 @@ public class Launcher extends Activity
itemsAlpha.setInterpolator(new AccelerateInterpolator(1.5f));
itemsAlpha.setStartDelay(itemsAlphaStagger);
mStateAnimation.play(itemsAlpha);
+
+ if (drawerContent != null) {
+ drawerContent.setTranslationY(toView.getHeight());
+ ObjectAnimator slideIn = ObjectAnimator.ofFloat(drawerContent,
+ "translationY", 1000, 0);
+ slideIn.setInterpolator(new OvershootInterpolator(OVERSHOOT_TENSION));
+ slideIn.setStartDelay(revealDuration / 2);
+ mStateAnimation.play(slideIn);
+ }
+ if (drawerScrubber != null) {
+ drawerScrubber.setAlpha(0f);
+ ObjectAnimator fadeIn = ObjectAnimator.ofFloat(drawerScrubber,
+ "alpha", 0f, 1f);
+ fadeIn.setStartDelay(revealDuration / 2);
+ mStateAnimation.play(fadeIn);
+ }
}
View pageIndicators = toView.findViewById(R.id.apps_customize_page_indicator);
- pageIndicators.setAlpha(0.01f);
- ObjectAnimator indicatorsAlpha =
- ObjectAnimator.ofFloat(pageIndicators, "alpha", 1f);
- indicatorsAlpha.setDuration(revealDuration);
- mStateAnimation.play(indicatorsAlpha);
+ if (pageIndicators != null) {
+ pageIndicators.setAlpha(0.01f);
+ ObjectAnimator indicatorsAlpha =
+ ObjectAnimator.ofFloat(pageIndicators, "alpha", 1f);
+ indicatorsAlpha.setDuration(revealDuration);
+ mStateAnimation.play(indicatorsAlpha);
+ }
if (material) {
final View allApps = getAllAppsButton();
@@ -3737,7 +3840,11 @@ public class Launcher extends Activity
if (page != null) {
page.setLayerType(View.LAYER_TYPE_NONE, null);
}
- content.setPageBackgroundsVisible(true);
+ if (content != null) {
+ content.setPageBackgroundsVisible(true);
+ } else {
+ toView.setBackgroundColor(res.getColor(R.color.app_drawer_background));
+ }
// Hide the search bar
if (mSearchDropTargetBar != null) {
@@ -3820,7 +3927,8 @@ public class Launcher extends Activity
}
boolean material = Utilities.isLmpOrAbove();
- Resources res = getResources();
+ boolean drawer = mDrawerType == AppDrawerListAdapter.DrawerType.Drawer;
+ final Resources res = getResources();
final int duration = res.getInteger(R.integer.config_appsCustomizeZoomOutTime);
final int fadeOutDuration = res.getInteger(R.integer.config_appsCustomizeFadeOutTime);
@@ -3830,7 +3938,15 @@ public class Launcher extends Activity
final float scaleFactor = (float)
res.getInteger(R.integer.config_appsCustomizeZoomScaleFactor);
- final View fromView = mAppsCustomizeTabHost;
+ final View fromView;
+
+ if (drawer && mAppsCustomizeContent.getContentType()
+ != AppsCustomizePagedView.ContentType.Widgets) {
+ fromView = (FrameLayout) findViewById(R.id.app_drawer_container);
+ } else {
+ fromView = mAppsCustomizeTabHost;
+ }
+
final View toView = mWorkspace;
Animator workspaceAnim = null;
final ArrayList<View> layerViews = new ArrayList<View>();
@@ -3856,10 +3972,11 @@ public class Launcher extends Activity
final AppsCustomizePagedView content = (AppsCustomizePagedView)
fromView.findViewById(R.id.apps_customize_pane_content);
- final View page = content.getPageAt(content.getNextPage());
+ final View page = content != null ? content.getPageAt(content.getNextPage())
+ : fromView.findViewById(R.id.app_drawer_view);
// We need to hide side pages of the Apps / Widget tray to avoid some ugly edge cases
- int count = content.getChildCount();
+ int count = content != null ? content.getChildCount() : 0;
for (int i = 0; i < count; i++) {
View child = content.getChildAt(i);
if (child != page) {
@@ -3872,14 +3989,20 @@ public class Launcher extends Activity
// don't perform all these no-op animations. In particularly, this was causing
// the all-apps button to pop in and out.
if (fromView.getVisibility() == View.VISIBLE) {
- AppsCustomizePagedView.ContentType contentType = content.getContentType();
+ AppsCustomizePagedView.ContentType contentType =
+ mAppsCustomizeContent.getContentType();
final boolean isWidgetTray =
contentType == AppsCustomizePagedView.ContentType.Widgets;
if (isWidgetTray) {
revealView.setBackground(res.getDrawable(R.drawable.quantum_panel_dark));
} else {
- revealView.setBackground(res.getDrawable(R.drawable.quantum_panel));
+ if (drawer) {
+ revealView.setBackgroundColor(res.getColor(
+ R.color.app_drawer_background));
+ } else {
+ revealView.setBackground(res.getDrawable(R.drawable.quantum_panel));
+ }
}
int width = revealView.getMeasuredWidth();
@@ -3888,7 +4011,11 @@ public class Launcher extends Activity
// Hide the real page background, and swap in the fake one
revealView.setVisibility(View.VISIBLE);
- content.setPageBackgroundsVisible(false);
+ if (content != null) {
+ content.setPageBackgroundsVisible(false);
+ } else {
+ fromView.setBackgroundColor(Color.TRANSPARENT);
+ }
final View allAppsButton = getAllAppsButton();
revealView.setTranslationY(0);
@@ -3938,6 +4065,9 @@ public class Launcher extends Activity
mStateAnimation.play(panelAlpha);
}
+ final View drawerScrubber = content == null ?
+ fromView.findViewById(R.id.scrubber_container) : null;
+
if (page != null) {
page.setLayerType(View.LAYER_TYPE_HARDWARE, null);
@@ -3954,15 +4084,24 @@ public class Launcher extends Activity
itemsAlpha.setDuration(100);
itemsAlpha.setInterpolator(decelerateInterpolator);
mStateAnimation.play(itemsAlpha);
+
+ if (drawerScrubber != null) {
+ drawerScrubber.setAlpha(1f);
+ ObjectAnimator fadeOut = ObjectAnimator.ofFloat(drawerScrubber,
+ "alpha", 1f, 0f);
+ mStateAnimation.play(fadeOut);
+ }
}
View pageIndicators = fromView.findViewById(R.id.apps_customize_page_indicator);
- pageIndicators.setAlpha(1f);
- ObjectAnimator indicatorsAlpha =
- LauncherAnimUtils.ofFloat(pageIndicators, "alpha", 0f);
- indicatorsAlpha.setDuration(revealDuration);
- indicatorsAlpha.setInterpolator(new DecelerateInterpolator(1.5f));
- mStateAnimation.play(indicatorsAlpha);
+ if (pageIndicators != null) {
+ pageIndicators.setAlpha(1f);
+ ObjectAnimator indicatorsAlpha =
+ LauncherAnimUtils.ofFloat(pageIndicators, "alpha", 0f);
+ indicatorsAlpha.setDuration(revealDuration);
+ indicatorsAlpha.setInterpolator(new DecelerateInterpolator(1.5f));
+ mStateAnimation.play(indicatorsAlpha);
+ }
width = revealView.getMeasuredWidth();
@@ -4011,9 +4150,13 @@ public class Launcher extends Activity
if (page != null) {
page.setLayerType(View.LAYER_TYPE_NONE, null);
}
- content.setPageBackgroundsVisible(true);
+ if (content != null) {
+ content.setPageBackgroundsVisible(true);
+ } else {
+ fromView.setBackgroundColor(res.getColor(R.color.app_drawer_background));
+ }
// Unhide side pages
- int count = content.getChildCount();
+ int count = content != null ? content.getChildCount() : 0;
for (int i = 0; i < count; i++) {
View child = content.getChildAt(i);
child.setVisibility(View.VISIBLE);
@@ -4025,7 +4168,9 @@ public class Launcher extends Activity
page.setTranslationY(0);
page.setAlpha(1);
}
- content.setCurrentPage(content.getNextPage());
+ if (content != null) {
+ content.setCurrentPage(content.getNextPage());
+ }
mAppsCustomizeContent.updateCurrentPageScroll();
}
@@ -4676,6 +4821,7 @@ public class Launcher extends Activity
if (!LauncherAppState.isDisableAllApps() &&
addedApps != null && mAppsCustomizeContent != null) {
mAppsCustomizeContent.addApps(addedApps);
+ mAppDrawerAdapter.addApps(addedApps);
}
}
@@ -5059,6 +5205,9 @@ public class Launcher extends Activity
LauncherModel.getSortedWidgetsAndShortcuts(this));
}
} else {
+ if (mAppDrawerAdapter != null) {
+ mAppDrawerAdapter.setApps(apps);
+ }
if (mAppsCustomizeContent != null) {
mAppsCustomizeContent.setApps(apps);
mAppsCustomizeContent.onPackagesUpdated(
@@ -5089,6 +5238,7 @@ public class Launcher extends Activity
if (!LauncherAppState.isDisableAllApps() &&
mAppsCustomizeContent != null) {
mAppsCustomizeContent.updateApps(apps);
+ mAppDrawerAdapter.updateApps(apps);
}
}
@@ -5168,6 +5318,7 @@ public class Launcher extends Activity
if (!LauncherAppState.isDisableAllApps() &&
mAppsCustomizeContent != null) {
mAppsCustomizeContent.removeApps(appInfos);
+ mAppDrawerAdapter.removeApps(appInfos);
}
}
@@ -5425,16 +5576,24 @@ public class Launcher extends Activity
if (mWorkspace != null) mWorkspace.setAlpha(1f);
if (mHotseat != null) mHotseat.setAlpha(1f);
if (mPageIndicators != null) mPageIndicators.setAlpha(1f);
- if (mSearchDropTargetBar != null) mSearchDropTargetBar.showSearchBar(false);
+ showSearch();
}
void hideWorkspaceSearchAndHotseat() {
if (mWorkspace != null) mWorkspace.setAlpha(0f);
if (mHotseat != null) mHotseat.setAlpha(0f);
if (mPageIndicators != null) mPageIndicators.setAlpha(0f);
+ hideSearch();
+ }
+
+ void hideSearch() {
if (mSearchDropTargetBar != null) mSearchDropTargetBar.hideSearchBar(false);
}
+ void showSearch() {
+ if (mSearchDropTargetBar != null) mSearchDropTargetBar.showSearchBar(false);
+ }
+
public ItemInfo createAppDragInfo(Intent appLaunchIntent) {
// Called from search suggestion, not supported in other profiles.
final UserHandleCompat myUser = UserHandleCompat.myUserHandle();
@@ -5623,9 +5782,11 @@ public class Launcher extends Activity
mGrid.layout(Launcher.this);
// Synchronized reload
+ mModel.stopLoader(); //make sure the loader isn't running
mModel.startLoader(true, page);
mWorkspace.updateCustomContentVisibility();
+ mAppDrawerAdapter.reset();
}
public void setUpdateDynamicGrid() {
diff --git a/src/com/android/launcher3/OverviewSettingsPanel.java b/src/com/android/launcher3/OverviewSettingsPanel.java
index 983c5aaf6..4ea86a31c 100644
--- a/src/com/android/launcher3/OverviewSettingsPanel.java
+++ b/src/com/android/launcher3/OverviewSettingsPanel.java
@@ -49,6 +49,7 @@ public class OverviewSettingsPanel {
res.getString(R.string.grid_size_text)};
String[] valuesDrawer = new String[] {
+ res.getString(R.string.drawer_type),
res.getString(R.string.scroll_effect_text),
res.getString(R.string.drawer_sorting_text),
res.getString(R.string.icon_labels)};
diff --git a/src/com/android/launcher3/PagedViewIcon.java b/src/com/android/launcher3/PagedViewIcon.java
new file mode 100644
index 000000000..660251e31
--- /dev/null
+++ b/src/com/android/launcher3/PagedViewIcon.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Region;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.widget.TextView;
+
+/**
+ * An icon on a PagedView, specifically for items in the launcher's paged view (with compound
+ * drawables on the top).
+ */
+public class PagedViewIcon extends TextView {
+ /** A simple callback interface to allow a PagedViewIcon to notify when it has been pressed */
+ public static interface PressedCallback {
+ void iconPressed(PagedViewIcon icon);
+ }
+
+ @SuppressWarnings("unused")
+ private static final String TAG = "PagedViewIcon";
+ static final float PRESS_ALPHA = 0.4f;
+
+ private PagedViewIcon.PressedCallback mPressedCallback;
+ private boolean mLockDrawableState = false;
+
+ private Bitmap mIcon;
+
+ public PagedViewIcon(Context context) {
+ this(context, null);
+ }
+
+ public PagedViewIcon(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public PagedViewIcon(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ public void onFinishInflate() {
+ super.onFinishInflate();
+
+ // Ensure we are using the right text size
+ LauncherAppState app = LauncherAppState.getInstance();
+ DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
+ setTextSize(TypedValue.COMPLEX_UNIT_PX, grid.allAppsIconTextSizePx);
+ }
+
+ public void applyFromApplicationInfo(AppInfo info, boolean scaleUp,
+ PagedViewIcon.PressedCallback cb) {
+ LauncherAppState app = LauncherAppState.getInstance();
+ DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
+
+ mIcon = info.iconBitmap;
+ mPressedCallback = cb;
+ Drawable icon = Utilities.createIconDrawable(mIcon);
+ icon.setBounds(0, 0, grid.allAppsIconSizePx, grid.allAppsIconSizePx);
+ setCompoundDrawables(null, icon, null, null);
+ setCompoundDrawablePadding(grid.iconDrawablePaddingPx);
+ setText(info.title);
+ setTag(info);
+ }
+
+ public void lockDrawableState() {
+ mLockDrawableState = true;
+ }
+
+ public void resetDrawableState() {
+ mLockDrawableState = false;
+ post(new Runnable() {
+ @Override
+ public void run() {
+ refreshDrawableState();
+ }
+ });
+ }
+
+ protected void drawableStateChanged() {
+ super.drawableStateChanged();
+
+ // We keep in the pressed state until resetDrawableState() is called to reset the press
+ // feedback
+ if (isPressed()) {
+ setAlpha(PRESS_ALPHA);
+ if (mPressedCallback != null) {
+ mPressedCallback.iconPressed(this);
+ }
+ } else if (!mLockDrawableState) {
+ setAlpha(1f);
+ }
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ // If text is transparent, don't draw any shadow
+ if (getCurrentTextColor() == getResources().getColor(android.R.color.transparent)) {
+ getPaint().clearShadowLayer();
+ super.draw(canvas);
+ return;
+ }
+
+ // We enhance the shadow by drawing the shadow twice
+ getPaint().setShadowLayer(BubbleTextView.SHADOW_LARGE_RADIUS, 0.0f,
+ BubbleTextView.SHADOW_Y_OFFSET, BubbleTextView.SHADOW_LARGE_COLOUR);
+ super.draw(canvas);
+ canvas.save(Canvas.CLIP_SAVE_FLAG);
+ canvas.clipRect(getScrollX(), getScrollY() + getExtendedPaddingTop(),
+ getScrollX() + getWidth(),
+ getScrollY() + getHeight(), Region.Op.INTERSECT);
+ getPaint().setShadowLayer(BubbleTextView.SHADOW_SMALL_RADIUS, 0.0f, 0.0f,
+ BubbleTextView.SHADOW_SMALL_COLOUR);
+ super.draw(canvas);
+ canvas.restore();
+ }
+}
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index addd74cfc..fcd4b8587 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -41,6 +41,7 @@ import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.PaintDrawable;
import android.os.Build;
+import android.util.DisplayMetrics;
import android.util.Log;
import android.util.Pair;
import android.util.SparseArray;
@@ -558,4 +559,11 @@ public final class Utilities {
}
return null;
}
+
+ public static float convertDpToPixel(float dp, Context context){
+ Resources resources = context.getResources();
+ DisplayMetrics metrics = resources.getDisplayMetrics();
+ float px = dp * (metrics.densityDpi / (float) DisplayMetrics.DENSITY_DEFAULT);
+ return px;
+ }
}
diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java
index 5aa719027..d496c1c08 100644
--- a/src/com/android/launcher3/WidgetPreviewLoader.java
+++ b/src/com/android/launcher3/WidgetPreviewLoader.java
@@ -12,6 +12,7 @@ import android.database.sqlite.SQLiteCantOpenDatabaseException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDiskIOException;
import android.database.sqlite.SQLiteOpenHelper;
+import android.database.sqlite.SQLiteReadOnlyDatabaseException;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
@@ -379,6 +380,7 @@ public class WidgetPreviewLoader {
db.delete(CacheDb.TABLE_NAME, null, null);
} catch (SQLiteDiskIOException e) {
} catch (SQLiteCantOpenDatabaseException e) {
+ } catch (SQLiteReadOnlyDatabaseException e) {
dumpOpenFiles();
throw e;
}
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index a93fff47b..ee812aa0e 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -2567,7 +2567,7 @@ public class Workspace extends SmoothPagedView
}
mLauncher.updateVoiceButtonProxyVisible(false);
- if (stateIsNormal) {
+ if (stateIsNormal || stateIsNormalHidden) {
animateBackgroundGradient(0f, animated);
} else {
animateBackgroundGradient(getResources().getInteger(
diff --git a/src/com/android/launcher3/list/SettingsPinnedHeaderAdapter.java b/src/com/android/launcher3/list/SettingsPinnedHeaderAdapter.java
index 4e25a3b15..c4b5dee47 100644
--- a/src/com/android/launcher3/list/SettingsPinnedHeaderAdapter.java
+++ b/src/com/android/launcher3/list/SettingsPinnedHeaderAdapter.java
@@ -6,7 +6,9 @@ import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor;
+import android.graphics.Color;
import android.graphics.Typeface;
+import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -14,6 +16,7 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;
+import com.android.launcher3.AppDrawerListAdapter;
import com.android.launcher3.AppsCustomizePagedView;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
@@ -24,6 +27,8 @@ import com.android.launcher3.settings.SettingsProvider;
public class SettingsPinnedHeaderAdapter extends PinnedHeaderListAdapter {
private static final int PARTITION_TAG = 0;
private static final int POSITION_TAG = 1;
+ private static final float ENABLED_ALPHA = 1f;
+ private static final float DISABLED_ALPHA = 1f;
private Launcher mLauncher;
private Context mContext;
@@ -90,6 +95,7 @@ public class SettingsPinnedHeaderAdapter extends PinnedHeaderListAdapter {
Resources res = mLauncher.getResources();
+
boolean current = false;
String state = "";
@@ -131,14 +137,21 @@ public class SettingsPinnedHeaderAdapter extends PinnedHeaderListAdapter {
case OverviewSettingsPanel.DRAWER_SETTINGS_POSITION:
switch (position) {
case 0:
- state = mLauncher.getAppsCustomizeTransitionEffect();
- state = mapEffectToValue(state);
- ((TextView) v.findViewById(R.id.item_state)).setText(state);
+ updateDrawerTypeSettingsItem(v);
break;
case 1:
- updateDrawerSortSettingsItem(v);
+ if (!setDisabled(v)) {
+ state = mLauncher.getAppsCustomizeTransitionEffect();
+ state = mapEffectToValue(state);
+ ((TextView) v.findViewById(R.id.item_state)).setText(state);
+ }
break;
case 2:
+ if (!setDisabled(v)) {
+ updateDrawerSortSettingsItem(v);
+ }
+ break;
+ case 3:
current = SettingsProvider.getBoolean(mContext,
SettingsProvider.SETTINGS_UI_DRAWER_HIDE_ICON_LABELS,
R.bool.preferences_interface_drawer_hide_icon_labels_default);
@@ -209,6 +222,20 @@ public class SettingsPinnedHeaderAdapter extends PinnedHeaderListAdapter {
((TextView) v.findViewById(R.id.item_state)).setText(state);
}
+ public void updateDrawerTypeSettingsItem(View v) {
+ String state = "";
+ AppDrawerListAdapter.DrawerType type = mLauncher.getDrawerType();
+ switch (type) {
+ case Drawer:
+ state = mLauncher.getResources().getString(R.string.drawer_type_drawer);
+ break;
+ case Pager:
+ state = mLauncher.getResources().getString(R.string.drawer_type_pager);
+ break;
+ }
+ ((TextView) v.findViewById(R.id.item_state)).setText(state);
+ }
+
public void updateDynamicGridSizeSettingsItem(View v) {
DeviceProfile.GridSize gridSize = DeviceProfile.GridSize.getModeForValue(
SettingsProvider.getIntCustomDefault(mLauncher,
@@ -295,12 +322,17 @@ public class SettingsPinnedHeaderAdapter extends PinnedHeaderListAdapter {
case OverviewSettingsPanel.DRAWER_SETTINGS_POSITION:
switch (position) {
case 0:
- mLauncher.onClickTransitionEffectButton(v, true);
+ onClickDrawerTypeButton();
break;
case 1:
- onClickSortButton();
+ mLauncher.onClickTransitionEffectButton(v, true);
+
break;
case 2:
+ onClickSortButton();
+
+ break;
+ case 3:
onIconLabelsBooleanChanged(v,
SettingsProvider.SETTINGS_UI_DRAWER_HIDE_ICON_LABELS,
R.bool.preferences_interface_drawer_hide_icon_labels_default);
@@ -384,4 +416,44 @@ public class SettingsPinnedHeaderAdapter extends PinnedHeaderListAdapter {
notifyDataSetChanged();
}
+
+ private void onClickDrawerTypeButton() {
+ int type = SettingsProvider.getInt(mLauncher,
+ SettingsProvider.SETTINGS_UI_DRAWER_TYPE,
+ R.integer.preferences_interface_drawer_type_default);
+
+ type = (type + 1) % AppDrawerListAdapter.DrawerType.values().length;
+ SettingsProvider.putInt(mLauncher, SettingsProvider.SETTINGS_UI_DRAWER_TYPE, type);
+
+ mLauncher.updateDrawerType();
+
+ notifyDataSetChanged();
+ }
+
+ private boolean setDisabled(View v) {
+ TextView itemState = ((TextView) v.findViewById(R.id.item_state));
+ TextView itemName = ((TextView) v.findViewById(R.id.item_name));
+
+ AppDrawerListAdapter.DrawerType type = mLauncher.getDrawerType();
+
+ boolean isDisabled = false;
+
+ switch (type) {
+ case Drawer:
+ itemState.setAlpha(DISABLED_ALPHA);
+ itemState.setText(mLauncher.getResources()
+ .getString(R.string.setting_state_disabled));
+ itemName.setAlpha(DISABLED_ALPHA);
+ v.setEnabled(false);
+ isDisabled = true;
+ break;
+ case Pager:
+ itemState.setAlpha(ENABLED_ALPHA);
+ itemName.setAlpha(ENABLED_ALPHA);
+ v.setEnabled(true);
+ break;
+ }
+
+ return isDisabled;
+ }
}
diff --git a/src/com/android/launcher3/locale/HanziToPinyin.java b/src/com/android/launcher3/locale/HanziToPinyin.java
new file mode 100644
index 000000000..9e398fac0
--- /dev/null
+++ b/src/com/android/launcher3/locale/HanziToPinyin.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3.locale;
+
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.util.ArrayList;
+
+import libcore.icu.Transliterator;
+
+/**
+ * An object to convert Chinese character to its corresponding pinyin string.
+ * For characters with multiple possible pinyin string, only one is selected
+ * according to ICU Transliterator class. Polyphone is not supported in this
+ * implementation.
+ */
+public class HanziToPinyin {
+ private static final String TAG = "HanziToPinyin";
+
+ private static HanziToPinyin sInstance;
+ private Transliterator mPinyinTransliterator;
+ private Transliterator mAsciiTransliterator;
+
+ public static class Token {
+ /**
+ * Separator between target string for each source char
+ */
+ public static final String SEPARATOR = " ";
+
+ public static final int LATIN = 1;
+ public static final int PINYIN = 2;
+ public static final int UNKNOWN = 3;
+
+ public Token() {
+ }
+
+ public Token(int type, String source, String target) {
+ this.type = type;
+ this.source = source;
+ this.target = target;
+ }
+
+ /**
+ * Type of this token, ASCII, PINYIN or UNKNOWN.
+ */
+ public int type;
+ /**
+ * Original string before translation.
+ */
+ public String source;
+ /**
+ * Translated string of source. For Han, target is corresponding Pinyin. Otherwise target is
+ * original string in source.
+ */
+ public String target;
+ }
+
+ private HanziToPinyin() {
+ try {
+ mPinyinTransliterator = new Transliterator("Han-Latin/Names; Latin-Ascii; Any-Upper");
+ mAsciiTransliterator = new Transliterator("Latin-Ascii");
+ } catch (RuntimeException e) {
+ Log.w(TAG, "Han-Latin/Names transliterator data is missing,"
+ + " HanziToPinyin is disabled");
+ }
+ }
+
+ public boolean hasChineseTransliterator() {
+ return mPinyinTransliterator != null;
+ }
+
+ public static HanziToPinyin getInstance() {
+ synchronized (HanziToPinyin.class) {
+ if (sInstance == null) {
+ sInstance = new HanziToPinyin();
+ }
+ return sInstance;
+ }
+ }
+
+ private void tokenize(char character, Token token) {
+ token.source = Character.toString(character);
+
+ // ASCII
+ if (character < 128) {
+ token.type = Token.LATIN;
+ token.target = token.source;
+ return;
+ }
+
+ // Extended Latin. Transcode these to ASCII equivalents
+ if (character < 0x250 || (0x1e00 <= character && character < 0x1eff)) {
+ token.type = Token.LATIN;
+ token.target = mAsciiTransliterator == null ? token.source :
+ mAsciiTransliterator.transliterate(token.source);
+ return;
+ }
+
+ token.type = Token.PINYIN;
+ token.target = mPinyinTransliterator.transliterate(token.source);
+ if (TextUtils.isEmpty(token.target) ||
+ TextUtils.equals(token.source, token.target)) {
+ token.type = Token.UNKNOWN;
+ token.target = token.source;
+ }
+ }
+
+ public String transliterate(final String input) {
+ if (!hasChineseTransliterator() || TextUtils.isEmpty(input)) {
+ return null;
+ }
+ return mPinyinTransliterator.transliterate(input);
+ }
+
+ /**
+ * Convert the input to a array of tokens. The sequence of ASCII or Unknown characters without
+ * space will be put into a Token, One Hanzi character which has pinyin will be treated as a
+ * Token. If there is no Chinese transliterator, the empty token array is returned.
+ */
+ public ArrayList<Token> getTokens(final String input) {
+ ArrayList<Token> tokens = new ArrayList<Token>();
+ if (!hasChineseTransliterator() || TextUtils.isEmpty(input)) {
+ // return empty tokens.
+ return tokens;
+ }
+
+ final int inputLength = input.length();
+ final StringBuilder sb = new StringBuilder();
+ int tokenType = Token.LATIN;
+ Token token = new Token();
+
+ // Go through the input, create a new token when
+ // a. Token type changed
+ // b. Get the Pinyin of current charater.
+ // c. current character is space.
+ for (int i = 0; i < inputLength; i++) {
+ final char character = input.charAt(i);
+ if (Character.isSpaceChar(character)) {
+ if (sb.length() > 0) {
+ addToken(sb, tokens, tokenType);
+ }
+ } else {
+ tokenize(character, token);
+ if (token.type == Token.PINYIN) {
+ if (sb.length() > 0) {
+ addToken(sb, tokens, tokenType);
+ }
+ tokens.add(token);
+ token = new Token();
+ } else {
+ if (tokenType != token.type && sb.length() > 0) {
+ addToken(sb, tokens, tokenType);
+ }
+ sb.append(token.target);
+ }
+ tokenType = token.type;
+ }
+ }
+ if (sb.length() > 0) {
+ addToken(sb, tokens, tokenType);
+ }
+ return tokens;
+ }
+
+ private void addToken(
+ final StringBuilder sb, final ArrayList<Token> tokens, final int tokenType) {
+ String str = sb.toString();
+ tokens.add(new Token(tokenType, str, str));
+ sb.setLength(0);
+ }
+}
diff --git a/src/com/android/launcher3/locale/LocaleSet.java b/src/com/android/launcher3/locale/LocaleSet.java
new file mode 100644
index 000000000..34634ab7e
--- /dev/null
+++ b/src/com/android/launcher3/locale/LocaleSet.java
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.launcher3.locale;
+
+import android.text.TextUtils;
+import com.google.common.annotations.VisibleForTesting;
+import java.util.Locale;
+
+public class LocaleSet {
+ private static final String CHINESE_LANGUAGE = Locale.CHINESE.getLanguage().toLowerCase();
+ private static final String JAPANESE_LANGUAGE = Locale.JAPANESE.getLanguage().toLowerCase();
+ private static final String KOREAN_LANGUAGE = Locale.KOREAN.getLanguage().toLowerCase();
+
+ private static class LocaleWrapper {
+ private final Locale mLocale;
+ private final String mLanguage;
+ private final boolean mLocaleIsCJK;
+
+ private static boolean isLanguageCJK(String language) {
+ return CHINESE_LANGUAGE.equals(language) ||
+ JAPANESE_LANGUAGE.equals(language) ||
+ KOREAN_LANGUAGE.equals(language);
+ }
+
+ public LocaleWrapper(Locale locale) {
+ mLocale = locale;
+ if (mLocale != null) {
+ mLanguage = mLocale.getLanguage().toLowerCase();
+ mLocaleIsCJK = isLanguageCJK(mLanguage);
+ } else {
+ mLanguage = null;
+ mLocaleIsCJK = false;
+ }
+ }
+
+ public boolean hasLocale() {
+ return mLocale != null;
+ }
+
+ public Locale getLocale() {
+ return mLocale;
+ }
+
+ public boolean isLocale(Locale locale) {
+ return mLocale == null ? (locale == null) : mLocale.equals(locale);
+ }
+
+ public boolean isLocaleCJK() {
+ return mLocaleIsCJK;
+ }
+
+ public boolean isLanguage(String language) {
+ return mLanguage == null ? (language == null)
+ : mLanguage.equalsIgnoreCase(language);
+ }
+
+ public String toString() {
+ return mLocale != null ? mLocale.toLanguageTag() : "(null)";
+ }
+ }
+
+ public static LocaleSet getDefault() {
+ return new LocaleSet(Locale.getDefault());
+ }
+
+ public LocaleSet(Locale locale) {
+ this(locale, null);
+ }
+
+ /**
+ * Returns locale set for a given set of IETF BCP-47 tags separated by ';'.
+ * BCP-47 tags are what is used by ICU 52's toLanguageTag/forLanguageTag
+ * methods to represent individual Locales: "en-US" for Locale.US,
+ * "zh-CN" for Locale.CHINA, etc. So eg "en-US;zh-CN" specifies the locale
+ * set LocaleSet(Locale.US, Locale.CHINA).
+ *
+ * @param localeString One or more BCP-47 tags separated by ';'.
+ * @return LocaleSet for specified locale string, or default set if null
+ * or unable to parse.
+ */
+ public static LocaleSet getLocaleSet(String localeString) {
+ // Locale.toString() generates strings like "en_US" and "zh_CN_#Hans".
+ // Locale.toLanguageTag() generates strings like "en-US" and "zh-Hans-CN".
+ // We can only parse language tags.
+ if (localeString != null && localeString.indexOf('_') == -1) {
+ final String[] locales = localeString.split(";");
+ final Locale primaryLocale = Locale.forLanguageTag(locales[0]);
+ // ICU tags undefined/unparseable locales "und"
+ if (primaryLocale != null &&
+ !TextUtils.equals(primaryLocale.toLanguageTag(), "und")) {
+ if (locales.length > 1 && locales[1] != null) {
+ final Locale secondaryLocale = Locale.forLanguageTag(locales[1]);
+ if (secondaryLocale != null &&
+ !TextUtils.equals(secondaryLocale.toLanguageTag(), "und")) {
+ return new LocaleSet(primaryLocale, secondaryLocale);
+ }
+ }
+ return new LocaleSet(primaryLocale);
+ }
+ }
+ return getDefault();
+ }
+
+ private final LocaleWrapper mPrimaryLocale;
+ private final LocaleWrapper mSecondaryLocale;
+
+ public LocaleSet(Locale primaryLocale, Locale secondaryLocale) {
+ mPrimaryLocale = new LocaleWrapper(primaryLocale);
+ mSecondaryLocale = new LocaleWrapper(
+ mPrimaryLocale.equals(secondaryLocale) ? null : secondaryLocale);
+ }
+
+ public LocaleSet normalize() {
+ final Locale primaryLocale = getPrimaryLocale();
+ if (primaryLocale == null) {
+ return getDefault();
+ }
+ Locale secondaryLocale = getSecondaryLocale();
+ // disallow both locales with same language (redundant and/or conflicting)
+ // disallow both locales CJK (conflicting rules)
+ if (secondaryLocale == null ||
+ isPrimaryLanguage(secondaryLocale.getLanguage()) ||
+ (isPrimaryLocaleCJK() && isSecondaryLocaleCJK())) {
+ return new LocaleSet(primaryLocale);
+ }
+ // unnecessary to specify English as secondary locale (redundant)
+ if (isSecondaryLanguage(Locale.ENGLISH.getLanguage())) {
+ return new LocaleSet(primaryLocale);
+ }
+ return this;
+ }
+
+ public boolean hasSecondaryLocale() {
+ return mSecondaryLocale.hasLocale();
+ }
+
+ public Locale getPrimaryLocale() {
+ return mPrimaryLocale.getLocale();
+ }
+
+ public Locale getSecondaryLocale() {
+ return mSecondaryLocale.getLocale();
+ }
+
+ public boolean isPrimaryLocale(Locale locale) {
+ return mPrimaryLocale.isLocale(locale);
+ }
+
+ public boolean isSecondaryLocale(Locale locale) {
+ return mSecondaryLocale.isLocale(locale);
+ }
+
+ private static final String SCRIPT_SIMPLIFIED_CHINESE = "Hans";
+ private static final String SCRIPT_TRADITIONAL_CHINESE = "Hant";
+
+ @VisibleForTesting
+ public static boolean isLocaleSimplifiedChinese(Locale locale) {
+ // language must match
+ if (locale == null || !TextUtils.equals(locale.getLanguage(), CHINESE_LANGUAGE)) {
+ return false;
+ }
+ // script is optional but if present must match
+ if (!TextUtils.isEmpty(locale.getScript())) {
+ return locale.getScript().equals(SCRIPT_SIMPLIFIED_CHINESE);
+ }
+ // if no script, must match known country
+ return locale.equals(Locale.SIMPLIFIED_CHINESE);
+ }
+
+ public boolean isPrimaryLocaleSimplifiedChinese() {
+ return isLocaleSimplifiedChinese(getPrimaryLocale());
+ }
+
+ public boolean isSecondaryLocaleSimplifiedChinese() {
+ return isLocaleSimplifiedChinese(getSecondaryLocale());
+ }
+
+ @VisibleForTesting
+ public static boolean isLocaleTraditionalChinese(Locale locale) {
+ // language must match
+ if (locale == null || !TextUtils.equals(locale.getLanguage(), CHINESE_LANGUAGE)) {
+ return false;
+ }
+ // script is optional but if present must match
+ if (!TextUtils.isEmpty(locale.getScript())) {
+ return locale.getScript().equals(SCRIPT_TRADITIONAL_CHINESE);
+ }
+ // if no script, must match known country
+ return locale.equals(Locale.TRADITIONAL_CHINESE);
+ }
+
+ public boolean isPrimaryLocaleTraditionalChinese() {
+ return isLocaleTraditionalChinese(getPrimaryLocale());
+ }
+
+ public boolean isSecondaryLocaleTraditionalChinese() {
+ return isLocaleTraditionalChinese(getSecondaryLocale());
+ }
+
+ public boolean isPrimaryLocaleCJK() {
+ return mPrimaryLocale.isLocaleCJK();
+ }
+
+ public boolean isSecondaryLocaleCJK() {
+ return mSecondaryLocale.isLocaleCJK();
+ }
+
+ public boolean isPrimaryLanguage(String language) {
+ return mPrimaryLocale.isLanguage(language);
+ }
+
+ public boolean isSecondaryLanguage(String language) {
+ return mSecondaryLocale.isLanguage(language);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof LocaleSet) {
+ final LocaleSet other = (LocaleSet) object;
+ return other.isPrimaryLocale(mPrimaryLocale.getLocale())
+ && other.isSecondaryLocale(mSecondaryLocale.getLocale());
+ }
+ return false;
+ }
+
+ @Override
+ public final String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append(mPrimaryLocale.toString());
+ if (hasSecondaryLocale()) {
+ builder.append(";");
+ builder.append(mSecondaryLocale.toString());
+ }
+ return builder.toString();
+ }
+}
diff --git a/src/com/android/launcher3/locale/LocaleSetManager.java b/src/com/android/launcher3/locale/LocaleSetManager.java
new file mode 100644
index 000000000..b058718f3
--- /dev/null
+++ b/src/com/android/launcher3/locale/LocaleSetManager.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2014 The CyanogenMod Project
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.launcher3.locale;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.Locale;
+
+import libcore.icu.ICU;
+
+public class LocaleSetManager {
+ private static final String TAG = LocaleSetManager.class.getSimpleName();
+
+ private LocaleSet mCurrentLocales;
+ private final Context mContext;
+
+ public LocaleSetManager(final Context context) {
+ mContext = context;
+ }
+
+ /**
+ * Sets up the locale set
+ * @param localeSet value to set it to
+ */
+ public void updateLocaleSet(LocaleSet localeSet) {
+ Log.d(TAG, "Locale Changed from: " + mCurrentLocales + " to " + localeSet);
+ mCurrentLocales = localeSet;
+ LocaleUtils.getInstance().setLocales(mCurrentLocales);
+ }
+
+ /**
+ * This takes an old and new locale set and creates a combined locale set. If they share a
+ * primary then the old one is returned
+ * @return the combined locale set
+ */
+ private static LocaleSet getCombinedLocaleSet(LocaleSet oldLocales, Locale newLocale) {
+ Locale prevLocale = null;
+
+ if (oldLocales != null) {
+ prevLocale = oldLocales.getPrimaryLocale();
+ // If primary locale is unchanged then no change to locale set.
+ if (newLocale.equals(prevLocale)) {
+ return oldLocales;
+ }
+ }
+
+ // Otherwise, construct a new locale set based on the new locale
+ // and the previous primary locale.
+ return new LocaleSet(newLocale, prevLocale).normalize();
+ }
+
+ /**
+ * @return the system locale set
+ */
+ public LocaleSet getSystemLocaleSet() {
+ final Locale curLocale = getLocale();
+ return getCombinedLocaleSet(mCurrentLocales, curLocale);
+ }
+
+ @VisibleForTesting
+ protected Locale getLocale() {
+ return Locale.getDefault();
+ }
+}
diff --git a/src/com/android/launcher3/locale/LocaleUtils.java b/src/com/android/launcher3/locale/LocaleUtils.java
new file mode 100644
index 000000000..cc8277a6c
--- /dev/null
+++ b/src/com/android/launcher3/locale/LocaleUtils.java
@@ -0,0 +1,484 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.launcher3.locale;
+
+import android.provider.ContactsContract.FullNameStyle;
+import android.provider.ContactsContract.PhoneticNameStyle;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.launcher3.locale.HanziToPinyin.Token;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import java.lang.Character.UnicodeBlock;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Set;
+
+import libcore.icu.AlphabeticIndex;
+import libcore.icu.AlphabeticIndex.ImmutableIndex;
+import libcore.icu.Transliterator;
+
+/**
+ * This utility class provides specialized handling for locale specific
+ * information: labels, name lookup keys.
+ *
+ * This class has been modified from ContactLocaleUtils.java for now to rip out
+ * Chinese/Japanese specific Alphabetic Indexers because the MediaProvider's sort
+ * is using a Collator sort which can result in confusing behavior, so for now we will
+ * simplify and batch up those results until we later support our own internal databases
+ * An example of what This is, if we have songs "Able", "Xylophone" and "上" in
+ * simplified chinese language The media provider would give it to us in that order sorted,
+ * but the ICU lib would return "A", "X", "S". Unless we write our own db or do our own sort
+ * there is no good easy solution
+ */
+public class LocaleUtils {
+ public static final String TAG = "LauncherLocale";
+
+ public static final Locale LOCALE_ARABIC = new Locale("ar");
+ public static final Locale LOCALE_GREEK = new Locale("el");
+ public static final Locale LOCALE_HEBREW = new Locale("he");
+ // Serbian and Ukrainian labels are complementary supersets of Russian
+ public static final Locale LOCALE_SERBIAN = new Locale("sr");
+ public static final Locale LOCALE_UKRAINIAN = new Locale("uk");
+ public static final Locale LOCALE_THAI = new Locale("th");
+
+ /**
+ * This class is the default implementation and should be the base class
+ * for other locales.
+ *
+ * sortKey: same as name
+ * nameLookupKeys: none
+ * labels: uses ICU AlphabeticIndex for labels and extends by labeling
+ * phone numbers "#". Eg English labels are: [A-Z], #, " "
+ */
+ private static class LocaleUtilsBase {
+ private static final String EMPTY_STRING = "";
+ private static final String NUMBER_STRING = "#";
+
+ protected final ImmutableIndex mAlphabeticIndex;
+ private final int mAlphabeticIndexBucketCount;
+ private final int mNumberBucketIndex;
+ private final boolean mEnableSecondaryLocalePinyin;
+
+ public LocaleUtilsBase(LocaleSet locales) {
+ // AlphabeticIndex.getBucketLabel() uses a binary search across
+ // the entire label set so care should be taken about growing this
+ // set too large. The following set determines for which locales
+ // we will show labels other than your primary locale. General rules
+ // of thumb for adding a locale: should be a supported locale; and
+ // should not be included if from a name it is not deterministic
+ // which way to label it (so eg Chinese cannot be added because
+ // the labeling of a Chinese character varies between Simplified,
+ // Traditional, and Japanese locales). Use English only for all
+ // Latin based alphabets. Ukrainian and Serbian are chosen for
+ // Cyrillic because their alphabets are complementary supersets
+ // of Russian.
+ final Locale secondaryLocale = locales.getSecondaryLocale();
+ mEnableSecondaryLocalePinyin = locales.isSecondaryLocaleSimplifiedChinese();
+ AlphabeticIndex ai = new AlphabeticIndex(locales.getPrimaryLocale())
+ .setMaxLabelCount(300);
+ if (secondaryLocale != null) {
+ ai.addLabels(secondaryLocale);
+ }
+ mAlphabeticIndex = ai.addLabels(Locale.ENGLISH)
+ .addLabels(Locale.JAPANESE)
+ .addLabels(Locale.KOREAN)
+ .addLabels(LOCALE_THAI)
+ .addLabels(LOCALE_ARABIC)
+ .addLabels(LOCALE_HEBREW)
+ .addLabels(LOCALE_GREEK)
+ .addLabels(LOCALE_UKRAINIAN)
+ .addLabels(LOCALE_SERBIAN)
+ .getImmutableIndex();
+ mAlphabeticIndexBucketCount = mAlphabeticIndex.getBucketCount();
+ mNumberBucketIndex = mAlphabeticIndexBucketCount - 1;
+ }
+
+ public String getSortKey(String name) {
+ return name;
+ }
+
+ /**
+ * Returns the bucket index for the specified string. AlphabeticIndex
+ * sorts strings into buckets numbered in order from 0 to N, where the
+ * exact value of N depends on how many representative index labels are
+ * used in a particular locale. This routine adds one additional bucket
+ * for phone numbers. It attempts to detect phone numbers and shifts
+ * the bucket indexes returned by AlphabeticIndex in order to make room
+ * for the new # bucket, so the returned range becomes 0 to N+1.
+ */
+ public int getBucketIndex(String name) {
+ boolean prefixIsNumeric = false;
+ final int length = name.length();
+ int offset = 0;
+ while (offset < length) {
+ int codePoint = Character.codePointAt(name, offset);
+ // Ignore standard phone number separators and identify any
+ // string that otherwise starts with a number.
+ if (Character.isDigit(codePoint)) {
+ prefixIsNumeric = true;
+ break;
+ } else if (!Character.isSpaceChar(codePoint) &&
+ codePoint != '+' && codePoint != '(' &&
+ codePoint != ')' && codePoint != '.' &&
+ codePoint != '-' && codePoint != '#') {
+ break;
+ }
+ offset += Character.charCount(codePoint);
+ }
+ if (prefixIsNumeric) {
+ return mNumberBucketIndex;
+ }
+
+ /**
+ * TODO: ICU 52 AlphabeticIndex doesn't support Simplified Chinese
+ * as a secondary locale. Remove the following if that is added.
+ */
+ if (mEnableSecondaryLocalePinyin) {
+ name = HanziToPinyin.getInstance().transliterate(name);
+ }
+ final int bucket = mAlphabeticIndex.getBucketIndex(name);
+ if (bucket < 0) {
+ return -1;
+ }
+ if (bucket >= mNumberBucketIndex) {
+ return bucket + 1;
+ }
+ return bucket;
+ }
+
+ /**
+ * Returns the number of buckets in use (one more than AlphabeticIndex
+ * uses, because this class adds a bucket for phone numbers).
+ */
+ public int getBucketCount() {
+ return mAlphabeticIndexBucketCount + 1;
+ }
+
+ /**
+ * Returns the label for the specified bucket index if a valid index,
+ * otherwise returns an empty string. '#' is returned for the phone
+ * number bucket; for all others, the AlphabeticIndex label is returned.
+ */
+ public String getBucketLabel(int bucketIndex) {
+ if (bucketIndex < 0 || bucketIndex >= getBucketCount()) {
+ return EMPTY_STRING;
+ } else if (bucketIndex == mNumberBucketIndex) {
+ return NUMBER_STRING;
+ } else if (bucketIndex > mNumberBucketIndex) {
+ --bucketIndex;
+ }
+ return mAlphabeticIndex.getBucketLabel(bucketIndex);
+ }
+
+ @SuppressWarnings("unused")
+ public Iterator<String> getNameLookupKeys(String name, int nameStyle) {
+ return null;
+ }
+
+ public ArrayList<String> getLabels() {
+ final int bucketCount = getBucketCount();
+ final ArrayList<String> labels = new ArrayList<String>(bucketCount);
+ for(int i = 0; i < bucketCount; ++i) {
+ labels.add(getBucketLabel(i));
+ }
+ return labels;
+ }
+ }
+
+ /**
+ * Japanese specific locale overrides.
+ *
+ * sortKey: unchanged (same as name)
+ * nameLookupKeys: unchanged (none)
+ * labels: extends default labels by labeling unlabeled CJ characters
+ * with the Japanese character 他 ("misc"). Japanese labels are:
+ * あ, か, さ, た, な, は, ま, や, ら, わ, 他, [A-Z], #, " "
+ */
+ private static class JapaneseContactUtils extends LocaleUtilsBase {
+ // \u4ed6 is Japanese character 他 ("misc")
+ private static final String JAPANESE_MISC_LABEL = "\u4ed6";
+ private final int mMiscBucketIndex;
+
+ public JapaneseContactUtils(LocaleSet locales) {
+ super(locales);
+ // Determine which bucket AlphabeticIndex is lumping unclassified
+ // Japanese characters into by looking up the bucket index for
+ // a representative Kanji/CJK unified ideograph (\u65e5 is the
+ // character '日').
+ mMiscBucketIndex = super.getBucketIndex("\u65e5");
+ }
+
+ // Set of UnicodeBlocks for unified CJK (Chinese) characters and
+ // Japanese characters. This includes all code blocks that might
+ // contain a character used in Japanese (which is why unified CJK
+ // blocks are included but Korean Hangul and jamo are not).
+ private static final Set<Character.UnicodeBlock> CJ_BLOCKS;
+ static {
+ Set<UnicodeBlock> set = new HashSet<UnicodeBlock>();
+ set.add(UnicodeBlock.HIRAGANA);
+ set.add(UnicodeBlock.KATAKANA);
+ set.add(UnicodeBlock.KATAKANA_PHONETIC_EXTENSIONS);
+ set.add(UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS);
+ set.add(UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS);
+ set.add(UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A);
+ set.add(UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B);
+ set.add(UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION);
+ set.add(UnicodeBlock.CJK_RADICALS_SUPPLEMENT);
+ set.add(UnicodeBlock.CJK_COMPATIBILITY);
+ set.add(UnicodeBlock.CJK_COMPATIBILITY_FORMS);
+ set.add(UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS);
+ set.add(UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT);
+ CJ_BLOCKS = Collections.unmodifiableSet(set);
+ }
+
+ /**
+ * Helper routine to identify unlabeled Chinese or Japanese characters
+ * to put in a 'misc' bucket.
+ *
+ * @return true if the specified Unicode code point is Chinese or
+ * Japanese
+ */
+ private static boolean isChineseOrJapanese(int codePoint) {
+ return CJ_BLOCKS.contains(UnicodeBlock.of(codePoint));
+ }
+
+ /**
+ * Returns the bucket index for the specified string. Adds an
+ * additional 'misc' bucket for Kanji characters to the base class set.
+ */
+ @Override
+ public int getBucketIndex(String name) {
+ final int bucketIndex = super.getBucketIndex(name);
+ if ((bucketIndex == mMiscBucketIndex &&
+ !isChineseOrJapanese(Character.codePointAt(name, 0))) ||
+ bucketIndex > mMiscBucketIndex) {
+ return bucketIndex + 1;
+ }
+ return bucketIndex;
+ }
+
+ /**
+ * Returns the number of buckets in use (one more than the base class
+ * uses, because this class adds a bucket for Kanji).
+ */
+ @Override
+ public int getBucketCount() {
+ return super.getBucketCount() + 1;
+ }
+
+ /**
+ * Returns the label for the specified bucket index if a valid index,
+ * otherwise returns an empty string. '他' is returned for unclassified
+ * Kanji; for all others, the label determined by the base class is
+ * returned.
+ */
+ @Override
+ public String getBucketLabel(int bucketIndex) {
+ if (bucketIndex == mMiscBucketIndex) {
+ return JAPANESE_MISC_LABEL;
+ } else if (bucketIndex > mMiscBucketIndex) {
+ --bucketIndex;
+ }
+ return super.getBucketLabel(bucketIndex);
+ }
+
+ @Override
+ public Iterator<String> getNameLookupKeys(String name, int nameStyle) {
+ // Hiragana and Katakana will be positively identified as Japanese.
+ if (nameStyle == PhoneticNameStyle.JAPANESE) {
+ return getRomajiNameLookupKeys(name);
+ }
+ return null;
+ }
+
+ private static boolean mInitializedTransliterator;
+ private static Transliterator mJapaneseTransliterator;
+
+ private static Transliterator getJapaneseTransliterator() {
+ synchronized(JapaneseContactUtils.class) {
+ if (!mInitializedTransliterator) {
+ mInitializedTransliterator = true;
+ Transliterator t = null;
+ try {
+ t = new Transliterator("Hiragana-Latin; Katakana-Latin;"
+ + " Latin-Ascii");
+ } catch (RuntimeException e) {
+ Log.w(TAG, "Hiragana/Katakana-Latin transliterator data"
+ + " is missing");
+ }
+ mJapaneseTransliterator = t;
+ }
+ return mJapaneseTransliterator;
+ }
+ }
+
+ public static Iterator<String> getRomajiNameLookupKeys(String name) {
+ final Transliterator t = getJapaneseTransliterator();
+ if (t == null) {
+ return null;
+ }
+ final String romajiName = t.transliterate(name);
+ if (TextUtils.isEmpty(romajiName) ||
+ TextUtils.equals(name, romajiName)) {
+ return null;
+ }
+ final HashSet<String> keys = new HashSet<String>();
+ keys.add(romajiName);
+ return keys.iterator();
+ }
+ }
+
+ /**
+ * Simplified Chinese specific locale overrides. Uses ICU Transliterator
+ * for generating pinyin transliteration.
+ *
+ * sortKey: unchanged (same as name)
+ * nameLookupKeys: adds additional name lookup keys
+ * - Chinese character's pinyin and pinyin's initial character.
+ * - Latin word and initial character.
+ * labels: unchanged
+ * Simplified Chinese labels are the same as English: [A-Z], #, " "
+ */
+ private static class SimplifiedChineseContactUtils
+ extends LocaleUtilsBase {
+ public SimplifiedChineseContactUtils(LocaleSet locales) {
+ super(locales);
+ }
+
+ @Override
+ public Iterator<String> getNameLookupKeys(String name, int nameStyle) {
+ if (nameStyle != FullNameStyle.JAPANESE &&
+ nameStyle != FullNameStyle.KOREAN) {
+ return getPinyinNameLookupKeys(name);
+ }
+ return null;
+ }
+
+ public static Iterator<String> getPinyinNameLookupKeys(String name) {
+ // TODO : Reduce the object allocation.
+ HashSet<String> keys = new HashSet<String>();
+ ArrayList<Token> tokens = HanziToPinyin.getInstance().getTokens(name);
+ final int tokenCount = tokens.size();
+ final StringBuilder keyPinyin = new StringBuilder();
+ final StringBuilder keyInitial = new StringBuilder();
+ // There is no space among the Chinese Characters, the variant name
+ // lookup key wouldn't work for Chinese. The keyOriginal is used to
+ // build the lookup keys for itself.
+ final StringBuilder keyOriginal = new StringBuilder();
+ for (int i = tokenCount - 1; i >= 0; i--) {
+ final Token token = tokens.get(i);
+ if (Token.UNKNOWN == token.type) {
+ continue;
+ }
+ if (Token.PINYIN == token.type) {
+ keyPinyin.insert(0, token.target);
+ keyInitial.insert(0, token.target.charAt(0));
+ } else if (Token.LATIN == token.type) {
+ // Avoid adding space at the end of String.
+ if (keyPinyin.length() > 0) {
+ keyPinyin.insert(0, ' ');
+ }
+ if (keyOriginal.length() > 0) {
+ keyOriginal.insert(0, ' ');
+ }
+ keyPinyin.insert(0, token.source);
+ keyInitial.insert(0, token.source.charAt(0));
+ }
+ keyOriginal.insert(0, token.source);
+ keys.add(keyOriginal.toString());
+ keys.add(keyPinyin.toString());
+ keys.add(keyInitial.toString());
+ }
+ return keys.iterator();
+ }
+ }
+
+ private static final String JAPANESE_LANGUAGE = Locale.JAPANESE.getLanguage().toLowerCase();
+ private static LocaleUtils sSingleton;
+
+ private final LocaleSet mLocales;
+ private final LocaleUtilsBase mUtils;
+
+ private LocaleUtils(LocaleSet locales) {
+ if (locales == null) {
+ mLocales = LocaleSet.getDefault();
+ } else {
+ mLocales = locales;
+ }
+ if (mLocales.isPrimaryLanguage(JAPANESE_LANGUAGE)) {
+ mUtils = new JapaneseContactUtils(mLocales);
+ } else if (mLocales.isPrimaryLocaleSimplifiedChinese()) {
+ mUtils = new SimplifiedChineseContactUtils(mLocales);
+ } else {
+ mUtils = new LocaleUtilsBase(mLocales);
+ }
+ Log.i(TAG, "AddressBook Labels [" + mLocales.toString() + "]: "
+ + getLabels().toString());
+ }
+
+ public boolean isLocale(LocaleSet locales) {
+ return mLocales.equals(locales);
+ }
+
+ public static synchronized LocaleUtils getInstance() {
+ if (sSingleton == null) {
+ sSingleton = new LocaleUtils(LocaleSet.getDefault());
+ }
+ return sSingleton;
+ }
+
+ @VisibleForTesting
+ public static synchronized void setLocale(Locale locale) {
+ setLocales(new LocaleSet(locale));
+ }
+
+ public static synchronized void setLocales(LocaleSet locales) {
+ if (sSingleton == null || !sSingleton.isLocale(locales)) {
+ sSingleton = new LocaleUtils(locales);
+ }
+ }
+
+ public String getSortKey(String name, int nameStyle) {
+ return mUtils.getSortKey(name);
+ }
+
+ public int getBucketIndex(String name) {
+ return mUtils.getBucketIndex(name);
+ }
+
+ public int getBucketCount() {
+ return mUtils.getBucketCount();
+ }
+
+ public String getBucketLabel(int bucketIndex) {
+ return mUtils.getBucketLabel(bucketIndex);
+ }
+
+ public String getLabel(String name) {
+ return getBucketLabel(getBucketIndex(name));
+ }
+
+ public ArrayList<String> getLabels() {
+ return mUtils.getLabels();
+ }
+}
diff --git a/src/com/android/launcher3/settings/SettingsProvider.java b/src/com/android/launcher3/settings/SettingsProvider.java
index 0bcdc69ae..2f36fc422 100644
--- a/src/com/android/launcher3/settings/SettingsProvider.java
+++ b/src/com/android/launcher3/settings/SettingsProvider.java
@@ -44,6 +44,7 @@ public final class SettingsProvider {
public static final String SETTINGS_UI_GENERAL_ICONS_TEXT_FONT_FAMILY = "ui_general_icons_text_font";
public static final String SETTINGS_UI_GENERAL_ICONS_TEXT_FONT_STYLE = "ui_general_icons_text_font_style";
public static final String SETTINGS_UI_DRAWER_SORT_MODE = "ui_drawer_sort_mode";
+ public static final String SETTINGS_UI_DRAWER_TYPE = "ui_drawer_type";
public static SharedPreferences get(Context context) {
return context.getSharedPreferences(SETTINGS_KEY, Context.MODE_MULTI_PROCESS);