diff options
97 files changed, 1777 insertions, 465 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4e27e6f27..36fa4c190 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -20,6 +20,7 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.launcher3"> + <uses-sdk android:targetSdkVersion="19" android:minSdkVersion="16"/> <permission android:name="com.android.launcher3.permission.PRELOAD_WORKSPACE" diff --git a/proguard.flags b/proguard.flags index 9b59b217e..a922e919d 100644 --- a/proguard.flags +++ b/proguard.flags @@ -8,6 +8,9 @@ public void onClickAllAppsButton(android.view.View); public void onClickAppMarketButton(android.view.View); public void dismissFirstRunCling(android.view.View); + public void dismissMigrationClingCopyApps(android.view.View); + public void dismissMigrationClingUseDefault(android.view.View); + public void dismissMigrationWorkspaceCling(android.view.View); public void dismissWorkspaceCling(android.view.View); public void dismissAllAppsCling(android.view.View); } diff --git a/res/drawable-hdpi/on_boarding_welcome.png b/res/drawable-hdpi/on_boarding_welcome.png Binary files differnew file mode 100644 index 000000000..852a0cb13 --- /dev/null +++ b/res/drawable-hdpi/on_boarding_welcome.png diff --git a/res/drawable-mdpi/on_boarding_welcome.png b/res/drawable-mdpi/on_boarding_welcome.png Binary files differnew file mode 100644 index 000000000..1d12e8362 --- /dev/null +++ b/res/drawable-mdpi/on_boarding_welcome.png diff --git a/res/drawable-xhdpi/on_boarding_welcome.png b/res/drawable-xhdpi/on_boarding_welcome.png Binary files differnew file mode 100644 index 000000000..8c101e0db --- /dev/null +++ b/res/drawable-xhdpi/on_boarding_welcome.png diff --git a/res/layout-land/migration_cling.xml b/res/layout-land/migration_cling.xml new file mode 100644 index 000000000..343f43f1f --- /dev/null +++ b/res/layout-land/migration_cling.xml @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> +<com.android.launcher3.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="migration_landscape"> + <FrameLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:orientation="vertical"> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:gravity="center" + android:text="@string/first_run_cling_title" + android:textSize="42dp" + android:textColor="#FFffffff" /> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="0dp" + android:layout_gravity="center_horizontal" + android:src="@drawable/on_boarding_welcome" /> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:src="@drawable/cling_arrow_up" /> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="25dp" + android:layout_marginRight="25dp" + android:paddingLeft="25dp" + android:paddingRight="25dp" + android:paddingTop="20dp" + android:paddingBottom="20dp" + android:orientation="vertical" + android:background="@drawable/cling"> + <TextView + style="@style/ClingTitleText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/migration_cling_title" /> + <TextView + style="@style/ClingText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/migration_cling_description" /> + </LinearLayout> + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginLeft="25dp" + android:layout_marginRight="25dp" + android:layout_marginBottom="25dp" + android:orientation="vertical"> + <Button + style="@style/ClingButton" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/migration_cling_copy_apps" + android:onClick="dismissMigrationClingCopyApps" /> + <Button + style="@style/ClingButton" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/migration_cling_use_default" + android:onClick="dismissMigrationClingUseDefault" /> + </LinearLayout> + </FrameLayout> +</com.android.launcher3.Cling> diff --git a/res/layout-land/migration_workspace_cling.xml b/res/layout-land/migration_workspace_cling.xml new file mode 100644 index 000000000..bf7075b3d --- /dev/null +++ b/res/layout-land/migration_workspace_cling.xml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> +<com.android.launcher3.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="migration_workspace_landscape"> + <FrameLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <LinearLayout + android:id="@+id/migration_workspace_cling_bubble" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginStart="25dp" + android:layout_marginEnd="25dp" + android:orientation="vertical"> + <LinearLayout + android:paddingLeft="20dp" + android:paddingRight="20dp" + android:paddingTop="20dp" + android:paddingBottom="20dp" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:background="@drawable/cling"> + <TextView + style="@style/ClingTitleText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/workspace_cling_title" /> + <TextView + style="@style/ClingText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/workspace_cling_move_item" /> + </LinearLayout> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:src="@drawable/cling_arrow_down" /> + </LinearLayout> + + <Button + style="@style/ClingButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="15dp" + android:layout_marginRight="20dp" + android:layout_gravity="bottom|right" + android:onClick="dismissMigrationWorkspaceCling" /> + </FrameLayout> +</com.android.launcher3.Cling> diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml index 2b3cf81a4..74005348c 100644 --- a/res/layout-port/launcher.xml +++ b/res/layout-port/launcher.xml @@ -73,6 +73,16 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" /> + <include layout="@layout/migration_cling" + android:id="@+id/migration_cling" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> + <include layout="@layout/migration_workspace_cling" + android:id="@+id/migration_workspace_cling" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> <include layout="@layout/workspace_cling" android:id="@+id/workspace_cling" android:layout_width="match_parent" diff --git a/res/layout-port/migration_cling.xml b/res/layout-port/migration_cling.xml new file mode 100644 index 000000000..1bffe6c82 --- /dev/null +++ b/res/layout-port/migration_cling.xml @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> +<com.android.launcher3.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="migration_portrait"> + <FrameLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:orientation="vertical"> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:gravity="center" + android:text="@string/first_run_cling_title" + android:textSize="42dp" + android:textColor="#FFffffff" /> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="0dp" + android:layout_gravity="center_horizontal" + android:src="@drawable/on_boarding_welcome" /> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:src="@drawable/cling_arrow_up" /> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="25dp" + android:layout_marginRight="25dp" + android:paddingLeft="25dp" + android:paddingRight="25dp" + android:paddingTop="20dp" + android:paddingBottom="20dp" + android:orientation="vertical" + android:background="@drawable/cling"> + <TextView + style="@style/ClingTitleText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/migration_cling_title" /> + <TextView + style="@style/ClingText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/migration_cling_description" /> + </LinearLayout> + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginLeft="25dp" + android:layout_marginRight="25dp" + android:layout_marginBottom="25dp" + android:orientation="vertical"> + <Button + style="@style/ClingButton" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/migration_cling_copy_apps" + android:onClick="dismissMigrationClingCopyApps" /> + <Button + style="@style/ClingButton" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/migration_cling_use_default" + android:onClick="dismissMigrationClingUseDefault" /> + </LinearLayout> + </FrameLayout> +</com.android.launcher3.Cling> diff --git a/res/layout-port/migration_workspace_cling.xml b/res/layout-port/migration_workspace_cling.xml new file mode 100644 index 000000000..bc5e22ff1 --- /dev/null +++ b/res/layout-port/migration_workspace_cling.xml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> +<com.android.launcher3.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="migration_workspace_portrait"> + <FrameLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <LinearLayout + android:id="@+id/migration_workspace_cling_bubble" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginStart="25dp" + android:layout_marginEnd="25dp" + android:orientation="vertical"> + <LinearLayout + android:paddingLeft="20dp" + android:paddingRight="20dp" + android:paddingTop="20dp" + android:paddingBottom="20dp" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:background="@drawable/cling"> + <TextView + style="@style/ClingTitleText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/workspace_cling_title" /> + <TextView + style="@style/ClingText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/workspace_cling_move_item" /> + </LinearLayout> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:src="@drawable/cling_arrow_down" /> + </LinearLayout> + + <Button + style="@style/ClingButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="15dp" + android:layout_marginRight="20dp" + android:layout_gravity="bottom|right" + android:onClick="dismissMigrationWorkspaceCling" /> + </FrameLayout> +</com.android.launcher3.Cling> diff --git a/res/layout-port/search_bar.xml b/res/layout-port/search_bar.xml index 1c96ca380..e993f7847 100644 --- a/res/layout-port/search_bar.xml +++ b/res/layout-port/search_bar.xml @@ -22,7 +22,7 @@ android:background="@drawable/search_frame"> <!-- Global search icon --> <com.android.launcher3.HolographicLinearLayout - style="@style/SearchButton" + style="@style/SearchButton.WithPaddingStart" launcher:sourceImageViewId="@+id/search_button" android:id="@+id/search_button_container" android:layout_width="match_parent" @@ -31,7 +31,6 @@ android:layout_centerVertical="true" android:layout_alignParentStart="true" android:layout_toStartOf="@+id/voice_button_container" - android:paddingStart="8dp" android:onClick="onClickSearchButton" android:focusable="true" android:clickable="true" @@ -57,6 +56,7 @@ android:layout_centerVertical="true" android:layout_alignParentEnd="true" android:paddingEnd="8dp" + android:paddingRight="8dp" android:onClick="onClickVoiceButton" android:focusable="true" android:clickable="true" diff --git a/res/layout-sw720dp/search_bar.xml b/res/layout-sw720dp/search_bar.xml index 69dd61aa2..3276f3f17 100644 --- a/res/layout-sw720dp/search_bar.xml +++ b/res/layout-sw720dp/search_bar.xml @@ -20,7 +20,7 @@ android:background="@drawable/search_frame"> <!-- Global search icon --> <com.android.launcher3.HolographicLinearLayout - style="@style/SearchButton" + style="@style/SearchButton.WithPaddingStart" launcher:sourceImageViewId="@+id/search_button" android:id="@+id/search_button_container" android:layout_width="match_parent" @@ -29,7 +29,6 @@ android:layout_centerVertical="true" android:layout_alignParentStart="true" android:layout_toStartOf="@+id/voice_button_container" - android:paddingStart="8dp" android:onClick="onClickSearchButton" android:focusable="true" android:clickable="true" @@ -55,6 +54,7 @@ android:layout_centerVertical="true" android:layout_alignParentEnd="true" android:paddingEnd="8dp" + android:paddingRight="8dp" android:onClick="onClickVoiceButton" android:focusable="true" android:clickable="true" diff --git a/res/layout/apps_customize_widget.xml b/res/layout/apps_customize_widget.xml index f2d234266..7c98b4a9b 100644 --- a/res/layout/apps_customize_widget.xml +++ b/res/layout/apps_customize_widget.xml @@ -28,12 +28,13 @@ <!-- The preview of the widget or shortcut. --> <com.android.launcher3.PagedViewWidgetImageView android:id="@+id/widget_preview" + style="@style/PagedViewWidgetImageView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:paddingTop="@dimen/app_widget_preview_padding_top" - android:paddingStart="@dimen/app_widget_preview_padding_left" android:paddingEnd="@dimen/app_widget_preview_padding_right" + android:paddingRight="@dimen/app_widget_preview_padding_right" android:scaleType="matrix" android:background="@drawable/screenpanel" /> <LinearLayout diff --git a/res/mipmap-xxhdpi/on_boarding_welcome.png b/res/mipmap-xxhdpi/on_boarding_welcome.png Binary files differnew file mode 100644 index 000000000..7b11dea0e --- /dev/null +++ b/res/mipmap-xxhdpi/on_boarding_welcome.png diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 34a5568dc..2c55a04b5 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Tuisskerm %1$d van %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Programme-bladsy %1$d van %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Legstukke-bladsy %1$d van %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Welkom!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Welkom"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Maak jouself tuis."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Skep meer skerms vir programme en vouers"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopieer jou program-ikone"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Voer ikone en vouers vanaf jou ou tuisskerms in?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIEER IKONE"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"BEGIN VAN NUUTS AF"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organiseer jou spasie"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Raak en hou agtergrond om muurpapier, legstukke en instellings te bestuur."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Hier\'s \'n vouer"</string> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index c6420d56b..605eac12e 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"መነሻ ማያ ገጽ %1$d ከ%2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"የመተግበሪያዎች ገጽ %1$d ከ%2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"የመግብሮች ገጽ %1$d ከ%2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"እንኳን ደህና መጡ!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"እንኳን በደህና መጡ"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"ልክ እቤትዎ እንዳሉ ሆነው ዘና ይበሉ።"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"ለመተግበሪያዎች እና አቃፊዎች ተጨማሪ ማያ ገጾችን ይፍጠሩ"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"የመተግበሪያ አዶዎችዎን ይቅዱ"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"አዶዎች እና አቃፊዎች ከድሮው የመነሻ ማያ ገጾችዎ ይምጡ?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"አዶዎችን ይቅዱ"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"እንደ አዲስ ይጀምሩ"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"ቦታዎን ያደራጁ"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"የግድግዳ ወረቀት፣ ምግብሮችን እና ቅንብሮችን ለማቀናበር ጀርባውን ይንኩ እና ይያዙት።"</string> <string name="folder_cling_title" msgid="3894908818693254164">"አንድ አቃፊ እነሆ"</string> diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index aeca02532..e70aa36ce 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"الشاشة الرئيسية %1$d من %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"صفحة التطبيقات %1$d من %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"صفحة الأدوات %1$d من %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"مرحبًا!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"مرحبًا"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"تصرف على راحتك."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"إنشاء المزيد من الشاشات للتطبيقات والمجلدات"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"نسخ رموز التطبيقات"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"هل تريد استيراد رموز ومجلدات من الشاشات الرئيسية القديمة؟"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"نسخ الرموز"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"بداية جديدة"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"تنظيم مساحتك"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"المس مع الاستمرار الجزء الخلفي من صورة الشاشة لإدارة الخلفية والأدوات والإعدادات."</string> <string name="folder_cling_title" msgid="3894908818693254164">"إليك المجلد"</string> diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 2a2b72d29..27a1812f5 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -84,11 +84,20 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Начален екран %1$d от %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Страница с приложения %1$d от %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Страница с приспособления %1$d от %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Добре дошли!"</string> + <!-- no translation found for first_run_cling_title (2459738000155917941) --> + <skip /> <string name="first_run_cling_description" msgid="6447072552696253358">"Персонализиране и приспособяване."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Създаване на още екрани за приложения и папки"</string> + <!-- no translation found for migration_cling_title (9181776667882933767) --> + <skip /> + <!-- no translation found for migration_cling_description (2752413805582227644) --> + <skip /> + <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> + <skip /> + <!-- no translation found for migration_cling_use_default (2626475813981258626) --> + <skip /> <string name="workspace_cling_title" msgid="5626202359865825661">"Организиране на мястото ви"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Докоснете и задръжте фона, за да управлявате тапета, приспособленията и настройките."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Ето една папка"</string> diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index fa520ba67..ba3f418bf 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Pantalla d\'inici %1$d de %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Pàgina d\'aplicacions %1$d de %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Pàgina de widgets %1$d de %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Hola!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Us donem la benvinguda"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Personalitza la pantalla d\'inici"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Crea més pantalles per a aplicacions i carpetes"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copiar les icones d\'aplicació"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Importar icones i carpetes de pantalles d\'inici anteriors?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIA LES ICONES."</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"NOU COMENÇAMENT"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organitza el teu espai"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Toca i mantén premut el fons per gestionar el fons de pantalla, els widgets i la configuració."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Aquí hi ha una carpeta"</string> diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index fdd48458c..68ff5f75f 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Plocha %1$d z %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Stránka aplikací %1$d z %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Stránka widgetů %1$d z %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Vítejte!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Vítejte"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Udělejte si pohodlí."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Vytvořte několik obrazovek pro aplikace a složky"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Zkopírování ikon aplikací"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Chcete importovat ikony a složky ze svých starých ploch?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"ZKOPÍROVAT IKONY"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ZAČÍT S VÝCHOZÍM ROZVRŽENÍM"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organizace prostoru"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Chcete-li spravovat tapetu, widgety a nastavení, dotkněte se pozadí a přidržte je."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Toto je složka"</string> diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 9bf05f0b6..c145dce92 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Startskærm %1$d ud af %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Apps-side %1$d ud af %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Widgets-side %1$d ud af %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Velkommen"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Velkommen"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Føl dig hjemme."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Opret flere skærme til apps og mapper"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopiér dine appikoner"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Vil du importere ikoner og mapper fra gamle startskærme?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIÉR IKONER"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"START PÅ EN FRISK"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organiser din arbejdsplads"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Tryk på en baggrund, og hold fingeren nede for at administrere baggrunde, widgets og indstillinger."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Her kan du se en mappe"</string> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 4d70318bb..d13a492a7 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Startbildschirm %1$d von %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Apps-Seite %1$d von %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Widgets-Seite %1$d von %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Hallo!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Willkommen"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Gerät personalisieren"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Mehr Bildschirme für Apps und Ordner erstellen"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"App-Symbole kopieren"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Symbole und Ordner alter Startbildschirme importieren?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"Symbole kopieren"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"Standardübersicht verwenden"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Arbeitsbereich organisieren"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Hintergrund berühren und halten, um Hintergrund, Widgets und Einstellungen zu verwalten"</string> <string name="folder_cling_title" msgid="3894908818693254164">"Hier ist ein Ordner"</string> diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index cfb97ece0..7bdfa134a 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Αρχική οθόνη %1$d από %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Σελίδα εφαρμογών %1$d από %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Σελίδα γραφικών στοιχείων %1$d από %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Καλώς ορίσατε!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Καλώς ορίσατε"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Νιώστε σαν στο σπίτι σας."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Δημιουργία περισσότερων οθονών για εφαρμογές και φακέλους"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Αντιγραφή εικονιδίων εφαρμογών"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Εισαγωγή εικονιδίων και φακέλων από παλιές αρχικές οθόνες;"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"ΑΝΤΙΓΡΑΦΗ ΕΙΚΟΝΙΔΙΩΝ"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ΝΕΑ ΕΝΑΡΞΗ"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Οργανώστε το χώρο σας"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Αγγίξτε παρατεταμένα το φόντο για να διαχειριστείτε την ταπετσαρία, τα γραφικά στοιχεία και τις ρυθμίσεις."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Ορίστε ένας φάκελος"</string> diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 2ca832b33..f4f11dada 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Home screen %1$d of %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Apps page %1$d of %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Widgets page %1$d of %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Welcome!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Welcome"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Make yourself at home."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Create more screens for apps and folders"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copy your app icons"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Import icons and folders from your old Home screens?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPY ICONS"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"START AFRESH"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organise your space"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Touch & hold background to manage wallpaper, widgets and settings."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Here\'s a folder"</string> diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 2ca832b33..f4f11dada 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Home screen %1$d of %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Apps page %1$d of %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Widgets page %1$d of %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Welcome!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Welcome"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Make yourself at home."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Create more screens for apps and folders"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copy your app icons"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Import icons and folders from your old Home screens?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPY ICONS"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"START AFRESH"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organise your space"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Touch & hold background to manage wallpaper, widgets and settings."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Here\'s a folder"</string> diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index cec4c10a8..d585f366e 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Pantalla principal %1$d de %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Página de aplicaciones %1$d de %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Página de widgets %1$d de %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"¡Bienvenido/a!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Te damos la bienvenida"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Siéntete como en casa."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Crea más pantallas para aplicaciones y carpetas."</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copiar íconos de aplicaciones"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"¿Importar íconos y carpetas de pantallas princip. antiguas?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIAR ÍCONOS"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"EMPEZAR DE CERO"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organiza tu espacio"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Mantén presionado el fondo para administrar el fondo de pantalla, los widgets y la configuración."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Aquí tienes una carpeta"</string> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 73dae125f..8ca3e08d0 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Pantalla de inicio %1$d de %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Página de aplicaciones %1$d de %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Página de widgets %1$d de %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Te damos la bienvenida"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Te damos la bienvenida"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Personaliza tu pantalla de inicio."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Crea más pantallas para aplicaciones y carpetas"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copiar iconos de aplicaciones"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"¿Importar iconos y carpetas de pantallas de inicio antiguas?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIAR ICONOS"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"INICIAR ACTUALIZACIÓN"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organiza tu espacio"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Mantén pulsado el fondo para gestionar el fondo de pantalla, los widgets y los ajustes."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Esto es una carpeta"</string> diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index a68778a3e..4a0dd8e7b 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Avaekraan %1$d/%2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Rakenduste leht %1$d/%2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Vidinate leht %1$d/%2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Tere tulemast!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Tere tulemast"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Tundke end nagu kodus."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Looge rakenduste ja kaustade jaoks rohkem ekraanikuvasid"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopeerige rakenduste ikoonid"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Kas importida vanade avaekraanide ikoonid ja kaustad?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPEERI IKOONID"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ALUSTA ALGUSEST"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Korraldage oma ruumi"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Taustapildi, vidinate ja seadete haldamiseks puudutage tausta ning hoidke seda all."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Siin on kaust"</string> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index f118c1014..dc5f1864b 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"صفحه اصلی %1$d از %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"صفحه برنامهها %1$d از %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"صفحه ابزارکها %1$d از %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"خوش آمدید!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"خوش آمدید"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"راحت باشید."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"صفحات بیشتری را برای برنامهها و پوشهها ایجاد کنید"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"کپی کردن نمادهای برنامه شما"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"نمادها و پوشهها از صفحههای اصلی قدیمی شما وارد شوند؟"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"کپی نمادها"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"شروع تازه"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"فضای خود را سازماندهی کنید"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"برای مدیریت کاغذدیواری، ابزارکها و تنظیمات، پسزمینه را لمس کرده و نگهدارید."</string> <string name="folder_cling_title" msgid="3894908818693254164">"اینجا یک پوشه است"</string> diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 549804d60..9bf69f4ea 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Aloitusruutu %1$d/%2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Apps-sivu %1$d / %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Widgetit-sivu %1$d / %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Tervetuloa!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Tervetuloa"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Ole kuin kotonasi."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Luo lisää ruutuja sovelluksille ja kansioille"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopioi sovelluskuvakkeet"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Tuodaanko kuvakkeet ja kansiot vanhoista aloitusruuduista?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIOI KUVAKKEET"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ALOITA ALUSTA"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Järjestä tilasi"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Hallitse taustakuvaa, widgetejä ja asetuksia koskettamalla taustaa pitkään."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Tässä on kansio"</string> diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 97c03fe15..d0908ff9d 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Écran d\'accueil %1$d sur %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Page des applications : %1$d sur %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Page des widgets : %1$d sur %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Bienvenue!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Bienvenue"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Faites comme chez vous."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Créer plus d\'écrans pour les applications et les dossiers"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copier les icônes de vos applis"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Importer les icônes et dossiers des anciens écrans d\'accueil?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIER LES ICÔNES"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"DISPOSITION PAR DÉFAUT"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organiser son espace personnel"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Maintenez votre doigt sur l\'arrière-plan pour gérer les fonds d\'écran, les widgets et les paramètres."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Voici un dossier"</string> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 0f9d836c4..1340dd54d 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Écran d\'accueil %1$d sur %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Page des applications %1$d sur %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Page des widgets %1$d sur %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Bienvenue !"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Bienvenue"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Familiarisez-vous avec l\'écran d\'accueil."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Créez des écrans personnalisés pour vos applis et dossiers"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copier les icônes de vos applis"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Importer les icônes et dossiers des anciens écrans d\'accueil ?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIER LES ICÔNES"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"DISPOSITION PAR DÉFAUT"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organisez votre espace"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Appuyez de manière prolongée sur l\'arrière-plan pour gérer les fonds d\'écran, les widgets et les paramètres."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Voici un dossier"</string> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index e149e0fcc..67bfcc779 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"होम स्क्रीन %2$d में से %1$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"एप्लिकेशन पृष्ठ %2$d में से %1$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"विजेट पृष्ठ %2$d में से %1$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"स्वागत है!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"स्वागत है"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"जैसा चाहें वैसा उपयोग करें."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"एप्लिकेशन और फ़ोल्डर के लिए और अधिक स्क्रीन बनाएं"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"ऐप्स आइकन की प्रतिलिपि बनाएं"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"अपनी पुरानी होम स्क्रीन से आइकन और फ़ोल्डर आयात करें?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"आइकन की प्रतिलिपि बनाएं"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"फिर से शुरू करें"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"अपने स्थान को व्यवस्थित करें"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"वॉलपेपर, विजेट और सेटिंग प्रबंधित करने के लिए पृष्ठभूमि को स्पर्श करके रखें."</string> <string name="folder_cling_title" msgid="3894908818693254164">"यहां एक फ़ोल्डर है"</string> diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index c9b119fef..8d6b3fde9 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Početni zaslon %1$d od %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Stranica aplikacija %1$d od %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Stranica widgeta %1$d od %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Dobro došli!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Dobro došli"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Osjećajte se kao kod kuće."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Izradite više zaslona za aplikacije i mape"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopiranje ikona aplikacija"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Želite li uvesti ikone i mape sa starih početnih zaslona?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIRAJ IKONE"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"POKRENI NOVO"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organizirajte svoj prostor"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Dodirnite i držite pozadinu da biste upravljali pozadinskom slikom, widgetima i postavkama."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Evo mape"</string> diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 2b3377643..2c95329f4 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"%2$d/%1$d. kezdőképernyő"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"%2$d/%1$d. alkalmazásoldal"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"%2$d/%1$d. moduloldal"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Üdvözöljük!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Üdvözöljük!"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Varázsolja egyedivé készülékét."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Hozzon létre további képernyőket az alkalmazásoknak és mappáknak"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Alkalmazásikonok másolása"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Importálja ikonjait és mappáit régi kezdőképernyőiről?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"IKONOK MÁSOLÁSA"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"TELJESEN ÚJ"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Munkaterület rendezése"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Érintse meg és tartsa lenyomva a hátteret a háttérkép, modulok és beállítások kezeléséhez."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Itt egy mappa"</string> diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index eb7396b15..e18b7e25e 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Հիմնական էկրան %1$d` %2$d-ից"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Ծրագրերի էջերը՝ %1$d %2$d-ից"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Վիջեթների էջերը՝ %1$d %2$d-ից"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Բարի գալուստ:"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Բարի գալուստ"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Զգացեք ձեզ ինչպես տանը:"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Ստեղծեք նոր էկրաններ ծրագրերի և թղթապանակների համար"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Պատճենել ձեր ծրագրի պատկերակները"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Ներմուծե՞լ պատկերակները և թղթապանակները ձեր նախկին Հիմնական էկրանից"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"ՊԱՏՃԵՆԵԼ ՊԱՏԿԵՐԱԿՆԵՐԸ"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ՄԵԿՆԱՐԿԵԼ ԸՍՏ ԿԱՆԽԱԴՐՎԱԾԻ"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Կառավարեք ձեր տարածությունը"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Հպեք և պահեք հետնաշերտի վրա՝ պաստառները, վիջեթներն ու կարգավորումները կառավարելու համար:"</string> <string name="folder_cling_title" msgid="3894908818693254164">"Ահա մի թղթապանակ"</string> diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 87d163ac3..5b59a8b8a 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Layar utama %1$d dari %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Laman aplikasi %1$d dari %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Laman widget %1$d dari %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Selamat datang!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Selamat Datang"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Serasa di rumah sendiri."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Buat lebih banyak layar untuk aplikasi dan folder"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Salin ikon aplikasi Anda"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Impor ikon dan folder dari layar Utama lama Anda?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"IKON SALIN"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"MULAI DARI AWAL"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Kelola ruang Anda"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Sentuh lama latar belakang untuk mengelola wallpaper, widget, dan setelan."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Ini adalah folder"</string> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 92d79b040..52548be27 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Schermata Home %1$d di %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Pagina di applicazioni %1$d di %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Pagina di widget %1$d di %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Benvenuto!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Benvenuto"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Personalizza la schermata Home."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Creare più schermate per app e cartelle"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copia le icone delle tue app"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Importare icone e cartelle dalle schermate Home precedenti?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIA ICONE"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"RICOMINCIA"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organizza il tuo spazio"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Tocca e tieni premuto lo sfondo per gestire sfondi, widget e impostazioni."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Ecco una cartella"</string> diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index a348646d3..38d1cee35 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"מסך דף הבית %1$d מתוך %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"דף אפליקציות %1$d מתוך %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"דף רכיבי ווידג\'ט %1$d מתוך %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"ברוך הבא!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"ברוכים הבאים"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"להרגיש בבית."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"צור מסכים נוספים עבור אפליקציות ותיקיות"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"העתקת סמלי האפליקציות שלך"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"האם לייבא סמלים ותיקיות ממסכי דף הבית הישנים שלך?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"העתק סמלים"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"התחל דף חדש"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"ארגן את אזור העבודה שלך"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"גע נגיעה רציפה ברקע כדי לנהל את הטפט, רכיבי הווידג\'ט וההגדרות."</string> <string name="folder_cling_title" msgid="3894908818693254164">"הנה תיקייה"</string> diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 1de0be5c3..63ac20e1d 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -84,11 +84,20 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"ホーム画面: %1$d/%2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"アプリの%1$d/%2$dページ"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"ウィジェットの%1$d/%2$dページ"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"ようこそ!"</string> + <!-- no translation found for first_run_cling_title (2459738000155917941) --> + <skip /> <string name="first_run_cling_description" msgid="6447072552696253358">"ホームをカスタマイズします。"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"アプリとフォルダの画面をもっと作成します"</string> + <!-- no translation found for migration_cling_title (9181776667882933767) --> + <skip /> + <!-- no translation found for migration_cling_description (2752413805582227644) --> + <skip /> + <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> + <skip /> + <!-- no translation found for migration_cling_use_default (2626475813981258626) --> + <skip /> <string name="workspace_cling_title" msgid="5626202359865825661">"スペースを整理"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"壁紙、ウィジェット、設定を管理するには、背景を押し続けます。"</string> <string name="folder_cling_title" msgid="3894908818693254164">"これがフォルダです"</string> diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index c004f07f1..e55ae844a 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"მთავარი ეკრანი %1$d, %2$d-დან"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"აპების გვერდი %1$d, %2$d-დან"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"ვიჯეტების გვერდი %1$d, %2$d-დან"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"კეთილი იყოს თქვენი მობრძანება!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"მოგესალმებით"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"იგრძენით თავი საკუთარ სახლში"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"აპებისა და საქაღალდეებისთვის კიდევ ერთი ეკრანის შექმნა"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"თქვენი აპის ხატულების კოპირება"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"გსურთ ძვლი მთავარი ეკრანიდან ხატულების და საქაღ. იმპორტი?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"ხატულების კოპირება"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"სტანდარტული განლაგება"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"თქვენი სივრცის ორგანიზება"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"თუ გსურთ ფონების, ვიჯეტების და პარამეტრების მართვა, შეეხეთ და არ აუშვათ ფონს."</string> <string name="folder_cling_title" msgid="3894908818693254164">"აი, საქაღალდე"</string> diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index 84781bcc2..a15ef21cb 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"អេក្រង់ដើម %1$d នៃ %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"ទំព័រកម្មវិធី %1$d នៃ %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"ទំព័រធាតុក្រាហ្វិក %1$d នៃ %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"សូមស្វាគមន៍!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"សូមស្វាគមន៍"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"ធ្វើដោយខ្លួនឯងនៅលើអេក្រង់ដើម។"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"បង្កើតអេក្រង់ច្រើនសម្រាប់កម្មវិធី និងថតឯកសារ"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"ចម្លងរូបតំណាងកម្មវិធីរបស់អ្នក"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"នាំចូលរូបតំណាង និងថតពីអេក្រង់ដើមចាស់របស់អ្នក?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"រូបតំណាងច្បាប់ចម្លង"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ចាប់ផ្ដើមធ្វើឲ្យស្រស់"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"រៀបចំចន្លោះរបស់អ្នក"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"ប៉ះ & សង្កត់លើផ្ទៃខាងក្រោម ដើម្បីគ្រប់គ្រងផ្ទាំងរូបភាព, ធាតុក្រាហ្វិក និងការកំណត់។"</string> <string name="folder_cling_title" msgid="3894908818693254164">"នេះជាថត"</string> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 59f2103d8..942f30bbb 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"홈 화면 %1$d/%2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"앱 페이지 %1$d/%2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"위젯 페이지 %1$d/%2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"환영합니다!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"환영합니다."</string> <string name="first_run_cling_description" msgid="6447072552696253358">"편리한 사용 환경을 만드세요."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"앱 및 폴더를 표시할 화면 더 만들기"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"앱 아이콘 복사"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"이전 메인 스크린에서 아이콘과 폴더를 가져오시겠습니까?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"아이콘 복사"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"새로 시작"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"공간 관리하기"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"배경화면, 위젯, 설정을 관리하려면 백그라운드를 길게 터치합니다."</string> <string name="folder_cling_title" msgid="3894908818693254164">"폴더"</string> diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index ad2feeab4..fbc7bf063 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"ໜ້າຈໍຫຼັກ %1$d ໃນ %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"ແອັບຯໜ້າ %1$d ໃນ %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"ວິດເຈັດໜ້າ %1$d ໃນ %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"ຍິນດີຕ້ອນຮັບ!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"ຍິນດີຕ້ອນຮັບ"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"ເຮັດໂຕໃຫ້ຄືຢູ່ໃນບ້ານ"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"ສ້າງຈໍເພີ່ມເຕີມສຳລັບແອັບຯ ແລະໂຟນເດີ"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"ສຳເນົາໄອຄອນແອັບຯຂອງທ່ານ"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"ນຳເຂົ້າໄອຄອນ ແລະ ໂຟນເດີຈາກໂຮມສະກຣີນອັນເກົ່າຂອງທ່ານບໍ່?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"ສຳເນົາໄອຄອນ"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ເລີ່ມຕົ້ນໃໝ່"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"ຈັດການພື້ນທີ່ຂອງທ່ານ"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"ແຕະຄ້າງໄວ້ທີ່ພາບພື້ນຫຼັງເພື່ອຈັດການພາບພື້ນຫຼັງ, ວິດເຈັດແລະການຕັ້ງຄ່າ."</string> <string name="folder_cling_title" msgid="3894908818693254164">"ນີ້ແມ່ນໂຟນເດີ່"</string> diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 8b1f39603..482b7a410 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"%1$d pagrindinis ekranas iš %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"%1$d programų psl. iš %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"%1$d valdiklių psl. iš %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Sveiki!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Sveiki"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Jauskitės kaip namie."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Sukurkite daugiau programų ir aplankų ekrano kopijų"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Programų piktogramų kopij."</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Importuoti piktogramas ir aplankus iš senų pagr. ekranų?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIJUOTI PIKTOGRAMAS"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"PRADĖTI IŠ NAUJO"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Tvarkykite savo vietą"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Palieskite ir laikykite foną, jei norite tvarkyti ekrano foną, valdiklius ir nustatymus."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Štai aplankas"</string> diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 964d84d13..2b2dba8d3 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Sākuma ekrāns: %1$d no %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"%1$d. lietotņu lapa no %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"%1$d. logrīku lapa no %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Laipni lūdzam!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Laipni lūdzam!"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Informācija par pamatfunkcijām"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Izveidojiet vairāk ekrānu lietotnēm un mapēm."</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Lietotņu ikonu kopēšana"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Vai importēt ikonas, mapes no iepriekšējiem sākuma ekrāniem?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPĒT IKONAS"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"SĀKT NO SĀKUMA"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Kārtojiet savu darbvietu"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Pieskarieties fonam un turiet to, lai pārvaldītu fona tapeti, logrīkus un iestatījumus."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Lūk, mape!"</string> diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index bed237a83..9f489cfdf 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"%2$d-н Нүүр дэлгэц %1$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"%2$d-н %1$d апп хуудас"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"%2$d-н %1$d виджет хуудас"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Тавтай морилно уу!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Тавтай морилно уу"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Гэртээ байгаа мэт тухлаарай."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Апп болон фолдеруудад зориулан өөр дэлгэцүүд үүсгээрэй"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Таны апп дүрсүүдийг хуулах"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Таны хуучин Үндсэн дэлгэц дээрх дүрсүүдийг импорт хийх үү?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"ДҮРСҮҮДИЙГ ХУУЛАХ"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ШИНЭЭР ЭХЛЭХ"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Өөрийнхөө зайг тохируулаарай"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Арын дэвсгэр дээр хүрээд & дарснаар ханын зураг, виджет болон тохиргоог өөрчилж болно."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Фолдер энд байна"</string> diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 3558b2510..2aee20405 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Skrin Laman Utama %1$d daripada %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Halaman apl %1$d daripada %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Halaman widget %1$d daripada %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Selamat datang!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Selamat datang"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Buat seperti berada di rumah sendiri."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Buat lebih banyak skrin untuk apl dan folder"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Salin ikon apl anda"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Import ikon dan folder dari skrin Laman Utama anda?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"SALIN IKON"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"MULAKAN YANG BAHARU"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Susun ruang anda"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Sentuh & tahan latar belakang untuk mengurus kertas dinding, widget dan tetapan."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Ini ada folder"</string> diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 13d87591e..4703291eb 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Startside %1$d av %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Appside %1$d av %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Modulside %1$d av %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Velkommen!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Velkommen"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Føl deg som hjemme."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Opprett flere sider for apper og mapper"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopiér appikonene dine"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Vil du importere ikoner og mapper fra de gamle startsidene?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIÉR IKONENE"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"START PÅ NYTT"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organiser plassen din"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Trykk og hold på bakgrunnen for å administrere bakgrunnen, moduler og innstillinger."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Dette er en mappe"</string> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index aa035a09a..658f37912 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Startscherm %1$d van %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"App-pagina %1$d van %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Widgetpagina %1$d van %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Welkom!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Welkom"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Personaliseer uw startscherm."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Meer schermen maken voor apps en mappen"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Uw app-pictogrammen kopiëren"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Pictogrammen en mappen importeren uit uw oude startschermen?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"PICTOGRAMMEN KOPIËREN"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"OPNIEUW BEGINNEN"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Uw ruimte indelen"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Blijf de achtergrond aanraken om de achtergrond, widgets en instellingen te beheren."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Dit is een map"</string> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 9eade81a9..f8a34a480 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Ekran główny %1$d z %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Strona aplikacji: %1$d z %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Strona widżetów: %1$d z %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Witamy"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Witamy"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Poczuj się jak u siebie."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Dodaj więcej ekranów na aplikacje i foldery"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopiuj ikony aplikacji"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Zaimportować ikony i foldery ze starych ekranów głównych?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIUJ IKONY"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ZACZNIJ OD NOWA"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Uporządkuj obszar roboczy"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Kliknij i przytrzymaj tło, by zmienić tapetę, widżety lub ustawienia."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Tu jest folder"</string> diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 4c9401dc3..5490a4fdd 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Ecrã principal %1$d de %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Página de aplicações %1$d de %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Página de widgets %1$d de %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Bem-vindo(a)!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Bem-vindo(a)"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Sinta-se em casa."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Crie mais ecrãs para aplicações e pastas"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copiar ícones das aplicações"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Importar ícones e pastas dos ecrãs principais antigos?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIAR ÍCONES"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"COMEÇAR DO INÍCIO"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organizar o seu espaço"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Toque sem soltar no fundo para gerir a imagem de fundo, os widgets e as definições."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Eis uma pasta"</string> diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index d82d9ea1d..2bf38e546 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Tela inicial %1$d de %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Página de aplicativos, %1$d de %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Página de widgets, %1$d de %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Bem-vindo!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Bem-vindo"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Fique à vontade."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Crie mais telas para aplicativos e pastas"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copiar ícones de aplicativos"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Importar ícones e pastas de suas telas iniciais antigas?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIAR ÍCONES"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"COMEÇAR DO ZERO"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organize seu espaço"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Toque e mantenha pressionada a tela de fundo para gerenciar o plano de fundo, os widgets e as configurações."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Aqui está uma pasta"</string> diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml index 246553467..ce6093f15 100644 --- a/res/values-rm/strings.xml +++ b/res/values-rm/strings.xml @@ -148,7 +148,7 @@ <skip /> <!-- no translation found for apps_customize_widgets_scroll_format (3106209519974971521) --> <skip /> - <!-- no translation found for first_run_cling_title (7257389003637362144) --> + <!-- no translation found for first_run_cling_title (2459738000155917941) --> <skip /> <!-- no translation found for first_run_cling_description (6447072552696253358) --> <skip /> @@ -156,6 +156,14 @@ <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 migration_cling_title (9181776667882933767) --> + <skip /> + <!-- no translation found for migration_cling_description (2752413805582227644) --> + <skip /> + <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> + <skip /> + <!-- no translation found for migration_cling_use_default (2626475813981258626) --> + <skip /> <!-- no translation found for workspace_cling_title (5626202359865825661) --> <skip /> <!-- no translation found for workspace_cling_move_item (528201129978005352) --> diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 016dd918c..a23a0cd2c 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Ecranul de pornire %1$d din %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Pagina de aplicații %1$d din %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Pagina de widgeturi %1$d din %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Bun venit!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Bun venit"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Simțiți-vă ca acasă."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Creați mai multe ecrane pentru aplicații și dosare"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Copiați pictogr. aplicațiilor"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Import. pictogr. și dosare de pe ecranele de pornire anter.?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIAȚI PICTOGRAMELE"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"REÎNCEPEȚI"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organizați-vă spațiul"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Atingeți lung fundalul pentru a gestiona imaginea de fundal, widgeturile și setările."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Iată un dosar"</string> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 8d0984da2..46c84af6c 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -84,11 +84,20 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Главные экран %1$d из %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Приложения: стр. %1$d из %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Виджеты: стр. %1$d из %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Добро пожаловать!"</string> + <!-- no translation found for first_run_cling_title (2459738000155917941) --> + <skip /> <string name="first_run_cling_description" msgid="6447072552696253358">"Будьте как дома"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Создание дополнительных экранов для приложений и папок"</string> + <!-- no translation found for migration_cling_title (9181776667882933767) --> + <skip /> + <!-- no translation found for migration_cling_description (2752413805582227644) --> + <skip /> + <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> + <skip /> + <!-- no translation found for migration_cling_use_default (2626475813981258626) --> + <skip /> <string name="workspace_cling_title" msgid="5626202359865825661">"Организация рабочего пространства"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Чтобы перейти к управлению обоями, виджетами и настройками, нажмите на фоновое изображение и удерживайте его."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Это папка"</string> diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 3a4b03348..64de07f5e 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -84,11 +84,20 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Plocha %1$d z %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Stránka aplikácií %1$d z %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Stránka miniaplikácií %1$d z %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Vitajte!"</string> + <!-- no translation found for first_run_cling_title (2459738000155917941) --> + <skip /> <string name="first_run_cling_description" msgid="6447072552696253358">"Cíťte sa tu ako doma."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Vytvorte viac obrazoviek pre aplikácie a priečinky"</string> + <!-- no translation found for migration_cling_title (9181776667882933767) --> + <skip /> + <!-- no translation found for migration_cling_description (2752413805582227644) --> + <skip /> + <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> + <skip /> + <!-- no translation found for migration_cling_use_default (2626475813981258626) --> + <skip /> <string name="workspace_cling_title" msgid="5626202359865825661">"Usporiadajte svoj priestor"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Ak chcete spravovať tapetu, miniaplikácie a nastavenia, dotknite sa pozadia a podržte."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Tu je priečinok"</string> diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 68086dbc1..f6d755643 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Začetni zaslon %1$d od %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Stran aplikacij %1$d od %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Stran pripomočkov %1$d od %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Pozdravljeni!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Pozdravljeni"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Počutite se kot doma."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Ustvarite več zaslonov za aplikacije in mape"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopiranje ikon aplikacij"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Želite uvoziti ikone in mape iz starih začetnih zaslonov?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIRAJ IKONE"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"SVEŽ ZAČETEK"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organizirajte svoj prostor"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Če želite upravljati ozadje, pripomočke in nastavitve, se dotaknite ozadja in ga pridržite."</string> <string name="folder_cling_title" msgid="3894908818693254164">"To je mapa"</string> diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 6ab175069..0d35b2f0c 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"%1$d. почетни екран од %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"%1$d. страница апликација од %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"%1$d. страница виџета од %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Добро дошли!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Добро дошли"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Осећајте се као код куће."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Направите још екрана за апликације и директоријуме"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Копирајте иконе апликација"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Увести иконе и директоријуме са старих почетних екрана?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"КОПИРАЈТЕ ИКОНЕ"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ПОЧНИТЕ ИСПОЧЕТКА"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Организујте простор"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Додирните позадину и задржите да бисте управљали позадином, виџетима и подешавањима."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Ево једног директоријума"</string> diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index c6dcb18ff..3fa6a5e03 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -84,15 +84,19 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Startskärmen %1$d av %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Appsida %1$d av %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Widget-sida %1$d av %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Välkommen!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Välkommen"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Känn dig som hemma."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Skapa fler skärmar för appar och mappar"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopiera appikoner"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Vill du importera ikoner och mappar från gamla startskärmar?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIERA IKONER"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"BÖRJA OM"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organisera ditt utrymme"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Tryck länge på bakgrunden om du vill hantera bakgrundsbilder, widgetar och inställningar."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Det här är en mapp"</string> - <string name="folder_cling_create_folder" msgid="6158215559475836131">"Om du vill skapa en till mapp av det här slaget trycker du länge på en app och drar den sedan ovanpå en annan."</string> + <string name="folder_cling_create_folder" msgid="6158215559475836131">"Skapa en till mapp av det här slaget genom att trycka och hålla ned en app och sedan dra den ovanpå en annan."</string> <string name="cling_dismiss" msgid="8962359497601507581">"OK"</string> <string name="folder_opened" msgid="94695026776264709">"Mappen är öppen, <xliff:g id="WIDTH">%1$d</xliff:g> gånger <xliff:g id="HEIGHT">%2$d</xliff:g>"</string> <string name="folder_tap_to_close" msgid="1884479294466410023">"Tryck om du vill stänga mappen"</string> diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index e0ae27924..fca5a47e9 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -86,11 +86,15 @@ <skip /> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Ukurasa wa programu %1$d ya %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Ukurasa wa wijeti %1$d ya %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Karibu!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Karibu"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Jisikie huru."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Unda skrini zaidi za programu na folda"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Nakili ikoni za programu yako"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Je, ungependa kuingiza ikoni na folda kutoka kwa skrini zako za Mwanzo za zamani?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"NAKILI IKONI"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ANZA UPYA"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Panga nafasi yako"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Gusa na ushikilie mandharinyuma ili udhibiti mandhari, wijeti, na mipangilio."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Hii ni folda"</string> diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 0a9ea784d..70c2134e9 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"หน้าจอหลัก %1$d จาก %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"แอปหน้า %1$d จาก %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"วิดเจ็ตหน้า %1$d จาก %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"ยินดีต้อนรับ!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"ยินดีต้อนรับ"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"ทำตัวตามสบาย"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"สร้างหน้าจอเพิ่มสำหรับแอปและโฟลเดอร์"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"คัดลอกไอคอนแอปของคุณ"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"นำเข้าไอคอนและโฟลเดอร์จากหน้าจอหลักเก่าของคุณ"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"คัดลอกไอคอน"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"เริ่มต้นใหม่"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"จัดระเบียบพื้นที่ของคุณ"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"แตะพื้นหลังค้างไว้เพื่อจัดการวอลเปเปอร์ วิดเจ็ต และการตั้งค่า"</string> <string name="folder_cling_title" msgid="3894908818693254164">"นี่คือโฟลเดอร์"</string> diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 41de1c02c..190565e5f 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Home screen %1$d ng %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Pahina ng apps %1$d ng %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Pahina ng widget %1$d ng %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Maligayang pagdating!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Maligayang Pagdating"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Gawing kumportable ang iyong sarili."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Gumawa ng higit pang mga screen para sa apps at mga folder"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopyahin ang mga icon ng app"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"I-import ang icon at folder mula sa luma mong Home screen?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPYAHIN ANG MGA ICON"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"MAGSIMULA NANG BAGO"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Ayusin ang iyong espasyo"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Pindutin nang matagal ang background upang pamahalaan ang wallpaper, mga widget at setting"</string> <string name="folder_cling_title" msgid="3894908818693254164">"Narito ang isang folder"</string> diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index e77d76b8e..bb8f6be46 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -84,11 +84,20 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Ana ekran %1$d / %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Uygulama sayfası %1$d / %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Widget sayfası %1$d / %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Hoş geldiniz!"</string> + <!-- no translation found for first_run_cling_title (2459738000155917941) --> + <skip /> <string name="first_run_cling_description" msgid="6447072552696253358">"Rahatınıza bakın."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Uygulamalar ve klasörler için daha fazla ekran oluşturun"</string> + <!-- no translation found for migration_cling_title (9181776667882933767) --> + <skip /> + <!-- no translation found for migration_cling_description (2752413805582227644) --> + <skip /> + <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> + <skip /> + <!-- no translation found for migration_cling_use_default (2626475813981258626) --> + <skip /> <string name="workspace_cling_title" msgid="5626202359865825661">"Alanınızı düzenleyin"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Duvar kağıdını, widget\'ları ve ayarları yönetmek için arka plana uzun basın."</string> <string name="folder_cling_title" msgid="3894908818693254164">"İşte bir klasör"</string> diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 5a32a479e..8ceb8e8bd 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Головний екран %1$d з %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Сторінка програм %1$d з %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Сторінка віджетів %1$d з %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Вітаємо!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Вітаємо"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Будьте як удома."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Створюйте нові екрани для програм і папок"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Копіювати значки програм"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Імпортувати значки та папки зі старих головних екранів?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"КОПІЮВАТИ ЗНАЧКИ"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ПАНЕЛЬ ЗАПУСКУ ЗА УМОВЧАННЯМ"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Організуйте робочий простір"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Натисніть і утримуйте фон, щоб керувати фоновим малюнком, віджетами та налаштуваннями."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Це папка"</string> diff --git a/res/values-v17/styles.xml b/res/values-v17/styles.xml new file mode 100644 index 000000000..71c4bfa66 --- /dev/null +++ b/res/values-v17/styles.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <style name="PagedViewWidgetImageView"> + <item name="android:paddingStart">@dimen/app_widget_preview_padding_left</item> + </style> + <style name="SearchButton.WithPaddingStart"> + <item name="android:paddingStart">8dp</item> + </style> +</resources> diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 4c15bc80e..abe17c2bc 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Màn hình chính %1$d / %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Trang ứng dụng %1$d / %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Trang tiện ích con %1$d / %2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Xin chào!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Chào mừng"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Tự nhiên như ở nhà."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Tạo thêm màn hình cho ứng dụng và thư mục"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Sao chép biểu tượng ứng dụng của bạn"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Nhập biểu tượng và thư mục từ Màn hình chính cũ của bạn?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"BIỂU TƯỢNG SAO CHÉP"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"BẮT ĐẦU LÀM MỚI"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Sắp xếp không gian của bạn"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Chạm và giữ nền để quản lý hình nền, tiện ích con và cài đặt."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Đây là một thư mục"</string> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 8a6d9c64c..f01b69573 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -84,11 +84,20 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"主屏幕:第%1$d屏,共%2$d屏"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"应用:第%1$d页,共%2$d页"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"小部件:第%1$d页,共%2$d页"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"欢迎!"</string> + <!-- no translation found for first_run_cling_title (2459738000155917941) --> + <skip /> <string name="first_run_cling_description" msgid="6447072552696253358">"您的主屏幕您做主。"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"添加更多屏幕来容纳应用和文件夹"</string> + <!-- no translation found for migration_cling_title (9181776667882933767) --> + <skip /> + <!-- no translation found for migration_cling_description (2752413805582227644) --> + <skip /> + <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> + <skip /> + <!-- no translation found for migration_cling_use_default (2626475813981258626) --> + <skip /> <string name="workspace_cling_title" msgid="5626202359865825661">"整理您的空间"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"触摸并按住背景,即可管理壁纸、小部件和设置。"</string> <string name="folder_cling_title" msgid="3894908818693254164">"这是一个文件夹"</string> diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 9d1e30579..c12c03f0e 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"主畫面 %1$d,共 %2$d 個"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"第 %1$d 個應用程式頁面,共 %2$d 頁"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"第 %1$d 個小工具頁面,共 %2$d 頁"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"歡迎!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"歡迎"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"自訂主畫面。"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"建立更多應用程式和資料夾的畫面"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"複製您的應用程式圖示"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"要從舊主畫面匯入圖示和資料夾嗎?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"複製圖示"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"重新開始"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"管理您的空間"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"輕觸並按住背景,即可管理桌布、小工具和設定。"</string> <string name="folder_cling_title" msgid="3894908818693254164">"資料夾顯示如下"</string> diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 6d82cf80e..b0cc1e831 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"主螢幕:第 %1$d 頁,共 %2$d 頁"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"應用程式:第 %1$d 頁,共 %2$d 頁"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"小工具:第 %1$d 頁,共 %2$d 頁"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"歡迎使用!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"歡迎使用"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"主螢幕由您作主。"</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"建立更多畫面容納應用程式和資料夾"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"複製您的應用程式圖示"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"要從舊的主螢幕匯入圖示和資料夾嗎?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"複製圖示"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"重新開始"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"管理您的空間"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"輕觸並按住背景,即可管理桌布、小工具和設定。"</string> <string name="folder_cling_title" msgid="3894908818693254164">"資料夾顯示如下"</string> diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 2cde50a32..57bc7d4db 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -84,11 +84,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Isikrini sasekhaya esingu-%1$d se-%2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Ikhasi lezinhlelo zokusebenza elingu-%1$d le-%2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Ikhasi lamawijethi elingu-%1$d le-%2$d"</string> - <string name="first_run_cling_title" msgid="7257389003637362144">"Siyakwamukela!"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Siyakwamukela"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Zizwe usekhaya."</string> <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Dala izikrini eziningi zezinhlelo zokusebenza namafolda"</string> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopisha izithonjana zakho zohlelo lokusebenza"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Ngenisa izithonjana namafolda kusukela kuzikrini zakho ezindala zasekhaya?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPISHA IZITHONJANA"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"QALISA KABUSHA"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Hlela isikhala sakho"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Thinta uphinde ubambe okungemuva ukuze uphathe isithombe sangemuva, amawijethi nezilungiselelo."</string> <string name="folder_cling_title" msgid="3894908818693254164">"Nayi ifolda"</string> diff --git a/res/values/config.xml b/res/values/config.xml index 2a0821662..b512ffe67 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -94,4 +94,7 @@ filter the activities shown in the launcher. Can be empty. --> <string name="app_filter_class" translatable="false"></string> + <!-- Name of a subclass of com.android.launcher3.BuildInfo used to + get build information. Can be empty. --> + <string name="build_info_class" translatable="false"></string> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index 361be7b3c..66bd36fb0 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -207,7 +207,7 @@ s --> <!-- Clings --> <!-- The title text for the workspace cling [CHAR_LIMIT=30] --> - <string name="first_run_cling_title">Welcome!</string> + <string name="first_run_cling_title">Welcome</string> <!-- The description of how to use the workspace [CHAR_LIMIT=60] --> <string name="first_run_cling_description">Make yourself at home.</string> <!-- The description of how to use the workspace [CHAR_LIMIT=60] --> @@ -216,6 +216,14 @@ s --> <string name="first_run_cling_search_bar_hint"></string> <!-- The description of how to use the workspace [CHAR_LIMIT=60] --> <string name="first_run_cling_create_screens_hint">Create more screens for apps and folders</string> + <!-- The title text for the migration cling [CHAR_LIMIT=30] --> + <string name="migration_cling_title">Copy your app icons</string> + <!-- The description of what migration does [CHAR_LIMIT=70] --> + <string name="migration_cling_description">Import icons and folders from your old Home screens?</string> + <!-- The description of the button to migrate apps from another launcher [CHAR_LIMIT=30] --> + <string name="migration_cling_copy_apps">COPY ICONS</string> + <!-- The description of the button to use the default launcher layout [CHAR_LIMIT=30] --> + <string name="migration_cling_use_default">START FRESH</string> <!-- The title text for the workspace cling [CHAR_LIMIT=30] --> <string name="workspace_cling_title">Organize your space</string> <!-- The description of how to use the workspace [CHAR_LIMIT=70] --> diff --git a/res/values/styles.xml b/res/values/styles.xml index ed531f03a..c9834f8b5 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -155,4 +155,10 @@ </style> <style name="CustomClingText"> </style> + <style name="PagedViewWidgetImageView"> + <item name="android:paddingLeft">@dimen/app_widget_preview_padding_left</item> + </style> + <style name="SearchButton.WithPaddingStart"> + <item name="android:paddingLeft">8dp</item> + </style> </resources> diff --git a/src/com/android/launcher3/Alarm.java b/src/com/android/launcher3/Alarm.java index 91f9bd091..e9f1fd963 100644 --- a/src/com/android/launcher3/Alarm.java +++ b/src/com/android/launcher3/Alarm.java @@ -78,7 +78,3 @@ public class Alarm implements Runnable{ return mAlarmPending; } } - -interface OnAlarmListener { - public void onAlarm(Alarm alarm); -} diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index 2865bc5d5..37cdb9e13 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -199,8 +199,6 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen private AccelerateInterpolator mAlphaInterpolator = new AccelerateInterpolator(0.9f); private DecelerateInterpolator mLeftScreenAlphaInterpolator = new DecelerateInterpolator(4); - public static boolean DISABLE_ALL_APPS = false; - // Previews & outlines ArrayList<AppsCustomizeAsyncTask> mRunningTasks; private static final int sPageSleepDelay = 200; @@ -427,7 +425,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); if (!isDataReady()) { - if ((DISABLE_ALL_APPS || !mApps.isEmpty()) && !mWidgets.isEmpty()) { + if ((LauncherAppState.isDisableAllApps() || !mApps.isEmpty()) && !mWidgets.isEmpty()) { setDataIsReady(); setMeasuredDimension(width, height); onDataReady(width, height); @@ -1558,7 +1556,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } public void setApps(ArrayList<AppInfo> list) { - if (!DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { mApps = list; Collections.sort(mApps, LauncherModel.getAppNameComparator()); updatePageCountsAndInvalidateData(); @@ -1576,7 +1574,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } } public void addApps(ArrayList<AppInfo> list) { - if (!DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { addAppsWithoutInvalidate(list); updatePageCountsAndInvalidateData(); } @@ -1604,7 +1602,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } } public void removeApps(ArrayList<AppInfo> appInfos) { - if (!DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { removeAppsWithoutInvalidate(appInfos); updatePageCountsAndInvalidateData(); } @@ -1613,7 +1611,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen // 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 (!DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { removeAppsWithoutInvalidate(list); addAppsWithoutInvalidate(list); updatePageCountsAndInvalidateData(); @@ -1727,4 +1725,4 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen return String.format(getContext().getString(stringId), page + 1, count); } -} +}
\ No newline at end of file diff --git a/src/com/android/launcher3/AppsCustomizeTabHost.java b/src/com/android/launcher3/AppsCustomizeTabHost.java index 697bd7ecf..bb7f045ce 100644 --- a/src/com/android/launcher3/AppsCustomizeTabHost.java +++ b/src/com/android/launcher3/AppsCustomizeTabHost.java @@ -407,7 +407,7 @@ public class AppsCustomizeTabHost extends TabHost implements LauncherTransitiona } // Dismiss the workspace cling - l.dismissWorkspaceCling(null); + l.getLauncherClings().dismissWorkspaceCling(null); } @Override diff --git a/src/com/android/launcher3/BuildInfo.java b/src/com/android/launcher3/BuildInfo.java new file mode 100644 index 000000000..b49ee0d9b --- /dev/null +++ b/src/com/android/launcher3/BuildInfo.java @@ -0,0 +1,32 @@ +package com.android.launcher3; + +import android.text.TextUtils; +import android.util.Log; + +public class BuildInfo { + private static final boolean DBG = false; + private static final String TAG = "BuildInfo"; + + public boolean isDogfoodBuild() { + return false; + } + + public static BuildInfo loadByName(String className) { + if (TextUtils.isEmpty(className)) return new BuildInfo(); + + if (DBG) Log.d(TAG, "Loading BuildInfo: " + className); + try { + Class<?> cls = Class.forName(className); + return (BuildInfo) cls.newInstance(); + } catch (ClassNotFoundException e) { + Log.e(TAG, "Bad BuildInfo class", e); + } catch (InstantiationException e) { + Log.e(TAG, "Bad BuildInfo class", e); + } catch (IllegalAccessException e) { + Log.e(TAG, "Bad BuildInfo class", e); + } catch (ClassCastException e) { + Log.e(TAG, "Bad BuildInfo class", e); + } + return new BuildInfo(); + } +} diff --git a/src/com/android/launcher3/Cling.java b/src/com/android/launcher3/Cling.java index 3af427139..185b49b08 100644 --- a/src/com/android/launcher3/Cling.java +++ b/src/com/android/launcher3/Cling.java @@ -37,10 +37,6 @@ import android.widget.TextView; public class Cling extends FrameLayout implements Insettable, View.OnClickListener, View.OnLongClickListener, View.OnTouchListener { - static final String FIRST_RUN_CLING_DISMISSED_KEY = "cling_gel.first_run.dismissed"; - static final String WORKSPACE_CLING_DISMISSED_KEY = "cling_gel.workspace.dismissed"; - static final String FOLDER_CLING_DISMISSED_KEY = "cling_gel.folder.dismissed"; - private static String FIRST_RUN_PORTRAIT = "first_run_portrait"; private static String FIRST_RUN_LANDSCAPE = "first_run_landscape"; @@ -49,6 +45,12 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen private static String WORKSPACE_LARGE = "workspace_large"; private static String WORKSPACE_CUSTOM = "workspace_custom"; + private static String MIGRATION_PORTRAIT = "migration_portrait"; + private static String MIGRATION_LANDSCAPE = "migration_landscape"; + + private static String MIGRATION_WORKSPACE_PORTRAIT = "migration_workspace_portrait"; + private static String MIGRATION_WORKSPACE_LANDSCAPE = "migration_workspace_landscape"; + private static String FOLDER_PORTRAIT = "folder_portrait"; private static String FOLDER_LANDSCAPE = "folder_landscape"; private static String FOLDER_LARGE = "folder_large"; @@ -57,6 +59,8 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen private static float WORKSPACE_INNER_CIRCLE_RADIUS_DPS = 50; private static float WORKSPACE_OUTER_CIRCLE_RADIUS_DPS = 60; private static float WORKSPACE_CIRCLE_Y_OFFSET_DPS = 30; + private static float MIGRATION_WORKSPACE_INNER_CIRCLE_RADIUS_DPS = 42; + private static float MIGRATION_WORKSPACE_OUTER_CIRCLE_RADIUS_DPS = 46; private Launcher mLauncher; private boolean mIsInitialized; @@ -70,6 +74,7 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen private Rect mFocusedHotseatAppBounds; private Paint mErasePaint; + private Paint mBorderPaint; private Paint mBubblePaint; private Paint mDotPaint; @@ -112,6 +117,10 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen mErasePaint.setAlpha(0); mErasePaint.setAntiAlias(true); + mBorderPaint = new Paint(); + mBorderPaint.setColor(0xFFFFFFFF); + mBorderPaint.setAntiAlias(true); + int circleColor = getResources().getColor( R.color.first_run_cling_circle_background_color); mBubblePaint = new Paint(); @@ -166,13 +175,30 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen } } + void updateMigrationWorkspaceBubblePosition() { + DisplayMetrics metrics = new DisplayMetrics(); + mLauncher.getWindowManager().getDefaultDisplay().getMetrics(metrics); + + // Get the page indicator bounds + LauncherAppState app = LauncherAppState.getInstance(); + DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); + Rect pageIndicatorBounds = grid.getWorkspacePageIndicatorBounds(mInsets); + + View bubble = findViewById(R.id.migration_workspace_cling_bubble); + FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) bubble.getLayoutParams(); + lp.bottomMargin = grid.heightPx - pageIndicatorBounds.top; + bubble.requestLayout(); + } + void show(boolean animate, int duration) { setVisibility(View.VISIBLE); setLayerType(View.LAYER_TYPE_HARDWARE, null); if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) || mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) || mDrawIdentifier.equals(WORKSPACE_LARGE) || - mDrawIdentifier.equals(WORKSPACE_CUSTOM)) { + mDrawIdentifier.equals(WORKSPACE_CUSTOM) || + mDrawIdentifier.equals(MIGRATION_WORKSPACE_PORTRAIT) || + mDrawIdentifier.equals(MIGRATION_WORKSPACE_LANDSCAPE)) { View content = getContent(); content.setAlpha(0f); content.animate() @@ -218,7 +244,9 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen void hide(final int duration, final Runnable postCb) { if (mDrawIdentifier.equals(FIRST_RUN_PORTRAIT) || - mDrawIdentifier.equals(FIRST_RUN_LANDSCAPE)) { + mDrawIdentifier.equals(FIRST_RUN_LANDSCAPE) || + mDrawIdentifier.equals(MIGRATION_PORTRAIT) || + mDrawIdentifier.equals(MIGRATION_LANDSCAPE)) { View content = getContent(); content.animate() .alpha(0f) @@ -340,7 +368,7 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen intent.setComponent(mFocusedHotseatAppComponent); intent.addCategory(Intent.CATEGORY_LAUNCHER); mLauncher.startActivity(intent, null); - mLauncher.dismissWorkspaceCling(this); + mLauncher.getLauncherClings().dismissWorkspaceCling(this); } } } @@ -350,7 +378,11 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) || mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) || mDrawIdentifier.equals(WORKSPACE_LARGE)) { - mLauncher.dismissWorkspaceCling(null); + mLauncher.getLauncherClings().dismissWorkspaceCling(null); + return true; + } else if (mDrawIdentifier.equals(MIGRATION_WORKSPACE_PORTRAIT) || + mDrawIdentifier.equals(MIGRATION_WORKSPACE_LANDSCAPE)) { + mLauncher.getLauncherClings().dismissMigrationWorkspaceCling(null); return true; } return false; @@ -361,6 +393,11 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen if (mIsInitialized) { canvas.save(); + // Get the page indicator bounds + LauncherAppState app = LauncherAppState.getInstance(); + DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); + Rect pageIndicatorBounds = grid.getWorkspacePageIndicatorBounds(mInsets); + // Get the background override if there is one if (mBackground == null) { if (mDrawIdentifier.equals(WORKSPACE_CUSTOM)) { @@ -378,7 +415,9 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen mBackground.draw(canvas); } else if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) || mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) || - mDrawIdentifier.equals(WORKSPACE_LARGE)) { + mDrawIdentifier.equals(WORKSPACE_LARGE) || + mDrawIdentifier.equals(MIGRATION_WORKSPACE_PORTRAIT) || + mDrawIdentifier.equals(MIGRATION_WORKSPACE_LANDSCAPE)) { // Initialize the draw buffer (to allow punching through) eraseBg = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), Bitmap.Config.ARGB_8888); @@ -412,11 +451,13 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) || mDrawIdentifier.equals(WORKSPACE_LARGE)) { int offset = DynamicGrid.pxFromDp(WORKSPACE_CIRCLE_Y_OFFSET_DPS, metrics); - mErasePaint.setAlpha((int) (128)); + // Draw the outer circle + mErasePaint.setAlpha(128); eraseCanvas.drawCircle(metrics.widthPixels / 2, metrics.heightPixels / 2 - offset, DynamicGrid.pxFromDp(WORKSPACE_OUTER_CIRCLE_RADIUS_DPS, metrics), mErasePaint); + // Draw the inner circle mErasePaint.setAlpha(0); eraseCanvas.drawCircle(metrics.widthPixels / 2, metrics.heightPixels / 2 - offset, @@ -434,8 +475,24 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen mFocusedHotseatApp.setAlpha((int) (255 * alpha)); mFocusedHotseatApp.draw(canvas); } + } else if (mDrawIdentifier.equals(MIGRATION_WORKSPACE_PORTRAIT) || + mDrawIdentifier.equals(MIGRATION_WORKSPACE_LANDSCAPE)) { + int offset = DynamicGrid.pxFromDp(WORKSPACE_CIRCLE_Y_OFFSET_DPS, metrics); + // Draw the outer circle + eraseCanvas.drawCircle(pageIndicatorBounds.centerX(), + pageIndicatorBounds.centerY(), + DynamicGrid.pxFromDp(MIGRATION_WORKSPACE_OUTER_CIRCLE_RADIUS_DPS, metrics), + mBorderPaint); + // Draw the inner circle + mErasePaint.setAlpha(0); + eraseCanvas.drawCircle(pageIndicatorBounds.centerX(), + pageIndicatorBounds.centerY(), + DynamicGrid.pxFromDp(MIGRATION_WORKSPACE_INNER_CIRCLE_RADIUS_DPS, metrics), + mErasePaint); + canvas.drawBitmap(eraseBg, 0, 0, null); + eraseCanvas.setBitmap(null); + eraseBg = null; } - canvas.restore(); } diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index c76425a5e..75d906bc2 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -146,12 +146,12 @@ public class DeleteDropTarget extends ButtonDropTarget { return true; } - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && + if (!LauncherAppState.isDisableAllApps() && item.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { return true; } - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && + if (!LauncherAppState.isDisableAllApps() && item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION && item instanceof AppInfo) { AppInfo appInfo = (AppInfo) info; @@ -160,7 +160,7 @@ public class DeleteDropTarget extends ButtonDropTarget { if (item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION && item instanceof ShortcutInfo) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { ShortcutInfo shortcutInfo = (ShortcutInfo) info; return (shortcutInfo.flags & AppInfo.DOWNLOADED_FLAG) != 0; } else { @@ -174,7 +174,7 @@ public class DeleteDropTarget extends ButtonDropTarget { @Override public void onDragStart(DragSource source, Object info, int dragAction) { boolean isVisible = true; - boolean useUninstallLabel = !AppsCustomizePagedView.DISABLE_ALL_APPS && + boolean useUninstallLabel = !LauncherAppState.isDisableAllApps() && isAllAppsApplication(source, info); boolean useDeleteLabel = !useUninstallLabel && source.supportsDeleteDropTarget(); @@ -264,7 +264,7 @@ public class DeleteDropTarget extends ButtonDropTarget { } private boolean isUninstallFromWorkspace(DragObject d) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS && isWorkspaceOrFolderApplication(d)) { + if (LauncherAppState.isDisableAllApps() && isWorkspaceOrFolderApplication(d)) { ShortcutInfo shortcut = (ShortcutInfo) d.dragInfo; // Only allow manifest shortcuts to initiate an un-install. return !InstallShortcutReceiver.isValidShortcutLaunchIntent(shortcut.intent); diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 67b0933c9..a64d5e403 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -126,7 +126,7 @@ public class DeviceProfile { DeviceProfile(String n, float w, float h, float r, float c, float is, float its, float hs, float his) { // Ensure that we have an odd number of hotseat items (since we need to place all apps) - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && hs % 2 == 0) { + if (!LauncherAppState.isDisableAllApps() && hs % 2 == 0) { throw new RuntimeException("All Device Profiles must have an odd number of hotseat spaces"); } @@ -475,6 +475,14 @@ public class DeviceProfile { return bounds; } + /** Returns the bounds of the workspace page indicators. */ + Rect getWorkspacePageIndicatorBounds(Rect insets) { + Rect workspacePadding = getWorkspacePadding(); + int pageIndicatorTop = heightPx - insets.bottom - workspacePadding.bottom; + return new Rect(workspacePadding.left, pageIndicatorTop, + widthPx - workspacePadding.right, pageIndicatorTop + pageIndicatorHeightPx); + } + /** Returns the workspace padding in the specified orientation */ Rect getWorkspacePadding() { return getWorkspacePadding(isLandscape ? CellLayout.LANDSCAPE : CellLayout.PORTRAIT); diff --git a/src/com/android/launcher3/DragLayer.java b/src/com/android/launcher3/DragLayer.java index 8726f30c1..ab0469d53 100644 --- a/src/com/android/launcher3/DragLayer.java +++ b/src/com/android/launcher3/DragLayer.java @@ -168,7 +168,8 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang } Folder currentFolder = mLauncher.getWorkspace().getOpenFolder(); - if (currentFolder != null && !mLauncher.isFolderClingVisible() && intercept) { + if (currentFolder != null && !mLauncher.getLauncherClings().isFolderClingVisible() && + intercept) { if (currentFolder.isEditingName()) { if (!isEventOverFolderTextRegion(currentFolder, ev)) { currentFolder.dismissEditingName(); diff --git a/src/com/android/launcher3/DynamicGrid.java b/src/com/android/launcher3/DynamicGrid.java index 22928ccf3..3aced1fae 100644 --- a/src/com/android/launcher3/DynamicGrid.java +++ b/src/com/android/launcher3/DynamicGrid.java @@ -56,7 +56,7 @@ public class DynamicGrid { DisplayMetrics dm = resources.getDisplayMetrics(); ArrayList<DeviceProfile> deviceProfiles = new ArrayList<DeviceProfile>(); - boolean hasAA = !AppsCustomizePagedView.DISABLE_ALL_APPS; + boolean hasAA = !LauncherAppState.isDisableAllApps(); DEFAULT_ICON_SIZE_PX = pxFromDp(DEFAULT_ICON_SIZE_DP, dm); // Our phone profiles include the bar sizes in each orientation deviceProfiles.add(new DeviceProfile("Super Short Stubby", diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index ca82bd1a7..a9134e105 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -146,7 +146,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList Resources res = getResources(); mMaxCountX = (int) grid.numColumns; // Allow scrolling folders when DISABLE_ALL_APPS is true. - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { mMaxCountY = mMaxNumItems = Integer.MAX_VALUE; } else { mMaxCountY = (int) grid.numRows; @@ -238,7 +238,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList return false; } - mLauncher.dismissFolderCling(null); + mLauncher.getLauncherClings().dismissFolderCling(null); mLauncher.getWorkspace().onDragStartedWithItem(v); mLauncher.getWorkspace().beginDragShared(v, this); @@ -466,7 +466,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList public void onAnimationEnd(Animator animation) { mState = STATE_OPEN; setLayerType(LAYER_TYPE_NONE, null); - Cling cling = mLauncher.showFirstRunFoldersCling(); + Cling cling = mLauncher.getLauncherClings().showFoldersCling(); if (cling != null) { cling.bringScrimToFront(); bringToFront(); @@ -773,7 +773,11 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList } completeDragExit(); } - } else { + } + + // This is kind of hacky, but in general, dropping on the workspace handles removing + // the extra screen, but dropping elsewhere (back to self, or onto delete) doesn't. + if (target != mLauncher.getWorkspace()) { mLauncher.getWorkspace().removeExtraEmptyScreen(true, null); } @@ -1014,7 +1018,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList int contentAreaHeightSpec = MeasureSpec.makeMeasureSpec(getContentAreaHeight(), MeasureSpec.EXACTLY); - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { // Don't cap the height of the content to allow scrolling. mContent.setFixedSize(getContentAreaWidth(), mContent.getDesiredHeight()); } else { @@ -1103,7 +1107,10 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList if (getItemCount() <= 1) { // Remove the folder LauncherModel.deleteItemFromDatabase(mLauncher, mInfo); - cellLayout.removeView(mFolderIcon); + if (cellLayout != null) { + // b/12446428 -- sometimes the cell layout has already gone away? + cellLayout.removeView(mFolderIcon); + } if (mFolderIcon instanceof DropTarget) { mDragController.removeDropTarget((DropTarget) mFolderIcon); } diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index 094e188c7..59d60e381 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -95,7 +95,7 @@ public class Hotseat extends FrameLayout { return hasVerticalHotseat() ? (mContent.getCountY() - (rank + 1)) : 0; } public boolean isAllAppsButtonRank(int rank) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { return false; } else { return rank == mAllAppsButtonRank; @@ -142,7 +142,7 @@ public class Hotseat extends FrameLayout { void resetLayout() { mContent.removeAllViewsInLayout(); - if (!AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { // Add the Apps button Context context = getContext(); @@ -189,7 +189,7 @@ public class Hotseat extends FrameLayout { void addAllAppsFolder(IconCache iconCache, ArrayList<AppInfo> allApps, ArrayList<ComponentName> onWorkspace, Launcher launcher, Workspace workspace) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { FolderInfo fi = new FolderInfo(); fi.cellX = getCellXFromOrder(mAllAppsButtonRank); @@ -219,7 +219,7 @@ public class Hotseat extends FrameLayout { } void addAppsToAllAppsFolder(ArrayList<AppInfo> apps) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { View v = mContent.getChildAt(getCellXFromOrder(mAllAppsButtonRank), getCellYFromOrder(mAllAppsButtonRank)); FolderIcon fi = null; diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java index 1ff94720b..7ab4e0477 100644 --- a/src/com/android/launcher3/InstallShortcutReceiver.java +++ b/src/com/android/launcher3/InstallShortcutReceiver.java @@ -272,7 +272,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { final Intent intent = pendingInfo.launchIntent; final String name = pendingInfo.name; - if (AppsCustomizePagedView.DISABLE_ALL_APPS && !isValidShortcutLaunchIntent(intent)) { + if (LauncherAppState.isDisableAllApps() && !isValidShortcutLaunchIntent(intent)) { if (DBG) Log.d(TAG, "Ignoring shortcut with launchIntent:" + intent); continue; } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index c05769cfa..765fca499 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -17,8 +17,6 @@ package com.android.launcher3; -import android.accounts.Account; -import android.accounts.AccountManager; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -87,7 +85,6 @@ import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; -import android.view.accessibility.AccessibilityManager; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.view.inputmethod.InputMethodManager; @@ -115,6 +112,7 @@ import java.util.HashMap; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; + /** * Default launcher application. */ @@ -130,6 +128,8 @@ public class Launcher extends Activity static final boolean DEBUG_RESUME_TIME = false; static final boolean DEBUG_DUMP_LOG = false; + static final boolean ENABLE_DEBUG_INTENTS = false; // allow DebugIntents to run + private static final int REQUEST_CREATE_SHORTCUT = 1; private static final int REQUEST_CREATE_APPWIDGET = 5; private static final int REQUEST_PICK_APPLICATION = 6; @@ -155,6 +155,7 @@ public class Launcher extends Activity // adb shell setprop log.tag.PROPERTY_NAME [VERBOSE | SUPPRESS] static final String FORCE_ENABLE_ROTATION_PROPERTY = "launcher_force_rotate"; static final String DUMP_STATE_PROPERTY = "launcher_dump_state"; + static final String DISABLE_ALL_APPS_PROPERTY = "launcher_noallapps"; // The Intent extra that defines whether to ignore the launch animation static final String INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION = @@ -187,6 +188,9 @@ public class Launcher extends Activity // Type: int[] private static final String RUNTIME_STATE_VIEW_IDS = "launcher.view_ids"; + + static final String FIRST_RUN_ACTIVITY_DISPLAYED = "launcher.first_run_activity_displayed"; + private static final String TOOLBAR_ICON_METADATA_NAME = "com.android.launcher.toolbar_icon"; private static final String TOOLBAR_SEARCH_ICON_METADATA_NAME = "com.android.launcher.toolbar_search_icon"; @@ -196,6 +200,8 @@ public class Launcher extends Activity public static final String SHOW_WEIGHT_WATCHER = "debug.show_mem"; public static final boolean SHOW_WEIGHT_WATCHER_DEFAULT = false; + public static final String USER_HAS_MIGRATED = "launcher.user_migrated_from_old_data"; + /** The different states that Launcher can be in. */ private enum State { NONE, WORKSPACE, APPS_CUSTOMIZE, APPS_CUSTOMIZE_SPRING_LOADED }; private State mState = State.WORKSPACE; @@ -204,8 +210,6 @@ public class Launcher extends Activity static final int APPWIDGET_HOST_ID = 1024; public static final int EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT = 300; private static final int ON_ACTIVITY_RESULT_ANIMATION_DELAY = 500; - private static final int SHOW_CLING_DURATION = 250; - private static final int DISMISS_CLING_DURATION = 200; private static final Object sLock = new Object(); private static int sScreen = DEFAULT_SCREEN; @@ -226,9 +230,11 @@ public class Launcher extends Activity private Workspace mWorkspace; private View mLauncherView; + private View mPageIndicators; private DragLayer mDragLayer; private DragController mDragController; private View mWeightWatcher; + private LauncherClings mLauncherClings; private AppWidgetManager mAppWidgetManager; private LauncherAppWidgetHost mAppWidgetHost; @@ -281,8 +287,6 @@ public class Launcher extends Activity private boolean mVisible = false; private boolean mHasFocus = false; private boolean mAttached = false; - private static final boolean DISABLE_CLINGS = false; - private static final boolean DISABLE_CUSTOM_CLINGS = true; private static LocaleConfiguration sLocaleConfiguration = null; @@ -338,9 +342,6 @@ public class Launcher extends Activity private BubbleTextView mWaitingForResume; - private HideFromAccessibilityHelper mHideFromAccessibilityHelper - = new HideFromAccessibilityHelper(); - private Runnable mBuildLayersRunnable = new Runnable() { public void run() { if (mWorkspace != null) { @@ -365,7 +366,7 @@ public class Launcher extends Activity private Stats mStats; - private static boolean isPropertyEnabled(String propertyName) { + static boolean isPropertyEnabled(String propertyName) { return Log.isLoggable(propertyName, Log.VERBOSE); } @@ -415,6 +416,7 @@ public class Launcher extends Activity mIconCache = app.getIconCache(); mIconCache.flushInvalidIcons(grid); mDragController = new DragController(this); + mLauncherClings = new LauncherClings(this); mInflater = getLayoutInflater(); mStats = new Stats(this); @@ -476,7 +478,12 @@ public class Launcher extends Activity // On large interfaces, we want the screen to auto-rotate based on the current orientation unlockScreenOrientation(true); - showFirstRunCling(); + showFirstRunActivity(); + if (mModel.canMigrateFromOldLauncherDb()) { + mLauncherClings.showMigrationCling(); + } else { + mLauncherClings.showFirstRunCling(); + } } protected void onUserLeaveHint() { @@ -498,6 +505,21 @@ public class Launcher extends Activity } /** + * To be overridden by subclasses to indicate that there is an activity to launch + * before showing the standard launcher experience. + */ + protected boolean hasFirstRunActivity() { + return false; + } + + /** + * To be overridden by subclasses to launch any first run activity + */ + protected Intent getFirstRunActivity() { + return null; + } + + /** * Invoked by subclasses to signal a change to the {@link #addCustomContentToLeft} value to * ensure the custom content page is added or removed if necessary. */ @@ -654,10 +676,6 @@ public class Launcher extends Activity return mInflater; } - public DragLayer getDragLayer() { - return mDragLayer; - } - boolean isDraggingEnabled() { // We prevent dragging when we are loading the workspace as it is possible to pick up a view // that is subsequently removed from the workspace in startBinding(). @@ -1208,6 +1226,7 @@ public class Launcher extends Activity mLauncherView = findViewById(R.id.launcher); mDragLayer = (DragLayer) findViewById(R.id.drag_layer); mWorkspace = (Workspace) mDragLayer.findViewById(R.id.workspace); + mPageIndicators = mDragLayer.findViewById(R.id.page_indicator); mLauncherView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); @@ -1551,6 +1570,15 @@ public class Launcher extends Activity } else if (Intent.ACTION_USER_PRESENT.equals(action)) { mUserPresent = true; updateRunning(); + } else if (ENABLE_DEBUG_INTENTS && DebugIntents.DELETE_DATABASE.equals(action)) { + mModel.resetLoadedState(false, true); + mModel.startLoader(false, PagedView.INVALID_RESTORE_PAGE, + LauncherModel.LOADER_FLAG_CLEAR_WORKSPACE); + } else if (ENABLE_DEBUG_INTENTS && DebugIntents.MIGRATE_DATABASE.equals(action)) { + mModel.resetLoadedState(false, true); + mModel.startLoader(false, PagedView.INVALID_RESTORE_PAGE, + LauncherModel.LOADER_FLAG_CLEAR_WORKSPACE + | LauncherModel.LOADER_FLAG_MIGRATE_SHORTCUTS); } } }; @@ -1563,6 +1591,10 @@ public class Launcher extends Activity final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_USER_PRESENT); + if (ENABLE_DEBUG_INTENTS) { + filter.addAction(DebugIntents.DELETE_DATABASE); + filter.addAction(DebugIntents.MIGRATE_DATABASE); + } registerReceiver(mReceiver, filter); FirstFrameAnimatorHelper.initializeDrawListener(getWindow().getDecorView()); mAttached = true; @@ -1702,6 +1734,26 @@ public class Launcher extends Activity Toast.makeText(this, getString(strId), Toast.LENGTH_SHORT).show(); } + public DragLayer getDragLayer() { + return mDragLayer; + } + + public Workspace getWorkspace() { + return mWorkspace; + } + + public Hotseat getHotseat() { + return mHotseat; + } + + public View getOverviewPanel() { + return mOverviewPanel; + } + + public SearchDropTargetBar getSearchBar() { + return mSearchDropTargetBar; + } + public LauncherAppWidgetHost getAppWidgetHost() { return mAppWidgetHost; } @@ -1710,6 +1762,14 @@ public class Launcher extends Activity return mModel; } + public LauncherClings getLauncherClings() { + return mLauncherClings; + } + + protected SharedPreferences getSharedPrefs() { + return mSharedPrefs; + } + public void closeSystemDialogs() { getWindow().closeAllPanels(); @@ -2671,7 +2731,7 @@ public class Launcher extends Activity closeFolder(folder); // Dismiss the folder cling - dismissFolderCling(null); + mLauncherClings.dismissFolderCling(null); } } @@ -2747,15 +2807,6 @@ public class Launcher extends Activity return mHotseat != null && layout != null && (layout instanceof CellLayout) && (layout == mHotseat.getLayout()); } - Hotseat getHotseat() { - return mHotseat; - } - View getOverviewPanel() { - return mOverviewPanel; - } - SearchDropTargetBar getSearchBar() { - return mSearchDropTargetBar; - } /** * Returns the CellLayout of the specified container at the specified screen. @@ -2772,10 +2823,6 @@ public class Launcher extends Activity } } - Workspace getWorkspace() { - return mWorkspace; - } - public boolean isAllAppsVisible() { return (mState == State.APPS_CUSTOMIZE) || (mOnResumeState == State.APPS_CUSTOMIZE); } @@ -2906,7 +2953,7 @@ public class Launcher extends Activity // Shrink workspaces away if going to AppsCustomize from workspace Animator workspaceAnim = mWorkspace.getChangeStateAnimation(Workspace.State.SMALL, animated); - if (!AppsCustomizePagedView.DISABLE_ALL_APPS + if (!LauncherAppState.isDisableAllApps() || contentType == AppsCustomizePagedView.ContentType.Widgets) { // Set the content type for the all apps/widgets space mAppsCustomizeTabHost.setContentTypeImmediate(contentType); @@ -3777,7 +3824,7 @@ public class Launcher extends Activity // Remove the extra empty screen mWorkspace.removeExtraEmptyScreen(false, null); - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && + if (!LauncherAppState.isDisableAllApps() && addedApps != null && mAppsCustomizeContent != null) { mAppsCustomizeContent.addApps(addedApps); } @@ -4044,7 +4091,7 @@ public class Launcher extends Activity * Implementation of the method from LauncherModel.Callbacks. */ public void bindAllApplications(final ArrayList<AppInfo> apps) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { if (mIntentsOnWorkspaceFromUpgradePath != null) { if (LauncherModel.UPGRADE_USE_MORE_APPS_FOLDER) { getHotseat().addAllAppsFolder(mIconCache, apps, @@ -4084,7 +4131,7 @@ public class Launcher extends Activity mWorkspace.updateShortcuts(apps); } - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && + if (!LauncherAppState.isDisableAllApps() && mAppsCustomizeContent != null) { mAppsCustomizeContent.updateApps(apps); } @@ -4121,7 +4168,7 @@ public class Launcher extends Activity mDragController.onAppsRemoved(packageNames, appInfos); // Update AllApps - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && + if (!LauncherAppState.isDisableAllApps() && mAppsCustomizeContent != null) { mAppsCustomizeContent.removeApps(appInfos); } @@ -4206,228 +4253,13 @@ public class Launcher extends Activity } } - /* Cling related */ - private boolean isClingsEnabled() { - if (DISABLE_CLINGS) { - return false; - } - - // For now, limit only to phones - LauncherAppState app = LauncherAppState.getInstance(); - DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); - if (grid.isTablet()) { - return false; - } - if (grid.isLandscape) { - return false; - } - - // disable clings when running in a test harness - if(ActivityManager.isRunningInTestHarness()) return false; - - // Disable clings for accessibility when explore by touch is enabled - final AccessibilityManager a11yManager = (AccessibilityManager) getSystemService( - ACCESSIBILITY_SERVICE); - if (a11yManager.isTouchExplorationEnabled()) { - return false; - } - - // Restricted secondary users (child mode) will potentially have very few apps - // seeded when they start up for the first time. Clings won't work well with that -// boolean supportsLimitedUsers = -// android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2; -// Account[] accounts = AccountManager.get(this).getAccounts(); -// if (supportsLimitedUsers && accounts.length == 0) { -// UserManager um = (UserManager) getSystemService(Context.USER_SERVICE); -// Bundle restrictions = um.getUserRestrictions(); -// if (restrictions.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS, false)) { -// return false; -// } -// } - return true; - } - - private Cling initCling(int clingId, int scrimId, boolean animate, - boolean dimNavBarVisibilty) { - Cling cling = (Cling) findViewById(clingId); - View scrim = null; - if (scrimId > 0) { - scrim = findViewById(R.id.cling_scrim); - } - if (cling != null) { - cling.init(this, scrim); - cling.show(animate, SHOW_CLING_DURATION); - - if (dimNavBarVisibilty) { - cling.setSystemUiVisibility(cling.getSystemUiVisibility() | - View.SYSTEM_UI_FLAG_LOW_PROFILE); - } - } - return cling; - } - - private void dismissCling(final Cling cling, final Runnable postAnimationCb, - final String flag, int duration, boolean restoreNavBarVisibilty) { - // To catch cases where siblings of top-level views are made invisible, just check whether - // the cling is directly set to GONE before dismissing it. - if (cling != null && cling.getVisibility() != View.GONE) { - final Runnable cleanUpClingCb = new Runnable() { - public void run() { - cling.cleanup(); - // We should update the shared preferences on a background thread - new AsyncTask<Void, Void, Void>() { - public Void doInBackground(Void ... args) { - SharedPreferences.Editor editor = mSharedPrefs.edit(); - editor.putBoolean(flag, true); - editor.commit(); - return null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); - if (postAnimationCb != null) { - postAnimationCb.run(); - } - } - }; - if (duration <= 0) { - cleanUpClingCb.run(); - } else { - cling.hide(duration, cleanUpClingCb); - } - mHideFromAccessibilityHelper.restoreImportantForAccessibility(mDragLayer); - - if (restoreNavBarVisibilty) { - cling.setSystemUiVisibility(cling.getSystemUiVisibility() & - ~View.SYSTEM_UI_FLAG_LOW_PROFILE); - } - } - } - - private void removeCling(int id) { - final View cling = findViewById(id); - if (cling != null) { - final ViewGroup parent = (ViewGroup) cling.getParent(); - parent.post(new Runnable() { - @Override - public void run() { - parent.removeView(cling); - } - }); - mHideFromAccessibilityHelper.restoreImportantForAccessibility(mDragLayer); - } - } - - private boolean skipCustomClingIfNoAccounts() { - Cling cling = (Cling) findViewById(R.id.workspace_cling); - boolean customCling = cling.getDrawIdentifier().equals("workspace_custom"); - if (customCling) { - AccountManager am = AccountManager.get(this); - if (am == null) return false; - Account[] accounts = am.getAccountsByType("com.google"); - return accounts.length == 0; - } - return false; - } - - public void updateCustomContentHintVisibility() { - Cling cling = (Cling) findViewById(R.id.first_run_cling); - String ccHintStr = getFirstRunCustomContentHint(); - - if (mWorkspace.hasCustomContent()) { - // Show the custom content hint if ccHintStr is not empty - if (cling != null) { - setCustomContentHintVisibility(cling, ccHintStr, true, true); - } - } else { - // Hide the custom content hint - if (cling != null) { - setCustomContentHintVisibility(cling, ccHintStr, false, true); - } - } - } - - private void setCustomContentHintVisibility(Cling cling, String ccHintStr, boolean visible, - boolean animate) { - final TextView ccHint = (TextView) cling.findViewById(R.id.custom_content_hint); - if (ccHint != null) { - if (visible && !ccHintStr.isEmpty()) { - ccHint.setText(ccHintStr); - ccHint.setVisibility(View.VISIBLE); - if (animate) { - ccHint.setAlpha(0f); - ccHint.animate().alpha(1f) - .setDuration(SHOW_CLING_DURATION) - .start(); - } else { - ccHint.setAlpha(1f); - } - } else { - if (animate) { - ccHint.animate().alpha(0f) - .setDuration(SHOW_CLING_DURATION) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - ccHint.setVisibility(View.GONE); - } - }) - .start(); - } else { - ccHint.setAlpha(0f); - ccHint.setVisibility(View.GONE); - } - } - } - } - - public void showFirstRunCling() { - if (isClingsEnabled() && - !mSharedPrefs.getBoolean(Cling.FIRST_RUN_CLING_DISMISSED_KEY, false) && - !skipCustomClingIfNoAccounts() ) { - // If we're not using the default workspace layout, replace workspace cling - // with a custom workspace cling (usually specified in an overlay) - // For now, only do this on tablets - if (!DISABLE_CUSTOM_CLINGS) { - if (mSharedPrefs.getInt(LauncherProvider.DEFAULT_WORKSPACE_RESOURCE_ID, 0) != 0 && - getResources().getBoolean(R.bool.config_useCustomClings)) { - // Use a custom cling - View cling = findViewById(R.id.workspace_cling); - ViewGroup clingParent = (ViewGroup) cling.getParent(); - int clingIndex = clingParent.indexOfChild(cling); - clingParent.removeViewAt(clingIndex); - View customCling = mInflater.inflate(R.layout.custom_workspace_cling, clingParent, false); - clingParent.addView(customCling, clingIndex); - customCling.setId(R.id.workspace_cling); - } - } - Cling cling = (Cling) findViewById(R.id.first_run_cling); - if (cling != null) { - String sbHintStr = getFirstRunClingSearchBarHint(); - String ccHintStr = getFirstRunCustomContentHint(); - if (!sbHintStr.isEmpty()) { - TextView sbHint = (TextView) cling.findViewById(R.id.search_bar_hint); - sbHint.setText(sbHintStr); - sbHint.setVisibility(View.VISIBLE); - } - setCustomContentHintVisibility(cling, ccHintStr, true, false); - } - initCling(R.id.first_run_cling, 0, false, true); - } else { - removeCling(R.id.first_run_cling); - } - } - /** * Called when the SearchBar hint should be changed. * * @param hint the hint to be displayed in the search bar. */ protected void onSearchBarHintChanged(String hint) { - Cling cling = (Cling) findViewById(R.id.first_run_cling); - if (cling != null && cling.getVisibility() == View.VISIBLE && !hint.isEmpty()) { - TextView sbHint = (TextView) cling.findViewById(R.id.search_bar_hint); - sbHint.setText(hint); - sbHint.setVisibility(View.VISIBLE); - } + mLauncherClings.updateSearchBarHint(hint); } protected String getFirstRunClingSearchBarHint() { @@ -4452,80 +4284,61 @@ public class Launcher extends Activity return ""; } - public void showFirstRunWorkspaceCling() { - // Enable the clings only if they have not been dismissed before - if (isClingsEnabled() && - !mSharedPrefs.getBoolean(Cling.WORKSPACE_CLING_DISMISSED_KEY, false)) { - Cling c = initCling(R.id.workspace_cling, 0, false, true); - - // Set the focused hotseat app if there is one - c.setFocusedHotseatApp(getFirstRunFocusedHotseatAppDrawableId(), - getFirstRunFocusedHotseatAppRank(), - getFirstRunFocusedHotseatAppComponentName(), - getFirstRunFocusedHotseatAppBubbleTitle(), - getFirstRunFocusedHotseatAppBubbleDescription()); - } else { - removeCling(R.id.workspace_cling); - } + public void dismissFirstRunCling(View v) { + mLauncherClings.dismissFirstRunCling(v); } - public Cling showFirstRunFoldersCling() { - // Enable the clings only if they have not been dismissed before - if (isClingsEnabled() && - !mSharedPrefs.getBoolean(Cling.FOLDER_CLING_DISMISSED_KEY, false)) { - Cling cling = initCling(R.id.folder_cling, R.id.cling_scrim, - true, true); - return cling; - } else { - removeCling(R.id.folder_cling); - return null; - } + public void dismissMigrationClingCopyApps(View v) { + mLauncherClings.dismissMigrationClingCopyApps(v); } - protected SharedPreferences getSharedPrefs() { - return mSharedPrefs; + public void dismissMigrationClingUseDefault(View v) { + mLauncherClings.dismissMigrationClingUseDefault(v); } - public boolean isFolderClingVisible() { - Cling cling = (Cling) findViewById(R.id.folder_cling); - if (cling != null) { - return cling.getVisibility() == View.VISIBLE; - } - return false; + public void dismissMigrationWorkspaceCling(View v) { + mLauncherClings.dismissMigrationWorkspaceCling(v); + } + public void dismissWorkspaceCling(View v) { + mLauncherClings.dismissWorkspaceCling(v); + } + public void dismissFolderCling(View v) { + mLauncherClings.dismissFolderCling(v); } - public void dismissFirstRunCling(View v) { - Cling cling = (Cling) findViewById(R.id.first_run_cling); - Runnable cb = new Runnable() { - public void run() { - // Show the workspace cling next - showFirstRunWorkspaceCling(); - } - }; - dismissCling(cling, cb, Cling.FIRST_RUN_CLING_DISMISSED_KEY, - DISMISS_CLING_DURATION, false); - // Fade out the search bar for the workspace cling coming up - mSearchDropTargetBar.hideSearchBar(true); + private boolean shouldRunFirstRunActivity() { + return !ActivityManager.isRunningInTestHarness(); } - public void dismissWorkspaceCling(View v) { - Cling cling = (Cling) findViewById(R.id.workspace_cling); - Runnable cb = null; - if (v == null) { - cb = new Runnable() { - public void run() { - mWorkspace.enterOverviewMode(); - } - }; + + public void showFirstRunActivity() { + if (shouldRunFirstRunActivity() && hasFirstRunActivity() + && !mSharedPrefs.getBoolean(FIRST_RUN_ACTIVITY_DISPLAYED, false)) { + Intent firstRunIntent = getFirstRunActivity(); + if (firstRunIntent != null) { + startActivity(firstRunIntent); + markFirstRunActivityShown(); + } } - dismissCling(cling, cb, Cling.WORKSPACE_CLING_DISMISSED_KEY, - DISMISS_CLING_DURATION, true); + } - // Fade in the search bar - mSearchDropTargetBar.showSearchBar(true); + private void markFirstRunActivityShown() { + SharedPreferences.Editor editor = mSharedPrefs.edit(); + editor.putBoolean(FIRST_RUN_ACTIVITY_DISPLAYED, true); + editor.apply(); } - public void dismissFolderCling(View v) { - Cling cling = (Cling) findViewById(R.id.folder_cling); - dismissCling(cling, null, Cling.FOLDER_CLING_DISMISSED_KEY, - DISMISS_CLING_DURATION, true); + + void showWorkspaceSearchAndHotseat() { + mWorkspace.setAlpha(1f); + mHotseat.setAlpha(1f); + mPageIndicators.setAlpha(1f); + mSearchDropTargetBar.showSearchBar(false); } + void hideWorkspaceSearchAndHotseat() { + mWorkspace.setAlpha(0f); + mHotseat.setAlpha(0f); + mPageIndicators.setAlpha(0f); + mSearchDropTargetBar.hideSearchBar(false); + } + + public ItemInfo createAppDragInfo(Intent appLaunchIntent) { ResolveInfo ri = getPackageManager().resolveActivity(appLaunchIntent, 0); if (ri == null) { @@ -4667,3 +4480,8 @@ interface LauncherTransitionable { void onLauncherTransitionStep(Launcher l, float t); void onLauncherTransitionEnd(Launcher l, boolean animated, boolean toWorkspace); } + +interface DebugIntents { + static final String DELETE_DATABASE = "com.android.launcher3.action.DELETE_DATABASE"; + static final String MIGRATE_DATABASE = "com.android.launcher3.action.MIGRATE_DATABASE"; +} diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index 84a1d0411..156befbe0 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -30,9 +30,10 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { private static final String TAG = "LauncherAppState"; private static final String SHARED_PREFERENCES_KEY = "com.android.launcher3.prefs"; + private final AppFilter mAppFilter; + private final BuildInfo mBuildInfo; private LauncherModel mModel; private IconCache mIconCache; - private AppFilter mAppFilter; private WidgetPreviewLoader.CacheDb mWidgetPreviewCacheDb; private boolean mIsScreenLarge; private float mScreenDensity; @@ -83,10 +84,11 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { mIsScreenLarge = isScreenLarge(sContext.getResources()); mScreenDensity = sContext.getResources().getDisplayMetrics().density; - mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(sContext); + recreateWidgetPreviewDb(); mIconCache = new IconCache(sContext); mAppFilter = AppFilter.loadByName(sContext.getString(R.string.app_filter_class)); + mBuildInfo = BuildInfo.loadByName(sContext.getString(R.string.build_info_class)); mModel = new LauncherModel(this, mIconCache, mAppFilter); // Register intent receivers @@ -113,6 +115,13 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true, mFavoritesObserver); } + + public void recreateWidgetPreviewDb() { + if (mWidgetPreviewCacheDb != null) { + mWidgetPreviewCacheDb.close(); + } + mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(sContext); + } /** * Call from Application.onTerminate(), which is not guaranteed to ever be called. @@ -230,4 +239,10 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { public void onAvailableSizeChanged(DeviceProfile grid) { Utilities.setIconSize(grid.iconSizePx); } + + public static boolean isDisableAllApps() { + // Returns false on non-dogfood builds. + return getInstance().mBuildInfo.isDogfoodBuild() && + Launcher.isPropertyEnabled(Launcher.DISABLE_ALL_APPS_PROPERTY); + } } diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java index 2a5ed6961..a081c2191 100644 --- a/src/com/android/launcher3/LauncherBackupHelper.java +++ b/src/com/android/launcher3/LauncherBackupHelper.java @@ -297,7 +297,7 @@ public class LauncherBackupHelper implements BackupHelper { Key key = getKey(Key.FAVORITE, id); keys.add(key); currentIds.add(keyToBackupKey(key)); - if (updateTime > in.t) { + if (updateTime >= in.t) { byte[] blob = packFavorite(cursor); writeRowToBackup(key, blob, out, data); } @@ -365,7 +365,7 @@ public class LauncherBackupHelper implements BackupHelper { Key key = getKey(Key.SCREEN, id); keys.add(key); currentIds.add(keyToBackupKey(key)); - if (updateTime > in.t) { + if (updateTime >= in.t) { byte[] blob = packScreen(cursor); writeRowToBackup(key, blob, out, data); } diff --git a/src/com/android/launcher3/LauncherClings.java b/src/com/android/launcher3/LauncherClings.java new file mode 100644 index 000000000..541eaddd0 --- /dev/null +++ b/src/com/android/launcher3/LauncherClings.java @@ -0,0 +1,444 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.app.ActivityManager; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.os.UserManager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityManager; +import android.widget.TextView; + +class LauncherClings { + private static final String FIRST_RUN_CLING_DISMISSED_KEY = "cling_gel.first_run.dismissed"; + private static final String MIGRATION_CLING_DISMISSED_KEY = "cling_gel.migration.dismissed"; + private static final String MIGRATION_WORKSPACE_CLING_DISMISSED_KEY = "cling_gel.migration.dismissed"; + private static final String WORKSPACE_CLING_DISMISSED_KEY = "cling_gel.workspace.dismissed"; + private static final String FOLDER_CLING_DISMISSED_KEY = "cling_gel.folder.dismissed"; + + private static final boolean DISABLE_CLINGS = false; + private static final boolean DISABLE_CUSTOM_CLINGS = true; + + private static final int SHOW_CLING_DURATION = 250; + private static final int DISMISS_CLING_DURATION = 200; + + private Launcher mLauncher; + private LayoutInflater mInflater; + private HideFromAccessibilityHelper mHideFromAccessibilityHelper + = new HideFromAccessibilityHelper(); + + /** Ctor */ + public LauncherClings(Launcher launcher) { + mLauncher = launcher; + mInflater = mLauncher.getLayoutInflater(); + } + + /** Initializes a cling */ + private Cling initCling(int clingId, int scrimId, boolean animate, + boolean dimNavBarVisibilty) { + Cling cling = (Cling) mLauncher.findViewById(clingId); + View scrim = null; + if (scrimId > 0) { + scrim = mLauncher.findViewById(R.id.cling_scrim); + } + if (cling != null) { + cling.init(mLauncher, scrim); + cling.show(animate, SHOW_CLING_DURATION); + + if (dimNavBarVisibilty) { + cling.setSystemUiVisibility(cling.getSystemUiVisibility() | + View.SYSTEM_UI_FLAG_LOW_PROFILE); + } + } + return cling; + } + + /** Returns whether the clings are enabled or should be shown */ + private boolean isClingsEnabled() { + if (DISABLE_CLINGS) { + return false; + } + + // For now, limit only to phones + LauncherAppState app = LauncherAppState.getInstance(); + DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); + if (grid.isTablet()) { + return false; + } + if (grid.isLandscape) { + return false; + } + + // disable clings when running in a test harness + if(ActivityManager.isRunningInTestHarness()) return false; + + // Disable clings for accessibility when explore by touch is enabled + final AccessibilityManager a11yManager = (AccessibilityManager) mLauncher.getSystemService( + Launcher.ACCESSIBILITY_SERVICE); + if (a11yManager.isTouchExplorationEnabled()) { + return false; + } + + // Restricted secondary users (child mode) will potentially have very few apps + // seeded when they start up for the first time. Clings won't work well with that + boolean supportsLimitedUsers = + android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2; + Account[] accounts = AccountManager.get(mLauncher).getAccounts(); + if (supportsLimitedUsers && accounts.length == 0) { + UserManager um = (UserManager) mLauncher.getSystemService(Context.USER_SERVICE); + Bundle restrictions = um.getUserRestrictions(); + if (restrictions.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS, false)) { + return false; + } + } + return true; + } + + /** Returns whether the folder cling is visible. */ + public boolean isFolderClingVisible() { + Cling cling = (Cling) mLauncher.findViewById(R.id.folder_cling); + if (cling != null) { + return cling.getVisibility() == View.VISIBLE; + } + return false; + } + + private boolean skipCustomClingIfNoAccounts() { + Cling cling = (Cling) mLauncher.findViewById(R.id.workspace_cling); + boolean customCling = cling.getDrawIdentifier().equals("workspace_custom"); + if (customCling) { + AccountManager am = AccountManager.get(mLauncher); + if (am == null) return false; + Account[] accounts = am.getAccountsByType("com.google"); + return accounts.length == 0; + } + return false; + } + + /** Updates the first run cling custom content hint */ + private void setCustomContentHintVisibility(Cling cling, String ccHintStr, boolean visible, + boolean animate) { + final TextView ccHint = (TextView) cling.findViewById(R.id.custom_content_hint); + if (ccHint != null) { + if (visible && !ccHintStr.isEmpty()) { + ccHint.setText(ccHintStr); + ccHint.setVisibility(View.VISIBLE); + if (animate) { + ccHint.setAlpha(0f); + ccHint.animate().alpha(1f) + .setDuration(SHOW_CLING_DURATION) + .start(); + } else { + ccHint.setAlpha(1f); + } + } else { + if (animate) { + ccHint.animate().alpha(0f) + .setDuration(SHOW_CLING_DURATION) + .setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + ccHint.setVisibility(View.GONE); + } + }) + .start(); + } else { + ccHint.setAlpha(0f); + ccHint.setVisibility(View.GONE); + } + } + } + } + + /** Updates the first run cling custom content hint */ + public void updateCustomContentHintVisibility() { + Cling cling = (Cling) mLauncher.findViewById(R.id.first_run_cling); + String ccHintStr = mLauncher.getFirstRunCustomContentHint(); + + if (mLauncher.getWorkspace().hasCustomContent()) { + // Show the custom content hint if ccHintStr is not empty + if (cling != null) { + setCustomContentHintVisibility(cling, ccHintStr, true, true); + } + } else { + // Hide the custom content hint + if (cling != null) { + setCustomContentHintVisibility(cling, ccHintStr, false, true); + } + } + } + + /** Updates the first run cling search bar hint. */ + public void updateSearchBarHint(String hint) { + Cling cling = (Cling) mLauncher.findViewById(R.id.first_run_cling); + if (cling != null && cling.getVisibility() == View.VISIBLE && !hint.isEmpty()) { + TextView sbHint = (TextView) cling.findViewById(R.id.search_bar_hint); + sbHint.setText(hint); + sbHint.setVisibility(View.VISIBLE); + } + } + + /** Shows the first run cling */ + public void showFirstRunCling() { + SharedPreferences sharedPrefs = mLauncher.getSharedPrefs(); + if (isClingsEnabled() && + !sharedPrefs.getBoolean(FIRST_RUN_CLING_DISMISSED_KEY, false) && + !skipCustomClingIfNoAccounts() ) { + + + // If we're not using the default workspace layout, replace workspace cling + // with a custom workspace cling (usually specified in an overlay) + // For now, only do this on tablets + if (!DISABLE_CUSTOM_CLINGS) { + if (sharedPrefs.getInt(LauncherProvider.DEFAULT_WORKSPACE_RESOURCE_ID, 0) != 0 && + mLauncher.getResources().getBoolean(R.bool.config_useCustomClings)) { + // Use a custom cling + View cling = mLauncher.findViewById(R.id.workspace_cling); + ViewGroup clingParent = (ViewGroup) cling.getParent(); + int clingIndex = clingParent.indexOfChild(cling); + clingParent.removeViewAt(clingIndex); + View customCling = mInflater.inflate(R.layout.custom_workspace_cling, + clingParent, false); + clingParent.addView(customCling, clingIndex); + customCling.setId(R.id.workspace_cling); + } + } + Cling cling = (Cling) mLauncher.findViewById(R.id.first_run_cling); + if (cling != null) { + String sbHintStr = mLauncher.getFirstRunClingSearchBarHint(); + String ccHintStr = mLauncher.getFirstRunCustomContentHint(); + if (!sbHintStr.isEmpty()) { + TextView sbHint = (TextView) cling.findViewById(R.id.search_bar_hint); + sbHint.setText(sbHintStr); + sbHint.setVisibility(View.VISIBLE); + } + setCustomContentHintVisibility(cling, ccHintStr, true, false); + } + initCling(R.id.first_run_cling, 0, false, true); + } else { + removeCling(R.id.first_run_cling); + } + } + + public void showMigrationCling() { + // Enable the clings only if they have not been dismissed before + if (isClingsEnabled() && !mLauncher.getSharedPrefs().getBoolean( + MIGRATION_CLING_DISMISSED_KEY, false)) { + mLauncher.hideWorkspaceSearchAndHotseat(); + + Cling c = initCling(R.id.migration_cling, 0, false, true); + c.bringScrimToFront(); + c.bringToFront(); + } else { + removeCling(R.id.migration_cling); + } + } + + public void showMigrationWorkspaceCling() { + // Enable the clings only if they have not been dismissed before + if (isClingsEnabled() && !mLauncher.getSharedPrefs().getBoolean( + MIGRATION_WORKSPACE_CLING_DISMISSED_KEY, false)) { + Cling c = initCling(R.id.migration_workspace_cling, 0, false, true); + c.updateMigrationWorkspaceBubblePosition(); + c.bringScrimToFront(); + c.bringToFront(); + } else { + removeCling(R.id.migration_workspace_cling); + } + } + + public void showWorkspaceCling() { + // Enable the clings only if they have not been dismissed before + if (isClingsEnabled() && !mLauncher.getSharedPrefs().getBoolean( + WORKSPACE_CLING_DISMISSED_KEY, false)) { + Cling c = initCling(R.id.workspace_cling, 0, false, true); + + // Set the focused hotseat app if there is one + c.setFocusedHotseatApp(mLauncher.getFirstRunFocusedHotseatAppDrawableId(), + mLauncher.getFirstRunFocusedHotseatAppRank(), + mLauncher.getFirstRunFocusedHotseatAppComponentName(), + mLauncher.getFirstRunFocusedHotseatAppBubbleTitle(), + mLauncher.getFirstRunFocusedHotseatAppBubbleDescription()); + } else { + removeCling(R.id.workspace_cling); + } + } + public Cling showFoldersCling() { + SharedPreferences sharedPrefs = mLauncher.getSharedPrefs(); + // Enable the clings only if they have not been dismissed before + if (isClingsEnabled() && + !sharedPrefs.getBoolean(FOLDER_CLING_DISMISSED_KEY, false) && + !sharedPrefs.getBoolean(Launcher.USER_HAS_MIGRATED, false)) { + Cling cling = initCling(R.id.folder_cling, R.id.cling_scrim, + true, true); + return cling; + } else { + removeCling(R.id.folder_cling); + return null; + } + } + + + /** Removes the cling outright from the DragLayer */ + private void removeCling(int id) { + final View cling = mLauncher.findViewById(id); + if (cling != null) { + final ViewGroup parent = (ViewGroup) cling.getParent(); + parent.post(new Runnable() { + @Override + public void run() { + parent.removeView(cling); + } + }); + mHideFromAccessibilityHelper.restoreImportantForAccessibility(mLauncher.getDragLayer()); + } + } + + /** Hides the specified Cling */ + private void dismissCling(final Cling cling, final Runnable postAnimationCb, + final String flag, int duration, boolean restoreNavBarVisibilty) { + // To catch cases where siblings of top-level views are made invisible, just check whether + // the cling is directly set to GONE before dismissing it. + if (cling != null && cling.getVisibility() != View.GONE) { + final Runnable cleanUpClingCb = new Runnable() { + public void run() { + cling.cleanup(); + SharedPreferences.Editor editor = mLauncher.getSharedPrefs().edit(); + editor.putBoolean(flag, true); + editor.apply(); + if (postAnimationCb != null) { + postAnimationCb.run(); + } + } + }; + if (duration <= 0) { + cleanUpClingCb.run(); + } else { + cling.hide(duration, cleanUpClingCb); + } + mHideFromAccessibilityHelper.restoreImportantForAccessibility(mLauncher.getDragLayer()); + + if (restoreNavBarVisibilty) { + cling.setSystemUiVisibility(cling.getSystemUiVisibility() & + ~View.SYSTEM_UI_FLAG_LOW_PROFILE); + } + } + } + + public void dismissFirstRunCling(View v) { + Cling cling = (Cling) mLauncher.findViewById(R.id.first_run_cling); + Runnable cb = new Runnable() { + public void run() { + // Show the workspace cling next + showWorkspaceCling(); + } + }; + dismissCling(cling, cb, FIRST_RUN_CLING_DISMISSED_KEY, + DISMISS_CLING_DURATION, false); + + // Fade out the search bar for the workspace cling coming up + mLauncher.getSearchBar().hideSearchBar(true); + } + + private void dismissMigrationCling() { + mLauncher.showWorkspaceSearchAndHotseat(); + Runnable dismissCb = new Runnable() { + public void run() { + Cling cling = (Cling) mLauncher.findViewById(R.id.migration_cling); + Runnable cb = new Runnable() { + public void run() { + // Show the migration workspace cling next + showMigrationWorkspaceCling(); + } + }; + dismissCling(cling, cb, WORKSPACE_CLING_DISMISSED_KEY, + DISMISS_CLING_DURATION, true); + } + }; + mLauncher.getWorkspace().post(dismissCb); + } + + private void dismissAnyWorkspaceCling(Cling cling, View v) { + Runnable cb = null; + if (v == null) { + cb = new Runnable() { + public void run() { + mLauncher.getWorkspace().enterOverviewMode(); + } + }; + } + dismissCling(cling, cb, WORKSPACE_CLING_DISMISSED_KEY, + DISMISS_CLING_DURATION, true); + + // Fade in the search bar + mLauncher.getSearchBar().showSearchBar(true); + } + + public void dismissMigrationClingCopyApps(View v) { + // Copy the shortcuts from the old database + LauncherModel model = mLauncher.getModel(); + model.resetLoadedState(false, true); + model.startLoader(false, PagedView.INVALID_RESTORE_PAGE, + LauncherModel.LOADER_FLAG_CLEAR_WORKSPACE + | LauncherModel.LOADER_FLAG_MIGRATE_SHORTCUTS); + + // Set the flag to skip the folder cling + String spKey = LauncherAppState.getSharedPreferencesKey(); + SharedPreferences sp = mLauncher.getSharedPreferences(spKey, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.putBoolean(Launcher.USER_HAS_MIGRATED, true); + editor.apply(); + + // Disable the migration cling + dismissMigrationCling(); + } + + public void dismissMigrationClingUseDefault(View v) { + // Clear the workspace + LauncherModel model = mLauncher.getModel(); + model.resetLoadedState(false, true); + model.startLoader(false, PagedView.INVALID_RESTORE_PAGE, + LauncherModel.LOADER_FLAG_CLEAR_WORKSPACE); + + // Disable the migration cling + dismissMigrationCling(); + } + + public void dismissMigrationWorkspaceCling(View v) { + Cling cling = (Cling) mLauncher.findViewById(R.id.migration_workspace_cling); + dismissAnyWorkspaceCling(cling, v); + } + + public void dismissWorkspaceCling(View v) { + Cling cling = (Cling) mLauncher.findViewById(R.id.workspace_cling); + dismissAnyWorkspaceCling(cling, v); + } + + public void dismissFolderCling(View v) { + Cling cling = (Cling) mLauncher.findViewById(R.id.folder_cling); + dismissCling(cling, null, FOLDER_CLING_DISMISSED_KEY, + DISMISS_CLING_DURATION, true); + } +}
\ No newline at end of file diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index b2cfb2456..d271976a7 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -75,9 +75,15 @@ public class LauncherModel extends BroadcastReceiver { // false = strew non-workspace apps across the workspace on upgrade public static final boolean UPGRADE_USE_MORE_APPS_FOLDER = false; + public static final int LOADER_FLAG_NONE = 0; + public static final int LOADER_FLAG_CLEAR_WORKSPACE = 1 << 0; + public static final int LOADER_FLAG_MIGRATE_SHORTCUTS = 1 << 1; + private static final int ITEMS_CHUNK = 6; // batch size for the workspace icons private static final long INVALID_SCREEN_ID = -1L; + private final boolean mAppsCanBeOnRemoveableStorage; + private final boolean mOldContentProviderExists; private final LauncherAppState mApp; private final Object mLock = new Object(); @@ -181,9 +187,12 @@ public class LauncherModel extends BroadcastReceiver { } LauncherModel(LauncherAppState app, IconCache iconCache, AppFilter appFilter) { - final Context context = app.getContext(); + Context context = app.getContext(); + ContentResolver contentResolver = context.getContentResolver(); mAppsCanBeOnRemoveableStorage = Environment.isExternalStorageRemovable(); + mOldContentProviderExists = (contentResolver.acquireContentProviderClient( + LauncherSettings.Favorites.OLD_CONTENT_URI) != null); mApp = app; mBgAllAppsList = new AllAppsList(iconCache, appFilter); mIconCache = iconCache; @@ -218,6 +227,10 @@ public class LauncherModel extends BroadcastReceiver { } } + boolean canMigrateFromOldLauncherDb() { + return mOldContentProviderExists; + } + static boolean findNextAvailableIconSpaceInScreen(ArrayList<ItemInfo> items, int[] xy, long screen) { LauncherAppState app = LauncherAppState.getInstance(); @@ -1193,6 +1206,10 @@ public class LauncherModel extends BroadcastReceiver { } public void startLoader(boolean isLaunching, int synchronousBindPage) { + startLoader(isLaunching, synchronousBindPage, LOADER_FLAG_NONE); + } + + public void startLoader(boolean isLaunching, int synchronousBindPage, int loadFlags) { synchronized (mLock) { if (DEBUG_LOADERS) { Log.d(TAG, "startLoader isLaunching=" + isLaunching); @@ -1207,7 +1224,7 @@ public class LauncherModel extends BroadcastReceiver { // If there is already one running, tell it to stop. // also, don't downgrade isLaunching if we're already running isLaunching = isLaunching || stopLoaderLocked(); - mLoaderTask = new LoaderTask(mApp.getContext(), isLaunching); + mLoaderTask = new LoaderTask(mApp.getContext(), isLaunching, loadFlags); if (synchronousBindPage != PagedView.INVALID_RESTORE_PAGE && mAllAppsLoaded && mWorkspaceLoaded) { mLoaderTask.runBindSynchronousPage(synchronousBindPage); @@ -1298,13 +1315,15 @@ public class LauncherModel extends BroadcastReceiver { private boolean mIsLoadingAndBindingWorkspace; private boolean mStopped; private boolean mLoadAndBindStepFinished; + private int mFlags; private HashMap<Object, CharSequence> mLabelCache; - LoaderTask(Context context, boolean isLaunching) { + LoaderTask(Context context, boolean isLaunching, int flags) { mContext = context; mIsLaunching = isLaunching; mLabelCache = new HashMap<Object, CharSequence>(); + mFlags = flags; } boolean isLaunching() { @@ -1466,7 +1485,7 @@ public class LauncherModel extends BroadcastReceiver { sBgDbIconCache.clear(); } - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { // Ensure that all the applications that are in the system are // represented on the home screen. if (!UPGRADE_USE_MORE_APPS_FOLDER || !isUpgrade) { @@ -1651,7 +1670,7 @@ public class LauncherModel extends BroadcastReceiver { } } - /** Returns whether this is an upgradge path */ + /** Returns whether this is an upgrade path */ private boolean loadWorkspace() { // Log to disk Launcher.addDumpLog(TAG, "11683562 - loadWorkspace()", true); @@ -1669,8 +1688,20 @@ public class LauncherModel extends BroadcastReceiver { int countX = (int) grid.numColumns; int countY = (int) grid.numRows; - // Make sure the default workspace is loaded, if needed - LauncherAppState.getLauncherProvider().loadDefaultFavoritesIfNecessary(0); + if ((mFlags & LOADER_FLAG_CLEAR_WORKSPACE) != 0) { + Launcher.addDumpLog(TAG, "loadWorkspace: resetting launcher database", true); + LauncherAppState.getLauncherProvider().deleteDatabase(); + } + + if ((mFlags & LOADER_FLAG_MIGRATE_SHORTCUTS) != 0) { + // append the user's Launcher2 shortcuts + Launcher.addDumpLog(TAG, "loadWorkspace: migrating from launcher2", true); + LauncherAppState.getLauncherProvider().migrateLauncher2Shortcuts(); + } else { + // Make sure the default workspace is loaded + Launcher.addDumpLog(TAG, "loadWorkspace: loading default favorites", false); + LauncherAppState.getLauncherProvider().loadDefaultFavoritesIfNecessary(0); + } // Check if we need to do any upgrade-path logic // (Includes having just imported default favorites) @@ -2564,7 +2595,7 @@ public class LauncherModel extends BroadcastReceiver { if (added != null) { // Ensure that we add all the workspace applications to the db Callbacks cb = mCallbacks != null ? mCallbacks.get() : null; - if (!AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { addAndBindAddedApps(context, new ArrayList<ItemInfo>(), cb, added); } else { final ArrayList<ItemInfo> addedInfos = new ArrayList<ItemInfo>(added); diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 28efd0148..7adbadea1 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -55,9 +55,11 @@ import com.android.launcher3.config.ProviderConfig; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; +import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; public class LauncherProvider extends ContentProvider { @@ -72,7 +74,7 @@ public class LauncherProvider extends ContentProvider { static final String AUTHORITY = ProviderConfig.AUTHORITY; // Should we attempt to load anything from the com.android.launcher2 provider? - static final boolean IMPORT_LAUNCHER2_DATABASE = true; + static final boolean IMPORT_LAUNCHER2_DATABASE = false; static final String TABLE_FAVORITES = "favorites"; static final String TABLE_WORKSPACE_SCREENS = "workspaceScreens"; @@ -133,6 +135,9 @@ public class LauncherProvider extends ContentProvider { private static long dbInsertAndCheck(DatabaseHelper helper, SQLiteDatabase db, String table, String nullColumnHack, ContentValues values) { + if (values == null) { + throw new RuntimeException("Error: attempting to insert null values"); + } if (!values.containsKey(LauncherSettings.Favorites._ID)) { throw new RuntimeException("Error: attempting to add item without specifying an id"); } @@ -287,8 +292,13 @@ public class LauncherProvider extends ContentProvider { } } + public void migrateLauncher2Shortcuts() { + mOpenHelper.migrateLauncher2Shortcuts(mOpenHelper.getWritableDatabase(), + LauncherSettings.Favorites.OLD_CONTENT_URI); + } + private static int getDefaultWorkspaceResourceId() { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { return R.xml.default_workspace_no_all_apps; } else { return R.xml.default_workspace; @@ -306,6 +316,15 @@ public class LauncherProvider extends ContentProvider { return !isTablet && IMPORT_LAUNCHER2_DATABASE; } + public void deleteDatabase() { + // Are you sure? (y/n) + final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); + final String dbFile = db.getPath(); + mOpenHelper.close(); + SQLiteDatabase.deleteDatabase(new File(dbFile)); + mOpenHelper = new DatabaseHelper(getContext()); + } + private static class DatabaseHelper extends SQLiteOpenHelper { private static final String TAG_FAVORITES = "favorites"; private static final String TAG_FAVORITE = "favorite"; @@ -1431,6 +1450,209 @@ public class LauncherProvider extends ContentProvider { } return id; } + + public void migrateLauncher2Shortcuts(SQLiteDatabase db, Uri uri) { + final ContentResolver resolver = mContext.getContentResolver(); + Cursor c = null; + int count = 0; + int curScreen = 0; + + try { + c = resolver.query(uri, null, null, null, "title ASC"); + } catch (Exception e) { + // Ignore + } + + + // We already have a favorites database in the old provider + if (c != null) { + try { + if (c.getCount() > 0) { + final int idIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites._ID); + final int intentIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.INTENT); + final int titleIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.TITLE); + final int iconTypeIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ICON_TYPE); + final int iconIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ICON); + final int iconPackageIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ICON_PACKAGE); + final int iconResourceIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ICON_RESOURCE); + final int containerIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.CONTAINER); + final int itemTypeIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ITEM_TYPE); + final int screenIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.SCREEN); + final int cellXIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.CELLX); + final int cellYIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.CELLY); + final int uriIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.URI); + final int displayModeIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.DISPLAY_MODE); + + int i = 0; + int curX = 0; + int curY = 0; + + final LauncherAppState app = LauncherAppState.getInstance(); + final DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); + final int width = (int) grid.numColumns; + final int height = (int) grid.numRows; + final int hotseatWidth = (int) grid.numHotseatIcons; + + final HashSet<String> seenIntents = new HashSet<String>(c.getCount()); + + final ContentValues[] rows = new ContentValues[c.getCount()]; + + while (c.moveToNext()) { + final int itemType = c.getInt(itemTypeIndex); + if (itemType != Favorites.ITEM_TYPE_APPLICATION + && itemType != Favorites.ITEM_TYPE_SHORTCUT + && itemType != Favorites.ITEM_TYPE_FOLDER) { + continue; + } + + final int cellX = c.getInt(cellXIndex); + final int cellY = c.getInt(cellYIndex); + final int screen = c.getInt(screenIndex); + int container = c.getInt(containerIndex); + final String intentStr = c.getString(intentIndex); + Launcher.addDumpLog(TAG, "migrating \"" + + c.getString(titleIndex) + "\": " + intentStr, true); + + if (itemType != Favorites.ITEM_TYPE_FOLDER) { + if (TextUtils.isEmpty(intentStr)) { + // no intent? no icon + Launcher.addDumpLog(TAG, "skipping empty intent", true); + continue; + } else { + try { + // Canonicalize + final Intent intent = Intent.parseUri(intentStr, 0); + // the Play Store sets the package parameter, but Launcher + // does not, so we clear that out to keep them the same + intent.setPackage(null); + final String key = intent.toUri(0); + if (seenIntents.contains(key)) { + Launcher.addDumpLog(TAG, "skipping duplicate", true); + continue; + } else { + seenIntents.add(key); + } + } catch (URISyntaxException e) { + // bogus intent? + Launcher.addDumpLog(TAG, + "skipping invalid intent uri", true); + continue; + } + } + } + + ContentValues values = new ContentValues(c.getColumnCount()); + values.put(LauncherSettings.Favorites._ID, c.getInt(idIndex)); + values.put(LauncherSettings.Favorites.INTENT, intentStr); + values.put(LauncherSettings.Favorites.TITLE, c.getString(titleIndex)); + values.put(LauncherSettings.Favorites.ICON_TYPE, + c.getInt(iconTypeIndex)); + values.put(LauncherSettings.Favorites.ICON, c.getBlob(iconIndex)); + values.put(LauncherSettings.Favorites.ICON_PACKAGE, + c.getString(iconPackageIndex)); + values.put(LauncherSettings.Favorites.ICON_RESOURCE, + c.getString(iconResourceIndex)); + values.put(LauncherSettings.Favorites.ITEM_TYPE, itemType); + values.put(LauncherSettings.Favorites.APPWIDGET_ID, -1); + values.put(LauncherSettings.Favorites.URI, c.getString(uriIndex)); + values.put(LauncherSettings.Favorites.DISPLAY_MODE, + c.getInt(displayModeIndex)); + + if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT + && screen >= hotseatWidth) { + // no room for you in the hotseat? it's off to the desktop with you + container = Favorites.CONTAINER_DESKTOP; + } + + if (container != LauncherSettings.Favorites.CONTAINER_DESKTOP) { + // In a folder or in the hotseat, preserve position + values.put(LauncherSettings.Favorites.SCREEN, screen); + values.put(LauncherSettings.Favorites.CELLX, cellX); + values.put(LauncherSettings.Favorites.CELLY, cellY); + } else { + values.put(LauncherSettings.Favorites.SCREEN, curScreen); + values.put(LauncherSettings.Favorites.CELLX, curX); + values.put(LauncherSettings.Favorites.CELLY, curY); + curX = (curX + 1) % width; + if (curX == 0) { + curY = (curY + 1); + } + // Leave the last row of icons blank on screen 0 + if (curScreen == 0 && curY == height - 1 || curY == height) { + curScreen = (int) generateNewScreenId(); + curY = 0; + } + } + + values.put(LauncherSettings.Favorites.CONTAINER, container); + + rows[i++] = values; + } + + if (i > 0) { + db.beginTransaction(); + try { + final int N = rows.length; + for (i = 0; i < N; i++) { + if (rows[i] == null) continue; + if (dbInsertAndCheck(this, db, TABLE_FAVORITES, null, rows[i]) + < 0) { + return; + } else { + count++; + } + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + + db.beginTransaction(); + try { + for (i=0; i<=curScreen; i++) { + final ContentValues values = new ContentValues(); + values.put(LauncherSettings.WorkspaceScreens._ID, i); + values.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, i); + if (dbInsertAndCheck(this, db, TABLE_WORKSPACE_SCREENS, null, values) + < 0) { + return; + } + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + } finally { + c.close(); + } + } + + Launcher.addDumpLog(TAG, "migrated " + count + " icons from Launcher2 into " + + (curScreen+1) + " screens", true); + + // ensure that new screens are created to hold these icons + setFlagJustLoadedOldDb(); + + // Update max IDs; very important since we just grabbed IDs from another database + mMaxItemId = initializeMaxItemId(db); + mMaxScreenId = initializeMaxScreenId(db); + if (LOGD) Log.d(TAG, "mMaxItemId: " + mMaxItemId + " mMaxScreenId: " + mMaxScreenId); + } } /** diff --git a/src/com/android/launcher3/OnAlarmListener.java b/src/com/android/launcher3/OnAlarmListener.java new file mode 100644 index 000000000..b5ef83e83 --- /dev/null +++ b/src/com/android/launcher3/OnAlarmListener.java @@ -0,0 +1,5 @@ +package com.android.launcher3; + +public interface OnAlarmListener { + public void onAlarm(Alarm alarm); +} diff --git a/src/com/android/launcher3/WallpaperChangedReceiver.java b/src/com/android/launcher3/WallpaperChangedReceiver.java index 28e41d8a5..2d5612f12 100644 --- a/src/com/android/launcher3/WallpaperChangedReceiver.java +++ b/src/com/android/launcher3/WallpaperChangedReceiver.java @@ -22,6 +22,7 @@ import android.content.Intent; public class WallpaperChangedReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent data) { + LauncherAppState.setApplicationContext(context.getApplicationContext()); LauncherAppState appState = LauncherAppState.getInstance(); appState.onWallpaperChanged(); } diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index 7e1ad6d76..3db0b51ad 100644 --- a/src/com/android/launcher3/WidgetPreviewLoader.java +++ b/src/com/android/launcher3/WidgetPreviewLoader.java @@ -10,6 +10,7 @@ import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteDiskIOException; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; @@ -164,6 +165,12 @@ public class WidgetPreviewLoader { editor.commit(); } } + + public void recreateDb() { + LauncherAppState app = LauncherAppState.getInstance(); + app.recreateWidgetPreviewDb(); + mDb = app.getWidgetPreviewCacheDb(); + } public void setPreviewSize(int previewWidth, int previewHeight, PagedViewCellLayout widgetSpacingLayout) { @@ -347,13 +354,20 @@ public class WidgetPreviewLoader { preview.compress(Bitmap.CompressFormat.PNG, 100, stream); values.put(CacheDb.COLUMN_PREVIEW_BITMAP, stream.toByteArray()); values.put(CacheDb.COLUMN_SIZE, mSize); - db.insert(CacheDb.TABLE_NAME, null, values); + try { + db.insert(CacheDb.TABLE_NAME, null, values); + } catch (SQLiteDiskIOException e) { + recreateDb(); + } } private void clearDb() { SQLiteDatabase db = mDb.getWritableDatabase(); // Delete everything - db.delete(CacheDb.TABLE_NAME, null, null); + try { + db.delete(CacheDb.TABLE_NAME, null, null); + } catch (SQLiteDiskIOException e) { + } } public static void removePackageFromDb(final CacheDb cacheDb, final String packageName) { @@ -363,13 +377,17 @@ public class WidgetPreviewLoader { new AsyncTask<Void, Void, Void>() { public Void doInBackground(Void ... args) { SQLiteDatabase db = cacheDb.getWritableDatabase(); - db.delete(CacheDb.TABLE_NAME, - CacheDb.COLUMN_NAME + " LIKE ? OR " + - CacheDb.COLUMN_NAME + " LIKE ?", // SELECT query - new String[] { - WIDGET_PREFIX + packageName + "/%", - SHORTCUT_PREFIX + packageName + "/%"} // args to SELECT query - ); + try { + db.delete(CacheDb.TABLE_NAME, + CacheDb.COLUMN_NAME + " LIKE ? OR " + + CacheDb.COLUMN_NAME + " LIKE ?", // SELECT query + new String[] { + WIDGET_PREFIX + packageName + "/%", + SHORTCUT_PREFIX + packageName + "/%" + } // args to SELECT query + ); + } catch (SQLiteDiskIOException e) { + } synchronized(sInvalidPackages) { sInvalidPackages.remove(packageName); } @@ -382,9 +400,12 @@ public class WidgetPreviewLoader { new AsyncTask<Void, Void, Void>() { public Void doInBackground(Void ... args) { SQLiteDatabase db = cacheDb.getWritableDatabase(); - db.delete(CacheDb.TABLE_NAME, - CacheDb.COLUMN_NAME + " = ? ", // SELECT query - new String[] { objectName }); // args to SELECT query + try { + db.delete(CacheDb.TABLE_NAME, + CacheDb.COLUMN_NAME + " = ? ", // SELECT query + new String[] { objectName }); // args to SELECT query + } catch (SQLiteDiskIOException e) { + } return null; } }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); @@ -396,14 +417,20 @@ public class WidgetPreviewLoader { CacheDb.COLUMN_SIZE + " = ?"; } SQLiteDatabase db = mDb.getReadableDatabase(); - Cursor result = db.query(CacheDb.TABLE_NAME, - new String[] { CacheDb.COLUMN_PREVIEW_BITMAP }, // cols to return - mCachedSelectQuery, // select query - new String[] { name, mSize }, // args to select query - null, - null, - null, - null); + Cursor result; + try { + result = db.query(CacheDb.TABLE_NAME, + new String[] { CacheDb.COLUMN_PREVIEW_BITMAP }, // cols to return + mCachedSelectQuery, // select query + new String[] { name, mSize }, // args to select query + null, + null, + null, + null); + } catch (SQLiteDiskIOException e) { + recreateDb(); + return null; + } if (result.getCount() > 0) { result.moveToFirst(); byte[] blob = result.getBlob(0); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index b6276c0f2..2ce9eb3ad 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -579,7 +579,7 @@ public class Workspace extends SmoothPagedView mDefaultPage = mOriginalDefaultPage + 1; // Update the custom content hint - mLauncher.updateCustomContentHintVisibility(); + mLauncher.getLauncherClings().updateCustomContentHintVisibility(); if (mRestorePage != INVALID_RESTORE_PAGE) { mRestorePage = mRestorePage + 1; } else { @@ -608,7 +608,7 @@ public class Workspace extends SmoothPagedView mDefaultPage = mOriginalDefaultPage - 1; // Update the custom content hint - mLauncher.updateCustomContentHintVisibility(); + mLauncher.getLauncherClings().updateCustomContentHintVisibility(); if (mRestorePage != INVALID_RESTORE_PAGE) { mRestorePage = mRestorePage - 1; } else { diff --git a/util/com/android/launcher3/DecoderRing.java b/util/com/android/launcher3/DecoderRing.java index 7098e189d..86431d9b7 100644 --- a/util/com/android/launcher3/DecoderRing.java +++ b/util/com/android/launcher3/DecoderRing.java @@ -86,6 +86,7 @@ class DecoderRing { boolean fromLogs = false; int skip = 0; List<File> files = new LinkedList<File>(); + boolean verbose = false; for (int i = 0; i < args.length; i++) { if ("-k".equals(args[i])) { @@ -108,6 +109,8 @@ class DecoderRing { } } else if ("-x".equals(args[i])) { extractImages = true; + } else if ("-v".equals(args[i])) { + verbose = true; } else if ("-L".equals(args[i])) { fromLogs = true; } else if (args[i] != null && !args[i].startsWith("-")) { @@ -123,7 +126,7 @@ class DecoderRing { usage(args); } - if (files.size() > 1) { + if (files.size() > 1 && defaultType != null) { System.err.println("Explicit type ignored for multiple files."); defaultType = null; } @@ -136,8 +139,13 @@ class DecoderRing { Class type = null; if (defaultType == null) { Key key = decodeKey(source.getName().getBytes(), fromLogs); - type = TYPES[key.type]; - System.err.println("This is a " + type.getSimpleName() + " backup"); + if (key != null) { + type = TYPES[key.type]; + if (verbose) { + System.err.println(source.getName() + " is a " + type.getSimpleName()); + System.out.println(key.toString()); + } + } } else { type = defaultType; } @@ -178,12 +186,14 @@ class DecoderRing { byte[] payload = byteStream.toByteArray(); if (type == Key.class) { proto = decodeKey(payload, fromLogs); - } else { + } else if (type != null) { proto = decodeBackupData(payload, type, fromLogs); } // Generic string output - System.out.println(proto.toString()); + if (proto != null) { + System.out.println(proto.toString()); + } if (extractImages) { String prefix = "stdin"; @@ -262,7 +272,7 @@ class DecoderRing { byte[] rawKey = DatatypeConverter.parseBase64Binary(encodedKey); if (rawKey[0] != 'L' || rawKey[1] != ':') { System.err.println(encodedKey + " is not a launcher backup key."); - System.exit(1); + return null; } encodedKey = new String(rawKey, 2, rawKey.length - 2); } @@ -270,16 +280,16 @@ class DecoderRing { key = Key.parseFrom(keyProtoData); } catch (InvalidProtocolBufferNanoException protoException) { System.err.println("failed to extract key from filename: " + protoException); - System.exit(1); + return null; } catch (IllegalArgumentException base64Exception) { System.err.println("failed to extract key from filename: " + base64Exception); - System.exit(1); + return null; } // keys are self-checked if (key.checksum != checkKey(key)) { System.err.println("key ckecksum failed"); - System.exit(1); + return null; } return key; } @@ -323,6 +333,7 @@ class DecoderRing { System.err.println("\t-w\tdecode a widget"); System.err.println("\t-S b\tskip b bytes"); System.err.println("\t-x\textract image data to files"); + System.err.println("\t-v\tprint key type data, as well as payload"); System.err.println("\t-l\texpect data from logcat, instead of the local transport"); System.err.println("\tfilename\tread from filename, not stdin"); System.exit(1); |