Merge "New folder icon style (uncropped icons)." into sc-dev
diff --git a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java
index 46ef698..5b4e5f2 100644
--- a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java
+++ b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java
@@ -161,7 +161,7 @@
if (mSurface != surface) {
mSurface = surface;
if (surface != null) {
- setDepth(mDepth);
+ dispatchTransactionSurface(mDepth);
}
}
}
@@ -175,6 +175,8 @@
float toDepth = toState.getDepth(mLauncher);
if (Float.compare(mDepth, toDepth) != 0) {
setDepth(toDepth);
+ } else if (toState == LauncherState.OVERVIEW) {
+ dispatchTransactionSurface(mDepth);
}
}
@@ -200,26 +202,35 @@
if (Float.compare(mDepth, depthF) == 0) {
return;
}
+ if (dispatchTransactionSurface(depthF)) {
+ mDepth = depthF;
+ }
+ }
+ private boolean dispatchTransactionSurface(float depth) {
boolean supportsBlur = BlurUtils.supportsBlursOnWindows();
if (supportsBlur && (mSurface == null || !mSurface.isValid())) {
- return;
+ return false;
}
- mDepth = depthF;
ensureDependencies();
IBinder windowToken = mLauncher.getRootView().getWindowToken();
if (windowToken != null) {
- mWallpaperManager.setWallpaperZoomOut(windowToken, mDepth);
+ mWallpaperManager.setWallpaperZoomOut(windowToken, depth);
}
if (supportsBlur) {
- boolean isOpaque = mLauncher.getScrimView().isFullyOpaque();
- int blur = isOpaque ? 0 : (int) (mDepth * mMaxBlurRadius);
+ // We cannot mark the window as opaque in overview because there will be an app window
+ // below the launcher layer, and we need to draw it -- without blurs.
+ boolean isOverview = mLauncher.isInState(LauncherState.OVERVIEW);
+ boolean opaque = mLauncher.getScrimView().isFullyOpaque() && !isOverview;
+
+ int blur = opaque || isOverview ? 0 : (int) (depth * mMaxBlurRadius);
new SurfaceControl.Transaction()
.setBackgroundBlurRadius(mSurface, blur)
- .setOpaque(mSurface, isOpaque)
+ .setOpaque(mSurface, opaque)
.apply();
}
+ return true;
}
@Override
diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java
index 0e9e3ad..d43bb24 100644
--- a/quickstep/src/com/android/quickstep/RecentsActivity.java
+++ b/quickstep/src/com/android/quickstep/RecentsActivity.java
@@ -350,8 +350,7 @@
public void startHome() {
if (LIVE_TILE.get()) {
RecentsView recentsView = getOverviewPanel();
- recentsView.switchToScreenshot(() -> recentsView.finishRecentsAnimation(true,
- this::startHomeInternal));
+ recentsView.switchToScreenshotAndFinishAnimationToRecents(this::startHomeInternal);
} else {
startHomeInternal();
}
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index a4c60cf..74906dd 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -177,6 +177,10 @@
TaskThumbnailCache.HighResLoadingState.HighResLoadingStateChangedCallback,
TaskVisualsChangeListener, SplitScreenBounds.OnChangeListener {
+ // TODO(b/184899234): We use this timeout to wait a fixed period after switching to the
+ // screenshot when dismissing the current live task to ensure the app can try and get stopped.
+ private static final int REMOVE_TASK_WAIT_FOR_APP_STOP_MS = 100;
+
public static final FloatProperty<RecentsView> CONTENT_ALPHA =
new FloatProperty<RecentsView>("contentAlpha") {
@Override
@@ -2355,8 +2359,12 @@
if (success) {
if (shouldRemoveTask) {
if (taskView.getTask() != null) {
- UI_HELPER_EXECUTOR.execute(() -> ActivityManagerWrapper.getInstance()
- .removeTask(taskView.getTask().key.id));
+ switchToScreenshotAndFinishAnimationToRecents(() -> {
+ UI_HELPER_EXECUTOR.getHandler().postDelayed(() ->
+ ActivityManagerWrapper.getInstance().removeTask(
+ taskView.getTask().key.id),
+ REMOVE_TASK_WAIT_FOR_APP_STOP_MS);
+ });
mActivity.getStatsLogManager().logger()
.withItemInfo(taskView.getItemInfo())
.log(LAUNCHER_TASK_DISMISS_SWIPE_UP);
@@ -2460,10 +2468,13 @@
mPendingAnimation.addEndListener(isSuccess -> {
if (isSuccess) {
// Remove all the task views now
- UI_HELPER_EXECUTOR.execute(
- ActivityManagerWrapper.getInstance()::removeAllRecentTasks);
- removeTasksViewsAndClearAllButton();
- startHome();
+ switchToScreenshotAndFinishAnimationToRecents(() -> {
+ UI_HELPER_EXECUTOR.getHandler().postDelayed(
+ ActivityManagerWrapper.getInstance()::removeAllRecentTasks,
+ REMOVE_TASK_WAIT_FOR_APP_STOP_MS);
+ removeTasksViewsAndClearAllButton();
+ startHome();
+ });
}
mPendingAnimation = null;
});
@@ -2618,9 +2629,7 @@
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (LIVE_TILE.get() && mEnableDrawingLiveTile && newConfig.orientation != mOrientation) {
- switchToScreenshot(
- () -> finishRecentsAnimation(true /* toRecents */,
- this::updateRecentsRotation));
+ switchToScreenshotAndFinishAnimationToRecents(this::updateRecentsRotation);
mEnableDrawingLiveTile = false;
} else {
updateRecentsRotation();
@@ -3613,6 +3622,10 @@
}
}
+ public void switchToScreenshotAndFinishAnimationToRecents(Runnable onFinishRunnable) {
+ switchToScreenshot(() -> finishRecentsAnimation(true /* toRecents */, onFinishRunnable));
+ }
+
/**
* Switch the current running task view to static snapshot mode,
* capturing the snapshot at the same time.
diff --git a/res/drawable/widgets_list_bottom_ripple.xml b/res/drawable/widgets_list_bottom_ripple.xml
deleted file mode 100644
index c2debb1..0000000
--- a/res/drawable/widgets_list_bottom_ripple.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2021, 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.
-*/
--->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="?android:attr/colorControlHighlight">
- <item android:id="@android:id/mask">
- <shape android:shape="rectangle">
- <solid android:color="@color/surface" />
- <corners
- android:topLeftRadius="@dimen/widget_list_content_corner_radius"
- android:topRightRadius="@dimen/widget_list_content_corner_radius"
- android:bottomLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:bottomRightRadius="@dimen/widget_list_top_bottom_corner_radius" />
- </shape>
- </item>
- <item android:id="@android:id/background">
- <shape android:shape="rectangle">
- <solid android:color="@color/surface" />
- <corners
- android:topLeftRadius="@dimen/widget_list_content_corner_radius"
- android:topRightRadius="@dimen/widget_list_content_corner_radius"
- android:bottomLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:bottomRightRadius="@dimen/widget_list_top_bottom_corner_radius" />
- </shape>
- </item>
-</ripple>
\ No newline at end of file
diff --git a/res/drawable/widgets_list_middle_ripple.xml b/res/drawable/widgets_list_middle_ripple.xml
deleted file mode 100644
index 83f96a0..0000000
--- a/res/drawable/widgets_list_middle_ripple.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2021, 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.
-*/
--->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="?android:attr/colorControlHighlight">
- <item android:id="@android:id/mask">
- <shape android:shape="rectangle">
- <solid android:color="@color/surface" />
- <corners
- android:topLeftRadius="@dimen/widget_list_content_corner_radius"
- android:topRightRadius="@dimen/widget_list_content_corner_radius"
- android:bottomLeftRadius="@dimen/widget_list_content_corner_radius"
- android:bottomRightRadius="@dimen/widget_list_content_corner_radius" />
- </shape>
- </item>
-
- <item android:id="@android:id/background">
- <shape android:shape="rectangle">
- <solid android:color="@color/surface" />
- <corners
- android:topLeftRadius="@dimen/widget_list_content_corner_radius"
- android:topRightRadius="@dimen/widget_list_content_corner_radius"
- android:bottomLeftRadius="@dimen/widget_list_content_corner_radius"
- android:bottomRightRadius="@dimen/widget_list_content_corner_radius" />
- </shape>
- </item>
-</ripple>
\ No newline at end of file
diff --git a/res/drawable/widgets_list_single_item_ripple.xml b/res/drawable/widgets_list_single_item_ripple.xml
deleted file mode 100644
index a4223a8..0000000
--- a/res/drawable/widgets_list_single_item_ripple.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2021, 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.
-*/
--->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="?android:attr/colorControlHighlight">
- <item android:id="@android:id/mask">
- <shape android:shape="rectangle">
- <solid android:color="@color/surface" />
- <corners
- android:topLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:topRightRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:bottomLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:bottomRightRadius="@dimen/widget_list_top_bottom_corner_radius" />
- </shape>
- </item>
- <item android:id="@android:id/background">
- <shape android:shape="rectangle">
- <solid android:color="@color/surface" />
- <corners
- android:topLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:topRightRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:bottomLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:bottomRightRadius="@dimen/widget_list_top_bottom_corner_radius" />
- </shape>
- </item>
-</ripple>
\ No newline at end of file
diff --git a/res/drawable/widgets_list_top_ripple.xml b/res/drawable/widgets_list_top_ripple.xml
deleted file mode 100644
index bc0876e..0000000
--- a/res/drawable/widgets_list_top_ripple.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2021, 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.
-*/
--->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="?android:attr/colorControlHighlight">
- <item android:id="@android:id/mask">
- <shape android:shape="rectangle">
- <solid android:color="@color/surface" />
- <corners
- android:topLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:topRightRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:bottomLeftRadius="@dimen/widget_list_content_corner_radius"
- android:bottomRightRadius="@dimen/widget_list_content_corner_radius" />
- </shape>
- </item>
-
- <item android:id="@android:id/background">
- <shape android:shape="rectangle">
- <solid android:color="@color/surface" />
- <corners
- android:topLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:topRightRadius="@dimen/widget_list_top_bottom_corner_radius"
- android:bottomLeftRadius="@dimen/widget_list_content_corner_radius"
- android:bottomRightRadius="@dimen/widget_list_content_corner_radius" />
- </shape>
- </item>
-</ripple>
\ No newline at end of file
diff --git a/res/layout/all_apps.xml b/res/layout/all_apps.xml
index b570464..9ac6ed0 100644
--- a/res/layout/all_apps.xml
+++ b/res/layout/all_apps.xml
@@ -36,6 +36,7 @@
android:layout_below="@id/search_container_all_apps"
android:clipToPadding="false"
android:paddingTop="@dimen/all_apps_header_top_padding"
+ android:paddingBottom="@dimen/all_apps_header_bottom_padding"
android:orientation="vertical" >
<include layout="@layout/floating_header_content" />
diff --git a/res/layout/all_apps_personal_work_tabs.xml b/res/layout/all_apps_personal_work_tabs.xml
index ebb69f6..cfaa261 100644
--- a/res/layout/all_apps_personal_work_tabs.xml
+++ b/res/layout/all_apps_personal_work_tabs.xml
@@ -31,7 +31,7 @@
android:background="@drawable/personal_work_tabs_ripple"
android:text="@string/all_apps_personal_tab"
android:textColor="@color/all_apps_tab_text"
- android:textSize="16sp" />
+ android:textSize="14sp" />
<Button
android:id="@+id/tab_work"
@@ -41,5 +41,5 @@
android:background="@drawable/personal_work_tabs_ripple"
android:text="@string/all_apps_work_tab"
android:textColor="@color/all_apps_tab_text"
- android:textSize="16sp" />
+ android:textSize="14sp" />
</com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip>
\ No newline at end of file
diff --git a/res/layout/widgets_list_row_header.xml b/res/layout/widgets_list_row_header.xml
index 8ab086c..0bfa2b2 100644
--- a/res/layout/widgets_list_row_header.xml
+++ b/res/layout/widgets_list_row_header.xml
@@ -20,7 +20,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
- android:background="@drawable/widgets_list_middle_ripple"
android:layout_marginBottom="@dimen/widget_list_entry_bottom_margin"
android:paddingVertical="@dimen/widget_list_header_view_vertical_padding"
android:orientation="horizontal"
diff --git a/res/layout/widgets_table_container.xml b/res/layout/widgets_table_container.xml
index e63483d..c6b70aa 100644
--- a/res/layout/widgets_table_container.xml
+++ b/res/layout/widgets_table_container.xml
@@ -19,5 +19,4 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
- android:background="@drawable/widgets_list_middle_ripple"
android:layout_marginBottom="@dimen/widget_list_entry_bottom_margin"/>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index c1ed288..558d22f 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -160,8 +160,8 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Osobní"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"Pracovní"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Pracovní profil"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Osobní údaje jsou oddělené a jsou před pracovními aplikacemi skryty"</string>
- <string name="work_profile_edu_work_apps" msgid="237051938268703058">"K datům pracovních aplikací má přístup váš administrátor IT"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Osobní údaje jsou oddělené a před pracovními aplikacemi jsou skryty"</string>
+ <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Pracovní aplikace a údaje může vidět váš administrátor IT"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Další"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Rozumím"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Pracovní profil je pozastaven"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 3a20d17..72929cf 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -154,7 +154,7 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Privat"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"Geschäftlich"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Arbeitsprofil"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Personenbezogene Daten sind für geschäftlichen Apps nicht sichtbar oder zugänglich"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Personenbezogene Daten sind für geschäftliche Apps nicht sichtbar oder zugänglich"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"Geschäftliche Apps und Daten können von deinem IT-Administrator eingesehen werden"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Weiter"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 812f007..735f6e3 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -154,7 +154,7 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Pertsonalak"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"Lanekoak"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Laneko profila"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Datu pertsonalak bananduta daude eta ez daude laneko aplikazioen artean ikusgai"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Datu pertsonalak ez daude laneko aplikazioetan, eta ezin dira haien bidez ikusi"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"IKT saileko administratzaileak laneko aplikazioak eta datuak ikus ditzake"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Hurrengoa"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Ados"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 9522a38..e7801c9 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -51,12 +51,9 @@
<string name="widgets_full_sheet_personal_tab" msgid="2743540105607120182">"Personnels"</string>
<string name="widgets_full_sheet_work_tab" msgid="3767150027110633765">"Professionnels"</string>
<string name="widget_category_conversations" msgid="8894438636213590446">"Conversations"</string>
- <!-- no translation found for widget_education_header (4874760613775913787) -->
- <skip />
- <!-- no translation found for widget_education_content (745542879510751525) -->
- <skip />
- <!-- no translation found for widget_education_close_button (8676165703104836580) -->
- <skip />
+ <string name="widget_education_header" msgid="4874760613775913787">"Renseignements utiles à portée de main"</string>
+ <string name="widget_education_content" msgid="745542879510751525">"Pour obtenir des renseignements sans ouvrir aucune application, vous pouvez ajouter des widgets à votre écran d\'accueil"</string>
+ <string name="widget_education_close_button" msgid="8676165703104836580">"OK"</string>
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Rechercher dans les applications"</string>
<string name="all_apps_loading_message" msgid="5813968043155271636">"Chargement des applications en cours…"</string>
<string name="all_apps_no_search_results" msgid="3200346862396363786">"Aucune application trouvée correspondant à « <xliff:g id="QUERY">%1$s</xliff:g> »"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 9c909a0..d9ffa68 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -51,12 +51,9 @@
<string name="widgets_full_sheet_personal_tab" msgid="2743540105607120182">"વ્યક્તિગત"</string>
<string name="widgets_full_sheet_work_tab" msgid="3767150027110633765">"ઑફિસ"</string>
<string name="widget_category_conversations" msgid="8894438636213590446">"વાતચીતો"</string>
- <!-- no translation found for widget_education_header (4874760613775913787) -->
- <skip />
- <!-- no translation found for widget_education_content (745542879510751525) -->
- <skip />
- <!-- no translation found for widget_education_close_button (8676165703104836580) -->
- <skip />
+ <string name="widget_education_header" msgid="4874760613775913787">"ઉપયોગી માહિતી તમારી આંગળીના ટેરવે"</string>
+ <string name="widget_education_content" msgid="745542879510751525">"ઍપને ખોલ્યા વિના માહિતી મેળવવા માટે, તમે તમારી હોમ સ્ક્રીન પર વિજેટ ઉમેરી શકો છો"</string>
+ <string name="widget_education_close_button" msgid="8676165703104836580">"સમજાઈ ગયું"</string>
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"શોધ ઍપ્લિકેશનો"</string>
<string name="all_apps_loading_message" msgid="5813968043155271636">"ઍપ્લિકેશનો લોડ કરી રહ્યું છે…"</string>
<string name="all_apps_no_search_results" msgid="3200346862396363786">"\"<xliff:g id="QUERY">%1$s</xliff:g>\"થી મેળ ખાતી કોઈ ઍપ્લિકેશનો મળી નથી"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index bc68e3e..f7d6b31 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -32,7 +32,7 @@
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"Կրկնակի հպեք և պահեք՝ վիջեթ տեղափոխելու համար, կամ օգտվեք հատուկ գործողություններից։"</string>
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"Լայնությունը՝ %1$d, բարձրությունը՝ %2$d"</string>
- <string name="add_item_request_drag_hint" msgid="5653291305078645405">"Հպեք վիջեթին և պահեք՝ հիմնական էկրանին տեղափոխելու համար"</string>
+ <string name="add_item_request_drag_hint" msgid="5653291305078645405">"Հպեք վիջեթին և պահեք տեղափոխելու համար"</string>
<string name="add_to_home_screen" msgid="8631549138215492708">"Ավելացնել հիմնական էկրանին"</string>
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
<item quantity="one"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> վիջեթ</item>
@@ -154,13 +154,13 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Անձնական"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"Աշխատանքային"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Աշխատանքային պրոֆիլ"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Անձնական տվյալները թաքցված են և առանձնացված աշխատանքային հավելվածներից"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Անձնական տվյալները առանձին են և թաքցված են, երբ ցուցադրվում են աշխատանքայինները"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"Աշխատանքային հավելվածներն ու դրանց տվյալները տեսանելի են ձեր ադմինիստրատորին"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Առաջ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Եղավ"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Աշխատանքային պրոֆիլը դադարեցված է"</string>
- <string name="work_apps_paused_body" msgid="4209084728264328628">"Աշխատանքային հավելվածները չեն կարող ձեզ ծանուցումներ ուղարկել, օգտագործել ձեր մարտկոցը և ձեր տեղադրության մասին տվյալներ ստանալ։"</string>
- <string name="work_apps_paused_content_description" msgid="4473292417145736203">"Աշխատանքային պրոֆիլը դադարեցված է։ Աշխատանքային հավելվածները չեն կարող ձեզ ծանուցումներ ուղարկել, օգտագործել ձեր մարտկոցը և ձեր տեղադրության մասին տվյալներ ստանալ։"</string>
+ <string name="work_apps_paused_body" msgid="4209084728264328628">"Աշխատանքային հավելվածները չեն կարող ծանուցումներ ուղարկել ձեզ, օգտագործել ձեր մարտկոցը և ձեր տեղադրության մասին տվյալներ ստանալ։"</string>
+ <string name="work_apps_paused_content_description" msgid="4473292417145736203">"Աշխատանքային պրոֆիլը դադարեցված է։ Աշխատանքային հավելվածները չեն կարող ծանուցումներ ուղարկել ձեզ, օգտագործել ձեր մարտկոցը և ձեր տեղադրության մասին տվյալներ ստանալ։"</string>
<string name="work_apps_paused_edu_banner" msgid="8872412121608402058">"Աշխատանքային հավելվածները նշանակներ ունեն և տեսանելի են ձեր ՏՏ ադմինիստրատորին"</string>
<string name="work_apps_paused_edu_accept" msgid="6377476824357318532">"Եղավ"</string>
<string name="work_apps_pause_btn_text" msgid="4669288269140620646">"Դադարեցնել աշխատանքային հավելվածները"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index fb72d55..8ec7de3 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -161,7 +161,7 @@
<string name="all_apps_work_tab" msgid="4884822796154055118">"עבודה"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"פרופיל עבודה"</string>
<string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"מידע אישי מאוחסן בנפרד ומוסתר מאפליקציות לעבודה"</string>
- <string name="work_profile_edu_work_apps" msgid="237051938268703058">"אפליקציות לעבודה ונתוני העבודה שלך גלויים למנהל ה-IT"</string>
+ <string name="work_profile_edu_work_apps" msgid="237051938268703058">"אפליקציות לעבודה ונתוני פרופיל העבודה שלך גלויים למנהל ה-IT"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"הבא"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"הבנתי"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"פרופיל העבודה מושהה"</string>
@@ -172,6 +172,6 @@
<string name="work_apps_pause_btn_text" msgid="4669288269140620646">"השהיית האפליקציות לעבודה"</string>
<string name="work_apps_enable_btn_text" msgid="82111102541971856">"הפעלה"</string>
<string name="developer_options_filter_hint" msgid="5896817443635989056">"סינון"</string>
- <string name="work_switch_tip" msgid="808075064383839144">"השהיה של התראות ואפליקציות לעבודה"</string>
+ <string name="work_switch_tip" msgid="808075064383839144">"השהיה של ההתראות והאפליקציות בפרופיל העבודה"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"הפעולה נכשלה: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 60fe453..d54f884 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -154,13 +154,13 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"個人用"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"仕事用"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"仕事用プロファイル"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"個人データは仕事用アプリとは別に保存され、一緒に表示されません"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"個人用と仕事用のデータは分離され、アプリは別々に表示されます"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"仕事用アプリと仕事用データは IT 管理者に公開されます"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"次へ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"仕事用プロファイルが一時停止しています"</string>
- <string name="work_apps_paused_body" msgid="4209084728264328628">"仕事用アプリは、通知の送信、バッテリーの使用、位置情報へのアクセスを行えません"</string>
- <string name="work_apps_paused_content_description" msgid="4473292417145736203">"仕事用プロファイルが一時停止しています。仕事用アプリは、通知の送信、バッテリーの使用、位置情報へのアクセスを行えません"</string>
+ <string name="work_apps_paused_body" msgid="4209084728264328628">"仕事用アプリは、通知の送信、バッテリーの使用、位置情報の取得を行えません"</string>
+ <string name="work_apps_paused_content_description" msgid="4473292417145736203">"仕事用プロファイルが一時停止しています。仕事用アプリは、通知の送信、バッテリーの使用、位置情報の取得を行えません"</string>
<string name="work_apps_paused_edu_banner" msgid="8872412121608402058">"仕事用アプリはバッジが付き、IT 管理者に公開されます"</string>
<string name="work_apps_paused_edu_accept" msgid="6377476824357318532">"OK"</string>
<string name="work_apps_pause_btn_text" msgid="4669288269140620646">"仕事用アプリを一時停止"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 2b1b89f..640ffca 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -51,12 +51,9 @@
<string name="widgets_full_sheet_personal_tab" msgid="2743540105607120182">"Жеке виджеттер"</string>
<string name="widgets_full_sheet_work_tab" msgid="3767150027110633765">"Жұмыс виджеттері"</string>
<string name="widget_category_conversations" msgid="8894438636213590446">"Әңгімелер"</string>
- <!-- no translation found for widget_education_header (4874760613775913787) -->
- <skip />
- <!-- no translation found for widget_education_content (745542879510751525) -->
- <skip />
- <!-- no translation found for widget_education_close_button (8676165703104836580) -->
- <skip />
+ <string name="widget_education_header" msgid="4874760613775913787">"Саусақпен түртсеңіз болғаны – пайдалы ақпарат көз алдыңызда"</string>
+ <string name="widget_education_content" msgid="745542879510751525">"Қолданбаларды ашпай-ақ ақпарат алу үшін негізгі экранға тиісті виджеттерді қосыңыз."</string>
+ <string name="widget_education_close_button" msgid="8676165703104836580">"Түсінікті"</string>
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Қолданбаларды іздеу"</string>
<string name="all_apps_loading_message" msgid="5813968043155271636">"Қолданбалар жүктелуде…"</string>
<string name="all_apps_no_search_results" msgid="3200346862396363786">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" сұрауына сәйкес келетін қолданбалар жоқ"</string>
@@ -158,7 +155,7 @@
<string name="all_apps_work_tab" msgid="4884822796154055118">"Жұмыс"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Жұмыс профилі"</string>
<string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Жеке деректер бөлек орналасқан және жұмыс қолданбаларынан жасырылған"</string>
- <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Әкімшіңіз жұмыс қолданбалары мен деректерді көре алады"</string>
+ <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Әкімшіңіз жұмыс қолданбалары мен деректерін көре алады"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Келесі"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Түсінікті"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Жұмыс профилі кідіртілді"</string>
@@ -169,6 +166,6 @@
<string name="work_apps_pause_btn_text" msgid="4669288269140620646">"Жұмыс қолданбаларын тоқтата тұру"</string>
<string name="work_apps_enable_btn_text" msgid="82111102541971856">"Қосу"</string>
<string name="developer_options_filter_hint" msgid="5896817443635989056">"Сүзгі"</string>
- <string name="work_switch_tip" msgid="808075064383839144">"Жұмыс қолданбалары мен хабарландыруларды кідірту"</string>
+ <string name="work_switch_tip" msgid="808075064383839144">"Жұмыс қолданбалары мен хабарландыруларын кідірту"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Қате шықты: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 059620c..ad4082b 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -50,7 +50,7 @@
<string name="widgets_full_sheet_cancel_button_description" msgid="5766167035728653605">"Notīrīt tekstu no meklēšanas lodziņa"</string>
<string name="no_widgets_available" msgid="9140948620298620513">"Nav pieejams neviens logrīks"</string>
<string name="no_search_results" msgid="6518732304311458580">"Nav meklēšanas rezultātu"</string>
- <string name="widgets_full_sheet_personal_tab" msgid="2743540105607120182">"Personīgie"</string>
+ <string name="widgets_full_sheet_personal_tab" msgid="2743540105607120182">"Personīgs"</string>
<string name="widgets_full_sheet_work_tab" msgid="3767150027110633765">"Darba"</string>
<string name="widget_category_conversations" msgid="8894438636213590446">"Sarunas"</string>
<string name="widget_education_header" msgid="4874760613775913787">"Ērta piekļuve noderīgai informācijai"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 1a8650c..c120c24 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -157,7 +157,7 @@
<string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"ကိုယ်ပိုင်ဒေတာများသည် သီးသန့်ဖြစ်ပြီး အလုပ်အက်ပ်များမှ ဖျောက်ထားသည်"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"အလုပ်သုံးအက်ပ်နှင့် ဒေတာများကို သင်၏ IT စီမံခန့်ခွဲသူက မြင်ရပါသည်"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"ရှေ့သို့"</string>
- <string name="work_profile_edu_accept" msgid="6069788082535149071">"Ok"</string>
+ <string name="work_profile_edu_accept" msgid="6069788082535149071">"ရပါပြီ"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"အလုပ်ပရိုဖိုင် ခဏရပ်ထားသည်"</string>
<string name="work_apps_paused_body" msgid="4209084728264328628">"အလုပ်သုံးအက်ပ်များက အကြောင်းကြားချက်များ ပို့ခြင်း၊ သင့်ဘက်ထရီ သုံးခြင်း (သို့) သင့်တည်နေရာ သုံးခြင်းတို့ မပြုလုပ်နိုင်ပါ"</string>
<string name="work_apps_paused_content_description" msgid="4473292417145736203">"အလုပ်ပရိုဖိုင် ခဏရပ်ထားသည်။ အလုပ်သုံးအက်ပ်များက အကြောင်းကြားချက်များ ပို့ခြင်း၊ သင့်ဘက်ထရီ သုံးခြင်း (သို့) သင့်တည်နေရာ သုံးခြင်းတို့ မပြုလုပ်နိုင်ပါ"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 474a452..929e302 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -161,9 +161,9 @@
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"तपाईंका IT एड्मिनले कामसम्पबन्धी एपहरू र डेटा हेर्न सक्छन्"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"अर्को"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"बुझेँ"</string>
- <string name="work_apps_paused_title" msgid="2389865654362803723">"कार्यालयको प्रोफाइल अस्थायी रूपमा रोक्का गरिएको छ"</string>
- <string name="work_apps_paused_body" msgid="4209084728264328628">"कामसम्बन्धी एपहरूले तपाईंलाई सूचना पठाउन, तपाईंको डिभाइसको ब्याट्री प्रयोग गर्न वा तपाईंको स्थान हेर्न सक्दैनन्"</string>
- <string name="work_apps_paused_content_description" msgid="4473292417145736203">"कामसम्बन्धी प्रोफाइल अस्थायी रूपमा रोक्का गरिएको छ। कामसम्बन्धी एपहरूले तपाईंलाई सूचना पठाउन, तपाईंको डिभाइसको ब्याट्री प्रयोग गर्न वा तपाईंको स्थान हेर्न सक्दैनन्"</string>
+ <string name="work_apps_paused_title" msgid="2389865654362803723">"कार्यालयको प्रोफाइल पज गरिएको छ"</string>
+ <string name="work_apps_paused_body" msgid="4209084728264328628">"कामसम्बन्धी एपहरूले तपाईंलाई सूचना पठाउन, तपाईंको डिभाइसको ब्याट्री प्रयोग गर्न वा तपाईंको लोकेसन हेर्न सक्दैनन्"</string>
+ <string name="work_apps_paused_content_description" msgid="4473292417145736203">"कामसम्बन्धी प्रोफाइल पज गरिएको छ। कामसम्बन्धी एपहरूले तपाईंलाई सूचना पठाउन, तपाईंको डिभाइसको ब्याट्री प्रयोग गर्न वा तपाईंको लोकेसन हेर्न सक्दैनन्"</string>
<string name="work_apps_paused_edu_banner" msgid="8872412121608402058">"कामसम्बन्धी एपमा ब्याज अङ्कित हुन्छ र तपाईंका IT एड्मिन ती एप हेर्न सक्नुहुन्छ"</string>
<string name="work_apps_paused_edu_accept" msgid="6377476824357318532">"बुझेँ"</string>
<string name="work_apps_pause_btn_text" msgid="4669288269140620646">"कामसम्बन्धी एपहरू अस्थायी रूपमा रोक्का गर्नुहोस्"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index f3c5538..7573102 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -111,7 +111,7 @@
<string name="title_missing_notification_access" msgid="7503287056163941064">"Toegang tot meldingen vereist"</string>
<string name="msg_missing_notification_access" msgid="281113995110910548">"Als je meldingsstipjes wilt tonen, zet je app-meldingen aan voor <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="title_change_settings" msgid="1376365968844349552">"Instellingen wijzigen"</string>
- <string name="notification_dots_service_title" msgid="4284221181793592871">"Meldingsstipjes tonen"</string>
+ <string name="notification_dots_service_title" msgid="4284221181793592871">"Toon meldingsstipjes"</string>
<string name="auto_add_shortcuts_label" msgid="3698776050751790653">"App-iconen toevoegen aan startscherm"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Voor nieuwe apps"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"Onbekend"</string>
@@ -159,8 +159,8 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Volgende"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Werkprofiel is onderbroken"</string>
- <string name="work_apps_paused_body" msgid="4209084728264328628">"Werk-apps kunnen je geen meldingen sturen, niet je batterij gebruiken en geen toegang krijgen tot je locatie"</string>
- <string name="work_apps_paused_content_description" msgid="4473292417145736203">"Werkprofiel is gepauzeerd. Werk-apps kunnen je geen meldingen sturen, niet je batterij gebruiken en geen toegang krijgen tot je locatie."</string>
+ <string name="work_apps_paused_body" msgid="4209084728264328628">"Werk-apps kunnen je geen meldingen sturen, je batterij niet gebruiken en geen toegang krijgen tot je locatie"</string>
+ <string name="work_apps_paused_content_description" msgid="4473292417145736203">"Werkprofiel is gepauzeerd. Werk-apps kunnen je geen meldingen sturen, je batterij niet gebruiken en geen toegang krijgen tot je locatie."</string>
<string name="work_apps_paused_edu_banner" msgid="8872412121608402058">"Werk-apps hebben badges en zijn zichtbaar voor je IT-beheerder"</string>
<string name="work_apps_paused_edu_accept" msgid="6377476824357318532">"OK"</string>
<string name="work_apps_pause_btn_text" msgid="4669288269140620646">"Werk-apps pauzeren"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 3517dab..5c1d498 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -51,12 +51,9 @@
<string name="widgets_full_sheet_personal_tab" msgid="2743540105607120182">"ବ୍ୟକ୍ତିଗତ"</string>
<string name="widgets_full_sheet_work_tab" msgid="3767150027110633765">"ୱାର୍କ"</string>
<string name="widget_category_conversations" msgid="8894438636213590446">"ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ"</string>
- <!-- no translation found for widget_education_header (4874760613775913787) -->
- <skip />
- <!-- no translation found for widget_education_content (745542879510751525) -->
- <skip />
- <!-- no translation found for widget_education_close_button (8676165703104836580) -->
- <skip />
+ <string name="widget_education_header" msgid="4874760613775913787">"ଉପଯୋଗୀ ସୂଚନା ଆପଣଙ୍କ ପାଖରେ ସହଜରେ ଉପଲବ୍ଧ"</string>
+ <string name="widget_education_content" msgid="745542879510751525">"ଆପଗୁଡ଼ିକୁ ନଖୋଲି ସୂଚନା ପାଇବା ପାଇଁ, ଆପଣ ଆପଣଙ୍କ ମୂଳସ୍କ୍ରିନରେ ୱିଜେଟଗୁଡ଼ିକୁ ଯୋଗ କରିପାରିବେ"</string>
+ <string name="widget_education_close_button" msgid="8676165703104836580">"ବୁଝିଗଲି"</string>
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"ଆପ୍ ଖୋଜନ୍ତୁ"</string>
<string name="all_apps_loading_message" msgid="5813968043155271636">"ଆପ୍ ଲୋଡ୍ ହେଉଛି..."</string>
<string name="all_apps_no_search_results" msgid="3200346862396363786">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" ସହିତ ମେଳ ହେଉଥିବା କୌଣସି ଆପ୍ ମିଳିଲା ନାହିଁ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 7b47cde..770f344 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -172,6 +172,6 @@
<string name="work_apps_pause_btn_text" msgid="4669288269140620646">"Wstrzymaj aplikacje służbowe"</string>
<string name="work_apps_enable_btn_text" msgid="82111102541971856">"Włącz"</string>
<string name="developer_options_filter_hint" msgid="5896817443635989056">"Filtruj"</string>
- <string name="work_switch_tip" msgid="808075064383839144">"Wstrzymaj aplikacje służbowe i powiadomienia"</string>
+ <string name="work_switch_tip" msgid="808075064383839144">"Wstrzymaj służbowe aplikacje i powiadomienia"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Niepowodzenie: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 70606a9..6d2f9e5 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -161,10 +161,10 @@
<string name="all_apps_work_tab" msgid="4884822796154055118">"Рабочие"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Рабочий профиль"</string>
<string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Личные данные скрыты от рабочих приложений и недоступны им."</string>
- <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Рабочие приложения и данные видны системному администратору."</string>
+ <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Рабочие приложения и их данные видны системному администратору."</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Далее"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"ОК"</string>
- <string name="work_apps_paused_title" msgid="2389865654362803723">"Действие рабочего профиля приостановлено."</string>
+ <string name="work_apps_paused_title" msgid="2389865654362803723">"Рабочий профиль приостановлен"</string>
<string name="work_apps_paused_body" msgid="4209084728264328628">"Рабочие приложения не могут отправлять уведомления, расходовать заряд батареи и получать доступ к данным о вашем местоположении."</string>
<string name="work_apps_paused_content_description" msgid="4473292417145736203">"Рабочий профиль приостановлен. Рабочие приложения не могут отправлять уведомления, расходовать заряд батареи и получать доступ к данным о вашем местоположении."</string>
<string name="work_apps_paused_edu_banner" msgid="8872412121608402058">"У рабочих приложений есть специальная пометка. Они видны системному администратору."</string>
@@ -172,6 +172,6 @@
<string name="work_apps_pause_btn_text" msgid="4669288269140620646">"Приостановить рабочие приложения"</string>
<string name="work_apps_enable_btn_text" msgid="82111102541971856">"Включить"</string>
<string name="developer_options_filter_hint" msgid="5896817443635989056">"Фильтр"</string>
- <string name="work_switch_tip" msgid="808075064383839144">"Приостановить рабочие приложения и уведомления"</string>
+ <string name="work_switch_tip" msgid="808075064383839144">"Приостановить рабочие приложения и уведомления от них"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Не удалось выполнить действие (<xliff:g id="WHAT">%1$s</xliff:g>)."</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 08e7bb6..cbb082a 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -165,7 +165,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Ďalej"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Dobre"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Pracovný profil je pozastavený"</string>
- <string name="work_apps_paused_body" msgid="4209084728264328628">"Pracovné aplikácie nemôžu posielať upozornenia, používať batériu ani polohu"</string>
+ <string name="work_apps_paused_body" msgid="4209084728264328628">"Pracovné aplikácie vám nemôžu posielať upozornenia, používať vašu batériu ani vašu polohu"</string>
<string name="work_apps_paused_content_description" msgid="4473292417145736203">"Pracovný profil je pozastavený. Pracovné aplikácie nemôžu posielať upozornenia, používať batériu ani polohu."</string>
<string name="work_apps_paused_edu_banner" msgid="8872412121608402058">"Pracovné aplikácie majú odznak a zobrazujú sa správcovi IT"</string>
<string name="work_apps_paused_edu_accept" msgid="6377476824357318532">"Dobre"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 338aa8b..1054092 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -51,12 +51,9 @@
<string name="widgets_full_sheet_personal_tab" msgid="2743540105607120182">"Personale"</string>
<string name="widgets_full_sheet_work_tab" msgid="3767150027110633765">"Puna"</string>
<string name="widget_category_conversations" msgid="8894438636213590446">"Bisedat"</string>
- <!-- no translation found for widget_education_header (4874760613775913787) -->
- <skip />
- <!-- no translation found for widget_education_content (745542879510751525) -->
- <skip />
- <!-- no translation found for widget_education_close_button (8676165703104836580) -->
- <skip />
+ <string name="widget_education_header" msgid="4874760613775913787">"Informacione të dobishme në majë të gishtave të tu"</string>
+ <string name="widget_education_content" msgid="745542879510751525">"Për të marrë informacione pa i hapur aplikacionet, mund të shtosh miniaplikacione në ekranin bazë"</string>
+ <string name="widget_education_close_button" msgid="8676165703104836580">"E kuptova"</string>
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"Kërko për aplikacione"</string>
<string name="all_apps_loading_message" msgid="5813968043155271636">"Po ngarkon aplikacionet..."</string>
<string name="all_apps_no_search_results" msgid="3200346862396363786">"Nuk u gjet asnjë aplikacion që përputhet me \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string>
@@ -157,8 +154,8 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personale"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"Punë"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Profili i punës"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Të dhënat personale janë të ndara dhe të fshehura nga aplikacionet e punës"</string>
- <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Aplikacionet e punës dhe të dhënat janë të dukshme për administratorin e teknologjisë së informacionit."</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Të dhënat personale janë të veçuara dhe të fshehura nga aplikacionet e punës"</string>
+ <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Aplikacionet e punës dhe të dhënat janë të dukshme për administratorin e teknologjisë së informacionit"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Para"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"E kuptova"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Profili i punës është në pauzë"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index a474661..7a85179 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -51,12 +51,9 @@
<string name="widgets_full_sheet_personal_tab" msgid="2743540105607120182">"వ్యక్తిగతం"</string>
<string name="widgets_full_sheet_work_tab" msgid="3767150027110633765">"ఆఫీస్"</string>
<string name="widget_category_conversations" msgid="8894438636213590446">"సంభాషణలు"</string>
- <!-- no translation found for widget_education_header (4874760613775913787) -->
- <skip />
- <!-- no translation found for widget_education_content (745542879510751525) -->
- <skip />
- <!-- no translation found for widget_education_close_button (8676165703104836580) -->
- <skip />
+ <string name="widget_education_header" msgid="4874760613775913787">"మీ చేతివేళ్ల మీద ఉపయోగకరమైన సమాచారం"</string>
+ <string name="widget_education_content" msgid="745542879510751525">"యాప్లను తెరవకుండా సమాచారం పొందడానికి, మీరు మీ మొదటి స్క్రీన్కు విడ్జెట్లను జోడించవచ్చు"</string>
+ <string name="widget_education_close_button" msgid="8676165703104836580">"అర్థమైంది"</string>
<string name="all_apps_search_bar_hint" msgid="1390553134053255246">"అప్లికేషన్లను శోధించండి"</string>
<string name="all_apps_loading_message" msgid="5813968043155271636">"అప్లికేషన్లను లోడ్ చేస్తోంది…"</string>
<string name="all_apps_no_search_results" msgid="3200346862396363786">"\"<xliff:g id="QUERY">%1$s</xliff:g>\"కి సరిపోలే అప్లికేషన్లేవీ కనుగొనబడలేదు"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 3d5db54..99bdd4b 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -155,7 +155,7 @@
<string name="all_apps_work_tab" msgid="4884822796154055118">"Ish"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Ish profili"</string>
<string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Shaxsiy maʼlumotlar ishga oid ilovalardan alohida va berkitilgan"</string>
- <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Ishga oid ilovalar va maʼlumotlarni AT administratoringiz koʻra oladi"</string>
+ <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Administratoringiz ishga oid ilovalar va maʼlumotlarni koʻra oladi"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Keyingisi"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Ish profili pauzada"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index c7d67af..c0bb552 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -32,7 +32,7 @@
<string name="long_accessible_way_to_add" msgid="2733588281439571974">"㩒兩下之後㩒住,就可以郁小工具或者用自訂操作。"</string>
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d 闊,%2$d 高"</string>
- <string name="add_item_request_drag_hint" msgid="5653291305078645405">"按住小工具即可將其移至主畫面上任何位置"</string>
+ <string name="add_item_request_drag_hint" msgid="5653291305078645405">"按住小工具即可隨意在主畫面上移動"</string>
<string name="add_to_home_screen" msgid="8631549138215492708">"新增至主畫面"</string>
<plurals name="widgets_count" formatted="false" msgid="656794749266073027">
<item quantity="other"><xliff:g id="WIDGETS_COUNT_1">%1$d</xliff:g> 個小工具</item>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 6941c2c..9685d89 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -152,15 +152,15 @@
<string name="accessibility_close" msgid="2277148124685870734">"關閉"</string>
<string name="notification_dismissed" msgid="6002233469409822874">"已關閉通知"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"個人"</string>
- <string name="all_apps_work_tab" msgid="4884822796154055118">"公司"</string>
+ <string name="all_apps_work_tab" msgid="4884822796154055118">"工作"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"工作資料夾"</string>
<string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"系統會區隔個人資料與工作資料,因此兩者不會同時顯示"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"你的 IT 管理員可以查看工作應用程式和工作資料"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"繼續"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"我知道了"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"工作資料夾已暫停"</string>
- <string name="work_apps_paused_body" msgid="4209084728264328628">"工作應用程式將無法傳送通知,也無法存取你的位置資訊。你還可以省下這類應用程式消耗的電量"</string>
- <string name="work_apps_paused_content_description" msgid="4473292417145736203">"工作資料夾已暫停。工作應用程式將無法傳送通知,也無法存取你的位置資訊。你還可以省下這類應用程式消耗的電量"</string>
+ <string name="work_apps_paused_body" msgid="4209084728264328628">"工作應用程式不會消耗電量、無法傳送通知,也無法存取你的位置資訊。"</string>
+ <string name="work_apps_paused_content_description" msgid="4473292417145736203">"系統已暫停使用工作資料夾。在這種情況下,工作應用程式不會消耗電量、無法傳送通知,也無法存取你的位置資訊。"</string>
<string name="work_apps_paused_edu_banner" msgid="8872412121608402058">"你的 IT 管理員可以看見工作應用程式和相關標記"</string>
<string name="work_apps_paused_edu_accept" msgid="6377476824357318532">"我知道了"</string>
<string name="work_apps_pause_btn_text" msgid="4669288269140620646">"暫停工作應用程式"</string>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index dc33ab8..92deb68 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -57,8 +57,9 @@
<enum name="folder" value="2" />
<enum name="widget_section" value="3" />
<enum name="shortcut_popup" value="4" />
- <enum name="hero_app" value="5" />
- <enum name="taskbar" value="6" />
+ <enum name="taskbar" value="5" />
+ <enum name="search_result_tall" value="6" />
+ <enum name="search_result_small" value="7" />
</attr>
<attr name="centerVertically" format="boolean" />
</declare-styleable>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index d6a6f43..d065611 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -97,6 +97,7 @@
<dimen name="all_apps_header_tab_height">48dp</dimen>
<dimen name="all_apps_tabs_indicator_height">2dp</dimen>
<dimen name="all_apps_header_top_padding">36dp</dimen>
+ <dimen name="all_apps_header_bottom_padding">16dp</dimen>
<dimen name="all_apps_work_profile_tab_footer_top_padding">16dp</dimen>
<dimen name="all_apps_work_profile_tab_footer_bottom_padding">20dp</dimen>
<dimen name="all_apps_tabs_vertical_padding">6dp</dimen>
@@ -131,6 +132,7 @@
<dimen name="widget_list_top_bottom_corner_radius">28dp</dimen>
<dimen name="widget_list_content_corner_radius">4dp</dimen>
+ <dimen name="widget_list_content_joined_corner_radius">0dp</dimen>
<dimen name="widget_list_header_view_vertical_padding">20dp</dimen>
<dimen name="widget_list_entry_bottom_margin">2dp</dimen>
@@ -310,4 +312,7 @@
<dimen name="grid_visualization_rounding_radius">22dp</dimen>
<dimen name="grid_visualization_cell_spacing">6dp</dimen>
+<!-- Search results related parameters -->
+ <dimen name="search_row_icon_size">48dp</dimen>
+ <dimen name="search_row_small_icon_size">32dp</dimen>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 0c389aa..86dcf4c 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -315,5 +315,6 @@
<style name="AddItemActivityTheme" parent="@android:style/Theme.Translucent.NoTitleBar">
<item name="widgetsTheme">@style/WidgetContainerTheme</item>
+ <item name="android:windowLightStatusBar">true</item>
</style>
</resources>
diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java
index 4f0ef12..ddbd425 100644
--- a/src/com/android/launcher3/BubbleTextView.java
+++ b/src/com/android/launcher3/BubbleTextView.java
@@ -80,8 +80,9 @@
private static final int DISPLAY_WORKSPACE = 0;
private static final int DISPLAY_ALL_APPS = 1;
private static final int DISPLAY_FOLDER = 2;
- private static final int DISPLAY_HERO_APP = 5;
- protected static final int DISPLAY_TASKBAR = 6;
+ protected static final int DISPLAY_TASKBAR = 5;
+ private static final int DISPLAY_SEARCH_RESULT = 6;
+ private static final int DISPLAY_SEARCH_RESULT_SMALL = 7;
private static final int[] STATE_PRESSED = new int[]{android.R.attr.state_pressed};
private static final float HIGHLIGHT_SCALE = 1.16f;
@@ -187,8 +188,11 @@
setTextSize(TypedValue.COMPLEX_UNIT_PX, grid.folderChildTextSizePx);
setCompoundDrawablePadding(grid.folderChildDrawablePaddingPx);
defaultIconSize = grid.folderChildIconSizePx;
- } else if (mDisplay == DISPLAY_HERO_APP) {
- defaultIconSize = grid.allAppsIconSizePx;
+ } else if (mDisplay == DISPLAY_SEARCH_RESULT) {
+ defaultIconSize = getResources().getDimensionPixelSize(R.dimen.search_row_icon_size);
+ } else if (mDisplay == DISPLAY_SEARCH_RESULT_SMALL) {
+ defaultIconSize = getResources().getDimensionPixelSize(
+ R.dimen.search_row_small_icon_size);
} else if (mDisplay == DISPLAY_TASKBAR) {
defaultIconSize = grid.iconSizePx;
} else {
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index c6c9c9b..d536c3a 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -21,6 +21,7 @@
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_VERTICAL_SWIPE_BEGIN;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_VERTICAL_SWIPE_END;
+import static com.android.launcher3.util.UiThreadHelper.hideKeyboardAsync;
import android.content.Context;
import android.content.res.Resources;
@@ -31,7 +32,6 @@
import android.util.SparseIntArray;
import android.view.MotionEvent;
import android.view.View;
-import android.view.WindowInsets;
import androidx.recyclerview.widget.RecyclerView;
@@ -41,6 +41,7 @@
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
import com.android.launcher3.logging.StatsLogManager;
+import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.RecyclerViewFastScroller;
import java.util.ArrayList;
@@ -189,8 +190,8 @@
case SCROLL_STATE_DRAGGING:
mgr.logger().sendToInteractionJankMonitor(
LAUNCHER_ALLAPPS_VERTICAL_SWIPE_BEGIN, this);
- requestFocus();
- getWindowInsetsController().hide(WindowInsets.Type.ime());
+ hideKeyboardAsync(ActivityContext.lookupContext(getContext()),
+ getApplicationWindowToken());
break;
case SCROLL_STATE_IDLE:
mgr.logger().sendToInteractionJankMonitor(
diff --git a/src/com/android/launcher3/util/UiThreadHelper.java b/src/com/android/launcher3/util/UiThreadHelper.java
index 947f96f..b9387a8 100644
--- a/src/com/android/launcher3/util/UiThreadHelper.java
+++ b/src/com/android/launcher3/util/UiThreadHelper.java
@@ -15,6 +15,7 @@
*/
package com.android.launcher3.util;
+import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_KEYBOARD_CLOSED;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import android.annotation.SuppressLint;
@@ -27,6 +28,7 @@
import android.view.WindowInsets;
import android.view.inputmethod.InputMethodManager;
+import com.android.launcher3.Launcher;
import com.android.launcher3.Utilities;
import com.android.launcher3.views.ActivityContext;
@@ -57,6 +59,8 @@
Message.obtain(HANDLER.get(root.getContext()),
MSG_HIDE_KEYBOARD, token).sendToTarget();
+ Launcher.cast(activityContext).getStatsLogManager().logger().log(
+ LAUNCHER_ALLAPPS_KEYBOARD_CLOSED);
}
public static void setOrientationAsync(Activity activity, int orientation) {
diff --git a/src/com/android/launcher3/views/WidgetsEduView.java b/src/com/android/launcher3/views/WidgetsEduView.java
index c6fa98a..c2947c7 100644
--- a/src/com/android/launcher3/views/WidgetsEduView.java
+++ b/src/com/android/launcher3/views/WidgetsEduView.java
@@ -22,8 +22,8 @@
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.LayoutInflater;
-import android.view.View;
+import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Insettable;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
@@ -36,8 +36,6 @@
private static final int DEFAULT_CLOSE_DURATION = 200;
private Rect mInsets = new Rect();
- private View mEduView;
-
public WidgetsEduView(Context context, AttributeSet attr) {
this(context, attr, 0);
@@ -46,7 +44,6 @@
public WidgetsEduView(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
- mContent = this;
}
@Override
@@ -62,20 +59,16 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mEduView = findViewById(R.id.edu_view);
+ mContent = findViewById(R.id.edu_view);
findViewById(R.id.edu_close_button)
.setOnClickListener(v -> close(/* animate= */ true));
}
@Override
public void setInsets(Rect insets) {
- int leftInset = insets.left - mInsets.left;
- int rightInset = insets.right - mInsets.right;
- int bottomInset = insets.bottom - mInsets.bottom;
mInsets.set(insets);
- setPadding(leftInset, getPaddingTop(), rightInset, 0);
- mEduView.setPaddingRelative(mEduView.getPaddingStart(),
- mEduView.getPaddingTop(), mEduView.getPaddingEnd(), bottomInset);
+ mContent.setPadding(mContent.getPaddingStart(),
+ mContent.getPaddingTop(), mContent.getPaddingEnd(), insets.bottom);
}
private void show() {
@@ -90,10 +83,41 @@
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
- super.onLayout(changed, l, t, r, b);
+ int width = r - l;
+ int height = b - t;
+
+ // Lay out the content as center bottom aligned.
+ int contentWidth = mContent.getMeasuredWidth();
+ int contentLeft = (width - contentWidth - mInsets.left - mInsets.right) / 2 + mInsets.left;
+ mContent.layout(contentLeft, height - mContent.getMeasuredHeight(),
+ contentLeft + contentWidth, height);
+
setTranslationShift(mTranslationShift);
}
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ DeviceProfile deviceProfile = mActivityContext.getDeviceProfile();
+ int widthUsed;
+ if (mInsets.bottom > 0) {
+ // Extra space between this view and mContent horizontally when the sheet is shown in
+ // portrait mode.
+ widthUsed = mInsets.left + mInsets.right;
+ } else {
+ // Extra space between this view and mContent horizontally when the sheet is shown in
+ // landscape mode.
+ Rect padding = deviceProfile.workspacePadding;
+ widthUsed = Math.max(padding.left + padding.right,
+ 2 * (mInsets.left + mInsets.right));
+ }
+
+ int heightUsed = mInsets.top + deviceProfile.edgeMarginPx;
+ measureChildWithMargins(mContent, widthMeasureSpec,
+ widthUsed, heightMeasureSpec, heightUsed);
+ setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),
+ MeasureSpec.getSize(heightMeasureSpec));
+ }
+
private void animateOpen() {
if (mIsOpen || mOpenCloseAnimator.isRunning()) {
return;
diff --git a/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java b/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java
index 8685aae..50ab422 100644
--- a/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java
+++ b/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java
@@ -41,6 +41,7 @@
import android.widget.Advanceable;
import android.widget.RemoteViews;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
@@ -262,6 +263,10 @@
mIsAttachedToWindow = true;
checkIfAutoAdvance();
+
+ if (mLastLocationRegistered != null) {
+ mColorExtractor.addLocation(List.of(mLastLocationRegistered));
+ }
}
@Override
@@ -366,7 +371,7 @@
if (mTempRectF.isEmpty()) {
return;
}
- if (!mTempRectF.equals(mLastLocationRegistered)) {
+ if (!isSameLocation(mTempRectF, mLastLocationRegistered, /* epsilon= */ 1e-6f)) {
if (mLastLocationRegistered != null) {
mColorExtractor.removeLocations();
}
@@ -375,6 +380,20 @@
}
}
+ // Compare two location rectangles. Locations are always in the [0;1] range.
+ private static boolean isSameLocation(@NonNull RectF rect1, @Nullable RectF rect2,
+ float epsilon) {
+ if (rect2 == null) return false;
+ return isSameCoordinate(rect1.left, rect2.left, epsilon)
+ && isSameCoordinate(rect1.right, rect2.right, epsilon)
+ && isSameCoordinate(rect1.top, rect2.top, epsilon)
+ && isSameCoordinate(rect1.bottom, rect2.bottom, epsilon);
+ }
+
+ private static boolean isSameCoordinate(float c1, float c2, float epsilon) {
+ return Math.abs(c1 - c2) < epsilon;
+ }
+
@Override
public void onColorsChanged(RectF rectF, SparseIntArray colors) {
// setColorResources will reapply the view, which must happen in the UI thread.
@@ -391,14 +410,6 @@
protected void onWindowVisibilityChanged(int visibility) {
super.onWindowVisibilityChanged(visibility);
maybeRegisterAutoAdvance();
-
- if (visibility == View.VISIBLE) {
- if (mLastLocationRegistered != null) {
- mColorExtractor.addLocation(List.of(mLastLocationRegistered));
- }
- } else {
- mColorExtractor.removeLocations();
- }
}
private void checkIfAutoAdvance() {
@@ -481,6 +492,10 @@
return;
}
LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) getTag();
+ if (info == null) {
+ // This occurs when LauncherAppWidgetHostView is used to render a preview layout.
+ return;
+ }
// Remove and rebind the current widget (which was inflated in the wrong
// orientation), but don't delete it from the database
mLauncher.removeItem(this, info, false /* deleteFromDb */);
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListDrawables.java b/src/com/android/launcher3/widget/picker/WidgetsListDrawables.java
new file mode 100644
index 0000000..b3bb544
--- /dev/null
+++ b/src/com/android/launcher3/widget/picker/WidgetsListDrawables.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2021 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.widget.picker;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.GradientDrawable;
+import android.graphics.drawable.RippleDrawable;
+
+import com.android.launcher3.R;
+import com.android.launcher3.util.Themes;
+
+/** Helper class for creating drawables to use as background for list elements. */
+final class WidgetsListDrawables {
+
+ private WidgetsListDrawables() {}
+
+ /** Creates a list background drawable with the specified radii. */
+ static Drawable createListBackgroundDrawable(
+ Context context,
+ float topRadius,
+ float bottomRadius) {
+ GradientDrawable backgroundMask = new GradientDrawable();
+ backgroundMask.setColor(context.getColorStateList(R.color.surface));
+ backgroundMask.setShape(GradientDrawable.RECTANGLE);
+
+ backgroundMask.setCornerRadii(
+ new float[]{
+ topRadius,
+ topRadius,
+ topRadius,
+ topRadius,
+ bottomRadius,
+ bottomRadius,
+ bottomRadius,
+ bottomRadius
+ });
+
+ return new RippleDrawable(
+ /* color= */ ColorStateList.valueOf(
+ Themes.getAttrColor(context, android.R.attr.colorControlHighlight)),
+ /* content= */ backgroundMask,
+ /* mask= */ backgroundMask);
+ }
+
+}
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListHeader.java b/src/com/android/launcher3/widget/picker/WidgetsListHeader.java
index 41aa437..fece359 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListHeader.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListHeader.java
@@ -60,6 +60,9 @@
@Nullable private Drawable mIconDrawable;
private final int mIconSize;
private final int mBottomMarginSize;
+ private final float mTopBottomCornerRadius;
+ private final float mMiddleCornerRadius;
+ private final float mJoinedCornerRadius;
private ImageView mAppIcon;
private TextView mTitle;
@@ -87,6 +90,12 @@
grid.iconSizePx);
mBottomMarginSize =
getResources().getDimensionPixelSize(R.dimen.widget_list_entry_bottom_margin);
+ mTopBottomCornerRadius =
+ getResources().getDimension(R.dimen.widget_list_top_bottom_corner_radius);
+ mMiddleCornerRadius =
+ getResources().getDimension(R.dimen.widget_list_content_corner_radius);
+ mJoinedCornerRadius =
+ getResources().getDimension(R.dimen.widget_list_content_joined_corner_radius);
}
@Override
@@ -254,6 +263,20 @@
verifyHighRes();
}
+ /** Updates the list to have a background drawable with the appropriate corner radii. */
+ @UiThread
+ public void updateListBackground(boolean isFirst, boolean isLast, boolean isExpanded) {
+ float topRadius = isFirst ? mTopBottomCornerRadius : mMiddleCornerRadius;
+ float bottomRadius = isLast
+ ? mTopBottomCornerRadius
+ : isExpanded
+ ? mJoinedCornerRadius
+ : mMiddleCornerRadius;
+ setBackground(
+ WidgetsListDrawables.createListBackgroundDrawable(
+ getContext(), topRadius, bottomRadius));
+ }
+
private void setTitles(WidgetsListSearchHeaderEntry entry) {
mTitle.setText(entry.mPkgItem.title);
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java b/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java
index e57f4d8..22d6d22 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java
@@ -52,15 +52,10 @@
public void bindViewHolder(WidgetsListHeaderHolder viewHolder, WidgetsListHeaderEntry data,
int position) {
WidgetsListHeader widgetsListHeader = viewHolder.mWidgetsListHeader;
- if (mWidgetsListAdapter.getItemCount() == 1) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_single_item_ripple);
- } else if (position == 0) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_top_ripple);
- } else if (position == mWidgetsListAdapter.getItemCount() - 1) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_bottom_ripple);
- } else {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_middle_ripple);
- }
+ widgetsListHeader.updateListBackground(
+ /* isFirst= */ position == 0,
+ /* isLast= */ position == mWidgetsListAdapter.getItemCount() - 1,
+ /* isExpanded= */ data.isWidgetListShown());
widgetsListHeader.applyFromItemInfoWithIcon(data);
widgetsListHeader.setExpanded(data.isWidgetListShown());
widgetsListHeader.setOnExpandChangeListener(isExpanded ->
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java b/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java
index b98f5e1..d5e03a4 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java
@@ -53,15 +53,10 @@
public void bindViewHolder(WidgetsListSearchHeaderHolder viewHolder,
WidgetsListSearchHeaderEntry data, int position) {
WidgetsListHeader widgetsListHeader = viewHolder.mWidgetsListHeader;
- if (mWidgetsListAdapter.getItemCount() == 1) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_single_item_ripple);
- } else if (position == 0) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_top_ripple);
- } else if (position == mWidgetsListAdapter.getItemCount() - 1) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_bottom_ripple);
- } else {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_middle_ripple);
- }
+ widgetsListHeader.updateListBackground(
+ /* isFirst= */ position == 0,
+ /* isLast= */ position == mWidgetsListAdapter.getItemCount() - 1,
+ /* isExpanded= */ data.isWidgetListShown());
widgetsListHeader.applyFromItemInfoWithIcon(data);
widgetsListHeader.setExpanded(data.isWidgetListShown());
widgetsListHeader.setOnExpandChangeListener(isExpanded ->
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java b/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java
index c3eda13..8e310c5 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java
@@ -16,6 +16,7 @@
package com.android.launcher3.widget.picker;
import android.content.Context;
+import android.content.res.Resources;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -51,6 +52,9 @@
private final OnLongClickListener mIconLongClickListener;
private final WidgetPreviewLoader mWidgetPreviewLoader;
private final WidgetsListAdapter mWidgetsListAdapter;
+ private final float mTopBottomCornerRadius;
+ private final float mMiddleCornerRadius;
+ private final float mJoinedCornerRadius;
private boolean mApplyBitmapDeferred = false;
public WidgetsListTableViewHolderBinder(
@@ -65,6 +69,13 @@
mIconLongClickListener = iconLongClickListener;
mWidgetPreviewLoader = widgetPreviewLoader;
mWidgetsListAdapter = listAdapter;
+ Resources resources = context.getResources();
+ mTopBottomCornerRadius =
+ resources.getDimension(R.dimen.widget_list_top_bottom_corner_radius);
+ mMiddleCornerRadius =
+ resources.getDimension(R.dimen.widget_list_content_corner_radius);
+ mJoinedCornerRadius =
+ resources.getDimension(R.dimen.widget_list_content_joined_corner_radius);
}
/**
@@ -100,13 +111,14 @@
entry.mWidgets.size(), table.getChildCount()));
}
- if (position == mWidgetsListAdapter.getItemCount() - 1) {
- table.setBackgroundResource(R.drawable.widgets_list_bottom_ripple);
- } else {
- // WidgetsListContentEntry is never shown in position 0. There must be a header above
- // it.
- table.setBackgroundResource(R.drawable.widgets_list_middle_ripple);
- }
+ // The content is always joined to an expanded header above.
+ float topRadius = mJoinedCornerRadius;
+ float bottomRadius = position == mWidgetsListAdapter.getItemCount() - 1
+ ? mTopBottomCornerRadius
+ : mMiddleCornerRadius;
+ table.setBackgroundDrawable(
+ WidgetsListDrawables.createListBackgroundDrawable(
+ holder.itemView.getContext(), topRadius, bottomRadius));
List<ArrayList<WidgetItem>> widgetItemsTable =
WidgetsTableUtils.groupWidgetItemsIntoTable(entry.mWidgets, mMaxSpansPerRow);
diff --git a/tests/src/com/android/launcher3/util/TestUtil.java b/tests/src/com/android/launcher3/util/TestUtil.java
index 55e5744..67f3902 100644
--- a/tests/src/com/android/launcher3/util/TestUtil.java
+++ b/tests/src/com/android/launcher3/util/TestUtil.java
@@ -22,6 +22,8 @@
import androidx.test.uiautomator.UiDevice;
+import org.junit.Assert;
+
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -48,7 +50,10 @@
in.close();
out.close();
- UiDevice.getInstance(getInstrumentation()).executeShellCommand("pm install " + apkFilename);
+ final String result = UiDevice.getInstance(getInstrumentation())
+ .executeShellCommand("pm install " + apkFilename);
+ Assert.assertTrue("Failed to install wellbeing test apk; make sure the device is rooted",
+ "Success".equals(result.replaceAll("\\s+", "")));
}
public static void uninstallDummyApp() throws IOException {