Merge changes from topic 'am-866a059a-f7fc-4082-9b78-f35b177cf256' into ub-launcher3-dorval-polish2
* changes:
separate enforceContainerWithinScreen logic to a private method am: 27790352a3
separate enforceContainerWithinScreen logic to a private method
diff --git a/Android.mk b/Android.mk
index 0543b42..d41e184 100644
--- a/Android.mk
+++ b/Android.mk
@@ -17,7 +17,7 @@
LOCAL_PATH := $(call my-dir)
#
-# Build app code.
+# Build rule for Launcher3 app.
#
include $(CLEAR_VARS)
@@ -63,6 +63,57 @@
include $(BUILD_PACKAGE)
#
+# Build rule for Launcher3 Go app for Android Go devices.
+#
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ android-support-v4 \
+ android-support-v7-recyclerview \
+ android-support-v7-palette \
+ android-support-dynamic-animation
+
+LOCAL_SRC_FILES := \
+ $(call all-java-files-under, src) \
+ $(call all-java-files-under, src_config) \
+ $(call all-java-files-under, go/src_flags) \
+ $(call all-proto-files-under, protos) \
+ $(call all-proto-files-under, proto_overrides)
+
+LOCAL_RESOURCE_DIR := \
+ $(LOCAL_PATH)/go/res \
+ $(LOCAL_PATH)/res \
+ prebuilts/sdk/current/support/v7/recyclerview/res \
+
+LOCAL_PROGUARD_FLAG_FILES := proguard.flags
+
+LOCAL_PROTOC_OPTIMIZE_TYPE := nano
+LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/protos/ --proto_path=$(LOCAL_PATH)/proto_overrides/
+LOCAL_PROTO_JAVA_OUTPUT_PARAMS := enum_style=java
+
+LOCAL_AAPT_FLAGS := \
+ --auto-add-overlay \
+ --extra-packages android.support.v7.recyclerview \
+
+LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 21
+LOCAL_PACKAGE_NAME := Launcher3Go
+LOCAL_PRIVILEGED_MODULE := true
+LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
+
+LOCAL_FULL_LIBS_MANIFEST_FILES := \
+ $(LOCAL_PATH)/AndroidManifest.xml \
+ $(LOCAL_PATH)/AndroidManifest-common.xml
+
+LOCAL_MANIFEST_FILE := go/AndroidManifest.xml
+
+LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.*
+
+include $(BUILD_PACKAGE)
+
+#
# Launcher proto buffer jar used for development
#
include $(CLEAR_VARS)
diff --git a/build.gradle b/build.gradle
index 79ee111..886ccac 100644
--- a/build.gradle
+++ b/build.gradle
@@ -35,11 +35,16 @@
applicationId 'com.android.launcher3'
testApplicationId 'com.android.launcher3.tests'
}
+
+ l3go {
+ applicationId 'com.android.launcher3'
+ testApplicationId 'com.android.launcher3.tests'
+ }
}
sourceSets {
main {
res.srcDirs = ['res']
- java.srcDirs = ['src', 'src_flags']
+ java.srcDirs = ['src']
manifest.srcFile 'AndroidManifest-common.xml'
proto {
srcDir 'protos/'
@@ -48,18 +53,31 @@
}
androidTest {
- java.srcDirs = ['tests/src']
res.srcDirs = ['tests/res']
+ java.srcDirs = ['tests/src']
manifest.srcFile "tests/AndroidManifest-common.xml"
}
aosp {
+ java.srcDirs = ['src_flags']
manifest.srcFile "AndroidManifest.xml"
}
aospAndroidTest {
manifest.srcFile "tests/AndroidManifest.xml"
}
+
+ l3go {
+ res.srcDirs = ['go/res']
+ java.srcDirs = ['go/src_flags']
+ // Note: we are using the Launcher3 manifest here because the gradle manifest-merger uses
+ // different attributes than the build system.
+ manifest.srcFile "AndroidManifest.xml"
+ }
+
+ l3goAndroidTest {
+ manifest.srcFile "tests/AndroidManifest.xml"
+ }
}
}
@@ -74,10 +92,10 @@
compile "com.android.support:support-dynamic-animation:${SUPPORT_LIBS_VERSION}"
compile "com.android.support:recyclerview-v7:${SUPPORT_LIBS_VERSION}"
compile "com.android.support:palette-v7:${SUPPORT_LIBS_VERSION}"
- compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-2'
+ compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'
testCompile 'junit:junit:4.12'
- androidTestCompile "org.mockito:mockito-core:1.+"
+ androidTestCompile "org.mockito:mockito-core:1.9.5"
androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
androidTestCompile 'com.android.support.test:runner:0.5'
diff --git a/go/AndroidManifest.xml b/go/AndroidManifest.xml
new file mode 100644
index 0000000..ed8e0ad
--- /dev/null
+++ b/go/AndroidManifest.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2017, 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.
+*/
+-->
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ package="com.android.launcher3" >
+
+ <uses-sdk android:targetSdkVersion="23" android:minSdkVersion="21"/>
+
+ <application
+ android:backupAgent="com.android.launcher3.LauncherBackupAgent"
+ android:fullBackupOnly="true"
+ android:fullBackupContent="@xml/backupscheme"
+ android:hardwareAccelerated="true"
+ android:icon="@drawable/ic_launcher_home"
+ android:label="@string/derived_app_name"
+ android:theme="@style/LauncherTheme"
+ android:largeHeap="@bool/config_largeHeap"
+ android:restoreAnyVersion="true"
+ android:supportsRtl="true" >
+
+ <!-- Activity for handling PinItemRequest. Only supports shortcuts -->
+ <activity android:name="com.android.launcher3.dragndrop.AddItemActivity"
+ android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert"
+ android:excludeFromRecents="true"
+ android:autoRemoveFromRecents="true"
+ android:label="@string/action_add_to_workspace"
+ tools:merge="override" >
+ <intent-filter>
+ <action android:name="android.content.pm.action.CONFIRM_PIN_SHORTCUT" />
+ </intent-filter>
+ </activity>
+
+ </application>
+
+</manifest>
diff --git a/go/res/layout/widget_cell_content.xml b/go/res/layout/widget_cell_content.xml
new file mode 100644
index 0000000..49506d9
--- /dev/null
+++ b/go/res/layout/widget_cell_content.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="@dimen/widget_preview_label_vertical_padding"
+ android:paddingBottom="@dimen/widget_preview_label_vertical_padding"
+ android:paddingLeft="@dimen/widget_preview_label_horizontal_padding"
+ android:paddingRight="@dimen/widget_preview_label_horizontal_padding"
+ android:orientation="horizontal">
+
+ <!-- The name of the widget. -->
+ <TextView
+ android:id="@+id/widget_name"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:ellipsize="end"
+ android:fadingEdge="horizontal"
+ android:fontFamily="sans-serif-condensed"
+ android:gravity="center"
+ android:singleLine="true"
+ android:maxLines="1"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textSize="14sp" />
+
+ <!-- The original dimensions of the widget (can't be the same text as above due to different
+ style. -->
+ <TextView
+ android:id="@+id/widget_dims"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="5dp"
+ android:layout_marginLeft="5dp"
+ android:visibility="gone"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textSize="14sp"
+ android:fontFamily="sans-serif-condensed"
+ android:alpha="0.8" />
+ </LinearLayout>
+
+ <!-- The image of the widget. This view does not support padding. Any placement adjustment
+ should be done using margins. -->
+ <com.android.launcher3.widget.WidgetImageView
+ android:id="@+id/widget_preview"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+</merge>
\ No newline at end of file
diff --git a/go/res/values/strings.xml b/go/res/values/strings.xml
new file mode 100644
index 0000000..8ef2e62
--- /dev/null
+++ b/go/res/values/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright (C) 2017 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+ <!-- Message to tell the user to press and hold on a shortcut to add it [CHAR_LIMIT=50] -->
+ <string name="long_press_widget_to_add">Touch & hold to pick up a shortcut.</string>
+ <!-- Accessibility spoken hint message in widget picker, which allows user to add a shortcut. Custom action is the label for additional accessibility actions available in this mode [CHAR_LIMIT=100] -->
+ <string name="long_accessible_way_to_add">Double-tap & hold to pick up a shortcut or use custom actions.</string>
+ <!-- Text for shortcut add button -->
+ <string name="widget_button_text">Shortcuts</string>
+
+ <!-- Strings for widgets & more in the popup container/bottom sheet -->
+ <!-- Title for a bottom sheet that shows shortcuts for a particular app -->
+ <string name="widgets_bottom_sheet_title"><xliff:g id="name" example="Messenger">%1$s</xliff:g> shortcuts</string>
+
+</resources>
diff --git a/go/src_flags/com/android/launcher3/config/FeatureFlags.java b/go/src_flags/com/android/launcher3/config/FeatureFlags.java
new file mode 100644
index 0000000..5bb2ac9
--- /dev/null
+++ b/go/src_flags/com/android/launcher3/config/FeatureFlags.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2017 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.config;
+
+/**
+ * Defines a set of flags used to control various launcher behaviors
+ */
+public final class FeatureFlags extends BaseFlags {
+
+ private FeatureFlags() {}
+
+ // Features to control Launcher3Go behavior
+ public static final boolean GO_DISABLE_WIDGETS = true;
+}
diff --git a/res/layout/folder_application.xml b/res/layout/folder_application.xml
index de861a0..9d4af0d 100644
--- a/res/layout/folder_application.xml
+++ b/res/layout/folder_application.xml
@@ -19,4 +19,9 @@
xmlns:launcher="http://schemas.android.com/apk/res-auto"
style="@style/BaseIcon"
android:includeFontPadding="false"
- launcher:iconDisplay="folder" />
+ android:paddingLeft="@dimen/folder_cell_x_padding"
+ android:paddingTop="@dimen/folder_cell_y_padding"
+ android:paddingRight="@dimen/folder_cell_x_padding"
+ android:paddingBottom="@dimen/folder_cell_y_padding"
+ launcher:centerVertically="true"
+ launcher:iconDisplay="folder"/>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 84faebe..9024427 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d breed by %2$d hoog"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Raak en hou om self te plaas"</string>
<string name="place_automatically" msgid="8064208734425456485">"Voeg outomaties by"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Deursoek programme"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Laai tans programme …"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Geen programme gevind wat met \"<xliff:g id="QUERY">%1$s</xliff:g>\" ooreenstem nie"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Soek meer programme"</string>
<string name="notifications_header" msgid="1404149926117359025">"Kennisgewings"</string>
<string name="out_of_space" msgid="4691004494942118364">"Niks meer spasie op die tuisskerm nie."</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 76a9734..88bc33f 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ስፋት በ%2$d ከፍታ"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"ራስዎ ለማስቀመጥ ነክተው ይያዙት"</string>
<string name="place_automatically" msgid="8064208734425456485">"በራስ-ሰር አክል"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"መተግበሪያዎችን ይፈልጉ"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"መተግበሪያዎችን በመጫን ላይ..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"ከ«<xliff:g id="QUERY">%1$s</xliff:g>» ጋር የሚዛመዱ ምንም መተግበሪያዎች አልተገኙም"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"ተጨማሪ መተግበሪያዎች ይፈልጉ"</string>
<string name="notifications_header" msgid="1404149926117359025">"ማሳወቂያዎች"</string>
<string name="out_of_space" msgid="4691004494942118364">"በዚህ መነሻ ማያ ገጽ ላይ ምንም ቦታ የለም።"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index e51880a..98106c5 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"العرض %1$d الطول %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"المس مع الاستمرار للإضافة يدويًا"</string>
<string name="place_automatically" msgid="8064208734425456485">"إضافة تلقائيًا"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"البحث في التطبيقات"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"جارٍ تحميل التطبيقات…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"لم يتم العثور على أية تطبيقات تتطابق مع \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"البحث عن مزيد من التطبيقات"</string>
<string name="notifications_header" msgid="1404149926117359025">"الإشعارات"</string>
<string name="out_of_space" msgid="4691004494942118364">"ليس هناك مساحة أخرى في هذه الشاشة الرئيسية."</string>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 2a6615a..b33d8b5 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%2$d hündürlük %1$d enində"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Manual olaraq yerləşdirmək üçün toxunaraq basıb saxlayın"</string>
<string name="place_automatically" msgid="8064208734425456485">"Avtomatik əlavə edin"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Tətbiq Axtarın"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Tətbiqlər endirilir..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" sorğusuna uyğun Tətbiqlər tapılmadı"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Daha çox tətbiq üçün axtarış edin"</string>
<string name="notifications_header" msgid="1404149926117359025">"Bildirişlər"</string>
<string name="out_of_space" msgid="4691004494942118364">"Bu Əsas ekranda boş yer yoxdur."</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index f17c5f0..4294499 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"širina od %1$d i visina od %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Dodirnite i zadržite da biste postavili ručno"</string>
<string name="place_automatically" msgid="8064208734425456485">"Automatski dodaj"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Pretražite aplikacije"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Aplikacije se učitavaju..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nije pronađena nijedna aplikacija za „<xliff:g id="QUERY">%1$s</xliff:g>“"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Pretraži još aplikacija"</string>
<string name="notifications_header" msgid="1404149926117359025">"Obaveštenja"</string>
<string name="out_of_space" msgid="4691004494942118364">"Nema više prostora na ovom početnom ekranu."</string>
diff --git a/res/values-be-rBY/strings.xml b/res/values-be-rBY/strings.xml
index 4b14a8c..c9bd447 100644
--- a/res/values-be-rBY/strings.xml
+++ b/res/values-be-rBY/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Шырына: %1$d, вышыня: %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Каб размясціць уручную, дакраніцеся і ўтрымлівайце"</string>
<string name="place_automatically" msgid="8064208734425456485">"Дадаць аўтаматычна"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Пошук у Праграмах"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Ідзе загрузка праграм…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Праграм, якія адпавядаюць запыту \"<xliff:g id="QUERY">%1$s</xliff:g>\", не знойдзена"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Шукаць іншыя праграмы"</string>
<string name="notifications_header" msgid="1404149926117359025">"Апавяшчэнні"</string>
<string name="out_of_space" msgid="4691004494942118364">"На гэтым Галоўным экране больш няма месца."</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index c2248d8..7883d7c 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ширина %1$d и височина %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Докоснете и задръжте, за да поставите ръчно"</string>
<string name="place_automatically" msgid="8064208734425456485">"Автоматично добавяне"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Търсене в приложенията"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Приложенията се зареждат…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Няма намерени приложения, съответстващи на „<xliff:g id="QUERY">%1$s</xliff:g>“"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Търсене на още приложения"</string>
<string name="notifications_header" msgid="1404149926117359025">"Известия"</string>
<string name="out_of_space" msgid="4691004494942118364">"На този начален екран няма повече място."</string>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 02a95f2..97bb90a 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%2$d উচ্চতা অনুযায়ী %1$d প্রস্থ"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"নিজে যোগ করতে টাচ করে ধরে রাখুন"</string>
<string name="place_automatically" msgid="8064208734425456485">"স্বয়ংক্রিয়ভাবে যোগ করুন"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"অ্যাপ্লিকেশানগুলি অনুসন্ধান করুন"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"অ্যাপ্লিকেশানগুলি লোড হচ্ছে..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" এর সাথে মেলে এমন কোনো অ্যাপ্লিকেশান পাওয়া যায়নি"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"আরো অ্যাপ্লিকেশানের জন্য অনুসন্ধান করুন"</string>
<string name="notifications_header" msgid="1404149926117359025">"বিজ্ঞপ্তি"</string>
<string name="out_of_space" msgid="4691004494942118364">"এই হোম স্ক্রীনে আর কোনো জায়গা নেই৷"</string>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
index a8e7f2e..032fafb 100644
--- a/res/values-bs-rBA/strings.xml
+++ b/res/values-bs-rBA/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Širina %1$d, visina %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Dodirnite i držite da postavite ručno"</string>
<string name="place_automatically" msgid="8064208734425456485">"Dodaj automatski"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Pretraži aplikacije"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Aplikacije se učitavaju…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nije pronađena nijedna aplikacija koja odgovara upitu \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Pretraži više aplikacija"</string>
<string name="notifications_header" msgid="1404149926117359025">"Obavještenja"</string>
<string name="out_of_space" msgid="4691004494942118364">"Na ovom početnom ekranu nema više prostora."</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index ad6c9d1..0685c90 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d d\'amplada per %2$d d\'alçada"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Toca i mantén premut l\'element per col·locar-lo manualment"</string>
<string name="place_automatically" msgid="8064208734425456485">"Afegeix automàticament"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Cerca a les aplicacions"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"S\'estan carregant les aplicacions..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"No s\'ha trobat cap aplicació que coincideixi amb <xliff:g id="QUERY">%1$s</xliff:g>"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Cerca més aplicacions"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notificacions"</string>
<string name="out_of_space" msgid="4691004494942118364">"Ja no queda espai en aquesta pantalla d\'inici."</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 715f279..7cef876 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"šířka %1$d, výška %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Chcete-li položku umístit ručně, klepněte na ni a podržte ji"</string>
<string name="place_automatically" msgid="8064208734425456485">"Přidat automaticky"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Hledat aplikace"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Načítání aplikací…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Dotazu „<xliff:g id="QUERY">%1$s</xliff:g>“ neodpovídají žádné aplikace"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Vyhledat další aplikace"</string>
<string name="notifications_header" msgid="1404149926117359025">"Oznámení"</string>
<string name="out_of_space" msgid="4691004494942118364">"Na této ploše již není místo."</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 04b1631..3d22280 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d i bredden og %2$d i højden"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tryk, og hold fingeren nede for at placere manuelt"</string>
<string name="place_automatically" msgid="8064208734425456485">"Tilføj automatisk"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Søg i Apps"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Indlæser apps…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Der blev ikke fundet nogen apps, som matcher \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Søg efter flere apps"</string>
<string name="notifications_header" msgid="1404149926117359025">"Underretninger"</string>
<string name="out_of_space" msgid="4691004494942118364">"Der er ikke mere plads på denne startskærm."</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index ce86822..c67fca7 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d breit und %2$d hoch"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Zum manuellen Hinzufügen gedrückt halten"</string>
<string name="place_automatically" msgid="8064208734425456485">"Automatisch hinzufügen"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"In Apps suchen"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Apps werden geladen..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Keine Apps für \"<xliff:g id="QUERY">%1$s</xliff:g>\" gefunden"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Weitere Apps suchen"</string>
<string name="notifications_header" msgid="1404149926117359025">"Benachrichtigungen"</string>
<string name="out_of_space" msgid="4691004494942118364">"Auf diesem Startbildschirm ist kein Platz mehr vorhanden."</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 2ac0ab3..1f27f2c 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Πλάτος %1$d επί ύψος %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Αγγίξτε παρατεταμένα για μη αυτόματη τοποθέτηση"</string>
<string name="place_automatically" msgid="8064208734425456485">"Αυτόματη προσθήκη"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Αναζήτηση εφαρμογών"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Φόρτωση εφαρμογών…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Δεν βρέθηκαν εφαρμογές για το ερώτημα \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Αναζήτηση περισσότερων εφαρμογών"</string>
<string name="notifications_header" msgid="1404149926117359025">"Ειδοποιήσεις"</string>
<string name="out_of_space" msgid="4691004494942118364">"Δεν υπάρχει χώρος σε αυτήν την αρχική οθόνη."</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 2c86f05..affa392 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d wide by %2$d high"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Touch & hold to place manually"</string>
<string name="place_automatically" msgid="8064208734425456485">"Add automatically"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Search Apps"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Loading Apps…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"No Apps found matching \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Search for more apps"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notifications"</string>
<string name="out_of_space" msgid="4691004494942118364">"No more room on this Home screen."</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 2c86f05..affa392 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d wide by %2$d high"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Touch & hold to place manually"</string>
<string name="place_automatically" msgid="8064208734425456485">"Add automatically"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Search Apps"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Loading Apps…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"No Apps found matching \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Search for more apps"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notifications"</string>
<string name="out_of_space" msgid="4691004494942118364">"No more room on this Home screen."</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 2c86f05..affa392 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d wide by %2$d high"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Touch & hold to place manually"</string>
<string name="place_automatically" msgid="8064208734425456485">"Add automatically"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Search Apps"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Loading Apps…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"No Apps found matching \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Search for more apps"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notifications"</string>
<string name="out_of_space" msgid="4691004494942118364">"No more room on this Home screen."</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index f57718d..1725ac6 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de ancho por %2$d de alto"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Mantén presionado para ubicarlo manualmente"</string>
<string name="place_automatically" msgid="8064208734425456485">"Agregar automáticamente"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Buscar aplicaciones"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Cargando aplicaciones…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"No hay aplicaciones que coincidan con <xliff:g id="QUERY">%1$s</xliff:g>."</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Buscar más apps"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notificaciones"</string>
<string name="out_of_space" msgid="4691004494942118364">"No hay más espacio en esta pantalla principal."</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index a7b2ab9..68646aa 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de ancho por %2$d de alto"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Mantenlo pulsado para añadirlo manualmente"</string>
<string name="place_automatically" msgid="8064208734425456485">"Añadir automáticamente"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Busca aplicaciones"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Cargando aplicaciones…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"No se han encontrado aplicaciones que contengan \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Buscar más aplicaciones"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notificaciones"</string>
<string name="out_of_space" msgid="4691004494942118364">"No queda espacio en la pantalla de inicio."</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 68bf644..9105883 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d lai ja %2$d kõrge"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Puudutage pikalt, et käsitsi asetada"</string>
<string name="place_automatically" msgid="8064208734425456485">"Lisa automaatselt"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Otsige rakendustest"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Rakenduste laadimine ..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Päringule „<xliff:g id="QUERY">%1$s</xliff:g>” ei vastanud ükski rakendus"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Otsi rohkem rakendusi"</string>
<string name="notifications_header" msgid="1404149926117359025">"Märguanded"</string>
<string name="out_of_space" msgid="4691004494942118364">"Sellel avaekraanil pole enam ruumi."</string>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index f229586..ae14058 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d zabal eta %2$d luze"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Eduki sakatuta eskuz gehitzeko"</string>
<string name="place_automatically" msgid="8064208734425456485">"Gehitu automatikoki"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Bilatu aplikazioetan"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Aplikazioak kargatzen…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Ez da aurkitu \"<xliff:g id="QUERY">%1$s</xliff:g>\" bilaketarekin bat datorren aplikaziorik"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Bilatu aplikazio gehiago"</string>
<string name="notifications_header" msgid="1404149926117359025">"Jakinarazpenak"</string>
<string name="out_of_space" msgid="4691004494942118364">"Hasierako pantaila honetan ez dago toki gehiago."</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 05c8e08..5808a3f 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d عرض در %2$d طول"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"برای قرار دادن بهصورت دستی لمس کنید و بکشید"</string>
<string name="place_automatically" msgid="8064208734425456485">"افزودن خودکار"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"جستجوی برنامهها"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"در حال بارگیری برنامهها..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"هیچ برنامهای مطابق با «<xliff:g id="QUERY">%1$s</xliff:g>» پیدا نشد"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"جستجوی برنامههای بیشتر"</string>
<string name="notifications_header" msgid="1404149926117359025">"اعلانها"</string>
<string name="out_of_space" msgid="4691004494942118364">"فضای بیشتری در این صفحه اصلی موجود نیست."</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 8992f61..f4ef7bf 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Leveys: %1$d, korkeus: %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Sijoita manuaalisesti koskettamalla pitkään."</string>
<string name="place_automatically" msgid="8064208734425456485">"Lisää automaattisesti"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Sovellushaku"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Ladataan sovelluksia…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"”<xliff:g id="QUERY">%1$s</xliff:g>” ei palauttanut sovelluksia."</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Hae lisää sovelluksia"</string>
<string name="notifications_header" msgid="1404149926117359025">"Ilmoitukset"</string>
<string name="out_of_space" msgid="4691004494942118364">"Tässä aloitusruudussa ei ole enää tilaa."</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 57ef4f8..3c11d7a 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largeur sur %2$d de hauteur"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Maintenez le doigt sur l\'élément pour le placer manuellement"</string>
<string name="place_automatically" msgid="8064208734425456485">"Ajouter automatiquement"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Rechercher des applications"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Chargement des applications en cours..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Aucune application trouvée correspondant à « <xliff:g id="QUERY">%1$s</xliff:g> »"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Rechercher plus d\'applications"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notifications"</string>
<string name="out_of_space" msgid="4691004494942118364">"Pas d\'espace libre sur l\'écran d\'accueil."</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 5daab91..4a4a40f 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largeur et %2$d de hauteur"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Appuyez de manière prolongée pour placer l\'élément manuellement"</string>
<string name="place_automatically" msgid="8064208734425456485">"Ajouter automatiquement"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Rechercher dans les applications"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Chargement des applications en cours…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Aucune application ne correspond à la requête \"<xliff:g id="QUERY">%1$s</xliff:g>\"."</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Rechercher plus d\'applications"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notifications"</string>
<string name="out_of_space" msgid="4691004494942118364">"Pas d\'espace libre sur cet écran d\'accueil."</string>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index 5df3c87..cb3e5c5 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largo por %2$d de alto"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Mantén premido o elemento para colocalo manualmente"</string>
<string name="place_automatically" msgid="8064208734425456485">"Engadir automaticamente"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Aplicacións de busca"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Cargando aplicacións..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Non se atoparon aplicacións que coincidan con \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Buscar máis aplicacións"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notificacións"</string>
<string name="out_of_space" msgid="4691004494942118364">"Non hai máis espazo nesta pantalla de inicio."</string>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index 587d16e..00b9582 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d પહોળાઈ X %2$d ઊંચાઈ"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"મેન્યુઅલી મૂકવા માટે ટચ કરી દબાવી રાખો"</string>
<string name="place_automatically" msgid="8064208734425456485">"આપમેળે ઉમેરો"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"શોધ ઍપ્લિકેશનો"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"ઍપ્લિકેશનો લોડ કરી રહ્યું છે…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" થી મેળ ખાતી કોઈ ઍપ્લિકેશનો મળી નથી"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"વધુ ઍપ્લિકેશનો શોધો"</string>
<string name="notifications_header" msgid="1404149926117359025">"સૂચનાઓ"</string>
<string name="out_of_space" msgid="4691004494942118364">"આ હોમ સ્ક્રીન પર વધુ જગ્યા નથી."</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index bb9aa5c..b59dd07 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d चौड़ाई गुणा %2$d ऊंचाई"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"मैन्युअल रूप से जोड़ने के लिए स्पर्श करके रखें"</string>
<string name="place_automatically" msgid="8064208734425456485">"अपने आप जोड़ें"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ऐप्स खोजें"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"ऐप्स लोड हो रहे हैं..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" से मिलान करने वाला कोई ऐप नहीं मिला"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"अधिक ऐप्लिकेशन खोजें"</string>
<string name="notifications_header" msgid="1404149926117359025">"नोटिफ़िकेशन"</string>
<string name="out_of_space" msgid="4691004494942118364">"इस होम स्क्रीन पर स्थान शेष नहीं है."</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 0e272f2..cfd32ca 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d širine i %2$d visine"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Dodirnite i zadržite stavku da biste je postavili ručno"</string>
<string name="place_automatically" msgid="8064208734425456485">"Dodaj automatski"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Pretraži aplikacije"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Učitavanje aplikacija…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nema aplikacija podudarnih s upitom \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Traži više aplikacija"</string>
<string name="notifications_header" msgid="1404149926117359025">"Obavijesti"</string>
<string name="out_of_space" msgid="4691004494942118364">"Na ovom početnom zaslonu više nema mjesta."</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 0f3f3b4..1c58702 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d széles és %2$d magas"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tartsa lenyomva a manuális hozzáadáshoz"</string>
<string name="place_automatically" msgid="8064208734425456485">"Automatikus hozzáadás"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Alkalmazások keresése"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Alkalmazások betöltése…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Egy alkalmazás sem található a(z) „<xliff:g id="QUERY">%1$s</xliff:g>” lekérdezésre."</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"További alkalmazások keresése"</string>
<string name="notifications_header" msgid="1404149926117359025">"Értesítések"</string>
<string name="out_of_space" msgid="4691004494942118364">"Nincs több hely ezen a kezdőképernyőn."</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 6d708d0..166ba03 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Լայնությունը՝ %1$d, բարձրությունը՝ %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Հպեք և պահեք՝ ձեռքով տեղադրելու համար"</string>
<string name="place_automatically" msgid="8064208734425456485">"Ավելացնել ավտոմատ կերպով"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Հավելվածների որոնում"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Հավելվածների բեռնում…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"«<xliff:g id="QUERY">%1$s</xliff:g>» հարցմանը համապատասխանող հավելվածներ չեն գտնվել"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Որոնել այլ հավելվածներ"</string>
<string name="notifications_header" msgid="1404149926117359025">"Ծանուցումներ"</string>
<string name="out_of_space" msgid="4691004494942118364">"Այլևս տեղ չկա այս հիմնական էկրանին:"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 57ffa14..8175c1c 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"lebar %1$d x tinggi %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Sentuh & tahan untuk menempatkan secara manual"</string>
<string name="place_automatically" msgid="8064208734425456485">"Tambahkan otomatis"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Telusuri Apps"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Memuat Aplikasi..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Tidak ditemukan Aplikasi yang cocok dengan \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Telusuri aplikasi lainnya"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notifikasi"</string>
<string name="out_of_space" msgid="4691004494942118364">"Tidak ada ruang lagi pada layar Utama ini."</string>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 5dcfb4e..3af0bdd 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d á breidd og %2$d á hæð"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Haltu inni til að staðsetja handvirkt"</string>
<string name="place_automatically" msgid="8064208734425456485">"Bæta sjálfkrafa við"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Leita í forritum"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Hleður forrit…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Ekki fundust forrit sem samsvara „<xliff:g id="QUERY">%1$s</xliff:g>“"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Leita að fleiri forritum"</string>
<string name="notifications_header" msgid="1404149926117359025">"Tilkynningar"</string>
<string name="out_of_space" msgid="4691004494942118364">"Ekki meira pláss á þessum heimaskjá."</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index ac04f31..4ae5b33 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d di larghezza per %2$d di altezza"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tieni premuto per posizionare l\'elemento manualmente"</string>
<string name="place_automatically" msgid="8064208734425456485">"Aggiungi automaticamente"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Cerca app"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Caricamento di app…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nessuna app trovata corrispondente a \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Cerca altre app"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notifiche"</string>
<string name="out_of_space" msgid="4691004494942118364">"Spazio nella schermata Home esaurito."</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 83c4296..b7751fb 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"רוחב %1$d על גובה %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"גע והחזק כדי להוסיף ידנית"</string>
<string name="place_automatically" msgid="8064208734425456485">"הוסף באופן אוטומטי"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"חפש אפליקציות"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"טוען אפליקציות…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"לא נמצאו אפליקציות התואמות ל-\"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"חפש אפליקציות נוספות"</string>
<string name="notifications_header" msgid="1404149926117359025">"הודעות"</string>
<string name="out_of_space" msgid="4691004494942118364">"אין עוד מקום במסך דף הבית הזה."</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index a11304d..44b73a8 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"幅 %1$d、高さ %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"押し続けると、手動で追加できます"</string>
<string name="place_automatically" msgid="8064208734425456485">"自動的に追加"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"アプリを検索"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"アプリを読み込んでいます…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"「<xliff:g id="QUERY">%1$s</xliff:g>」に一致するアプリは見つかりませんでした"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"他のアプリを検索"</string>
<string name="notifications_header" msgid="1404149926117359025">"通知"</string>
<string name="out_of_space" msgid="4691004494942118364">"このホーム画面に空きスペースがありません。"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 0f10d2b..892fdd9 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"სიგრძე: %1$d, სიგანე: %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"ხანგრძლივად შეეხეთ ხელით განსათავსებლად"</string>
<string name="place_automatically" msgid="8064208734425456485">"ავტომატურად დამატება"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"აპების ძიება"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"აპები იტვირთება..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"„<xliff:g id="QUERY">%1$s</xliff:g>“-ის თანხვედრი აპები არ მოიძებნა"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"მეტი აპის პოვნა"</string>
<string name="notifications_header" msgid="1404149926117359025">"შეტყობინებები"</string>
<string name="out_of_space" msgid="4691004494942118364">"ამ მთავარ ეკრანზე ადგილი აღარ არის."</string>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 5638d8b..f66e0c7 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ені: %1$d, биіктігі: %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Қолмен қою үшін басып тұрыңыз"</string>
<string name="place_automatically" msgid="8064208734425456485">"Автоматты енгізу"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Қолданбаларды іздеу"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Қолданбалар жүктелуде…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"«<xliff:g id="QUERY">%1$s</xliff:g>» сұрауына сәйкес келетін қолданбалар жоқ"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Қосымша қолданбалар іздеу"</string>
<string name="notifications_header" msgid="1404149926117359025">"Хабарландырулар"</string>
<string name="out_of_space" msgid="4691004494942118364">"Бұл Негізгі экранда орын қалмады."</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index c60f09f..ba6eebd 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"ទទឺង %1$d គុណនឹងកម្ពស់ %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"ចុចឲ្យជាប់ដើម្បីបញ្ចូលវាដោយផ្ទាល់"</string>
<string name="place_automatically" msgid="8064208734425456485">"បញ្ចូលដោយស្វ័យប្រវត្តិ"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ស្វែងរកកម្មវិធី"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"កំពុងដំណើរការកម្មវិធី..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"គ្មានកម្មវិធីដែលត្រូវជាមួយ \"<xliff:g id="QUERY">%1$s</xliff:g>\" ទេ"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"ស្វែងរកកម្មវិធីច្រើនទៀត"</string>
<string name="notifications_header" msgid="1404149926117359025">"ការជូនដំណឹង"</string>
<string name="out_of_space" msgid="4691004494942118364">"គ្មានបន្ទប់នៅលើអេក្រង់ដើមនេះទៀតទេ។"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 7566503..2c6fa09 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ಅಗಲ ಮತ್ತು %2$d ಎತ್ತರ"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"ಹಸ್ತಚಾಲಿತವಾಗಿ ಸೇರಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹೋಲ್ಡ್ ಮಾಡಿ"</string>
<string name="place_automatically" msgid="8064208734425456485">"ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೇರಿಸಿ"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ಅಪ್ಲಿಕೇಷನ್ಗಳನ್ನು ಹುಡುಕಿ"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" ಹೊಂದಿಕೆಯ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಕಂಡುಬಂದಿಲ್ಲ"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"ಮತ್ತಷ್ಟು ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಹುಡುಕಿ"</string>
<string name="notifications_header" msgid="1404149926117359025">"ಅಧಿಸೂಚನೆಗಳು"</string>
<string name="out_of_space" msgid="4691004494942118364">"ಈ ಮುಖಪುಟದ ಪರದೆಯಲ್ಲಿ ಹೆಚ್ಚು ಸ್ಥಳಾವಕಾಶವಿಲ್ಲ."</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 24546f4..459e7b5 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"너비 %1$d, 높이 %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"길게 터치하여 직접 장소 추가"</string>
<string name="place_automatically" msgid="8064208734425456485">"자동으로 추가"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"앱 검색"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"앱 로드 중..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\'<xliff:g id="QUERY">%1$s</xliff:g>\'와(과) 일치하는 앱이 없습니다."</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"더 많은 앱 검색"</string>
<string name="notifications_header" msgid="1404149926117359025">"알림"</string>
<string name="out_of_space" msgid="4691004494942118364">"홈 화면에 더 이상 공간이 없습니다."</string>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index dfc8691..5c0f98f 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Туурасы: %1$d, бийиктиги: %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Кол менен жайгаштыруу үчүн басып туруп, таштаңыз"</string>
<string name="place_automatically" msgid="8064208734425456485">"Автоматтык түрдө кошуу"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Колдонмолорду издөө"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Колдонмолор жүктөлүүдө…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" дал келген колдонмолор табылган жок"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Көбүрөөк колдонмолорду издөө"</string>
<string name="notifications_header" msgid="1404149926117359025">"Эскертмелер"</string>
<string name="out_of_space" msgid="4691004494942118364">"Бул Үй экранында бош орун жок."</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 66a5048..990a990 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"ກວ້າງ %1$d ຄູນສູງ %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"ແຕະຄ້າງໄວ້ເພື່ອວາງດ້ວຍຕົນເອງ"</string>
<string name="place_automatically" msgid="8064208734425456485">"ເພີ່ມໂດຍອັດຕະໂນມັດ"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ຊອກຫາແອັບ"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"ກຳລັງໂຫລດແອັບ..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"ບໍ່ພົບແອັບໃດທີ່ກົງກັນ \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"ຊອກຫາແອັບເພີ່ມເຕີມ"</string>
<string name="notifications_header" msgid="1404149926117359025">"ການແຈ້ງເຕືອນ"</string>
<string name="out_of_space" msgid="4691004494942118364">"ບໍ່ມີຫ້ອງເຫຼືອໃນໜ້າຈໍຫຼັກນີ້."</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index c346ed9..f8e4617 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d plotis ir %2$d aukštis"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Palieskite ir palaikykite, kad padėtumėte patys"</string>
<string name="place_automatically" msgid="8064208734425456485">"Pridėti automatiškai"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Ieškoti programų"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Įkeliamos programos..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nerasta jokių užklausą „<xliff:g id="QUERY">%1$s</xliff:g>“ atitinkančių programų"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Ieškoti daugiau programų"</string>
<string name="notifications_header" msgid="1404149926117359025">"Pranešimai"</string>
<string name="out_of_space" msgid="4691004494942118364">"Šiame pagrindiniame ekrane vietos nebėra."</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 580d5b7..106d152 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d plats un %2$d augsts"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Pieskarieties un turiet, lai manuāli pievienotu"</string>
<string name="place_automatically" msgid="8064208734425456485">"Pievienot automātiski"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Meklēt lietotnes"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Notiek lietotņu ielāde…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Vaicājumam “<xliff:g id="QUERY">%1$s</xliff:g>” neatbilda neviena lietotne."</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Meklēt citas lietotnes"</string>
<string name="notifications_header" msgid="1404149926117359025">"Paziņojumi"</string>
<string name="out_of_space" msgid="4691004494942118364">"Šajā sākuma ekrānā vairs nav vietas."</string>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index ebc1fcc..cfe7636 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d широк на %2$d висок"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Допрете и задржете за рачно поставување"</string>
<string name="place_automatically" msgid="8064208734425456485">"Додај автоматски"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Пребарување апликации"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Се вчитуваат апликации…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Не се најдени апликации што одговараат на „<xliff:g id="QUERY">%1$s</xliff:g>“"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Пребарај други апликации"</string>
<string name="notifications_header" msgid="1404149926117359025">"Известувања"</string>
<string name="out_of_space" msgid="4691004494942118364">"Нема повеќе простор на овој екран на почетната страница."</string>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index 62bcc8c..3f1b805 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d വീതിയും %2$d ഉയരവും"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"സ്വമേധയാ സ്ഥാപിക്കുന്നതിന് സ്പർശിച്ചുപിടിക്കുക"</string>
<string name="place_automatically" msgid="8064208734425456485">"സ്വയമേവ ചേർക്കുക"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ആപ്പുകളെ തിരയുക"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"ആപ്പുകൾ ലോഡുചെയ്യുന്നു..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" എന്നതുമായി പൊരുത്തപ്പെടുന്ന ആപ്പ്സൊന്നും കണ്ടെത്തിയില്ല"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"കൂടുതൽ ആപ്പുകൾക്ക് തിരയുക"</string>
<string name="notifications_header" msgid="1404149926117359025">"അറിയിപ്പുകൾ"</string>
<string name="out_of_space" msgid="4691004494942118364">"ഈ ഹോം സ്ക്രീനിൽ ഒഴിവൊന്നുമില്ല."</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index a8d4b3c..a461858 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d өргөн %2$d өндөр"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Гараар байршуулахын тулд дараад хүлээнэ үү"</string>
<string name="place_automatically" msgid="8064208734425456485">"Автоматаар нэмэх"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Апп хайх"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Аппликейшныг ачаалж байна..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\"-д нийцэх апп олдсонгүй"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Бусад апп-г хайх"</string>
<string name="notifications_header" msgid="1404149926117359025">"Мэдэгдэл"</string>
<string name="out_of_space" msgid="4691004494942118364">"Энэ Нүүр дэлгэц зайгүй."</string>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 3435061..e048910 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d रूंद बाय %2$d उंच"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"स्वतः ठेवण्यासाठी स्पर्श करा आणि धरून ठेवा"</string>
<string name="place_automatically" msgid="8064208734425456485">"स्वयंचलितपणे जोडा"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"अॅप्स शोधा"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"अॅप्स लोड करीत आहे..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" शी जुळणारे कोणतेही अॅप्स आढळले नाहीत"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"अधिक अॅप्स शोधा"</string>
<string name="notifications_header" msgid="1404149926117359025">"सूचना"</string>
<string name="out_of_space" msgid="4691004494942118364">"या मुख्य स्क्रीनवर आणखी जागा नाही."</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 5346d2b..27ae890 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Lebar %1$d kali tinggi %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Sentuh & tahan untuk meletakkan widget/ikon secara manual"</string>
<string name="place_automatically" msgid="8064208734425456485">"Tambahkan secara automatik"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Cari Apl"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Memuatkan Apl…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Tiada Apl yang ditemui sepadan dengan \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Cari lagi apl"</string>
<string name="notifications_header" msgid="1404149926117359025">"Pemberitahuan"</string>
<string name="out_of_space" msgid="4691004494942118364">"Tiada lagi ruang pada skrin Laman Utama ini."</string>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index 7dd6689..b847b90 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"အလျား %1$d နှင့် အမြင့် %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"ကိုယ်တိုင်ထည့်ရန် ထိထားပါ"</string>
<string name="place_automatically" msgid="8064208734425456485">"အလိုအလျောက် ထည့်ရန်"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ရှာဖွေမှု အက်ပ်များ"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"အက်ပ်များ ရယူနေစဉ်..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" နှင့်ကိုက်ညီသည့် အပ်ဖ်များမတွေ့ပါ"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"နောက်ထပ် အက်ပ်များကို ရှာပါ"</string>
<string name="notifications_header" msgid="1404149926117359025">"အကြောင်းကြားချက်များ"</string>
<string name="out_of_space" msgid="4691004494942118364">"ဤပင်မမျက်နှာစာတွင် နေရာလွတ် မကျန်တော့ပါ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 21c2036..d8cde1b 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d bredde x %2$d høyde"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Trykk og hold for å plassere manuelt"</string>
<string name="place_automatically" msgid="8064208734425456485">"Legg til automatisk"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Søk i apper"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Laster inn apper …"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Fant ingen apper som samsvarer med «<xliff:g id="QUERY">%1$s</xliff:g>»"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Søk etter flere apper"</string>
<string name="notifications_header" msgid="1404149926117359025">"Varsler"</string>
<string name="out_of_space" msgid="4691004494942118364">"Denne startsiden er full."</string>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index b28e0e2..3214a94 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d चौडाइ गुणा %2$d उचाइ"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"म्यानुअल तरिकाले थप्न छुनुहोस् र थिची राख्नुहोस्"</string>
<string name="place_automatically" msgid="8064208734425456485">"स्वतः थप्नुहोस्"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"अनुप्रयोगहरू खोज्नुहोस्"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"अनुप्रयोगहरू लोड गरिँदै..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" सँग मिल्दो कुनै अनुप्रयोगहरू फेला परेनन्"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"थप अनुप्रयोगहरू खोज्नुहोस्"</string>
<string name="notifications_header" msgid="1404149926117359025">"सूचनाहरू"</string>
<string name="out_of_space" msgid="4691004494942118364">"यो गृह स्क्रिनमा कुनै थप ठाउँ छैन।"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 5370528..85bec26 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d breed en %2$d hoog"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tik op een item en houd dit vast om het handmatig te plaatsen"</string>
<string name="place_automatically" msgid="8064208734425456485">"Automatisch toevoegen"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Apps zoeken"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Apps laden…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Er zijn geen apps gevonden die overeenkomen met \'<xliff:g id="QUERY">%1$s</xliff:g>\'"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Zoeken naar meer apps"</string>
<string name="notifications_header" msgid="1404149926117359025">"Meldingen"</string>
<string name="out_of_space" msgid="4691004494942118364">"Er is geen ruimte meer op dit startscherm."</string>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index aaf4c92..72ba3d1 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ਚੌੜਾਈ ਅਤੇ %2$d ਲੰਬਾਈ"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"ਹੱਥੀਂ ਰੱਖਣ ਲਈ ਸਪੱਰਸ਼ ਕਰੋ ਅਤੇ ਦਬਾਈ ਰੱਖੋ"</string>
<string name="place_automatically" msgid="8064208734425456485">"ਸਵੈਚਲਿਤ ਤਰੀਕੇ ਨਾਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ਐਪਸ ਖੋਜੋ"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"ਐਪਾਂ ਨੂੰ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" ਨਾਲ ਮਿਲਦੀਆਂ ਕੋਈ ਵੀ ਐਪਾਂ ਨਹੀਂ ਮਿਲੀਆਂ"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"ਹੋਰ ਐਪਾਂ ਖੋਜੋ"</string>
<string name="notifications_header" msgid="1404149926117359025">"ਸੂਚਨਾਵਾਂ"</string>
<string name="out_of_space" msgid="4691004494942118364">"ਇਸ ਹੋਮ ਸਕ੍ਰੀਨ ਲਈ ਹੋਰ ਖਾਲੀ ਸਥਾਨ ਨਹੀਂ ਹੈ।"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 41c6ebe..2725407 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Szerokość %1$d, wysokość %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Kliknij i przytrzymaj, by umieścić ręcznie"</string>
<string name="place_automatically" msgid="8064208734425456485">"Dodaj automatycznie"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Szukaj w aplikacjach"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Wczytuję aplikacje…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nie znaleziono aplikacji pasujących do zapytania „<xliff:g id="QUERY">%1$s</xliff:g>”"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Wyszukaj więcej aplikacji"</string>
<string name="notifications_header" msgid="1404149926117359025">"Powiadomienia"</string>
<string name="out_of_space" msgid="4691004494942118364">"Brak miejsca na tym ekranie głównym."</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index e12bc54..4fee392 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largura por %2$d de altura"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Toque sem soltar para colocar manualmente"</string>
<string name="place_automatically" msgid="8064208734425456485">"Adicionar automaticamente"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Pesquisar aplicações"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"A carregar aplicações..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Não foram encontradas aplic. que correspondam a \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Pesquisar mais aplicações"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notificações"</string>
<string name="out_of_space" msgid="4691004494942118364">"Sem espaço suficiente neste Ecrã principal."</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index ac43919..c8fde04 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largura por %2$d de altura"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Toque e mantenha pressionado para posicionar manualmente"</string>
<string name="place_automatically" msgid="8064208734425456485">"Adicionar automaticamente"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Pesquisar apps"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Carregando apps…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nenhum app encontrado que corresponda a \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Pesquisar mais apps"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notificações"</string>
<string name="out_of_space" msgid="4691004494942118364">"Não há mais espaço na tela inicial."</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 0ce4c1f..43a82de 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d lățime și %2$d înălțime"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Atingeți lung pentru a plasa manual"</string>
<string name="place_automatically" msgid="8064208734425456485">"Adăugați automat"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Căutați aplicații"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Se încarcă aplicațiile..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nu s-a găsit nicio aplicație pentru „<xliff:g id="QUERY">%1$s</xliff:g>”"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Căutați mai multe aplicații"</string>
<string name="notifications_header" msgid="1404149926117359025">"Notificări"</string>
<string name="out_of_space" msgid="4691004494942118364">"Nu mai este loc pe acest Ecran de pornire."</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 71d1a72..4bbbc46 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ширина %1$d, высота %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Нажмите и удерживайте, чтобы добавить вручную"</string>
<string name="place_automatically" msgid="8064208734425456485">"Добавить автоматически"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Поиск приложений"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Загрузка…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"По запросу \"<xliff:g id="QUERY">%1$s</xliff:g>\" ничего не найдено"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Искать другие приложения"</string>
<string name="notifications_header" msgid="1404149926117359025">"Уведомления"</string>
<string name="out_of_space" msgid="4691004494942118364">"На этом экране все занято"</string>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 710c76c..5c719f8 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"පළල %1$d උස %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"අතින් ස්ථානගත කිරීමට ස්පර්ශ කර අල්ලාගෙන සිටින්න"</string>
<string name="place_automatically" msgid="8064208734425456485">"ස්වයංක්රියව එක් කරන්න"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"යෙදුම් සෙවීම"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"යෙදුම් පූරණය වෙමින්…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" සමග ගැළපෙන යෙදුම් හමු නොවිණි"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"තව යෙදුම් සඳහා සොයන්න"</string>
<string name="notifications_header" msgid="1404149926117359025">"දැනුම්දීම්"</string>
<string name="out_of_space" msgid="4691004494942118364">"මෙම මුල් පිටු තිරය මත තවත් අවසර නැත."</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 502ac27..c700a3e 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"šírka %1$d, výška %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Položku umiestnite ručne klepnutím a podržaním"</string>
<string name="place_automatically" msgid="8064208734425456485">"Pridať automaticky"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Hľadať aplikácie"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Načítavajú sa aplikácie..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nenašli sa žiadne aplikácie zodpovedajúce dopytu <xliff:g id="QUERY">%1$s</xliff:g>"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Hľadať ďalšie aplikácie"</string>
<string name="notifications_header" msgid="1404149926117359025">"Upozornenia"</string>
<string name="out_of_space" msgid="4691004494942118364">"Na tejto ploche už nie je miesto"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index a16054d..0f5d84c 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Širina %1$d, višina %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Dotaknite se elementa in ga pridržite, da ga ročno dodate"</string>
<string name="place_automatically" msgid="8064208734425456485">"Samodejno dodaj"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Iskanje po aplikacijah"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Nalaganje aplikacij …"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Ni aplikacij, ki bi ustrezale poizvedbi »<xliff:g id="QUERY">%1$s</xliff:g>«"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Iskanje več aplikacij"</string>
<string name="notifications_header" msgid="1404149926117359025">"Obvestila"</string>
<string name="out_of_space" msgid="4691004494942118364">"Na tem začetnem zaslonu ni več prostora."</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index 8480288..b5f573b 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d i gjerë me %2$d i lartë"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Prek dhe mbaj të shtypur për të vendosur në mënyrë manuale"</string>
<string name="place_automatically" msgid="8064208734425456485">"Shto automatikisht"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Kërko për aplikacione"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Po ngarkon aplikacionet..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nuk u gjet asnjë aplikacion që përputhet me \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Kërko për më shumë aplikacione"</string>
<string name="notifications_header" msgid="1404149926117359025">"Njoftimet"</string>
<string name="out_of_space" msgid="4691004494942118364">"Nuk ka më hapësirë në këtë ekran bazë."</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 7dd3279..f2e4c71 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"ширина од %1$d и висина од %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Додирните и задржите да бисте поставили ручно"</string>
<string name="place_automatically" msgid="8064208734425456485">"Аутоматски додај"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Претражите апликације"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Апликације се учитавају..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Није пронађена ниједна апликација за „<xliff:g id="QUERY">%1$s</xliff:g>“"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Претражи још апликација"</string>
<string name="notifications_header" msgid="1404149926117359025">"Обавештења"</string>
<string name="out_of_space" msgid="4691004494942118364">"Нема више простора на овом почетном екрану."</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index ae50060..7519400 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d bred gånger %2$d hög"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Placera manuellt genom att trycka länge"</string>
<string name="place_automatically" msgid="8064208734425456485">"Lägg till automatiskt"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Sök efter appar"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Läser in appar …"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Det gick inte att hitta några appar som matchar <xliff:g id="QUERY">%1$s</xliff:g>"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Sök efter fler appar"</string>
<string name="notifications_header" msgid="1404149926117359025">"Aviseringar"</string>
<string name="out_of_space" msgid="4691004494942118364">"Det finns inte plats för mer på den här startskärmen."</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 2ecd0ac..b99037f 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Upana wa %1$d na kimo cha %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Gusa na ushikilie ili uweke mwenyewe"</string>
<string name="place_automatically" msgid="8064208734425456485">"Ongeza kiotomatiki"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Tafuta Programu"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Inapakia Programu..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Haikupata programu zinazolingana na \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Tafuta programu zaidi"</string>
<string name="notifications_header" msgid="1404149926117359025">"Arifa"</string>
<string name="out_of_space" msgid="4691004494942118364">"Hakuna nafasi katika skrini hii ya Mwanzo."</string>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index eeca429..4a87893 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d அகலத்திற்கு %2$d உயரம்"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"நீங்களே சேர்க்க, தொட்டுப் பிடித்திருக்கவும்"</string>
<string name="place_automatically" msgid="8064208734425456485">"தானாகவே சேர்"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"பயன்பாடுகளில் தேடுக"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"பயன்பாடுகளை ஏற்றுகிறது..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" உடன் பொருந்தும் பயன்பாடுகள் இல்லை"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"கூடுதல் பயன்பாடுகளைத் தேடு"</string>
<string name="notifications_header" msgid="1404149926117359025">"அறிவிப்புகள்"</string>
<string name="out_of_space" msgid="4691004494942118364">"முகப்புத் திரையில் இடமில்லை."</string>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 94e09d8..064b71f 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d వెడల్పు X %2$d ఎత్తు"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"మాన్యువల్గా ఉంచడానికి నొక్కి &amp పట్టుకోండి"</string>
<string name="place_automatically" msgid="8064208734425456485">"స్వయంచాలకంగా జోడించు"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"అనువర్తనాలను శోధించండి"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"అనువర్తనాలను లోడ్ చేస్తోంది…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\"కి సరిపోలే అనువర్తనాలేవీ కనుగొనబడలేదు"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"మరిన్ని అనువర్తనాల కోసం శోధించు"</string>
<string name="notifications_header" msgid="1404149926117359025">"నోటిఫికేషన్లు"</string>
<string name="out_of_space" msgid="4691004494942118364">"ఈ హోమ్ స్క్రీన్లో ఖాళీ లేదు."</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 3db6db8..bad4945 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"กว้าง %1$d x สูง %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"แตะค้างไว้เพื่อวางด้วยตัวเอง"</string>
<string name="place_automatically" msgid="8064208734425456485">"เพิ่มโดยอัตโนมัติ"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ค้นหาแอป"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"กำลังโหลดแอป…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"ไม่พบแอปที่ตรงกับ \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"ค้นหาแอปเพิ่มเติม"</string>
<string name="notifications_header" msgid="1404149926117359025">"การแจ้งเตือน"</string>
<string name="out_of_space" msgid="4691004494942118364">"ไม่มีที่ว่างในหน้าจอหลักนี้"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index f146f9a..184a483 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ang lapad at %2$d ang taas"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Pindutin nang matagal upang manual na ilagay"</string>
<string name="place_automatically" msgid="8064208734425456485">"Awtomatikong idagdag"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Mga App sa Paghahanap"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Nilo-load ang Mga App…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Walang nakitang Mga App na tumutugma sa \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Maghanap ng higit pang mga app"</string>
<string name="notifications_header" msgid="1404149926117359025">"Mga Notification"</string>
<string name="out_of_space" msgid="4691004494942118364">"Wala nang lugar sa Home screen na ito."</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 168d3a5..e33d71a 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"genişlik: %1$d, yükseklik: %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Manuel olarak yerleştirmek için dokunun ve basılı tutun"</string>
<string name="place_automatically" msgid="8064208734425456485">"Otomatik olarak ekle"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Uygulamalarda Ara"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Uygulamalar Yükleniyor…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" ile eşleşen uygulama bulunamadı"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Başka uygulamalar ara"</string>
<string name="notifications_header" msgid="1404149926117359025">"Bildirimler"</string>
<string name="out_of_space" msgid="4691004494942118364">"Bu Ana ekranda yer kalmadı."</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 0d8f15c..b18b8f9 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ширина – %1$d, висота – %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Натисніть і утримуйте, щоб додати вручну"</string>
<string name="place_automatically" msgid="8064208734425456485">"Додати автоматично"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Пошук додатків"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Завантаження додатків…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Немає додатків для запиту \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Шукати ще додатки"</string>
<string name="notifications_header" msgid="1404149926117359025">"Сповіщення"</string>
<string name="out_of_space" msgid="4691004494942118364">"На цьому головному екрані більше немає місця."</string>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index f3d6d3f..10cfcd3 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d چوڑا اور %2$d اونچا"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"دستی طور پر رکھنے کیلئے & ٹچ کرکے ہولڈ کریں"</string>
<string name="place_automatically" msgid="8064208734425456485">"خود کار طور پر شامل کریں"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ایپس تلاش کریں"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"ایپس لوڈ ہو رہی ہیں…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" سے مماثل کوئی ایپس نہیں ملیں"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"مزید ایپس تلاش کریں"</string>
<string name="notifications_header" msgid="1404149926117359025">"اطلاعات"</string>
<string name="out_of_space" msgid="4691004494942118364">"اس ہوم اسکرین پر مزید کوئی گنجائش نہیں ہے۔"</string>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index c3c4806..83803f5 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Eni %1$d, bo‘yi %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Qo‘lda joylashtirish uchun bosib turing"</string>
<string name="place_automatically" msgid="8064208734425456485">"Avtomatik chiqarish"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Ilovalar ichidan qidirish"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Ilovalar yuklanmoqda…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"“<xliff:g id="QUERY">%1$s</xliff:g>” so‘rovi bo‘yicha hech narsa topilmadi"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Boshqa ilovalarni qidirish"</string>
<string name="notifications_header" msgid="1404149926117359025">"Bildirishnomalar"</string>
<string name="out_of_space" msgid="4691004494942118364">"Uy ekranida bitta ham xona yo‘q."</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index fe2cfa1..093cfee 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Rộng %1$d x cao %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Chạm và giữ để đặt theo cách thủ công"</string>
<string name="place_automatically" msgid="8064208734425456485">"Tự động thêm"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Tìm kiếm ứng dụng"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Đang tải ứng dụng..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Không tìm thấy ứng dụng nào phù hợp với \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Tìm kiếm thêm ứng dụng"</string>
<string name="notifications_header" msgid="1404149926117359025">"Thông báo"</string>
<string name="out_of_space" msgid="4691004494942118364">"Không còn chỗ trên Màn hình chính này."</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 15e24a1..a83b1f3 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"宽 %1$d,高 %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"触摸并按住即可手动放置"</string>
<string name="place_automatically" msgid="8064208734425456485">"自动添加"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"搜索应用"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"正在加载应用…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"未找到与“<xliff:g id="QUERY">%1$s</xliff:g>”相符的应用"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"搜索更多应用"</string>
<string name="notifications_header" msgid="1404149926117359025">"通知"</string>
<string name="out_of_space" msgid="4691004494942118364">"此主屏幕上已没有空间。"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 4087180..520b18f 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d 闊,%2$d 高"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"按住即可手動新增"</string>
<string name="place_automatically" msgid="8064208734425456485">"自動新增"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"搜尋應用程式"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"正在載入應用程式…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"無法找到與「<xliff:g id="QUERY">%1$s</xliff:g>」相符的應用程式"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"搜尋更多應用程式"</string>
<string name="notifications_header" msgid="1404149926117359025">"通知"</string>
<string name="out_of_space" msgid="4691004494942118364">"主畫面已無空間。"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index f123d40..ff79d9b 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"寬度為 %1$d,高度為 %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"按住即可手動放置"</string>
<string name="place_automatically" msgid="8064208734425456485">"自動新增"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"搜尋應用程式"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"正在載入應用程式…"</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"找不到符合「<xliff:g id="QUERY">%1$s</xliff:g>」的應用程式"</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"搜尋更多應用程式"</string>
<string name="notifications_header" msgid="1404149926117359025">"通知"</string>
<string name="out_of_space" msgid="4691004494942118364">"這個主螢幕已無空間。"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index a32093c..4a77c23 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -35,9 +35,12 @@
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ububanzi ngokungu-%2$d ukuya phezulu"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"Thinta futhi ubambe ukuze ubeke ngokwenza"</string>
<string name="place_automatically" msgid="8064208734425456485">"Engeza ngokuzenzakalelayo"</string>
- <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Sesha Izinhlelo Zokusebenza"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"Ilayisha izinhlelo zokusebenza..."</string>
- <string name="all_apps_no_search_results" msgid="6332185285860416787">"Azikho izinhlelo zokusebenza ezitholakele ezifana ne-\"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
+ <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) -->
+ <skip />
+ <!-- no translation found for all_apps_loading_message (5813968043155271636) -->
+ <skip />
+ <!-- no translation found for all_apps_no_search_results (3200346862396363786) -->
+ <skip />
<string name="all_apps_search_market_message" msgid="1366263386197059176">"Sesha izinhlelo zokusebenza eziningi"</string>
<string name="notifications_header" msgid="1404149926117359025">"Izaziso"</string>
<string name="out_of_space" msgid="4691004494942118364">"Asisekho isikhala kulesi sikrini Sasekhaya."</string>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 356de78..0eb3982 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -138,10 +138,11 @@
<dimen name="folder_preview_padding">10dp</dimen>
<dimen name="page_indicator_dot_size">8dp</dimen>
- <dimen name="folder_cell_x_padding">9dp</dimen>
- <dimen name="folder_cell_y_padding">6dp</dimen>
+ <dimen name="folder_cell_x_padding">8dp</dimen>
+ <dimen name="folder_cell_y_padding">8dp</dimen>
<dimen name="folder_child_text_size">13sp</dimen>
- <dimen name="folder_label_padding_top">4dp</dimen>
+ <dimen name="folder_child_icon_drawable_padding">8dp</dimen>
+ <dimen name="folder_label_padding_top">12dp</dimen>
<dimen name="folder_label_padding_bottom">12dp</dimen>
<dimen name="folder_label_text_size">14sp</dimen>
diff --git a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
index 6e33d2a..b249c95 100644
--- a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
+++ b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
@@ -13,6 +13,7 @@
import android.util.Log;
import com.android.launcher3.LauncherSettings.Favorites;
+import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.model.LoaderTask;
import com.android.launcher3.provider.RestoreDbTask;
import com.android.launcher3.util.ContentWriter;
@@ -26,7 +27,7 @@
if (AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED.equals(intent.getAction())) {
int hostId = intent.getIntExtra(AppWidgetManager.EXTRA_HOST_ID, 0);
Log.d(TAG, "Widget ID map received for host:" + hostId);
- if (hostId != Launcher.APPWIDGET_HOST_ID) {
+ if (hostId != LauncherAppWidgetHost.APPWIDGET_HOST_ID) {
return;
}
@@ -38,7 +39,8 @@
.postAtFrontOfQueue(new Runnable() {
@Override
public void run() {
- restoreAppWidgetIds(context, asyncResult, oldIds, newIds);
+ restoreAppWidgetIds(context, oldIds, newIds);
+ asyncResult.finish();
}
});
} else {
@@ -51,9 +53,13 @@
* Updates the app widgets whose id has changed during the restore process.
*/
@WorkerThread
- static void restoreAppWidgetIds(Context context, PendingResult asyncResult,
- int[] oldWidgetIds, int[] newWidgetIds) {
- AppWidgetHost appWidgetHost = new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID);
+ static void restoreAppWidgetIds(Context context, int[] oldWidgetIds, int[] newWidgetIds) {
+ AppWidgetHost appWidgetHost = new LauncherAppWidgetHost(context);
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ Log.e(TAG, "Skipping widget ID remap as widgets not supported");
+ appWidgetHost.deleteHost();
+ return;
+ }
if (!RestoreDbTask.isPending(context)) {
// Someone has already gone through our DB once, probably LoaderTask. Skip any further
// modifications of the DB.
@@ -62,7 +68,6 @@
Log.d(TAG, "Deleting widgetId: " + widgetId);
appWidgetHost.deleteAppWidgetId(widgetId);
}
- asyncResult.finish();
return;
}
final ContentResolver cr = context.getContentResolver();
@@ -106,6 +111,5 @@
if (app != null) {
app.getModel().forceReload();
}
- asyncResult.finish();
}
}
diff --git a/src/com/android/launcher3/BaseActivity.java b/src/com/android/launcher3/BaseActivity.java
index 2b59ede..e496495 100644
--- a/src/com/android/launcher3/BaseActivity.java
+++ b/src/com/android/launcher3/BaseActivity.java
@@ -19,6 +19,7 @@
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
+import android.content.Intent;
import android.view.View.AccessibilityDelegate;
import com.android.launcher3.logging.UserEventDispatcher;
@@ -63,4 +64,9 @@
}
return mSystemUiController;
}
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ }
}
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index 2d5f8d0..cb4ad55 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -108,6 +108,7 @@
public int folderChildIconSizePx;
public int folderChildTextSizePx;
public int folderChildDrawablePaddingPx;
+ public final int folderChildDrawablePaddingOriginalPx;
// Hotseat
public int hotseatCellHeightPx;
@@ -220,6 +221,9 @@
hotseatLandRightNavBarGutterPx = res.getDimensionPixelSize(
R.dimen.dynamic_grid_hotseat_land_right_nav_bar_gutter_width);
+ folderChildDrawablePaddingOriginalPx =
+ res.getDimensionPixelSize(R.dimen.folder_child_icon_drawable_padding);
+
// Determine sizes.
widthPx = width;
heightPx = height;
@@ -262,9 +266,7 @@
isLandscape);
// Hide labels on the workspace.
- profile.iconTextSizePx = 0;
- profile.cellHeightPx = profile.iconSizePx + profile.iconDrawablePaddingPx
- + Utilities.calculateTextHeight(profile.iconTextSizePx);
+ profile.adjustToHideWorkspaceLabels();
// We use these scales to measure and layout the widgets using their full invariant profile
// sizes and then draw them scaled and centered to fit in their multi-window mode cellspans.
@@ -288,6 +290,24 @@
}
/**
+ * Adjusts the profile so that the labels on the Workspace are hidden.
+ * It is important to call this method after the All Apps variables have been set.
+ */
+ private void adjustToHideWorkspaceLabels() {
+ iconTextSizePx = 0;
+ iconDrawablePaddingPx = 0;
+ cellHeightPx = iconSizePx;
+
+ // In normal cases, All Apps cell height should equal the Workspace cell height.
+ // Since we are removing labels from the Workspace, we need to manually compute the
+ // All Apps cell height.
+ allAppsCellHeightPx = allAppsIconSizePx + allAppsIconDrawablePaddingPx
+ + Utilities.calculateTextHeight(allAppsIconTextSizePx)
+ // Top and bottom padding is equal to the drawable padding
+ + allAppsIconDrawablePaddingPx * 2;
+ }
+
+ /**
* Determine the exact visual footprint of the all apps button, taking into account scaling
* and internal padding of the drawable.
*/
@@ -325,14 +345,7 @@
if (isVerticalBarLayout()) {
// Always hide the Workspace text with vertical bar layout.
- iconTextSizePx = 0;
- iconDrawablePaddingPx = 0;
-
- // Manually compute all apps cell height since workspace cells have less content.
- allAppsCellHeightPx = allAppsIconSizePx + allAppsIconDrawablePaddingPx
- + Utilities.calculateTextHeight(allAppsIconTextSizePx)
- // Top and bottom padding is equal to the drawable padding
- + allAppsIconDrawablePaddingPx * 2;
+ adjustToHideWorkspaceLabels();
}
cellWidthPx = iconSizePx + iconDrawablePaddingPx;
@@ -390,15 +403,15 @@
folderChildIconSizePx = (int) (Utilities.pxFromDp(inv.iconSize, dm) * scale);
folderChildTextSizePx =
(int) (res.getDimensionPixelSize(R.dimen.folder_child_text_size) * scale);
+ folderChildDrawablePaddingPx = (int) (folderChildDrawablePaddingOriginalPx * scale);
int textHeight = Utilities.calculateTextHeight(folderChildTextSizePx);
int cellPaddingX = (int) (res.getDimensionPixelSize(R.dimen.folder_cell_x_padding) * scale);
int cellPaddingY = (int) (res.getDimensionPixelSize(R.dimen.folder_cell_y_padding) * scale);
folderCellWidthPx = folderChildIconSizePx + 2 * cellPaddingX;
- folderCellHeightPx = folderChildIconSizePx + 2 * cellPaddingY + textHeight;
- folderChildDrawablePaddingPx = Math.max(0,
- (folderCellHeightPx - folderChildIconSizePx - textHeight) / 3);
+ folderCellHeightPx = folderChildIconSizePx + 2 * cellPaddingY + textHeight
+ + folderChildDrawablePaddingPx;
}
public void updateInsets(Rect insets) {
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 7b7177e..97f1ead 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -209,10 +209,8 @@
private boolean mIsSafeModeEnabled;
- public static final int APPWIDGET_HOST_ID = 1024;
public static final int EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT = 500;
private static final int ON_ACTIVITY_RESULT_ANIMATION_DELAY = 500;
- private static final int ACTIVITY_START_DELAY = 1000;
// How long to wait before the new-shortcut animation automatically pans the workspace
private static final int NEW_APPS_PAGE_MOVE_DELAY = 500;
@@ -397,7 +395,10 @@
mAppWidgetManager = AppWidgetManagerCompat.getInstance(this);
- mAppWidgetHost = new LauncherAppWidgetHost(this, APPWIDGET_HOST_ID);
+ mAppWidgetHost = new LauncherAppWidgetHost(this);
+ if (Utilities.ATLEAST_MARSHMALLOW) {
+ mAppWidgetHost.addProviderChangeListener(this);
+ }
mAppWidgetHost.startListening();
// If we are getting an onCreate, we can actually preempt onResume and unset mPaused here,
@@ -788,7 +789,7 @@
}
@Override
- protected void onActivityResult(
+ public void onActivityResult(
final int requestCode, final int resultCode, final Intent data) {
handleActivityResult(requestCode, resultCode, data);
if (mLauncherCallbacks != null) {
diff --git a/src/com/android/launcher3/LauncherAppWidgetHost.java b/src/com/android/launcher3/LauncherAppWidgetHost.java
index 6e8c59b..5573c5c 100644
--- a/src/com/android/launcher3/LauncherAppWidgetHost.java
+++ b/src/com/android/launcher3/LauncherAppWidgetHost.java
@@ -16,12 +16,20 @@
package com.android.launcher3;
+import android.app.Activity;
import android.appwidget.AppWidgetHost;
import android.appwidget.AppWidgetHostView;
+import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
+import android.content.ActivityNotFoundException;
import android.content.Context;
+import android.content.Intent;
+import android.os.Handler;
import android.util.SparseArray;
import android.view.LayoutInflater;
+import android.widget.Toast;
+
+import com.android.launcher3.config.FeatureFlags;
import java.util.ArrayList;
@@ -33,14 +41,16 @@
*/
public class LauncherAppWidgetHost extends AppWidgetHost {
- private final ArrayList<Runnable> mProviderChangeListeners = new ArrayList<Runnable>();
+ public static final int APPWIDGET_HOST_ID = 1024;
+
+ private final ArrayList<ProviderChangedListener> mProviderChangeListeners = new ArrayList<>();
private final SparseArray<LauncherAppWidgetHostView> mViews = new SparseArray<>();
- private Launcher mLauncher;
+ private final Context mContext;
- public LauncherAppWidgetHost(Launcher launcher, int hostId) {
- super(launcher, hostId);
- mLauncher = launcher;
+ public LauncherAppWidgetHost(Context context) {
+ super(context, APPWIDGET_HOST_ID);
+ mContext = context;
}
@Override
@@ -53,6 +63,10 @@
@Override
public void startListening() {
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ return;
+ }
+
try {
super.startListening();
} catch (Exception e) {
@@ -66,24 +80,38 @@
}
}
- public void addProviderChangeListener(Runnable callback) {
+ @Override
+ public void stopListening() {
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ return;
+ }
+
+ super.stopListening();
+ }
+
+ @Override
+ public int allocateAppWidgetId() {
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ return AppWidgetManager.INVALID_APPWIDGET_ID;
+ }
+
+ return super.allocateAppWidgetId();
+ }
+
+ public void addProviderChangeListener(ProviderChangedListener callback) {
mProviderChangeListeners.add(callback);
}
- public void removeProviderChangeListener(Runnable callback) {
+ public void removeProviderChangeListener(ProviderChangedListener callback) {
mProviderChangeListeners.remove(callback);
}
protected void onProvidersChanged() {
if (!mProviderChangeListeners.isEmpty()) {
- for (Runnable callback : new ArrayList<>(mProviderChangeListeners)) {
- callback.run();
+ for (ProviderChangedListener callback : new ArrayList<>(mProviderChangeListeners)) {
+ callback.notifyWidgetProvidersChanged();
}
}
-
- if (Utilities.ATLEAST_MARSHMALLOW) {
- mLauncher.notifyWidgetProvidersChanged();
- }
}
public AppWidgetHostView createView(Context context, int appWidgetId,
@@ -109,7 +137,7 @@
// will update.
LauncherAppWidgetHostView view = mViews.get(appWidgetId);
if (view == null) {
- view = onCreateView(mLauncher, appWidgetId, appWidget);
+ view = onCreateView(mContext, appWidgetId, appWidget);
}
view.setAppWidget(appWidgetId, appWidget);
view.switchToErrorView();
@@ -124,11 +152,11 @@
@Override
protected void onProviderChanged(int appWidgetId, AppWidgetProviderInfo appWidget) {
LauncherAppWidgetProviderInfo info = LauncherAppWidgetProviderInfo.fromProviderInfo(
- mLauncher, appWidget);
+ mContext, appWidget);
super.onProviderChanged(appWidgetId, info);
// The super method updates the dimensions of the providerInfo. Update the
// launcher spans accordingly.
- info.initSpans(mLauncher);
+ info.initSpans(mContext);
}
@Override
@@ -142,4 +170,53 @@
super.clearViews();
mViews.clear();
}
+
+ public void startBindFlow(BaseActivity activity,
+ int appWidgetId, AppWidgetProviderInfo info, int requestCode) {
+
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ sendActionCancelled(activity, requestCode);
+ return;
+ }
+
+ Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND)
+ .putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
+ .putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.provider)
+ .putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER_PROFILE, info.getProfile());
+ // TODO: we need to make sure that this accounts for the options bundle.
+ // intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options);
+ activity.startActivityForResult(intent, requestCode);
+ }
+
+
+ public void startConfigActivity(BaseActivity activity, int widgetId, int requestCode) {
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ sendActionCancelled(activity, requestCode);
+ return;
+ }
+
+ try {
+ startAppWidgetConfigureActivityForResult(activity, widgetId, 0, requestCode, null);
+ } catch (ActivityNotFoundException | SecurityException e) {
+ Toast.makeText(activity, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
+ sendActionCancelled(activity, requestCode);
+ }
+ }
+
+ private void sendActionCancelled(final BaseActivity activity, final int requestCode) {
+ new Handler().post(new Runnable() {
+ @Override
+ public void run() {
+ activity.onActivityResult(requestCode, Activity.RESULT_CANCELED, null);
+ }
+ });
+ }
+
+ /**
+ * Listener for getting notifications on provider changes.
+ */
+ public interface ProviderChangedListener {
+
+ void notifyWidgetProvidersChanged();
+ }
}
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 82bee0e..f1638fd 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -133,7 +133,7 @@
}
};
- public interface Callbacks {
+ public interface Callbacks extends LauncherAppWidgetHost.ProviderChangedListener {
public boolean setLoadOnResume();
public int getCurrentWorkspaceScreen();
public void clearPendingBinds();
@@ -159,7 +159,6 @@
HashSet<String> packageNames, HashSet<ComponentName> components,
UserHandle user);
public void bindAppInfosRemoved(ArrayList<AppInfo> appInfos);
- public void notifyWidgetProvidersChanged();
public void bindAllWidgets(MultiHashMap<PackageItemInfo, WidgetItem> widgets);
public void onPageBoundSynchronously(int page);
public void executeOnNextDraw(ViewOnDrawExecutor executor);
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 4813571..dc83f36 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -1031,7 +1031,7 @@
}
public AppWidgetHost newLauncherWidgetHost() {
- return new AppWidgetHost(mContext, Launcher.APPWIDGET_HOST_ID);
+ return new LauncherAppWidgetHost(mContext);
}
@Override
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index 185c887..87f3dda 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -48,6 +48,7 @@
import com.android.launcher3.anim.PropertyListBuilder;
import com.android.launcher3.pageindicators.PageIndicator;
+import com.android.launcher3.touch.OverScroll;
import com.android.launcher3.util.Themes;
import com.android.launcher3.util.Thunk;
@@ -68,10 +69,8 @@
public static final int PAGE_SNAP_ANIMATION_DURATION = 750;
protected static final int SLOW_PAGE_SNAP_ANIMATION_DURATION = 950;
- // Overscroll constants
+ // OverScroll constants
private final static int OVERSCROLL_PAGE_SNAP_ANIMATION_DURATION = 270;
- private static final float OVERSCROLL_ACCELERATE_FACTOR = 2;
- private static final float OVERSCROLL_DAMP_FACTOR = 0.07f;
private static final float RETURN_TO_ORIGINAL_PAGE_THRESHOLD = 0.33f;
// The page is moved more than halfway, automatically move to the next page on touch up.
@@ -188,7 +187,6 @@
// Convenience/caching
private static final Matrix sTmpInvMatrix = new Matrix();
private static final float[] sTmpPoint = new float[2];
- private static final int[] sTmpIntPoint = new int[2];
private static final Rect sTmpRect = new Rect();
protected final Rect mInsets = new Rect();
@@ -233,8 +231,6 @@
mMinSnapVelocity = (int) (MIN_SNAP_VELOCITY * density);
setOnHierarchyChangeListener(this);
setWillNotDraw(false);
-
- int edgeEffectColor = Themes.getAttrColor(getContext(), android.R.attr.colorEdgeEffect);
}
protected void setDefaultInterpolator(Interpolator interpolator) {
@@ -1305,29 +1301,6 @@
}
}
- // This curve determines how the effect of scrolling over the limits of the page dimishes
- // as the user pulls further and further from the bounds
- private float overScrollInfluenceCurve(float f) {
- f -= 1.0f;
- return f * f * f + 1.0f;
- }
-
- protected float acceleratedOverFactor(float amount) {
- int screenSize = getViewportWidth();
-
- // We want to reach the max over scroll effect when the user has
- // over scrolled half the size of the screen
- float f = OVERSCROLL_ACCELERATE_FACTOR * (amount / screenSize);
-
- if (Float.compare(f, 0f) == 0) return 0;
-
- // Clamp this factor, f, to -1 < f < 1
- if (Math.abs(f) >= 1) {
- f /= Math.abs(f);
- }
- return f;
- }
-
// While layout transitions are occurring, a child's position may stray from its baseline
// position. This method returns the magnitude of this stray at any given time.
public int getLayoutTransitionOffsetForPage(int index) {
@@ -1348,20 +1321,9 @@
}
protected void dampedOverScroll(float amount) {
- int screenSize = getViewportWidth();
+ if (Float.compare(amount, 0f) == 0) return;
- float f = (amount / screenSize);
-
- if (Float.compare(f, 0f) == 0) return;
-
- f = f / (Math.abs(f)) * (overScrollInfluenceCurve(Math.abs(f)));
-
- // Clamp this factor, f, to -1 < f < 1
- if (Math.abs(f) >= 1) {
- f /= Math.abs(f);
- }
-
- int overScrollAmount = (int) Math.round(OVERSCROLL_DAMP_FACTOR * f * screenSize);
+ int overScrollAmount = OverScroll.dampedScroll(amount, getViewportWidth());
if (amount < 0) {
mOverScrollX = overScrollAmount;
super.scrollTo(mOverScrollX, getScrollY());
@@ -1376,14 +1338,6 @@
dampedOverScroll(amount);
}
- protected float maxOverScroll() {
- // Using the formula in overScroll, assuming that f = 1.0 (which it should generally not
- // exceed). Used to find out how much extra wallpaper we need for the over scroll effect
- float f = 1.0f;
- f = f / (Math.abs(f)) * (overScrollInfluenceCurve(Math.abs(f)));
- return OVERSCROLL_DAMP_FACTOR * f;
- }
-
/**
* return true if freescroll has been enabled, false otherwise
*/
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index f781a3d..a2270d6 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -52,8 +52,10 @@
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.Toast;
+
import com.android.launcher3.Launcher.CustomContentCallbacks;
import com.android.launcher3.Launcher.LauncherOverlay;
+import com.android.launcher3.LauncherAppWidgetHost.ProviderChangedListener;
import com.android.launcher3.UninstallDropTarget.DropTargetSource;
import com.android.launcher3.accessibility.AccessibleDragListenerAdapter;
import com.android.launcher3.accessibility.OverviewAccessibilityDelegate;
@@ -86,6 +88,7 @@
import com.android.launcher3.util.WallpaperOffsetInterpolator;
import com.android.launcher3.widget.PendingAddShortcutInfo;
import com.android.launcher3.widget.PendingAddWidgetInfo;
+
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
@@ -4079,7 +4082,7 @@
* Used as a workaround to ensure that the AppWidgetService receives the
* PACKAGE_ADDED broadcast before updating widgets.
*/
- private class DeferredWidgetRefresh implements Runnable {
+ private class DeferredWidgetRefresh implements Runnable, ProviderChangedListener {
private final ArrayList<LauncherAppWidgetInfo> mInfos;
private final LauncherAppWidgetHost mHost;
private final Handler mHandler;
@@ -4122,6 +4125,11 @@
}
});
}
+
+ @Override
+ public void notifyWidgetProvidersChanged() {
+ run();
+ }
}
private class StateTransitionListener extends AnimatorListenerAdapter
diff --git a/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java
index 8161219..b7c500f 100644
--- a/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java
+++ b/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java
@@ -50,8 +50,7 @@
if ((host.getParent() instanceof DeepShortcutView)) {
info.addAction(mActions.get(ADD_TO_WORKSPACE));
} else if (host instanceof NotificationMainView) {
- NotificationMainView notificationView = (NotificationMainView) host;
- if (notificationView.canChildBeDismissed(notificationView)) {
+ if (((NotificationMainView) host).canChildBeDismissed()) {
info.addAction(mActions.get(DISMISS_NOTIFICATION));
}
}
@@ -88,8 +87,7 @@
if (!(host instanceof NotificationMainView)) {
return false;
}
- NotificationMainView notificationView = (NotificationMainView) host;
- notificationView.onChildDismissed(notificationView);
+ ((NotificationMainView) host).onChildDismissed();
announceConfirmation(R.string.notification_dismissed);
return true;
}
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index 2abb766..ab589d8 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -36,6 +36,7 @@
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.graphics.DrawableFactory;
import com.android.launcher3.logging.UserEventDispatcher.LogContainerProvider;
+import com.android.launcher3.touch.OverScroll;
import com.android.launcher3.touch.SwipeDetector;
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
@@ -98,8 +99,7 @@
R.dimen.all_apps_empty_search_bg_top_offset);
mOverScrollHelper = new OverScrollHelper();
- mPullDetector = new SwipeDetector(getContext());
- mPullDetector.setListener(mOverScrollHelper);
+ mPullDetector = new SwipeDetector(getContext(), mOverScrollHelper, SwipeDetector.VERTICAL);
mPullDetector.setDetectableScrollConditions(SwipeDetector.DIRECTION_BOTH, true);
}
@@ -564,37 +564,7 @@
}
private float getDampedOverScroll(float y) {
- return dampedOverScroll(y, getHeight()) * MAX_OVERSCROLL_PERCENTAGE;
- }
-
- /**
- * This curve determines how the effect of scrolling over the limits of the page diminishes
- * as the user pulls further and further from the bounds
- *
- * @param f The percentage of how much the user has overscrolled.
- * @return A transformed percentage based on the influence curve.
- */
- private float overScrollInfluenceCurve(float f) {
- f -= 1.0f;
- return f * f * f + 1.0f;
- }
-
- /**
- * @param amount The original amount overscrolled.
- * @param max The maximum amount that the View can overscroll.
- * @return The dampened overscroll amount.
- */
- private float dampedOverScroll(float amount, float max) {
- float f = amount / max;
- if (Float.compare(f, 0) == 0) return 0;
- f = f / (Math.abs(f)) * (overScrollInfluenceCurve(Math.abs(f)));
-
- // Clamp this factor, f, to -1 < f < 1
- if (Math.abs(f) >= 1) {
- f /= Math.abs(f);
- }
-
- return Math.round(f * max);
+ return OverScroll.dampedScroll(y, getHeight());
}
}
}
diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
index ecb9724..a6194cc 100644
--- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java
+++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
@@ -107,8 +107,7 @@
public AllAppsTransitionController(Launcher l) {
mLauncher = l;
- mDetector = new SwipeDetector(l);
- mDetector.setListener(this);
+ mDetector = new SwipeDetector(l, this, SwipeDetector.VERTICAL);
mShiftRange = DEFAULT_SHIFT_RANGE;
mProgress = 1f;
@@ -137,15 +136,15 @@
if (mDetector.isIdleState()) {
if (mLauncher.isAllAppsVisible()) {
- directionsToDetectScroll |= SwipeDetector.DIRECTION_DOWN;
+ directionsToDetectScroll |= SwipeDetector.DIRECTION_NEGATIVE;
} else {
- directionsToDetectScroll |= SwipeDetector.DIRECTION_UP;
+ directionsToDetectScroll |= SwipeDetector.DIRECTION_POSITIVE;
}
} else {
if (isInDisallowRecatchBottomZone()) {
- directionsToDetectScroll |= SwipeDetector.DIRECTION_UP;
+ directionsToDetectScroll |= SwipeDetector.DIRECTION_POSITIVE;
} else if (isInDisallowRecatchTopZone()) {
- directionsToDetectScroll |= SwipeDetector.DIRECTION_DOWN;
+ directionsToDetectScroll |= SwipeDetector.DIRECTION_NEGATIVE;
} else {
directionsToDetectScroll |= SwipeDetector.DIRECTION_BOTH;
ignoreSlopWhenSettling = true;
@@ -368,7 +367,7 @@
}
private void calculateDuration(float velocity, float disp) {
- mAnimationDuration = mDetector.calculateDuration(velocity, disp / mShiftRange);
+ mAnimationDuration = SwipeDetector.calculateDuration(velocity, disp / mShiftRange);
}
public boolean animateToAllApps(AnimatorSet animationOut, long duration) {
diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompat.java b/src/com/android/launcher3/compat/AppWidgetManagerCompat.java
index 3efbbfb..4e00eae 100644
--- a/src/com/android/launcher3/compat/AppWidgetManagerCompat.java
+++ b/src/com/android/launcher3/compat/AppWidgetManagerCompat.java
@@ -16,15 +16,12 @@
package com.android.launcher3.compat;
-import android.app.Activity;
-import android.appwidget.AppWidgetHost;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
import android.os.UserHandle;
-import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
@@ -76,9 +73,6 @@
public abstract boolean bindAppWidgetIdIfAllowed(
int appWidgetId, AppWidgetProviderInfo info, Bundle options);
- public abstract void startConfigActivity(AppWidgetProviderInfo info, int widgetId,
- Activity activity, AppWidgetHost host, int requestCode);
-
public abstract LauncherAppWidgetProviderInfo findProvider(
ComponentName provider, UserHandle user);
diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java b/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java
index f239f5c..cb3bd6c 100644
--- a/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java
+++ b/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java
@@ -16,24 +16,21 @@
package com.android.launcher3.compat;
-import android.app.Activity;
-import android.appwidget.AppWidgetHost;
import android.appwidget.AppWidgetProviderInfo;
-import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.annotation.Nullable;
-import android.widget.Toast;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
-import com.android.launcher3.R;
+import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.PackageUserKey;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -49,6 +46,9 @@
@Override
public List<AppWidgetProviderInfo> getAllProviders(@Nullable PackageUserKey packageUser) {
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ return Collections.emptyList();
+ }
if (packageUser == null) {
ArrayList<AppWidgetProviderInfo> providers = new ArrayList<AppWidgetProviderInfo>();
for (UserHandle user : mUserManager.getUserProfiles()) {
@@ -71,24 +71,20 @@
@Override
public boolean bindAppWidgetIdIfAllowed(int appWidgetId, AppWidgetProviderInfo info,
Bundle options) {
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ return false;
+ }
return mAppWidgetManager.bindAppWidgetIdIfAllowed(
appWidgetId, info.getProfile(), info.provider, options);
}
@Override
- public void startConfigActivity(AppWidgetProviderInfo info, int widgetId, Activity activity,
- AppWidgetHost host, int requestCode) {
- try {
- host.startAppWidgetConfigureActivityForResult(activity, widgetId, 0, requestCode, null);
- } catch (ActivityNotFoundException | SecurityException e) {
- Toast.makeText(activity, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
- }
- }
-
- @Override
public LauncherAppWidgetProviderInfo findProvider(ComponentName provider, UserHandle user) {
- for (AppWidgetProviderInfo info : mAppWidgetManager
- .getInstalledProvidersForProfile(user)) {
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ return null;
+ }
+ for (AppWidgetProviderInfo info :
+ getAllProviders(new PackageUserKey(provider.getPackageName(), user))) {
if (info.provider.equals(provider)) {
return LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, info);
}
@@ -99,6 +95,9 @@
@Override
public HashMap<ComponentKey, AppWidgetProviderInfo> getAllProvidersMap() {
HashMap<ComponentKey, AppWidgetProviderInfo> result = new HashMap<>();
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ return result;
+ }
for (UserHandle user : mUserManager.getUserProfiles()) {
for (AppWidgetProviderInfo info :
mAppWidgetManager.getInstalledProvidersForProfile(user)) {
diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompatVO.java b/src/com/android/launcher3/compat/AppWidgetManagerCompatVO.java
index 1c48a13..44158ed 100644
--- a/src/com/android/launcher3/compat/AppWidgetManagerCompatVO.java
+++ b/src/com/android/launcher3/compat/AppWidgetManagerCompatVO.java
@@ -20,8 +20,10 @@
import android.content.Context;
import android.support.annotation.Nullable;
+import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.util.PackageUserKey;
+import java.util.Collections;
import java.util.List;
class AppWidgetManagerCompatVO extends AppWidgetManagerCompatVL {
@@ -32,6 +34,9 @@
@Override
public List<AppWidgetProviderInfo> getAllProviders(@Nullable PackageUserKey packageUser) {
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ return Collections.emptyList();
+ }
if (packageUser == null) {
return super.getAllProviders(null);
}
diff --git a/src/com/android/launcher3/config/BaseFlags.java b/src/com/android/launcher3/config/BaseFlags.java
new file mode 100644
index 0000000..9e0a3b3
--- /dev/null
+++ b/src/com/android/launcher3/config/BaseFlags.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2017 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.config;
+
+/**
+ * Defines a set of flags used to control various launcher behaviors.
+ *
+ * All the flags should be defined here with appropriate default values. To override a value,
+ * redefine it in {@link FeatureFlags}.
+ *
+ * This class is kept package-private to prevent direct access.
+ */
+abstract class BaseFlags {
+
+ BaseFlags() {}
+
+ public static final boolean IS_DOGFOOD_BUILD = false;
+
+ // Custom flags go below this
+ public static boolean LAUNCHER3_DISABLE_ICON_NORMALIZATION = false;
+ public static boolean LAUNCHER3_LEGACY_FOLDER_ICON = false;
+ public static boolean LAUNCHER3_DISABLE_PINCH_TO_OVERVIEW = false;
+ public static boolean LAUNCHER3_ALL_APPS_PULL_UP = true;
+ public static boolean LAUNCHER3_NEW_FOLDER_ANIMATION = true;
+ // When enabled allows to use any point on the fast scrollbar to start dragging.
+ public static final boolean LAUNCHER3_DIRECT_SCROLL = true;
+ // When enabled while all-apps open, the soft input will be set to adjust resize .
+ public static final boolean LAUNCHER3_UPDATE_SOFT_INPUT_MODE = true;
+ // When enabled the promise icon is visible in all apps while installation an app.
+ public static final boolean LAUNCHER3_PROMISE_APPS_IN_ALL_APPS = false;
+ // When enabled uses the AllAppsRadialGradientAndScrimDrawable for all apps
+ public static final boolean LAUNCHER3_GRADIENT_ALL_APPS = true;
+ // When enabled allows use of physics based motions in the Launcher.
+ public static final boolean LAUNCHER3_PHYSICS = true;
+ // When enabled allows use of spring motions on the icons.
+ public static final boolean LAUNCHER3_SPRING_ICONS = true;
+
+ // Feature flag to enable moving the QSB on the 0th screen of the workspace.
+ public static final boolean QSB_ON_FIRST_SCREEN = true;
+ // When enabled the all-apps icon is not added to the hotseat.
+ public static final boolean NO_ALL_APPS_ICON = true;
+ // When enabled fling down gesture on the first workspace triggers search.
+ public static final boolean PULLDOWN_SEARCH = false;
+ // When enabled the status bar may show dark icons based on the top of the wallpaper.
+ public static final boolean LIGHT_STATUS_BAR = false;
+ // When enabled icons are badged with the number of notifications associated with that app.
+ public static final boolean BADGE_ICONS = true;
+ // When enabled, icons not supporting {@link AdaptiveIconDrawable} will be wrapped in {@link FixedScaleDrawable}.
+ public static final boolean LEGACY_ICON_TREATMENT = true;
+ // When enabled, adaptive icons would have shadows baked when being stored to icon cache.
+ public static final boolean ADAPTIVE_ICON_SHADOW = true;
+ // When enabled, app discovery will be enabled if service is implemented
+ public static final boolean DISCOVERY_ENABLED = false;
+ // When enabled, the qsb will be moved to the hotseat.
+ public static final boolean QSB_IN_HOTSEAT = true;
+
+ // Features to control Launcher3Go behavior
+ public static final boolean GO_DISABLE_WIDGETS = false;
+}
diff --git a/src/com/android/launcher3/dragndrop/AddItemActivity.java b/src/com/android/launcher3/dragndrop/AddItemActivity.java
index 01893bd..c843e72 100644
--- a/src/com/android/launcher3/dragndrop/AddItemActivity.java
+++ b/src/com/android/launcher3/dragndrop/AddItemActivity.java
@@ -16,14 +16,8 @@
package com.android.launcher3.dragndrop;
-import static com.android.launcher3.logging.LoggerUtils.newCommandAction;
-import static com.android.launcher3.logging.LoggerUtils.newContainerTarget;
-import static com.android.launcher3.logging.LoggerUtils.newItemTarget;
-import static com.android.launcher3.logging.LoggerUtils.newLauncherEvent;
-
import android.annotation.TargetApi;
import android.app.ActivityOptions;
-import android.appwidget.AppWidgetHost;
import android.appwidget.AppWidgetManager;
import android.content.ClipData;
import android.content.ClipDescription;
@@ -45,8 +39,8 @@
import com.android.launcher3.BaseActivity;
import com.android.launcher3.InstallShortcutReceiver;
import com.android.launcher3.InvariantDeviceProfile;
-import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
+import com.android.launcher3.LauncherAppWidgetHost;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
@@ -61,6 +55,11 @@
import com.android.launcher3.widget.WidgetHostViewLoader;
import com.android.launcher3.widget.WidgetImageView;
+import static com.android.launcher3.logging.LoggerUtils.newCommandAction;
+import static com.android.launcher3.logging.LoggerUtils.newContainerTarget;
+import static com.android.launcher3.logging.LoggerUtils.newItemTarget;
+import static com.android.launcher3.logging.LoggerUtils.newLauncherEvent;
+
@TargetApi(Build.VERSION_CODES.O)
public class AddItemActivity extends BaseActivity implements OnLongClickListener, OnTouchListener {
@@ -78,7 +77,7 @@
private LivePreviewWidgetCell mWidgetCell;
// Widget request specific options.
- private AppWidgetHost mAppWidgetHost;
+ private LauncherAppWidgetHost mAppWidgetHost;
private AppWidgetManagerCompat mAppWidgetManager;
private PendingAddWidgetInfo mPendingWidgetInfo;
private int mPendingBindWidgetId;
@@ -212,7 +211,7 @@
mWidgetCell.setPreview(PinItemDragListener.getPreview(mRequest));
mAppWidgetManager = AppWidgetManagerCompat.getInstance(this);
- mAppWidgetHost = new AppWidgetHost(this, Launcher.APPWIDGET_HOST_ID);
+ mAppWidgetHost = new LauncherAppWidgetHost(this);
mPendingWidgetInfo = new PendingAddWidgetInfo(widgetInfo);
mPendingWidgetInfo.spanX = Math.min(mIdp.numColumns, widgetInfo.spanX);
@@ -256,13 +255,8 @@
}
// request bind widget
- Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mPendingBindWidgetId);
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER,
- mPendingWidgetInfo.componentName);
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER_PROFILE,
- mRequest.getAppWidgetProviderInfo(this).getProfile());
- startActivityForResult(intent, REQUEST_BIND_APPWIDGET);
+ mAppWidgetHost.startBindFlow(this, mPendingBindWidgetId,
+ mRequest.getAppWidgetProviderInfo(this), REQUEST_BIND_APPWIDGET);
}
private void acceptWidget(int widgetId) {
@@ -280,7 +274,7 @@
}
@Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_BIND_APPWIDGET) {
int widgetId = data != null
? data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mPendingBindWidgetId)
diff --git a/src/com/android/launcher3/folder/FolderAnimationManager.java b/src/com/android/launcher3/folder/FolderAnimationManager.java
index 69705d5..d7f5c2b 100644
--- a/src/com/android/launcher3/folder/FolderAnimationManager.java
+++ b/src/com/android/launcher3/folder/FolderAnimationManager.java
@@ -120,6 +120,7 @@
final DragLayer.LayoutParams lp = (DragLayer.LayoutParams) mFolder.getLayoutParams();
FolderIcon.PreviewLayoutRule rule = mFolderIcon.getLayoutRule();
final List<BubbleTextView> itemsInPreview = mFolderIcon.getPreviewItems();
+ BubbleTextView btv = itemsInPreview.get(0);
// Match position of the FolderIcon
final Rect folderIconPos = new Rect();
@@ -131,7 +132,7 @@
// Match size/scale of icons in the preview
float previewScale = rule.scaleForItem(0, itemsInPreview.size());
float previewSize = rule.getIconSize() * previewScale;
- float initialScale = previewSize / itemsInPreview.get(0).getIconSize()
+ float initialScale = previewSize / btv.getIconSize()
* scaleRelativeToDragLayer;
final float finalScale = 1f;
float scale = mIsOpening ? initialScale : finalScale;
@@ -148,10 +149,12 @@
previewItemOffsetX = (int) (lp.width * initialScale - initialSize - previewItemOffsetX);
}
+ // Note that we do not include btv.getPaddingLeft() in the calculation, since it is
+ // handled in addPreviewItemAnimators as part of iconOffsetX.
final int paddingOffsetX = (int) ((mFolder.getPaddingLeft() + mContent.getPaddingLeft())
* initialScale);
- final int paddingOffsetY = (int) ((mFolder.getPaddingTop() + mContent.getPaddingTop())
- * initialScale);
+ final int paddingOffsetY = (int) ((mFolder.getPaddingTop() + mContent.getPaddingTop()
+ + btv.getPaddingTop()) * initialScale);
int initialX = folderIconPos.left + mPreviewBackground.getOffsetX() - paddingOffsetX
- previewItemOffsetX;
diff --git a/src/com/android/launcher3/graphics/ShadowGenerator.java b/src/com/android/launcher3/graphics/ShadowGenerator.java
index 3c71c3a..60eeef5 100644
--- a/src/com/android/launcher3/graphics/ShadowGenerator.java
+++ b/src/com/android/launcher3/graphics/ShadowGenerator.java
@@ -53,33 +53,38 @@
private final Canvas mCanvas;
private final Paint mBlurPaint;
private final Paint mDrawPaint;
+ private final BlurMaskFilter mDefaultBlurMaskFilter;
private ShadowGenerator(Context context) {
mIconSize = LauncherAppState.getIDP(context).iconBitmapSize;
mCanvas = new Canvas();
mBlurPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
- mBlurPaint.setMaskFilter(new BlurMaskFilter(mIconSize * BLUR_FACTOR, Blur.NORMAL));
mDrawPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
+ mDefaultBlurMaskFilter = new BlurMaskFilter(mIconSize * BLUR_FACTOR, Blur.NORMAL);
}
public synchronized Bitmap recreateIcon(Bitmap icon) {
- return recreateIcon(icon, true);
+ return recreateIcon(icon, true, mDefaultBlurMaskFilter, AMBIENT_SHADOW_ALPHA,
+ KEY_SHADOW_ALPHA);
}
- public synchronized Bitmap recreateIcon(Bitmap icon, boolean resize) {
+ public synchronized Bitmap recreateIcon(Bitmap icon, boolean resize,
+ BlurMaskFilter blurMaskFilter, int ambientAlpha, int keyAlpha) {
int width = resize ? mIconSize : icon.getWidth();
int height = resize ? mIconSize : icon.getHeight();
int[] offset = new int[2];
+
+ mBlurPaint.setMaskFilter(blurMaskFilter);
Bitmap shadow = icon.extractAlpha(mBlurPaint, offset);
Bitmap result = Bitmap.createBitmap(width, height, Config.ARGB_8888);
mCanvas.setBitmap(result);
// Draw ambient shadow
- mDrawPaint.setAlpha(AMBIENT_SHADOW_ALPHA);
+ mDrawPaint.setAlpha(ambientAlpha);
mCanvas.drawBitmap(shadow, offset[0], offset[1], mDrawPaint);
// Draw key shadow
- mDrawPaint.setAlpha(KEY_SHADOW_ALPHA);
+ mDrawPaint.setAlpha(keyAlpha);
mCanvas.drawBitmap(shadow, offset[0], offset[1] + KEY_SHADOW_DISTANCE * mIconSize, mDrawPaint);
// Draw the icon
diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java
index 5bad436..c56325a 100644
--- a/src/com/android/launcher3/model/LoaderTask.java
+++ b/src/com/android/launcher3/model/LoaderTask.java
@@ -548,6 +548,11 @@
break;
case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
+ if (FeatureFlags.GO_DISABLE_WIDGETS) {
+ c.markDeleted("Only legacy shortcuts can have null package");
+ continue;
+ }
+ // Follow through
case LauncherSettings.Favorites.ITEM_TYPE_CUSTOM_APPWIDGET:
// Read all Launcher-specific widget details
boolean customWidget = c.itemType ==
diff --git a/src/com/android/launcher3/notification/FlingAnimationUtils.java b/src/com/android/launcher3/notification/FlingAnimationUtils.java
deleted file mode 100644
index a1f7e49..0000000
--- a/src/com/android/launcher3/notification/FlingAnimationUtils.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright (C) 2017 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.notification;
-
-import android.animation.Animator;
-import android.content.Context;
-import android.view.ViewPropertyAnimator;
-import android.view.animation.Interpolator;
-import android.view.animation.PathInterpolator;
-
-/**
- * Utility class to calculate general fling animation when the finger is released.
- *
- * This class was copied from com.android.systemui.statusbar.
- */
-public class FlingAnimationUtils {
-
- private static final float LINEAR_OUT_SLOW_IN_X2 = 0.35f;
- private static final float LINEAR_OUT_SLOW_IN_X2_MAX = 0.68f;
- private static final float LINEAR_OUT_FASTER_IN_X2 = 0.5f;
- private static final float LINEAR_OUT_FASTER_IN_Y2_MIN = 0.4f;
- private static final float LINEAR_OUT_FASTER_IN_Y2_MAX = 0.5f;
- private static final float MIN_VELOCITY_DP_PER_SECOND = 250;
- private static final float HIGH_VELOCITY_DP_PER_SECOND = 3000;
-
- private static final float LINEAR_OUT_SLOW_IN_START_GRADIENT = 0.75f;
- private final float mSpeedUpFactor;
- private final float mY2;
-
- private float mMinVelocityPxPerSecond;
- private float mMaxLengthSeconds;
- private float mHighVelocityPxPerSecond;
- private float mLinearOutSlowInX2;
-
- private AnimatorProperties mAnimatorProperties = new AnimatorProperties();
- private PathInterpolator mInterpolator;
- private float mCachedStartGradient = -1;
- private float mCachedVelocityFactor = -1;
-
- public FlingAnimationUtils(Context ctx, float maxLengthSeconds) {
- this(ctx, maxLengthSeconds, 0.0f);
- }
-
- /**
- * @param maxLengthSeconds the longest duration an animation can become in seconds
- * @param speedUpFactor a factor from 0 to 1 how much the slow down should be shifted towards
- * the end of the animation. 0 means it's at the beginning and no
- * acceleration will take place.
- */
- public FlingAnimationUtils(Context ctx, float maxLengthSeconds, float speedUpFactor) {
- this(ctx, maxLengthSeconds, speedUpFactor, -1.0f, 1.0f);
- }
-
- /**
- * @param maxLengthSeconds the longest duration an animation can become in seconds
- * @param speedUpFactor a factor from 0 to 1 how much the slow down should be shifted towards
- * the end of the animation. 0 means it's at the beginning and no
- * acceleration will take place.
- * @param x2 the x value to take for the second point of the bezier spline. If a value below 0
- * is provided, the value is automatically calculated.
- * @param y2 the y value to take for the second point of the bezier spline
- */
- public FlingAnimationUtils(Context ctx, float maxLengthSeconds, float speedUpFactor, float x2,
- float y2) {
- mMaxLengthSeconds = maxLengthSeconds;
- mSpeedUpFactor = speedUpFactor;
- if (x2 < 0) {
- mLinearOutSlowInX2 = interpolate(LINEAR_OUT_SLOW_IN_X2,
- LINEAR_OUT_SLOW_IN_X2_MAX,
- mSpeedUpFactor);
- } else {
- mLinearOutSlowInX2 = x2;
- }
- mY2 = y2;
-
- mMinVelocityPxPerSecond
- = MIN_VELOCITY_DP_PER_SECOND * ctx.getResources().getDisplayMetrics().density;
- mHighVelocityPxPerSecond
- = HIGH_VELOCITY_DP_PER_SECOND * ctx.getResources().getDisplayMetrics().density;
- }
-
- private static float interpolate(float start, float end, float amount) {
- return start * (1.0f - amount) + end * amount;
- }
-
- /**
- * Applies the interpolator and length to the animator, such that the fling animation is
- * consistent with the finger motion.
- *
- * @param animator the animator to apply
- * @param currValue the current value
- * @param endValue the end value of the animator
- * @param velocity the current velocity of the motion
- */
- public void apply(Animator animator, float currValue, float endValue, float velocity) {
- apply(animator, currValue, endValue, velocity, Math.abs(endValue - currValue));
- }
-
- /**
- * Applies the interpolator and length to the animator, such that the fling animation is
- * consistent with the finger motion.
- *
- * @param animator the animator to apply
- * @param currValue the current value
- * @param endValue the end value of the animator
- * @param velocity the current velocity of the motion
- */
- public void apply(ViewPropertyAnimator animator, float currValue, float endValue,
- float velocity) {
- apply(animator, currValue, endValue, velocity, Math.abs(endValue - currValue));
- }
-
- /**
- * Applies the interpolator and length to the animator, such that the fling animation is
- * consistent with the finger motion.
- *
- * @param animator the animator to apply
- * @param currValue the current value
- * @param endValue the end value of the animator
- * @param velocity the current velocity of the motion
- * @param maxDistance the maximum distance for this interaction; the maximum animation length
- * gets multiplied by the ratio between the actual distance and this value
- */
- public void apply(Animator animator, float currValue, float endValue, float velocity,
- float maxDistance) {
- AnimatorProperties properties = getProperties(currValue, endValue, velocity,
- maxDistance);
- animator.setDuration(properties.duration);
- animator.setInterpolator(properties.interpolator);
- }
-
- /**
- * Applies the interpolator and length to the animator, such that the fling animation is
- * consistent with the finger motion.
- *
- * @param animator the animator to apply
- * @param currValue the current value
- * @param endValue the end value of the animator
- * @param velocity the current velocity of the motion
- * @param maxDistance the maximum distance for this interaction; the maximum animation length
- * gets multiplied by the ratio between the actual distance and this value
- */
- public void apply(ViewPropertyAnimator animator, float currValue, float endValue,
- float velocity, float maxDistance) {
- AnimatorProperties properties = getProperties(currValue, endValue, velocity,
- maxDistance);
- animator.setDuration(properties.duration);
- animator.setInterpolator(properties.interpolator);
- }
-
- private AnimatorProperties getProperties(float currValue,
- float endValue, float velocity, float maxDistance) {
- float maxLengthSeconds = (float) (mMaxLengthSeconds
- * Math.sqrt(Math.abs(endValue - currValue) / maxDistance));
- float diff = Math.abs(endValue - currValue);
- float velAbs = Math.abs(velocity);
- float velocityFactor = mSpeedUpFactor == 0.0f
- ? 1.0f : Math.min(velAbs / HIGH_VELOCITY_DP_PER_SECOND, 1.0f);
- float startGradient = interpolate(LINEAR_OUT_SLOW_IN_START_GRADIENT,
- mY2 / mLinearOutSlowInX2, velocityFactor);
- float durationSeconds = startGradient * diff / velAbs;
- Interpolator slowInInterpolator = getInterpolator(startGradient, velocityFactor);
- if (durationSeconds <= maxLengthSeconds) {
- mAnimatorProperties.interpolator = slowInInterpolator;
- } else if (velAbs >= mMinVelocityPxPerSecond) {
-
- // Cross fade between fast-out-slow-in and linear interpolator with current velocity.
- durationSeconds = maxLengthSeconds;
- VelocityInterpolator velocityInterpolator
- = new VelocityInterpolator(durationSeconds, velAbs, diff);
- InterpolatorInterpolator superInterpolator = new InterpolatorInterpolator(
- velocityInterpolator, slowInInterpolator, Interpolators.LINEAR_OUT_SLOW_IN);
- mAnimatorProperties.interpolator = superInterpolator;
- } else {
-
- // Just use a normal interpolator which doesn't take the velocity into account.
- durationSeconds = maxLengthSeconds;
- mAnimatorProperties.interpolator = Interpolators.FAST_OUT_SLOW_IN;
- }
- mAnimatorProperties.duration = (long) (durationSeconds * 1000);
- return mAnimatorProperties;
- }
-
- private Interpolator getInterpolator(float startGradient, float velocityFactor) {
- if (startGradient != mCachedStartGradient
- || velocityFactor != mCachedVelocityFactor) {
- float speedup = mSpeedUpFactor * (1.0f - velocityFactor);
- mInterpolator = new PathInterpolator(speedup,
- speedup * startGradient,
- mLinearOutSlowInX2, mY2);
- mCachedStartGradient = startGradient;
- mCachedVelocityFactor = velocityFactor;
- }
- return mInterpolator;
- }
-
- /**
- * Applies the interpolator and length to the animator, such that the fling animation is
- * consistent with the finger motion for the case when the animation is making something
- * disappear.
- *
- * @param animator the animator to apply
- * @param currValue the current value
- * @param endValue the end value of the animator
- * @param velocity the current velocity of the motion
- * @param maxDistance the maximum distance for this interaction; the maximum animation length
- * gets multiplied by the ratio between the actual distance and this value
- */
- public void applyDismissing(Animator animator, float currValue, float endValue,
- float velocity, float maxDistance) {
- AnimatorProperties properties = getDismissingProperties(currValue, endValue, velocity,
- maxDistance);
- animator.setDuration(properties.duration);
- animator.setInterpolator(properties.interpolator);
- }
-
- /**
- * Applies the interpolator and length to the animator, such that the fling animation is
- * consistent with the finger motion for the case when the animation is making something
- * disappear.
- *
- * @param animator the animator to apply
- * @param currValue the current value
- * @param endValue the end value of the animator
- * @param velocity the current velocity of the motion
- * @param maxDistance the maximum distance for this interaction; the maximum animation length
- * gets multiplied by the ratio between the actual distance and this value
- */
- public void applyDismissing(ViewPropertyAnimator animator, float currValue, float endValue,
- float velocity, float maxDistance) {
- AnimatorProperties properties = getDismissingProperties(currValue, endValue, velocity,
- maxDistance);
- animator.setDuration(properties.duration);
- animator.setInterpolator(properties.interpolator);
- }
-
- private AnimatorProperties getDismissingProperties(float currValue, float endValue,
- float velocity, float maxDistance) {
- float maxLengthSeconds = (float) (mMaxLengthSeconds
- * Math.pow(Math.abs(endValue - currValue) / maxDistance, 0.5f));
- float diff = Math.abs(endValue - currValue);
- float velAbs = Math.abs(velocity);
- float y2 = calculateLinearOutFasterInY2(velAbs);
-
- float startGradient = y2 / LINEAR_OUT_FASTER_IN_X2;
- Interpolator mLinearOutFasterIn = new PathInterpolator(0, 0, LINEAR_OUT_FASTER_IN_X2, y2);
- float durationSeconds = startGradient * diff / velAbs;
- if (durationSeconds <= maxLengthSeconds) {
- mAnimatorProperties.interpolator = mLinearOutFasterIn;
- } else if (velAbs >= mMinVelocityPxPerSecond) {
-
- // Cross fade between linear-out-faster-in and linear interpolator with current
- // velocity.
- durationSeconds = maxLengthSeconds;
- VelocityInterpolator velocityInterpolator
- = new VelocityInterpolator(durationSeconds, velAbs, diff);
- InterpolatorInterpolator superInterpolator = new InterpolatorInterpolator(
- velocityInterpolator, mLinearOutFasterIn, Interpolators.LINEAR_OUT_SLOW_IN);
- mAnimatorProperties.interpolator = superInterpolator;
- } else {
-
- // Just use a normal interpolator which doesn't take the velocity into account.
- durationSeconds = maxLengthSeconds;
- mAnimatorProperties.interpolator = Interpolators.FAST_OUT_LINEAR_IN;
- }
- mAnimatorProperties.duration = (long) (durationSeconds * 1000);
- return mAnimatorProperties;
- }
-
- /**
- * Calculates the y2 control point for a linear-out-faster-in path interpolator depending on the
- * velocity. The faster the velocity, the more "linear" the interpolator gets.
- *
- * @param velocity the velocity of the gesture.
- * @return the y2 control point for a cubic bezier path interpolator
- */
- private float calculateLinearOutFasterInY2(float velocity) {
- float t = (velocity - mMinVelocityPxPerSecond)
- / (mHighVelocityPxPerSecond - mMinVelocityPxPerSecond);
- t = Math.max(0, Math.min(1, t));
- return (1 - t) * LINEAR_OUT_FASTER_IN_Y2_MIN + t * LINEAR_OUT_FASTER_IN_Y2_MAX;
- }
-
- /**
- * @return the minimum velocity a gesture needs to have to be considered a fling
- */
- public float getMinVelocityPxPerSecond() {
- return mMinVelocityPxPerSecond;
- }
-
- /**
- * An interpolator which interpolates two interpolators with an interpolator.
- */
- private static final class InterpolatorInterpolator implements Interpolator {
-
- private Interpolator mInterpolator1;
- private Interpolator mInterpolator2;
- private Interpolator mCrossfader;
-
- InterpolatorInterpolator(Interpolator interpolator1, Interpolator interpolator2,
- Interpolator crossfader) {
- mInterpolator1 = interpolator1;
- mInterpolator2 = interpolator2;
- mCrossfader = crossfader;
- }
-
- @Override
- public float getInterpolation(float input) {
- float t = mCrossfader.getInterpolation(input);
- return (1 - t) * mInterpolator1.getInterpolation(input)
- + t * mInterpolator2.getInterpolation(input);
- }
- }
-
- /**
- * An interpolator which interpolates with a fixed velocity.
- */
- private static final class VelocityInterpolator implements Interpolator {
-
- private float mDurationSeconds;
- private float mVelocity;
- private float mDiff;
-
- private VelocityInterpolator(float durationSeconds, float velocity, float diff) {
- mDurationSeconds = durationSeconds;
- mVelocity = velocity;
- mDiff = diff;
- }
-
- @Override
- public float getInterpolation(float input) {
- float time = input * mDurationSeconds;
- return time * mVelocity / mDiff;
- }
- }
-
- private static class AnimatorProperties {
- Interpolator interpolator;
- long duration;
- }
-
-}
diff --git a/src/com/android/launcher3/notification/NotificationItemView.java b/src/com/android/launcher3/notification/NotificationItemView.java
index 11f6aa0..78c64d7 100644
--- a/src/com/android/launcher3/notification/NotificationItemView.java
+++ b/src/com/android/launcher3/notification/NotificationItemView.java
@@ -37,6 +37,7 @@
import com.android.launcher3.graphics.IconPalette;
import com.android.launcher3.logging.UserEventDispatcher.LogContainerProvider;
import com.android.launcher3.popup.PopupItemView;
+import com.android.launcher3.touch.SwipeDetector;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.util.Themes;
@@ -56,7 +57,7 @@
private TextView mHeaderCount;
private NotificationMainView mMainView;
private NotificationFooterLayout mFooter;
- private SwipeHelper mSwipeHelper;
+ private SwipeDetector mSwipeDetector;
private boolean mAnimatingNextIcon;
private int mNotificationHeaderTextColor = Notification.COLOR_DEFAULT;
@@ -75,12 +76,14 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mHeaderText = (TextView) findViewById(R.id.notification_text);
- mHeaderCount = (TextView) findViewById(R.id.notification_count);
- mMainView = (NotificationMainView) findViewById(R.id.main_view);
- mFooter = (NotificationFooterLayout) findViewById(R.id.footer);
- mSwipeHelper = new SwipeHelper(SwipeHelper.X, mMainView, getContext());
- mSwipeHelper.setDisableHardwareLayers(true);
+ mHeaderText = findViewById(R.id.notification_text);
+ mHeaderCount = findViewById(R.id.notification_count);
+ mMainView = findViewById(R.id.main_view);
+ mFooter = findViewById(R.id.footer);
+
+ mSwipeDetector = new SwipeDetector(getContext(), mMainView, SwipeDetector.HORIZONTAL);
+ mSwipeDetector.setDetectableScrollConditions(SwipeDetector.DIRECTION_BOTH, false);
+ mMainView.setSwipeDetector(mSwipeDetector);
}
public NotificationMainView getMainView() {
@@ -136,7 +139,8 @@
return false;
}
getParent().requestDisallowInterceptTouchEvent(true);
- return mSwipeHelper.onInterceptTouchEvent(ev);
+ mSwipeDetector.onTouchEvent(ev);
+ return mSwipeDetector.isDraggingOrSettling();
}
@Override
@@ -145,7 +149,7 @@
// The notification hasn't been populated yet.
return false;
}
- return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev);
+ return mSwipeDetector.onTouchEvent(ev) || super.onTouchEvent(ev);
}
public void applyNotificationInfos(final List<NotificationInfo> notificationInfos) {
diff --git a/src/com/android/launcher3/notification/NotificationMainView.java b/src/com/android/launcher3/notification/NotificationMainView.java
index 9b8dd64..5aff28d 100644
--- a/src/com/android/launcher3/notification/NotificationMainView.java
+++ b/src/com/android/launcher3/notification/NotificationMainView.java
@@ -23,15 +23,17 @@
import android.graphics.drawable.RippleDrawable;
import android.text.TextUtils;
import android.util.AttributeSet;
-import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewPropertyAnimator;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
+import com.android.launcher3.touch.OverScroll;
+import com.android.launcher3.touch.SwipeDetector;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.util.Themes;
@@ -39,7 +41,7 @@
* A {@link android.widget.FrameLayout} that contains a single notification,
* e.g. icon + title + text.
*/
-public class NotificationMainView extends FrameLayout implements SwipeHelper.Callback {
+public class NotificationMainView extends FrameLayout implements SwipeDetector.Listener {
private NotificationInfo mNotificationInfo;
private ViewGroup mTextAndBackground;
@@ -47,6 +49,8 @@
private TextView mTitleView;
private TextView mTextView;
+ private SwipeDetector mSwipeDetector;
+
public NotificationMainView(Context context) {
this(context, null, 0);
}
@@ -78,6 +82,10 @@
applyNotificationInfo(mainNotification, iconView, false);
}
+ public void setSwipeDetector(SwipeDetector swipeDetector) {
+ mSwipeDetector = swipeDetector;
+ }
+
/**
* Sets the content of this view, animating it after a new icon shifts up if necessary.
*/
@@ -113,29 +121,11 @@
}
- // SwipeHelper.Callback's
-
- @Override
- public View getChildAtPosition(MotionEvent ev) {
- return this;
- }
-
- @Override
- public boolean canChildBeDismissed(View v) {
+ public boolean canChildBeDismissed() {
return mNotificationInfo != null && mNotificationInfo.dismissable;
}
- @Override
- public boolean isAntiFalsingNeeded() {
- return false;
- }
-
- @Override
- public void onBeginDrag(View v) {
- }
-
- @Override
- public void onChildDismissed(View v) {
+ public void onChildDismissed() {
Launcher launcher = Launcher.getLauncher(getContext());
launcher.getPopupDataProvider().cancelNotification(
mNotificationInfo.notificationKey);
@@ -145,22 +135,55 @@
LauncherLogProto.ItemType.NOTIFICATION);
}
+ // SwipeDetector.Listener's
@Override
- public void onDragCancelled(View v) {
- }
+ public void onDragStart(boolean start) { }
+
@Override
- public void onChildSnappedBack(View animView, float targetLeft) {
- }
-
- @Override
- public boolean updateSwipeProgress(View animView, boolean dismissable, float swipeProgress) {
- // Don't fade out.
+ public boolean onDrag(float displacement, float velocity) {
+ setTranslationX(canChildBeDismissed()
+ ? displacement : OverScroll.dampedScroll(displacement, getWidth()));
+ animate().cancel();
return true;
}
@Override
- public float getFalsingThresholdFactor() {
- return 1;
+ public void onDragEnd(float velocity, boolean fling) {
+ final boolean willExit;
+ final float endTranslation;
+
+ if (!canChildBeDismissed()) {
+ willExit = false;
+ endTranslation = 0;
+ } else if (fling) {
+ willExit = true;
+ endTranslation = velocity < 0 ? - getWidth() : getWidth();
+ } else if (Math.abs(getTranslationX()) > getWidth() / 2) {
+ willExit = true;
+ endTranslation = (getTranslationX() < 0 ? -getWidth() : getWidth());
+ } else {
+ willExit = false;
+ endTranslation = 0;
+ }
+
+ SwipeDetector.ScrollInterpolator interpolator = new SwipeDetector.ScrollInterpolator();
+ interpolator.setVelocityAtZero(velocity);
+
+ long duration = SwipeDetector.calculateDuration(velocity,
+ (endTranslation - getTranslationX()) / getWidth());
+ animate()
+ .setDuration(duration)
+ .setInterpolator(interpolator)
+ .translationX(endTranslation)
+ .withEndAction(new Runnable() {
+ @Override
+ public void run() {
+ mSwipeDetector.finishedScrolling();
+ if (willExit) {
+ onChildDismissed();
+ }
+ }
+ }).start();
}
}
diff --git a/src/com/android/launcher3/notification/SwipeHelper.java b/src/com/android/launcher3/notification/SwipeHelper.java
deleted file mode 100644
index ebbe5fc..0000000
--- a/src/com/android/launcher3/notification/SwipeHelper.java
+++ /dev/null
@@ -1,687 +0,0 @@
-/*
- * Copyright (C) 2017 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.notification;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ObjectAnimator;
-import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.content.Context;
-import android.graphics.RectF;
-import android.os.Handler;
-import android.util.ArrayMap;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.accessibility.AccessibilityEvent;
-import com.android.launcher3.R;
-
-/**
- * This class was copied from com.android.systemui.
- */
-public class SwipeHelper {
- private static final String TAG = "SwipeHelper";
- private static final boolean DEBUG_INVALIDATE = false;
- private static final boolean SLOW_ANIMATIONS = false; // DEBUG;
- private static final boolean CONSTRAIN_SWIPE = true;
- private static final boolean FADE_OUT_DURING_SWIPE = true;
- private static final boolean DISMISS_IF_SWIPED_FAR_ENOUGH = true;
-
- public static final int X = 0;
- public static final int Y = 1;
-
- private static final float SWIPE_ESCAPE_VELOCITY = 100f; // dp/sec
- private static final int DEFAULT_ESCAPE_ANIMATION_DURATION = 200; // ms
- private static final int MAX_ESCAPE_ANIMATION_DURATION = 400; // ms
- private static final int MAX_DISMISS_VELOCITY = 4000; // dp/sec
- private static final int SNAP_ANIM_LEN = SLOW_ANIMATIONS ? 1000 : 150; // ms
-
- static final float SWIPE_PROGRESS_FADE_END = 0.5f; // fraction of thumbnail width
- // beyond which swipe progress->0
- private float mMinSwipeProgress = 0f;
- private float mMaxSwipeProgress = 1f;
-
- private final FlingAnimationUtils mFlingAnimationUtils;
- private float mPagingTouchSlop;
- private final Callback mCallback;
- private final Handler mHandler;
- private final int mSwipeDirection;
- private final VelocityTracker mVelocityTracker;
-
- private float mInitialTouchPos;
- private float mPerpendicularInitialTouchPos;
- private boolean mDragging;
- private boolean mSnappingChild;
- private View mCurrView;
- private boolean mCanCurrViewBeDimissed;
- private float mDensityScale;
- private float mTranslation = 0;
-
- private boolean mLongPressSent;
- private LongPressListener mLongPressListener;
- private Runnable mWatchLongPress;
- private final long mLongPressTimeout;
-
- final private int[] mTmpPos = new int[2];
- private final int mFalsingThreshold;
- private boolean mTouchAboveFalsingThreshold;
- private boolean mDisableHwLayers;
-
- private final ArrayMap<View, Animator> mDismissPendingMap = new ArrayMap<>();
-
- public SwipeHelper(int swipeDirection, Callback callback, Context context) {
- mCallback = callback;
- mHandler = new Handler();
- mSwipeDirection = swipeDirection;
- mVelocityTracker = VelocityTracker.obtain();
- mDensityScale = context.getResources().getDisplayMetrics().density;
- mPagingTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop();
-
- mLongPressTimeout = (long) (ViewConfiguration.getLongPressTimeout() * 1.5f); // extra long-press!
- mFalsingThreshold = context.getResources().getDimensionPixelSize(
- R.dimen.swipe_helper_falsing_threshold);
- mFlingAnimationUtils = new FlingAnimationUtils(context, getMaxEscapeAnimDuration() / 1000f);
- }
-
- public void setLongPressListener(LongPressListener listener) {
- mLongPressListener = listener;
- }
-
- public void setDensityScale(float densityScale) {
- mDensityScale = densityScale;
- }
-
- public void setPagingTouchSlop(float pagingTouchSlop) {
- mPagingTouchSlop = pagingTouchSlop;
- }
-
- public void setDisableHardwareLayers(boolean disableHwLayers) {
- mDisableHwLayers = disableHwLayers;
- }
-
- private float getPos(MotionEvent ev) {
- return mSwipeDirection == X ? ev.getX() : ev.getY();
- }
-
- private float getPerpendicularPos(MotionEvent ev) {
- return mSwipeDirection == X ? ev.getY() : ev.getX();
- }
-
- protected float getTranslation(View v) {
- return mSwipeDirection == X ? v.getTranslationX() : v.getTranslationY();
- }
-
- private float getVelocity(VelocityTracker vt) {
- return mSwipeDirection == X ? vt.getXVelocity() :
- vt.getYVelocity();
- }
-
- protected ObjectAnimator createTranslationAnimation(View v, float newPos) {
- ObjectAnimator anim = ObjectAnimator.ofFloat(v,
- mSwipeDirection == X ? View.TRANSLATION_X : View.TRANSLATION_Y, newPos);
- return anim;
- }
-
- private float getPerpendicularVelocity(VelocityTracker vt) {
- return mSwipeDirection == X ? vt.getYVelocity() :
- vt.getXVelocity();
- }
-
- protected Animator getViewTranslationAnimator(View v, float target,
- AnimatorUpdateListener listener) {
- ObjectAnimator anim = createTranslationAnimation(v, target);
- if (listener != null) {
- anim.addUpdateListener(listener);
- }
- return anim;
- }
-
- protected void setTranslation(View v, float translate) {
- if (v == null) {
- return;
- }
- if (mSwipeDirection == X) {
- v.setTranslationX(translate);
- } else {
- v.setTranslationY(translate);
- }
- }
-
- protected float getSize(View v) {
- return mSwipeDirection == X ? v.getMeasuredWidth() :
- v.getMeasuredHeight();
- }
-
- public void setMinSwipeProgress(float minSwipeProgress) {
- mMinSwipeProgress = minSwipeProgress;
- }
-
- public void setMaxSwipeProgress(float maxSwipeProgress) {
- mMaxSwipeProgress = maxSwipeProgress;
- }
-
- private float getSwipeProgressForOffset(View view, float translation) {
- float viewSize = getSize(view);
- float result = Math.abs(translation / viewSize);
- return Math.min(Math.max(mMinSwipeProgress, result), mMaxSwipeProgress);
- }
-
- private float getSwipeAlpha(float progress) {
- return Math.min(0, Math.max(1, progress / SWIPE_PROGRESS_FADE_END));
- }
-
- private void updateSwipeProgressFromOffset(View animView, boolean dismissable) {
- updateSwipeProgressFromOffset(animView, dismissable, getTranslation(animView));
- }
-
- private void updateSwipeProgressFromOffset(View animView, boolean dismissable,
- float translation) {
- float swipeProgress = getSwipeProgressForOffset(animView, translation);
- if (!mCallback.updateSwipeProgress(animView, dismissable, swipeProgress)) {
- if (FADE_OUT_DURING_SWIPE && dismissable) {
- float alpha = swipeProgress;
- if (!mDisableHwLayers) {
- if (alpha != 0f && alpha != 1f) {
- animView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
- } else {
- animView.setLayerType(View.LAYER_TYPE_NONE, null);
- }
- }
- animView.setAlpha(getSwipeAlpha(swipeProgress));
- }
- }
- invalidateGlobalRegion(animView);
- }
-
- // invalidate the view's own bounds all the way up the view hierarchy
- public static void invalidateGlobalRegion(View view) {
- invalidateGlobalRegion(
- view,
- new RectF(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()));
- }
-
- // invalidate a rectangle relative to the view's coordinate system all the way up the view
- // hierarchy
- public static void invalidateGlobalRegion(View view, RectF childBounds) {
- //childBounds.offset(view.getTranslationX(), view.getTranslationY());
- if (DEBUG_INVALIDATE)
- Log.v(TAG, "-------------");
- while (view.getParent() != null && view.getParent() instanceof View) {
- view = (View) view.getParent();
- view.getMatrix().mapRect(childBounds);
- view.invalidate((int) Math.floor(childBounds.left),
- (int) Math.floor(childBounds.top),
- (int) Math.ceil(childBounds.right),
- (int) Math.ceil(childBounds.bottom));
- if (DEBUG_INVALIDATE) {
- Log.v(TAG, "INVALIDATE(" + (int) Math.floor(childBounds.left)
- + "," + (int) Math.floor(childBounds.top)
- + "," + (int) Math.ceil(childBounds.right)
- + "," + (int) Math.ceil(childBounds.bottom));
- }
- }
- }
-
- public void removeLongPressCallback() {
- if (mWatchLongPress != null) {
- mHandler.removeCallbacks(mWatchLongPress);
- mWatchLongPress = null;
- }
- }
-
- public boolean onInterceptTouchEvent(final MotionEvent ev) {
- final int action = ev.getAction();
-
- switch (action) {
- case MotionEvent.ACTION_DOWN:
- mTouchAboveFalsingThreshold = false;
- mDragging = false;
- mSnappingChild = false;
- mLongPressSent = false;
- mVelocityTracker.clear();
- mCurrView = mCallback.getChildAtPosition(ev);
-
- if (mCurrView != null) {
- onDownUpdate(mCurrView);
- mCanCurrViewBeDimissed = mCallback.canChildBeDismissed(mCurrView);
- mVelocityTracker.addMovement(ev);
- mInitialTouchPos = getPos(ev);
- mPerpendicularInitialTouchPos = getPerpendicularPos(ev);
- mTranslation = getTranslation(mCurrView);
- if (mLongPressListener != null) {
- if (mWatchLongPress == null) {
- mWatchLongPress = new Runnable() {
- @Override
- public void run() {
- if (mCurrView != null && !mLongPressSent) {
- mLongPressSent = true;
- mCurrView.sendAccessibilityEvent(
- AccessibilityEvent.TYPE_VIEW_LONG_CLICKED);
- mCurrView.getLocationOnScreen(mTmpPos);
- final int x = (int) ev.getRawX() - mTmpPos[0];
- final int y = (int) ev.getRawY() - mTmpPos[1];
- mLongPressListener.onLongPress(mCurrView, x, y);
- }
- }
- };
- }
- mHandler.postDelayed(mWatchLongPress, mLongPressTimeout);
- }
- }
- break;
-
- case MotionEvent.ACTION_MOVE:
- if (mCurrView != null && !mLongPressSent) {
- mVelocityTracker.addMovement(ev);
- float pos = getPos(ev);
- float perpendicularPos = getPerpendicularPos(ev);
- float delta = pos - mInitialTouchPos;
- float deltaPerpendicular = perpendicularPos - mPerpendicularInitialTouchPos;
- if (Math.abs(delta) > mPagingTouchSlop
- && Math.abs(delta) > Math.abs(deltaPerpendicular)) {
- mCallback.onBeginDrag(mCurrView);
- mDragging = true;
- mInitialTouchPos = getPos(ev);
- mTranslation = getTranslation(mCurrView);
- removeLongPressCallback();
- }
- }
- break;
-
- case MotionEvent.ACTION_UP:
- case MotionEvent.ACTION_CANCEL:
- final boolean captured = (mDragging || mLongPressSent);
- mDragging = false;
- mCurrView = null;
- mLongPressSent = false;
- removeLongPressCallback();
- if (captured) return true;
- break;
- }
- return mDragging || mLongPressSent;
- }
-
- /**
- * @param view The view to be dismissed
- * @param velocity The desired pixels/second speed at which the view should move
- * @param useAccelerateInterpolator Should an accelerating Interpolator be used
- */
- public void dismissChild(final View view, float velocity, boolean useAccelerateInterpolator) {
- dismissChild(view, velocity, null /* endAction */, 0 /* delay */,
- useAccelerateInterpolator, 0 /* fixedDuration */, false /* isDismissAll */);
- }
-
- /**
- * @param animView The view to be dismissed
- * @param velocity The desired pixels/second speed at which the view should move
- * @param endAction The action to perform at the end
- * @param delay The delay after which we should start
- * @param useAccelerateInterpolator Should an accelerating Interpolator be used
- * @param fixedDuration If not 0, this exact duration will be taken
- */
- public void dismissChild(final View animView, float velocity, final Runnable endAction,
- long delay, boolean useAccelerateInterpolator, long fixedDuration,
- boolean isDismissAll) {
- final boolean canBeDismissed = mCallback.canChildBeDismissed(animView);
- float newPos;
- boolean isLayoutRtl = animView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
-
- // if we use the Menu to dismiss an item in landscape, animate up
- boolean animateUpForMenu = velocity == 0 && (getTranslation(animView) == 0 || isDismissAll)
- && mSwipeDirection == Y;
- // if the language is rtl we prefer swiping to the left
- boolean animateLeftForRtl = velocity == 0 && (getTranslation(animView) == 0 || isDismissAll)
- && isLayoutRtl;
- boolean animateLeft = velocity < 0
- || (velocity == 0 && getTranslation(animView) < 0 && !isDismissAll);
-
- if (animateLeft || animateLeftForRtl || animateUpForMenu) {
- newPos = -getSize(animView);
- } else {
- newPos = getSize(animView);
- }
- long duration;
- if (fixedDuration == 0) {
- duration = MAX_ESCAPE_ANIMATION_DURATION;
- if (velocity != 0) {
- duration = Math.min(duration,
- (int) (Math.abs(newPos - getTranslation(animView)) * 1000f / Math
- .abs(velocity))
- );
- } else {
- duration = DEFAULT_ESCAPE_ANIMATION_DURATION;
- }
- } else {
- duration = fixedDuration;
- }
-
- if (!mDisableHwLayers) {
- animView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
- }
- AnimatorUpdateListener updateListener = new AnimatorUpdateListener() {
- public void onAnimationUpdate(ValueAnimator animation) {
- onTranslationUpdate(animView, (float) animation.getAnimatedValue(), canBeDismissed);
- }
- };
-
- Animator anim = getViewTranslationAnimator(animView, newPos, updateListener);
- if (anim == null) {
- return;
- }
- if (useAccelerateInterpolator) {
- anim.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN);
- anim.setDuration(duration);
- } else {
- mFlingAnimationUtils.applyDismissing(anim, getTranslation(animView),
- newPos, velocity, getSize(animView));
- }
- if (delay > 0) {
- anim.setStartDelay(delay);
- }
- anim.addListener(new AnimatorListenerAdapter() {
- private boolean mCancelled;
-
- public void onAnimationCancel(Animator animation) {
- mCancelled = true;
- }
-
- public void onAnimationEnd(Animator animation) {
- updateSwipeProgressFromOffset(animView, canBeDismissed);
- mDismissPendingMap.remove(animView);
- if (!mCancelled) {
- mCallback.onChildDismissed(animView);
- }
- if (endAction != null) {
- endAction.run();
- }
- if (!mDisableHwLayers) {
- animView.setLayerType(View.LAYER_TYPE_NONE, null);
- }
- }
- });
-
- prepareDismissAnimation(animView, anim);
- mDismissPendingMap.put(animView, anim);
- anim.start();
- }
-
- /**
- * Called to update the dismiss animation.
- */
- protected void prepareDismissAnimation(View view, Animator anim) {
- // Do nothing
- }
-
- public void snapChild(final View animView, final float targetLeft, float velocity) {
- final boolean canBeDismissed = mCallback.canChildBeDismissed(animView);
- AnimatorUpdateListener updateListener = new AnimatorUpdateListener() {
- public void onAnimationUpdate(ValueAnimator animation) {
- onTranslationUpdate(animView, (float) animation.getAnimatedValue(), canBeDismissed);
- }
- };
-
- Animator anim = getViewTranslationAnimator(animView, targetLeft, updateListener);
- if (anim == null) {
- return;
- }
- int duration = SNAP_ANIM_LEN;
- anim.setDuration(duration);
- anim.addListener(new AnimatorListenerAdapter() {
- public void onAnimationEnd(Animator animator) {
- mSnappingChild = false;
- updateSwipeProgressFromOffset(animView, canBeDismissed);
- mCallback.onChildSnappedBack(animView, targetLeft);
- }
- });
- prepareSnapBackAnimation(animView, anim);
- mSnappingChild = true;
- anim.start();
- }
-
- /**
- * Called to update the snap back animation.
- */
- protected void prepareSnapBackAnimation(View view, Animator anim) {
- // Do nothing
- }
-
- /**
- * Called when there's a down event.
- */
- public void onDownUpdate(View currView) {
- // Do nothing
- }
-
- /**
- * Called on a move event.
- */
- protected void onMoveUpdate(View view, float totalTranslation, float delta) {
- // Do nothing
- }
-
- /**
- * Called in {@link AnimatorUpdateListener#onAnimationUpdate(ValueAnimator)} when the current
- * view is being animated to dismiss or snap.
- */
- public void onTranslationUpdate(View animView, float value, boolean canBeDismissed) {
- updateSwipeProgressFromOffset(animView, canBeDismissed, value);
- }
-
- private void snapChildInstantly(final View view) {
- final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(view);
- setTranslation(view, 0);
- updateSwipeProgressFromOffset(view, canAnimViewBeDismissed);
- }
-
- /**
- * Called when a view is updated to be non-dismissable, if the view was being dismissed before
- * the update this will handle snapping it back into place.
- *
- * @param view the view to snap if necessary.
- * @param animate whether to animate the snap or not.
- * @param targetLeft the target to snap to.
- */
- public void snapChildIfNeeded(final View view, boolean animate, float targetLeft) {
- if ((mDragging && mCurrView == view) || mSnappingChild) {
- return;
- }
- boolean needToSnap = false;
- Animator dismissPendingAnim = mDismissPendingMap.get(view);
- if (dismissPendingAnim != null) {
- needToSnap = true;
- dismissPendingAnim.cancel();
- } else if (getTranslation(view) != 0) {
- needToSnap = true;
- }
- if (needToSnap) {
- if (animate) {
- snapChild(view, targetLeft, 0.0f /* velocity */);
- } else {
- snapChildInstantly(view);
- }
- }
- }
-
- public boolean onTouchEvent(MotionEvent ev) {
- if (mLongPressSent) {
- return true;
- }
-
- if (!mDragging) {
- if (mCallback.getChildAtPosition(ev) != null) {
-
- // We are dragging directly over a card, make sure that we also catch the gesture
- // even if nobody else wants the touch event.
- onInterceptTouchEvent(ev);
- return true;
- } else {
-
- // We are not doing anything, make sure the long press callback
- // is not still ticking like a bomb waiting to go off.
- removeLongPressCallback();
- return false;
- }
- }
-
- mVelocityTracker.addMovement(ev);
- final int action = ev.getAction();
- switch (action) {
- case MotionEvent.ACTION_OUTSIDE:
- case MotionEvent.ACTION_MOVE:
- if (mCurrView != null) {
- float delta = getPos(ev) - mInitialTouchPos;
- float absDelta = Math.abs(delta);
- if (absDelta >= getFalsingThreshold()) {
- mTouchAboveFalsingThreshold = true;
- }
- // don't let items that can't be dismissed be dragged more than
- // maxScrollDistance
- if (CONSTRAIN_SWIPE && !mCallback.canChildBeDismissed(mCurrView)) {
- float size = getSize(mCurrView);
- float maxScrollDistance = 0.25f * size;
- if (absDelta >= size) {
- delta = delta > 0 ? maxScrollDistance : -maxScrollDistance;
- } else {
- delta = maxScrollDistance * (float) Math.sin((delta/size)*(Math.PI/2));
- }
- }
-
- setTranslation(mCurrView, mTranslation + delta);
- updateSwipeProgressFromOffset(mCurrView, mCanCurrViewBeDimissed);
- onMoveUpdate(mCurrView, mTranslation + delta, delta);
- }
- break;
- case MotionEvent.ACTION_UP:
- case MotionEvent.ACTION_CANCEL:
- if (mCurrView == null) {
- break;
- }
- mVelocityTracker.computeCurrentVelocity(1000 /* px/sec */, getMaxVelocity());
- float velocity = getVelocity(mVelocityTracker);
-
- if (!handleUpEvent(ev, mCurrView, velocity, getTranslation(mCurrView))) {
- if (isDismissGesture(ev)) {
- // flingadingy
- dismissChild(mCurrView, velocity,
- !swipedFastEnough() /* useAccelerateInterpolator */);
- } else {
- // snappity
- mCallback.onDragCancelled(mCurrView);
- snapChild(mCurrView, 0 /* leftTarget */, velocity);
- }
- mCurrView = null;
- }
- mDragging = false;
- break;
- }
- return true;
- }
-
- private int getFalsingThreshold() {
- float factor = mCallback.getFalsingThresholdFactor();
- return (int) (mFalsingThreshold * factor);
- }
-
- private float getMaxVelocity() {
- return MAX_DISMISS_VELOCITY * mDensityScale;
- }
-
- protected float getEscapeVelocity() {
- return getUnscaledEscapeVelocity() * mDensityScale;
- }
-
- protected float getUnscaledEscapeVelocity() {
- return SWIPE_ESCAPE_VELOCITY;
- }
-
- protected long getMaxEscapeAnimDuration() {
- return MAX_ESCAPE_ANIMATION_DURATION;
- }
-
- protected boolean swipedFarEnough() {
- float translation = getTranslation(mCurrView);
- return DISMISS_IF_SWIPED_FAR_ENOUGH && Math.abs(translation) > 0.4 * getSize(mCurrView);
- }
-
- protected boolean isDismissGesture(MotionEvent ev) {
- boolean falsingDetected = mCallback.isAntiFalsingNeeded() && !mTouchAboveFalsingThreshold;
- return !falsingDetected && (swipedFastEnough() || swipedFarEnough())
- && ev.getActionMasked() == MotionEvent.ACTION_UP
- && mCallback.canChildBeDismissed(mCurrView);
- }
-
- protected boolean swipedFastEnough() {
- float velocity = getVelocity(mVelocityTracker);
- float translation = getTranslation(mCurrView);
- boolean ret = (Math.abs(velocity) > getEscapeVelocity())
- && (velocity > 0) == (translation > 0);
- return ret;
- }
-
- protected boolean handleUpEvent(MotionEvent ev, View animView, float velocity,
- float translation) {
- return false;
- }
-
- public interface Callback {
- View getChildAtPosition(MotionEvent ev);
-
- boolean canChildBeDismissed(View v);
-
- boolean isAntiFalsingNeeded();
-
- void onBeginDrag(View v);
-
- void onChildDismissed(View v);
-
- void onDragCancelled(View v);
-
- /**
- * Called when the child is snapped to a position.
- *
- * @param animView the view that was snapped.
- * @param targetLeft the left position the view was snapped to.
- */
- void onChildSnappedBack(View animView, float targetLeft);
-
- /**
- * Updates the swipe progress on a child.
- *
- * @return if true, prevents the default alpha fading.
- */
- boolean updateSwipeProgress(View animView, boolean dismissable, float swipeProgress);
-
- /**
- * @return The factor the falsing threshold should be multiplied with
- */
- float getFalsingThresholdFactor();
- }
-
- /**
- * Equivalent to View.OnLongClickListener with coordinates
- */
- public interface LongPressListener {
- /**
- * Equivalent to {@link View.OnLongClickListener#onLongClick(View)} with coordinates
- * @return whether the longpress was handled
- */
- boolean onLongPress(View v, int x, int y);
- }
-}
\ No newline at end of file
diff --git a/src/com/android/launcher3/qsb/QsbContainerView.java b/src/com/android/launcher3/qsb/QsbContainerView.java
index 4dc3c1c..d26f9f6 100644
--- a/src/com/android/launcher3/qsb/QsbContainerView.java
+++ b/src/com/android/launcher3/qsb/QsbContainerView.java
@@ -39,12 +39,14 @@
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
-import com.android.launcher3.compat.AppWidgetManagerCompat;
import com.android.launcher3.config.FeatureFlags;
/**
* A frame layout which contains a QSB. This internally uses fragment to bind the view, which
* allows it to contain the logic for {@link Fragment#startActivityForResult(Intent, int)}.
+ *
+ * Note: AppWidgetManagerCompat can be disabled using FeatureFlags. In QSB, we should use
+ * AppWidgetManager directly, so that it keeps working in that case.
*/
public class QsbContainerView extends FrameLayout {
@@ -106,7 +108,7 @@
return QsbWidgetHostView.getDefaultView(container);
}
- AppWidgetManagerCompat widgetManager = AppWidgetManagerCompat.getInstance(activity);
+ AppWidgetManager widgetManager = AppWidgetManager.getInstance(activity);
InvariantDeviceProfile idp = LauncherAppState.getIDP(activity);
Bundle opts = new Bundle();
@@ -129,7 +131,8 @@
}
widgetId = mQsbWidgetHost.allocateAppWidgetId();
- isWidgetBound = widgetManager.bindAppWidgetIdIfAllowed(widgetId, mWidgetInfo, opts);
+ isWidgetBound = widgetManager.bindAppWidgetIdIfAllowed(
+ widgetId, mWidgetInfo.getProfile(), mWidgetInfo.provider, opts);
if (!isWidgetBound) {
mQsbWidgetHost.deleteAppWidgetId(widgetId);
widgetId = -1;
diff --git a/src/com/android/launcher3/touch/OverScroll.java b/src/com/android/launcher3/touch/OverScroll.java
new file mode 100644
index 0000000..dc801ec
--- /dev/null
+++ b/src/com/android/launcher3/touch/OverScroll.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2017 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.touch;
+
+/**
+ * Utility methods for overscroll damping and related effect.
+ */
+public class OverScroll {
+
+ private static final float OVERSCROLL_DAMP_FACTOR = 0.07f;
+
+ /**
+ * This curve determines how the effect of scrolling over the limits of the page diminishes
+ * as the user pulls further and further from the bounds
+ *
+ * @param f The percentage of how much the user has overscrolled.
+ * @return A transformed percentage based on the influence curve.
+ */
+ private static float overScrollInfluenceCurve(float f) {
+ f -= 1.0f;
+ return f * f * f + 1.0f;
+ }
+
+ /**
+ * @param amount The original amount overscrolled.
+ * @param max The maximum amount that the View can overscroll.
+ * @return The dampened overscroll amount.
+ */
+ public static int dampedScroll(float amount, int max) {
+ if (Float.compare(amount, 0) == 0) return 0;
+
+ float f = amount / max;
+ f = f / (Math.abs(f)) * (overScrollInfluenceCurve(Math.abs(f)));
+
+ // Clamp this factor, f, to -1 < f < 1
+ if (Math.abs(f) >= 1) {
+ f /= Math.abs(f);
+ }
+
+ return Math.round(OVERSCROLL_DAMP_FACTOR * f * max);
+ }
+}
diff --git a/src/com/android/launcher3/touch/SwipeDetector.java b/src/com/android/launcher3/touch/SwipeDetector.java
index ec5493b..be4648e 100644
--- a/src/com/android/launcher3/touch/SwipeDetector.java
+++ b/src/com/android/launcher3/touch/SwipeDetector.java
@@ -1,7 +1,25 @@
+/*
+ * Copyright (C) 2017 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.touch;
import static android.view.MotionEvent.INVALID_POINTER_ID;
import android.content.Context;
+import android.graphics.PointF;
+import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
@@ -9,18 +27,20 @@
/**
* One dimensional scroll/drag/swipe gesture detector.
+ *
+ * Definition of swipe is different from android system in that this detector handles
+ * 'swipe to dismiss', 'swiping up/down a container' but also keeps scrolling state before
+ * swipe action happens
*/
public class SwipeDetector {
private static final boolean DBG = false;
private static final String TAG = "SwipeDetector";
- private final float mTouchSlop;
-
private int mScrollConditions;
- public static final int DIRECTION_UP = 1 << 0;
- public static final int DIRECTION_DOWN = 1 << 1;
- public static final int DIRECTION_BOTH = DIRECTION_DOWN | DIRECTION_UP;
+ public static final int DIRECTION_POSITIVE = 1 << 0;
+ public static final int DIRECTION_NEGATIVE = 1 << 1;
+ public static final int DIRECTION_BOTH = DIRECTION_NEGATIVE | DIRECTION_POSITIVE;
private static final float ANIMATION_DURATION = 1200;
private static final float FAST_FLING_PX_MS = 10;
@@ -47,6 +67,42 @@
SETTLING // onDragEnd
}
+ public static abstract class Direction {
+
+ abstract float getDisplacement(MotionEvent ev, int pointerIndex, PointF refPoint);
+
+ /**
+ * Distance in pixels a touch can wander before we think the user is scrolling.
+ */
+ abstract float getActiveTouchSlop(MotionEvent ev, int pointerIndex, PointF downPos);
+ }
+
+ public static final Direction VERTICAL = new Direction() {
+
+ @Override
+ float getDisplacement(MotionEvent ev, int pointerIndex, PointF refPoint) {
+ return ev.getY(pointerIndex) - refPoint.y;
+ }
+
+ @Override
+ float getActiveTouchSlop(MotionEvent ev, int pointerIndex, PointF downPos) {
+ return Math.abs(ev.getX(pointerIndex) - downPos.x);
+ }
+ };
+
+ public static final Direction HORIZONTAL = new Direction() {
+
+ @Override
+ float getDisplacement(MotionEvent ev, int pointerIndex, PointF refPoint) {
+ return ev.getX(pointerIndex) - refPoint.x;
+ }
+
+ @Override
+ float getActiveTouchSlop(MotionEvent ev, int pointerIndex, PointF downPos) {
+ return Math.abs(ev.getY(pointerIndex) - downPos.y);
+ }
+ };
+
//------------------- ScrollState transition diagram -----------------------------------
//
// IDLE -> (mDisplacement > mTouchSlop) -> DRAGGING
@@ -93,28 +149,24 @@
return mState == ScrollState.DRAGGING;
}
- private float mDownX;
- private float mDownY;
+ private final PointF mDownPos = new PointF();
+ private final PointF mLastPos = new PointF();
+ private final Direction mDir;
- private float mLastY;
+ private final float mTouchSlop;
+
+ /* Client of this gesture detector can register a callback. */
+ private final Listener mListener;
+
private long mCurrentMillis;
private float mVelocity;
- private float mLastDisplacementX;
- private float mLastDisplacementY;
- private float mDisplacementY;
- private float mDisplacementX;
+ private float mLastDisplacement;
+ private float mDisplacement;
private float mSubtractDisplacement;
private boolean mIgnoreSlopWhenSettling;
- /* Client of this gesture detector can register a callback. */
- private Listener mListener;
-
- public void setListener(Listener l) {
- mListener = l;
- }
-
public interface Listener {
void onDragStart(boolean start);
@@ -123,8 +175,15 @@
void onDragEnd(float velocity, boolean fling);
}
- public SwipeDetector(Context context) {
- mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+ public SwipeDetector(@NonNull Context context, @NonNull Listener l, @NonNull Direction dir) {
+ this(ViewConfiguration.get(context).getScaledTouchSlop(), l, dir);
+ }
+
+ @VisibleForTesting
+ protected SwipeDetector(float touchSlope, @NonNull Listener l, @NonNull Direction dir) {
+ mTouchSlop = touchSlope;
+ mListener = l;
+ mDir = dir;
}
public void setDetectableScrollConditions(int scrollDirectionFlags, boolean ignoreSlop) {
@@ -132,21 +191,16 @@
mIgnoreSlopWhenSettling = ignoreSlop;
}
- private boolean shouldScrollStart() {
- // reject cases where the slop condition is not met.
- if (Math.abs(mDisplacementY) < mTouchSlop) {
+ private boolean shouldScrollStart(MotionEvent ev, int pointerIndex) {
+ // reject cases where the angle or slop condition is not met.
+ if (Math.max(mDir.getActiveTouchSlop(ev, pointerIndex, mDownPos), mTouchSlop)
+ > Math.abs(mDisplacement)) {
return false;
}
- // reject cases where the angle condition is not met.
- float deltaY = Math.abs(mDisplacementY);
- float deltaX = Math.max(Math.abs(mDisplacementX), 1);
- if (deltaX > deltaY) {
- return false;
- }
// Check if the client is interested in scroll in current direction.
- if (((mScrollConditions & DIRECTION_DOWN) > 0 && mDisplacementY > 0) ||
- ((mScrollConditions & DIRECTION_UP) > 0 && mDisplacementY < 0)) {
+ if (((mScrollConditions & DIRECTION_NEGATIVE) > 0 && mDisplacement > 0) ||
+ ((mScrollConditions & DIRECTION_POSITIVE) > 0 && mDisplacement < 0)) {
return true;
}
return false;
@@ -155,12 +209,11 @@
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
- mDownX = ev.getX();
- mDownY = ev.getY();
mActivePointerId = ev.getPointerId(0);
- mLastDisplacementX = 0;
- mLastDisplacementY = 0;
- mDisplacementY = 0;
+ mDownPos.set(ev.getX(), ev.getY());
+ mLastPos.set(mDownPos);
+ mLastDisplacement = 0;
+ mDisplacement = 0;
mVelocity = 0;
if (mState == ScrollState.SETTLING && mIgnoreSlopWhenSettling) {
@@ -169,13 +222,14 @@
break;
//case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_POINTER_UP:
- int ptrIdx = (ev.getActionIndex() & MotionEvent.ACTION_POINTER_INDEX_MASK) >>
- MotionEvent.ACTION_POINTER_INDEX_SHIFT;
+ int ptrIdx = ev.getActionIndex();
int ptrId = ev.getPointerId(ptrIdx);
if (ptrId == mActivePointerId) {
final int newPointerIdx = ptrIdx == 0 ? 1 : 0;
- mDownX = ev.getX(newPointerIdx) - mLastDisplacementX;
- mDownY = ev.getY(newPointerIdx) - mLastDisplacementY;
+ mDownPos.set(
+ ev.getX(newPointerIdx) - (mLastPos.x - mDownPos.x),
+ ev.getY(newPointerIdx) - (mLastPos.y - mDownPos.y));
+ mLastPos.set(ev.getX(newPointerIdx), ev.getY(newPointerIdx));
mActivePointerId = ev.getPointerId(newPointerIdx);
}
break;
@@ -184,18 +238,18 @@
if (pointerIndex == INVALID_POINTER_ID) {
break;
}
- mDisplacementX = ev.getX(pointerIndex) - mDownX;
- mDisplacementY = ev.getY(pointerIndex) - mDownY;
-
- computeVelocity(ev);
+ mDisplacement = mDir.getDisplacement(ev, pointerIndex, mDownPos);
+ computeVelocity(mDir.getDisplacement(ev, pointerIndex, mLastPos),
+ ev.getEventTime());
// handle state and listener calls.
- if (mState != ScrollState.DRAGGING && shouldScrollStart()) {
+ if (mState != ScrollState.DRAGGING && shouldScrollStart(ev, pointerIndex)) {
setState(ScrollState.DRAGGING);
}
if (mState == ScrollState.DRAGGING) {
reportDragging();
}
+ mLastPos.set(ev.getX(pointerIndex), ev.getY(pointerIndex));
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
@@ -205,16 +259,8 @@
}
break;
default:
- //TODO: add multi finger tracking by tracking active pointer.
break;
}
- // Do house keeping.
- mLastDisplacementX = mDisplacementX;
- mLastDisplacementY = mDisplacementY;
- int pointerIndex = ev.findPointerIndex(mActivePointerId);
- if (pointerIndex != INVALID_POINTER_ID) {
- mLastY = ev.getY(pointerIndex);
- }
return true;
}
@@ -234,7 +280,7 @@
if (mState == ScrollState.SETTLING && mIgnoreSlopWhenSettling) {
mSubtractDisplacement = 0;
}
- if (mDisplacementY > 0) {
+ if (mDisplacement > 0) {
mSubtractDisplacement = mTouchSlop;
} else {
mSubtractDisplacement = -mTouchSlop;
@@ -242,14 +288,14 @@
}
private boolean reportDragging() {
- float delta = mDisplacementY - mLastDisplacementY;
- if (delta != 0) {
+ if (mDisplacement != mLastDisplacement) {
if (DBG) {
Log.d(TAG, String.format("onDrag disp=%.1f, velocity=%.1f",
- mDisplacementY, mVelocity));
+ mDisplacement, mVelocity));
}
- return mListener.onDrag(mDisplacementY - mSubtractDisplacement, mVelocity);
+ mLastDisplacement = mDisplacement;
+ return mListener.onDrag(mDisplacement - mSubtractDisplacement, mVelocity);
}
return true;
}
@@ -257,19 +303,15 @@
private void reportDragEnd() {
if (DBG) {
Log.d(TAG, String.format("onScrollEnd disp=%.1f, velocity=%.1f",
- mDisplacementY, mVelocity));
+ mDisplacement, mVelocity));
}
mListener.onDragEnd(mVelocity, Math.abs(mVelocity) > RELEASE_VELOCITY_PX_MS);
}
/**
- * Computes the damped velocity using the two motion events and the previous velocity.
+ * Computes the damped velocity.
*/
- private float computeVelocity(MotionEvent to) {
- return computeVelocity(to.getY() - mLastY, to.getEventTime());
- }
-
public float computeVelocity(float delta, long currentMillis) {
long previousMillis = mCurrentMillis;
mCurrentMillis = currentMillis;
@@ -299,7 +341,7 @@
return (1.0f - alpha) * from + alpha * to;
}
- public long calculateDuration(float velocity, float progressNeeded) {
+ public static long calculateDuration(float velocity, float progressNeeded) {
// TODO: make these values constants after tuning.
float velocityDivisor = Math.max(2f, Math.abs(0.5f * velocity));
float travelDistance = Math.max(0.2f, progressNeeded);
diff --git a/src/com/android/launcher3/widget/WidgetAddFlowHandler.java b/src/com/android/launcher3/widget/WidgetAddFlowHandler.java
index 629f30c..5387be8 100644
--- a/src/com/android/launcher3/widget/WidgetAddFlowHandler.java
+++ b/src/com/android/launcher3/widget/WidgetAddFlowHandler.java
@@ -15,10 +15,8 @@
*/
package com.android.launcher3.widget;
-import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.Context;
-import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable;
@@ -26,7 +24,6 @@
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppWidgetInfo;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
-import com.android.launcher3.compat.AppWidgetManagerCompat;
import com.android.launcher3.util.PendingRequestArgs;
/**
@@ -56,15 +53,8 @@
public void startBindFlow(Launcher launcher, int appWidgetId, ItemInfo info, int requestCode) {
launcher.setWaitingForResult(PendingRequestArgs.forWidgetInfo(appWidgetId, this, info));
-
- Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, mProviderInfo.provider);
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER_PROFILE,
- mProviderInfo.getProfile());
- // TODO: we need to make sure that this accounts for the options bundle.
- // intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options);
- launcher.startActivityForResult(intent, requestCode);
+ launcher.getAppWidgetHost()
+ .startBindFlow(launcher, appWidgetId, mProviderInfo, requestCode);
}
/**
@@ -85,9 +75,7 @@
return false;
}
launcher.setWaitingForResult(PendingRequestArgs.forWidgetInfo(appWidgetId, this, info));
-
- AppWidgetManagerCompat.getInstance(launcher).startConfigActivity(
- mProviderInfo, appWidgetId, launcher, launcher.getAppWidgetHost(), requestCode);
+ launcher.getAppWidgetHost().startConfigActivity(launcher, appWidgetId, requestCode);
return true;
}
diff --git a/src/com/android/launcher3/widget/WidgetsBottomSheet.java b/src/com/android/launcher3/widget/WidgetsBottomSheet.java
index 99e6056..2f9f348 100644
--- a/src/com/android/launcher3/widget/WidgetsBottomSheet.java
+++ b/src/com/android/launcher3/widget/WidgetsBottomSheet.java
@@ -87,8 +87,7 @@
AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in);
mScrollInterpolator = new SwipeDetector.ScrollInterpolator();
mInsets = new Rect();
- mSwipeDetector = new SwipeDetector(context);
- mSwipeDetector.setListener(this);
+ mSwipeDetector = new SwipeDetector(context, this, SwipeDetector.VERTICAL);
mGradientBackground = (GradientView) mLauncher.findViewById(R.id.gradient_bg);
}
@@ -283,12 +282,12 @@
public void onDragEnd(float velocity, boolean fling) {
if ((fling && velocity > 0) || getTranslationY() > (mTranslationYRange) / 2) {
mScrollInterpolator.setVelocityAtZero(velocity);
- mOpenCloseAnimator.setDuration(mSwipeDetector.calculateDuration(velocity,
+ mOpenCloseAnimator.setDuration(SwipeDetector.calculateDuration(velocity,
(mTranslationYClosed - getTranslationY()) / mTranslationYRange));
close(true);
} else {
mIsOpen = false;
- mOpenCloseAnimator.setDuration(mSwipeDetector.calculateDuration(velocity,
+ mOpenCloseAnimator.setDuration(SwipeDetector.calculateDuration(velocity,
(getTranslationY() - mTranslationYOpen) / mTranslationYRange));
open(true);
}
@@ -302,7 +301,7 @@
@Override
public boolean onControllerInterceptTouchEvent(MotionEvent ev) {
int directionsToDetectScroll = mSwipeDetector.isIdleState() ?
- SwipeDetector.DIRECTION_DOWN : 0;
+ SwipeDetector.DIRECTION_NEGATIVE : 0;
mSwipeDetector.setDetectableScrollConditions(
directionsToDetectScroll, false);
mSwipeDetector.onTouchEvent(ev);
diff --git a/src_flags/com/android/launcher3/config/FeatureFlags.java b/src_flags/com/android/launcher3/config/FeatureFlags.java
index 42a110c..3ffb6c9 100644
--- a/src_flags/com/android/launcher3/config/FeatureFlags.java
+++ b/src_flags/com/android/launcher3/config/FeatureFlags.java
@@ -19,48 +19,7 @@
/**
* Defines a set of flags used to control various launcher behaviors
*/
-public final class FeatureFlags {
-
- public static final boolean IS_DOGFOOD_BUILD = true;
+public final class FeatureFlags extends BaseFlags {
private FeatureFlags() {}
-
- // Custom flags go below this
- public static boolean LAUNCHER3_DISABLE_ICON_NORMALIZATION = false;
- public static boolean LAUNCHER3_LEGACY_FOLDER_ICON = false;
- public static boolean LAUNCHER3_USE_SYSTEM_DRAG_DRIVER = true;
- public static boolean LAUNCHER3_DISABLE_PINCH_TO_OVERVIEW = false;
- public static boolean LAUNCHER3_ALL_APPS_PULL_UP = true;
- public static boolean LAUNCHER3_NEW_FOLDER_ANIMATION = true;
- // When enabled allows to use any point on the fast scrollbar to start dragging.
- public static boolean LAUNCHER3_DIRECT_SCROLL = true;
- // When enabled while all-apps open, the soft input will be set to adjust resize .
- public static boolean LAUNCHER3_UPDATE_SOFT_INPUT_MODE = true;
- // When enabled the promise icon is visible in all apps while installation an app.
- public static boolean LAUNCHER3_PROMISE_APPS_IN_ALL_APPS = false;
- // When enabled uses the AllAppsRadialGradientAndScrimDrawable for all apps
- public static boolean LAUNCHER3_GRADIENT_ALL_APPS = true;
- // When enabled allows use of physics based motions in the Launcher.
- public static boolean LAUNCHER3_PHYSICS = true;
- // When enabled allows use of spring motions on the icons.
- public static boolean LAUNCHER3_SPRING_ICONS = true;
-
- // Feature flag to enable moving the QSB on the 0th screen of the workspace.
- public static final boolean QSB_ON_FIRST_SCREEN = true;
- // When enabled the all-apps icon is not added to the hotseat.
- public static final boolean NO_ALL_APPS_ICON = true;
- // When enabled fling down gesture on the first workspace triggers search.
- public static final boolean PULLDOWN_SEARCH = false;
- // When enabled the status bar may show dark icons based on the top of the wallpaper.
- public static final boolean LIGHT_STATUS_BAR = false;
- // When enabled icons are badged with the number of notifications associated with that app.
- public static final boolean BADGE_ICONS = true;
- // When enabled, icons not supporting {@link AdaptiveIconDrawable} will be wrapped in {@link FixedScaleDrawable}.
- public static final boolean LEGACY_ICON_TREATMENT = true;
- // When enabled, adaptive icons would have shadows baked when being stored to icon cache.
- public static final boolean ADAPTIVE_ICON_SHADOW = true;
- // When enabled, app discovery will be enabled if service is implemented
- public static final boolean DISCOVERY_ENABLED = false;
- // When enabled, the qsb will be moved to the hotseat.
- public static final boolean QSB_IN_HOTSEAT = true;
}
diff --git a/tests/src/com/android/launcher3/touch/SwipeDetectorTest.java b/tests/src/com/android/launcher3/touch/SwipeDetectorTest.java
index 8724704..ff83131 100644
--- a/tests/src/com/android/launcher3/touch/SwipeDetectorTest.java
+++ b/tests/src/com/android/launcher3/touch/SwipeDetectorTest.java
@@ -15,7 +15,6 @@
*/
package com.android.launcher3.touch;
-import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
@@ -33,11 +32,12 @@
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyFloat;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@SmallTest
@RunWith(AndroidJUnit4.class)
-public class SwipeDetectorTest{
+public class SwipeDetectorTest {
private static final String TAG = SwipeDetectorTest.class.getSimpleName();
public static void L(String s, Object... parts) {
@@ -54,22 +54,22 @@
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
- Context context = InstrumentationRegistry.getTargetContext();
- mDetector = new SwipeDetector(context);
mGenerator = new TouchEventGenerator(new TouchEventGenerator.Listener() {
@Override
public void onTouchEvent(MotionEvent event) {
mDetector.onTouchEvent(event);
}
});
- mDetector.setListener(mMockListener);
+
+ mDetector = new SwipeDetector(mTouchSlop, mMockListener, SwipeDetector.VERTICAL);
mDetector.setDetectableScrollConditions(SwipeDetector.DIRECTION_BOTH, false);
- mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+ mTouchSlop = ViewConfiguration.get(InstrumentationRegistry.getTargetContext())
+ .getScaledTouchSlop();
L("mTouchSlop=", mTouchSlop);
}
@Test
- public void testDragStart() throws Exception {
+ public void testDragStart_vertical() throws Exception {
mGenerator.put(0, 100, 100);
mGenerator.move(0, 100, 100 + mTouchSlop);
// TODO: actually calculate the following parameters and do exact value checks.
@@ -77,6 +77,25 @@
}
@Test
+ public void testDragStart_failed() throws Exception {
+ mGenerator.put(0, 100, 100);
+ mGenerator.move(0, 100 + mTouchSlop, 100);
+ // TODO: actually calculate the following parameters and do exact value checks.
+ verify(mMockListener, never()).onDragStart(anyBoolean());
+ }
+
+ @Test
+ public void testDragStart_horizontal() throws Exception {
+ mDetector = new SwipeDetector(mTouchSlop, mMockListener, SwipeDetector.HORIZONTAL);
+ mDetector.setDetectableScrollConditions(SwipeDetector.DIRECTION_BOTH, false);
+
+ mGenerator.put(0, 100, 100);
+ mGenerator.move(0, 100 + mTouchSlop, 100);
+ // TODO: actually calculate the following parameters and do exact value checks.
+ verify(mMockListener).onDragStart(anyBoolean());
+ }
+
+ @Test
public void testDrag() throws Exception {
mGenerator.put(0, 100, 100);
mGenerator.move(0, 100, 100 + mTouchSlop);
diff --git a/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java
index 97f7b50..221fed1 100644
--- a/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java
@@ -28,6 +28,7 @@
import android.test.suitebuilder.annotation.LargeTest;
import com.android.launcher3.Launcher;
+import com.android.launcher3.LauncherAppWidgetHost;
import com.android.launcher3.LauncherAppWidgetHostView;
import com.android.launcher3.LauncherAppWidgetInfo;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
@@ -285,7 +286,7 @@
pendingInfo.minSpanY = item.minSpanY;
Bundle options = WidgetHostViewLoader.getDefaultOptionsForWidget(mTargetContext, pendingInfo);
- AppWidgetHost host = new AppWidgetHost(mTargetContext, Launcher.APPWIDGET_HOST_ID);
+ AppWidgetHost host = new LauncherAppWidgetHost(mTargetContext);
int widgetId = host.allocateAppWidgetId();
if (!mWidgetManager.bindAppWidgetIdIfAllowed(widgetId, info, options)) {
host.deleteAppWidgetId(widgetId);