diff --git a/go/quickstep/res/values-af/strings.xml b/go/quickstep/res/values-af/strings.xml
index 501d297a8d..f4ce476582 100644
--- a/go/quickstep/res/values-af/strings.xml
+++ b/go/quickstep/res/values-af/strings.xml
@@ -1,7 +1,7 @@
- "Deel program"
+ "Deel app"
"Luister"
"Vertaal"
"Lens"
@@ -9,12 +9,12 @@
"KANSELLEER"
"INSTELLINGS"
"Vertaal of luister na teks op skerm"
- "Inligting soos teks op jou skerm, webadresse en skermskote kan met Google gedeel word.\n\nGaan na ""Instellings > Programme > Verstekprogramme > Digitale Assistent-program"" om te verander watter inligting jy deel."
+ "Inligting soos teks op jou skerm, webadresse en skermskote kan met Google gedeel word.\n\nGaan na ""Instellings > Apps > Verstekapps > Digitale Assistent-app"" om te verander watter inligting jy deel."
"Kies \'n assistent om hierdie kenmerk te gebruik"
"Kies \'n digitalebystandprogram in Instellings om na teks op jou skerm te luister of dit te vertaal"
"Verander jou assistent om hierdie kenmerk te gebruik"
"Verander jou digitalebystandprogram in Instellings om na teks op jou skerm te luister of dit te vertaal"
"Tik hier om na teks op hierdie skerm te luister"
"Tik hier om teks op hierdie skerm te vertaal"
- "Hierdie program kan nie gedeel word nie"
+ "Hierdie app kan nie gedeel word nie"
diff --git a/go/quickstep/res/values-fa/strings.xml b/go/quickstep/res/values-fa/strings.xml
index 8453d4e3e2..f0e4a57712 100644
--- a/go/quickstep/res/values-fa/strings.xml
+++ b/go/quickstep/res/values-fa/strings.xml
@@ -5,7 +5,7 @@
"گوش دادن"
"ترجمه"
"لنز"
- "متوجهام"
+ "متوجهم"
"لغو"
"تنظیمات"
"ترجمه نوشتار روی صفحهنمایش یا گوش دادن به آن"
diff --git a/go/quickstep/res/values-iw/strings.xml b/go/quickstep/res/values-iw/strings.xml
index ddb8ddd9a9..db661066e0 100644
--- a/go/quickstep/res/values-iw/strings.xml
+++ b/go/quickstep/res/values-iw/strings.xml
@@ -14,7 +14,7 @@
"כדי להאזין לטקסט שבמסך או לתרגם אותו, צריך לבחור אפליקציית עוזר דיגיטלי ב\'הגדרות\'"
"צריך לשנות את העוזר הדיגיטלי כדי להשתמש בתכונה הזו"
"כדי להאזין לטקסט שבמסך או לתרגם אותו, צריך לשנות את אפליקציית העוזר הדיגיטלי ב\'הגדרות\'"
- "צריך להקיש כאן כדי להאזין לטקסט שבמסך הזה"
- "צריך להקיש כאן כדי לתרגם את הטקסט שבמסך הזה"
+ "צריך ללחוץ כאן כדי להאזין לטקסט שבמסך הזה"
+ "צריך ללחוץ כאן כדי לתרגם את הטקסט שבמסך הזה"
"אי אפשר לשתף את האפליקציה הזו"
diff --git a/quickstep/res/values-af/strings.xml b/quickstep/res/values-af/strings.xml
index 22125d7271..365916e5ba 100644
--- a/quickstep/res/values-af/strings.xml
+++ b/quickstep/res/values-af/strings.xml
@@ -46,7 +46,7 @@
"Programvoorstelle is in leë spasie bygevoeg"
"Programvoorstelle is geaktiveer"
"Programvoorstelle is gedeaktiveer"
- "Voorspelde program: %1$s"
+ "Voorspelde app: %1$s"
"Draai jou toestel"
"Draai asseblief jou toestel om die tutoriaal oor gebaarnavigasie te voltooi"
"Maak seker dat jy van die rand heel regs of heel links af swiep"
@@ -104,10 +104,10 @@
"Kanselleer"
"Verlaat verdeeldeskermkeuse"
"Kies nog ’n app as jy verdeelde skerm wil gebruik"
- "Jou organisasie laat nie hierdie program toe nie"
+ "Jou organisasie laat nie hierdie app toe nie"
"Legstukke word nie tans ondersteun nie; kies asseblief ’n ander app"
"Slaan navigasietutoriaal oor?"
- "Jy kan dit later in die %1$s-program kry"
+ "Jy kan dit later in die %1$s-app kry"
"Kanselleer"
"Slaan oor"
"Draai skerm"
diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml
index de550d1827..af9cf388e1 100644
--- a/quickstep/res/values-cs/strings.xml
+++ b/quickstep/res/values-cs/strings.xml
@@ -138,7 +138,7 @@
"Panel a bubliny jsou skryty"
"Navigační panel"
"Vždy zobrazovat panel aplikací"
- "Změnit režim navigace"
+ "Změnit navigační režim"
"Rozdělovač panelu aplikací"
"Přetečení panelu aplikací"
"Přesunout doleva nahoru"
diff --git a/quickstep/res/values-da/strings.xml b/quickstep/res/values-da/strings.xml
index b022172309..ea9c31766e 100644
--- a/quickstep/res/values-da/strings.xml
+++ b/quickstep/res/values-da/strings.xml
@@ -23,7 +23,7 @@
"Frit format"
"Computertilstand"
"Flyt til ekstern skærm"
- "Computer"
+ "Computertilstand"
"Ingen nye elementer"
"Indstillinger for appforbrug"
"Ryd alt"
@@ -144,7 +144,7 @@
"Flyt til toppen eller venstre side"
"Flyt til bunden eller højre side"
"{count,plural, =1{yderligere app}one{yderligere app}other{yderligere apps}}"
- "Computer"
+ "Computertilstand"
"%1$s og %2$s"
"Boble"
"Overløb"
diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml
index 8355a88ca6..bde0c19238 100644
--- a/quickstep/res/values-es/strings.xml
+++ b/quickstep/res/values-es/strings.xml
@@ -143,7 +143,7 @@
"Barra de tareas ampliada"
"Mover arriba/a la izquierda"
"Mover abajo/a la derecha"
- "{count,plural, =1{aplicación más}other{aplicaciones más}}"
+ "{count,plural, =1{app más}other{apps más}}"
"Ordenador"
"%1$s y %2$s"
"Burbuja"
diff --git a/quickstep/res/values-eu/strings.xml b/quickstep/res/values-eu/strings.xml
index de19f15ab6..ac28a565ef 100644
--- a/quickstep/res/values-eu/strings.xml
+++ b/quickstep/res/values-eu/strings.xml
@@ -55,7 +55,7 @@
"Ikasi duzu atzera egiteko keinua. Jarraian, lortu aplikazioz aldatzeko argibideak."
"Ikasi duzu atzera egiteko keinua"
"Ziurtatu hatza ez duzula pasatzen pantailaren behealdetik gertuegi"
- "Keinuaren sentikortasuna aldatzeko, joan ezarpenetara"
+ "Keinuaren sentikortasuna aldatzeko, joan Ezarpenak atalera"
"Pasatu hatza atzera egiteko"
"Aurreko pantailara itzultzeko, pasatu hatza pantailaren ezkerreko edo eskuineko ertzetik erdialdera."
"Aurreko pantailara itzultzeko, pasatu bi hatz pantailaren ezkerreko edo eskuineko ertzetik erdialdera."
@@ -75,7 +75,7 @@
"Ziurtatu hatza pantailaren beheko ertzetik gora pasatzen duzula"
"Eduki sakatuta leihoa luzaroago hatza jaso aurretik"
"Ziurtatu hatza zuzen pasatzen duzula gora; ondoren, gelditu"
- "Ikasi duzu keinuak erabiltzen. Keinuak desaktibatzeko, joan ezarpenetara."
+ "Ikasi duzu keinuak erabiltzen. Keinuak desaktibatzeko, joan Ezarpenak atalera."
"Ikasi duzu aplikazioz aldatzeko keinua"
"Pasatu hatza aplikazioa aldatzeko"
"Aplikazio batetik bestera joateko, pasatu hatza pantailaren behealdetik gora, eduki pantaila sakatuta eta altxatu hatza."
diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml
index a5ae3df3df..2c296ca99a 100644
--- a/quickstep/res/values-fr-rCA/strings.xml
+++ b/quickstep/res/values-fr-rCA/strings.xml
@@ -21,9 +21,9 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
"Épingler"
"Forme libre"
- "Ordinateur de bureau"
+ "Bureau"
"Passer à un écran externe"
- "Ordinateur de bureau"
+ "Bureau"
"Aucun élément récent"
"Paramètres d\'utilisation de l\'appli"
"Tout effacer"
@@ -144,7 +144,7 @@
"Déplacer vers le coin supérieur gauche de l\'écran"
"Déplacer vers le coin inférieur droit de l\'écran"
"{count,plural, =1{autre appli}one{autre appli}other{autres applis}}"
- "Ordinateur de bureau"
+ "Bureau"
"%1$s et %2$s"
"Bulle"
"Bulle à développer"
diff --git a/quickstep/res/values-fr/strings.xml b/quickstep/res/values-fr/strings.xml
index 6d2fba2266..ebea8d3b9a 100644
--- a/quickstep/res/values-fr/strings.xml
+++ b/quickstep/res/values-fr/strings.xml
@@ -21,9 +21,9 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
"Épingler"
"Format libre"
- "Ordinateur"
+ "Mode ordinateur"
"Déplacer vers l\'écran externe"
- "Ordinateur"
+ "Mode ordinateur"
"Aucun élément récent"
"Paramètres de consommation de l\'application"
"Tout effacer"
@@ -144,7 +144,7 @@
"Déplacer en haut ou à gauche"
"Déplacer en bas ou à droite"
"{count,plural, =1{autre application}one{autre application}other{autres applications}}"
- "Ordinateur"
+ "Mode ordinateur"
"%1$s et %2$s"
"Bulle"
"Dépassement"
diff --git a/quickstep/res/values-iw/strings.xml b/quickstep/res/values-iw/strings.xml
index ad264216ac..acd187840e 100644
--- a/quickstep/res/values-iw/strings.xml
+++ b/quickstep/res/values-iw/strings.xml
@@ -91,7 +91,7 @@
"מדריך %1$d/%2$d"
"הכול מוכן!"
"כדי לחזור לדף הבית, צריך להחליק למעלה"
- "כדי לעבור אל מסך הבית צריך להקיש על הלחצן הראשי"
+ "כדי לעבור אל מסך הבית צריך ללחוץ על הכפתור הראשי"
"הכול מוכן ואפשר להתחיל להשתמש ב%1$s"
"מכשיר"
"הגדרות הניווט במערכת"
@@ -99,7 +99,7 @@
"צילום מסך"
"פיצול"
"שמירת צמד אפליקציות"
- "צריך להקיש על אפליקציה אחרת כדי להשתמש במסך מפוצל"
+ "צריך ללחוץ על אפליקציה אחרת כדי להשתמש במסך מפוצל"
"כדי להשתמש במסך מפוצל צריך לבחור אפליקציה אחרת"
"ביטול"
"יציאה מתצוגת מסך מפוצל"
diff --git a/quickstep/res/values-ja/strings.xml b/quickstep/res/values-ja/strings.xml
index a25b2bfd8c..8ce977d672 100644
--- a/quickstep/res/values-ja/strings.xml
+++ b/quickstep/res/values-ja/strings.xml
@@ -23,7 +23,7 @@
"フリーフォーム"
"デスクトップ"
"外部ディスプレイに移動する"
- "パソコン"
+ "デスクトップ"
"最近のアイテムはありません"
"アプリの使用状況の設定"
"すべてクリア"
@@ -144,7 +144,7 @@
"上 / 左に移動"
"下 / 右に移動"
"{count,plural, =1{個のその他のアプリ}other{個のその他のアプリ}}"
- "パソコン"
+ "デスクトップ"
"%1$s と %2$s"
"ふきだし"
"オーバーフロー"
diff --git a/quickstep/res/values-nb/strings.xml b/quickstep/res/values-nb/strings.xml
index 077bc0ae09..bf81994156 100644
--- a/quickstep/res/values-nb/strings.xml
+++ b/quickstep/res/values-nb/strings.xml
@@ -144,7 +144,7 @@
"Flytt til øverst/venstre"
"Flytt til nederst/høyre"
"{count,plural, =1{app til}other{apper til}}"
- "Datamaskin"
+ "Skrivebord"
"%1$s og %2$s"
"Boble"
"Overflyt"
diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml
index 089d1b56a9..aae3ccee61 100644
--- a/quickstep/res/values-sv/strings.xml
+++ b/quickstep/res/values-sv/strings.xml
@@ -21,9 +21,9 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
"Fäst"
"Fritt format"
- "Dator"
+ "Skrivbordsläge"
"Flytta till extern skärm"
- "Dator"
+ "Skrivbordsläge"
"Listan är tom"
"Inställningar för appanvändning"
"Rensa alla"
@@ -144,7 +144,7 @@
"Flytta högst upp/till vänster"
"Flytta längst ned/till höger"
"{count,plural, =1{app till}other{appar till}}"
- "Dator"
+ "Skrivbordsläge"
"%1$s och %2$s"
"Bubbla"
"Fler alternativ"
diff --git a/quickstep/res/values-zh-rTW/strings.xml b/quickstep/res/values-zh-rTW/strings.xml
index fd132d2a85..8e06e561d6 100644
--- a/quickstep/res/values-zh-rTW/strings.xml
+++ b/quickstep/res/values-zh-rTW/strings.xml
@@ -21,9 +21,9 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
"固定"
"自由形式"
- "桌面"
+ "電腦模式"
"移至外接螢幕"
- "電腦"
+ "電腦模式"
"最近沒有任何項目"
"應用程式使用情況設定"
"全部清除"
@@ -144,7 +144,7 @@
"移到上方/左側"
"移到底部/右側"
"{count,plural, =1{個其他應用程式}other{個其他應用程式}}"
- "電腦"
+ "電腦模式"
"「%1$s」和「%2$s」"
"泡泡"
"溢位"
diff --git a/quickstep/src/com/android/launcher3/taskbar/FallbackTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/FallbackTaskbarUIController.java
index 6a908ca073..d6327bc3cd 100644
--- a/quickstep/src/com/android/launcher3/taskbar/FallbackTaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/FallbackTaskbarUIController.java
@@ -28,7 +28,6 @@ import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.statemanager.StatefulContainer;
import com.android.quickstep.TopTaskTracker;
import com.android.quickstep.fallback.RecentsState;
-import com.android.quickstep.util.TISBindHelper;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.RecentsViewContainer;
@@ -139,12 +138,6 @@ public class FallbackTaskbarUIController
return topTask.isHomeTask() || topTask.isRecentsTask();
}
- @Nullable
- @Override
- protected TISBindHelper getTISBindHelper() {
- return mRecentsContainer.getTISBindHelper();
- }
-
@Override
protected String getTaskbarUIControllerName() {
return "FallbackTaskbarUIController<" + mRecentsContainer.getClass().getSimpleName() + ">";
diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
index 7d75286312..0d09b486f1 100644
--- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
@@ -49,7 +49,6 @@ import com.android.quickstep.HomeVisibilityState;
import com.android.quickstep.RecentsAnimationCallbacks;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.util.GroupTask;
-import com.android.quickstep.util.TISBindHelper;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.system.QuickStepContract.SystemUiStateFlags;
import com.android.wm.shell.shared.bubbles.BubbleBarLocation;
@@ -483,12 +482,6 @@ public class LauncherTaskbarUIController extends TaskbarUIController {
mTaskbarLauncherStateController.resetIconAlignment();
}
- @Nullable
- @Override
- protected TISBindHelper getTISBindHelper() {
- return mLauncher.getTISBindHelper();
- }
-
@Override
public void dumpLogs(String prefix, PrintWriter pw) {
super.dumpLogs(prefix, pw);
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarNavButtonController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarNavButtonController.java
index 48818362e9..d1f9be0b91 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarNavButtonController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarNavButtonController.java
@@ -344,6 +344,10 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa
mCallbacks.onToggleOverview();
}
+ public void hideOverview() {
+ mCallbacks.onHideOverview();
+ }
+
void sendBackKeyEvent(int action, boolean cancelled) {
if (action == mLastSentBackAction) {
// There must always be an alternating sequence of ACTION_DOWN and ACTION_UP events
@@ -411,5 +415,8 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa
/** Callback invoked when the overview button is pressed. */
default void onToggleOverview() {}
+
+ /** Callback invoken when a visible overview needs to be hidden. */
+ default void onHideOverview() { }
}
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
index 8b636dd9b6..f29f95d347 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
@@ -39,10 +39,7 @@ import com.android.launcher3.popup.SystemShortcut;
import com.android.launcher3.taskbar.bubbles.BubbleBarController;
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.SplitConfigurationOptions;
-import com.android.quickstep.OverviewCommandHelper;
-import com.android.quickstep.OverviewCommandHelper.CommandType;
import com.android.quickstep.util.GroupTask;
-import com.android.quickstep.util.TISBindHelper;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskContainer;
import com.android.quickstep.views.TaskView;
@@ -389,26 +386,13 @@ public class TaskbarUIController implements BubbleBarController.BubbleBarLocatio
/** Adjusts the hotseat for the bubble bar. */
public void adjustHotseatForBubbleBar(boolean isBubbleBarVisible) {}
- @Nullable
- protected TISBindHelper getTISBindHelper() {
- return null;
- }
-
/**
* Launches the focused task in the Keyboard Quick Switch view through the OverviewCommandHelper
*
* Use this helper method when the focused task may be the overview task.
*/
public void launchKeyboardFocusedTask() {
- TISBindHelper tisBindHelper = getTISBindHelper();
- if (tisBindHelper == null) {
- return;
- }
- OverviewCommandHelper overviewCommandHelper = tisBindHelper.getOverviewCommandHelper();
- if (overviewCommandHelper == null) {
- return;
- }
- overviewCommandHelper.addCommand(CommandType.HIDE);
+ mControllers.navButtonController.hideOverview();
}
/**
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
index 130b9b7401..b51409ce8a 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
@@ -396,6 +396,16 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar
view.setTag(null);
}
+ /** Loop through all {@link FolderIcon} as child views and clear listeners to avoid leak. */
+ public void removeFolderIconListeners() {
+ final int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ if (getChildAt(i) instanceof FolderIcon fi) {
+ fi.removeListeners();
+ }
+ }
+ }
+
/** Inflates/binds the hotseat items and recent tasks to the view. */
protected void updateItems(ItemInfo[] hotseatItemInfos, List recentTasks) {
// Filter out unsupported items.
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
index 4acf2fe378..2ffa00fda6 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
@@ -307,6 +307,7 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
if (enableTaskbarPinning()) {
mTaskbarView.removeOnLayoutChangeListener(mTaskbarViewLayoutChangeListener);
}
+ mTaskbarView.removeFolderIconListeners();
LauncherAppState.getInstance(mActivity).getModel().removeCallbacks(mModelCallbacks);
mActivity.removeOnDeviceProfileChangeListener(mDeviceProfileChangeListener);
}
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
index 5cb6e8643e..999b13e2a3 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
@@ -169,6 +169,7 @@ import com.android.launcher3.util.TouchController;
import com.android.launcher3.widget.LauncherWidgetHolder;
import com.android.quickstep.OverviewCommandHelper;
import com.android.quickstep.OverviewComponentObserver;
+import com.android.quickstep.OverviewComponentObserver.OverviewChangeListener;
import com.android.quickstep.RecentsAnimationDeviceState;
import com.android.quickstep.RecentsModel;
import com.android.quickstep.SystemUiProxy;
@@ -224,7 +225,6 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
SystemProperties.getBoolean("persist.debug.trace_layouts", false);
private static final String TRACE_RELAYOUT_CLASS =
SystemProperties.get("persist.debug.trace_request_layout_class", null);
- public static final boolean GO_LOW_RAM_RECENTS_ENABLED = false;
protected static final String RING_APPEAR_ANIMATION_PREFIX = "RingAppearAnimation\t";
@@ -264,7 +264,7 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
private boolean mIsOverlayVisible;
- private final Runnable mOverviewTargetChangeRunnable = this::onOverviewTargetChanged;
+ private final OverviewChangeListener mOverviewChangeListener = this::onOverviewTargetChanged;
public static QuickstepLauncher getLauncher(Context context) {
return fromContext(context);
@@ -283,9 +283,6 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
systemUiProxy, RecentsModel.INSTANCE.get(this),
() -> onStateBack());
RecentsAnimationDeviceState deviceState = new RecentsAnimationDeviceState(asContext());
- // TODO(b/337863494): Explore use of the same OverviewComponentObserver across launcher
- OverviewComponentObserver overviewComponentObserver = new OverviewComponentObserver(
- asContext(), deviceState);
if (DesktopModeStatus.canEnterDesktopMode(this)) {
mDesktopRecentsTransitionController = new DesktopRecentsTransitionController(
getStateManager(), systemUiProxy, getIApplicationThread(),
@@ -294,7 +291,7 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
overviewPanel.init(mActionsView, mSplitSelectStateController,
mDesktopRecentsTransitionController);
mSplitWithKeyboardShortcutController = new SplitWithKeyboardShortcutController(this,
- mSplitSelectStateController, overviewComponentObserver, deviceState);
+ mSplitSelectStateController, deviceState);
mSplitToWorkspaceController = new SplitToWorkspaceController(this,
mSplitSelectStateController);
mActionsView.updateDimension(getDeviceProfile(), overviewPanel.getLastComputedTaskSize());
@@ -307,8 +304,7 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
mTISBindHelper = new TISBindHelper(this, this::onTISConnected);
mDepthController = new DepthController(this);
if (DesktopModeStatus.canEnterDesktopModeOrShowAppHandle(this)) {
- mSplitSelectStateController.initSplitFromDesktopController(this,
- overviewComponentObserver);
+ mSplitSelectStateController.initSplitFromDesktopController(this);
}
mHotseatPredictionController = new HotseatPredictionController(this);
@@ -552,10 +548,8 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
mUnfoldTransitionProgressProvider.destroy();
}
- TISBinder binder = mTISBindHelper.getBinder();
- if (binder != null) {
- binder.unregisterOverviewTargetChangeListener(mOverviewTargetChangeRunnable);
- }
+ OverviewComponentObserver.INSTANCE.get(this)
+ .removeOverviewChangeListener(mOverviewChangeListener);
mTISBindHelper.onDestroy();
if (mLauncherUnfoldAnimationController != null) {
@@ -697,6 +691,8 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
QuickstepOnboardingPrefs.setup(this);
View.setTraceLayoutSteps(TRACE_LAYOUTS);
View.setTracedRequestLayoutClassClass(TRACE_RELAYOUT_CLASS);
+ OverviewComponentObserver.INSTANCE.get(this)
+ .addOverviewChangeListener(mOverviewChangeListener);
}
@Override
@@ -1047,7 +1043,7 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
}
}
- private void onOverviewTargetChanged() {
+ private void onOverviewTargetChanged(boolean isHomeAndOverviewSame) {
QuickstepTransitionManager transitionManager = getAppTransitionManager();
if (transitionManager != null) {
transitionManager.onOverviewTargetChange();
@@ -1060,7 +1056,6 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
taskbarManager.setActivity(this);
}
mTISBindHelper.setPredictiveBackToHomeInProgress(mIsPredictiveBackToHomeInProgress);
- binder.registerOverviewTargetChangeListener(mOverviewTargetChangeRunnable);
}
@Override
@@ -1432,12 +1427,6 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer,
return (mTaskbarUIController != null && mTaskbarUIController.hasBubbles());
}
- @NonNull
- @Override
- public TISBindHelper getTISBindHelper() {
- return mTISBindHelper;
- }
-
@Override
public boolean handleIncorrectSplitTargetSelection() {
if (!enableSplitContextually() || !mSplitSelectStateController.isSplitSelectActive()) {
diff --git a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
index ef6a09dba8..d193feec65 100644
--- a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
@@ -292,8 +292,7 @@ public final class LauncherActivityInterface extends
return;
}
LauncherOverlayManager om = launcher.getOverlayManager();
- if (!SystemUiProxy.INSTANCE.get(launcher).getHomeVisibilityState().isHomeVisible()
- || launcher.isForceInvisible()) {
+ if (!SystemUiProxy.INSTANCE.get(launcher).getHomeVisibilityState().isHomeVisible()) {
om.hideOverlay(false /* animate */);
} else {
om.hideOverlay(150);
diff --git a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java
index 1f6c6717d1..e3da9f55f9 100644
--- a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java
+++ b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java
@@ -19,6 +19,7 @@ package com.android.quickstep;
import static android.content.Intent.ACTION_PACKAGE_ADDED;
import static android.content.Intent.ACTION_PACKAGE_CHANGED;
import static android.content.Intent.ACTION_PACKAGE_REMOVED;
+import static android.view.Display.DEFAULT_DISPLAY;
import static com.android.launcher3.config.FeatureFlags.SEPARATE_RECENTS_ACTIVITY;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
@@ -41,22 +42,34 @@ import androidx.annotation.UiThread;
import com.android.launcher3.Flags;
import com.android.launcher3.R;
+import com.android.launcher3.dagger.ApplicationContext;
+import com.android.launcher3.dagger.LauncherAppComponent;
+import com.android.launcher3.dagger.LauncherAppSingleton;
+import com.android.launcher3.util.DaggerSingletonObject;
+import com.android.launcher3.util.DaggerSingletonTracker;
import com.android.launcher3.util.SimpleBroadcastReceiver;
import com.android.quickstep.util.ActiveGestureProtoLogProxy;
import com.android.systemui.shared.system.PackageManagerWrapper;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.List;
import java.util.Objects;
-import java.util.function.Consumer;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import javax.inject.Inject;
/**
* Class to keep track of the current overview component based off user preferences and app updates
* and provide callers the relevant classes.
*/
+@LauncherAppSingleton
public final class OverviewComponentObserver {
private static final String TAG = "OverviewComponentObserver";
+ public static final DaggerSingletonObject INSTANCE =
+ new DaggerSingletonObject<>(LauncherAppComponent::getOverviewComponentObserver);
+
// We register broadcast receivers on main thread to avoid missing updates.
private final SimpleBroadcastReceiver mUserPreferenceChangeReceiver =
new SimpleBroadcastReceiver(MAIN_EXECUTOR, this::updateOverviewTargets);
@@ -64,14 +77,15 @@ public final class OverviewComponentObserver {
new SimpleBroadcastReceiver(MAIN_EXECUTOR, this::updateOverviewTargets);
private final Context mContext;
- private final RecentsAnimationDeviceState mDeviceState;
+
private final Intent mCurrentHomeIntent;
private final Intent mMyHomeIntent;
private final Intent mFallbackIntent;
private final SparseIntArray mConfigChangesMap = new SparseIntArray();
private final String mSetupWizardPkg;
- private Consumer mOverviewChangeListener = b -> { };
+ private final List mOverviewChangeListeners =
+ new CopyOnWriteArrayList<>();
private String mUpdateRegisteredPackage;
private BaseContainerInterface mContainerInterface;
@@ -80,10 +94,11 @@ public final class OverviewComponentObserver {
private boolean mIsDefaultHome;
private boolean mIsHomeDisabled;
-
- public OverviewComponentObserver(Context context, RecentsAnimationDeviceState deviceState) {
+ @Inject
+ public OverviewComponentObserver(
+ @ApplicationContext Context context,
+ DaggerSingletonTracker lifecycleTracker) {
mContext = context;
- mDeviceState = deviceState;
mCurrentHomeIntent = createHomeIntent();
mMyHomeIntent = new Intent(mCurrentHomeIntent).setPackage(mContext.getPackageName());
ResolveInfo info = context.getPackageManager().resolveActivity(mMyHomeIntent, 0);
@@ -107,21 +122,27 @@ public final class OverviewComponentObserver {
mUserPreferenceChangeReceiver.register(mContext, ACTION_PREFERRED_ACTIVITY_CHANGED);
updateOverviewTargets();
+
+ lifecycleTracker.addCloseable(this::onDestroy);
+ }
+
+ /** Adds a listener for changes in {@link #isHomeAndOverviewSame()} */
+ public void addOverviewChangeListener(OverviewChangeListener overviewChangeListener) {
+ mOverviewChangeListeners.add(overviewChangeListener);
+ }
+
+ /** Removes a previously added listener */
+ public void removeOverviewChangeListener(OverviewChangeListener overviewChangeListener) {
+ mOverviewChangeListeners.remove(overviewChangeListener);
}
/**
- * Sets a listener for changes in {@link #isHomeAndOverviewSame()}
+ * Called to set home enabled/disabled state via systemUI
+ * @param isHomeDisabled
*/
- public void setOverviewChangeListener(Consumer overviewChangeListener) {
- // TODO(b/337861962): This method should be able to support multiple listeners instead of
- // one so that we can reuse the same instance of this class across multiple places
- mOverviewChangeListener = overviewChangeListener;
- }
-
- /** Called on {@link TouchInteractionService#onSystemUiFlagsChanged} */
- @UiThread
- public void onSystemUiStateChanged() {
- if (mDeviceState.isHomeDisabled() != mIsHomeDisabled) {
+ public void setHomeDisabled(boolean isHomeDisabled) {
+ if (isHomeDisabled != mIsHomeDisabled) {
+ mIsHomeDisabled = isHomeDisabled;
updateOverviewTargets();
}
}
@@ -145,7 +166,6 @@ public final class OverviewComponentObserver {
defaultHome = null;
}
- mIsHomeDisabled = mDeviceState.isHomeDisabled();
mIsDefaultHome = Objects.equals(mMyHomeIntent.getComponent(), defaultHome);
// Set assistant visibility to 0 from launcher's perspective, ensures any elements that
@@ -203,13 +223,13 @@ public final class OverviewComponentObserver {
ACTION_PACKAGE_CHANGED, ACTION_PACKAGE_REMOVED);
}
}
- mOverviewChangeListener.accept(mIsHomeAndOverviewSame);
+ mOverviewChangeListeners.forEach(l -> l.onOverviewTargetChange(mIsHomeAndOverviewSame));
}
/**
* Clean up any registered receivers.
*/
- public void onDestroy() {
+ private void onDestroy() {
mUserPreferenceChangeReceiver.unregisterReceiverSafely(mContext);
unregisterOtherHomeAppUpdateReceiver();
}
@@ -293,11 +313,7 @@ public final class OverviewComponentObserver {
*/
public static void startHomeIntentSafely(@NonNull Context context, @Nullable Bundle options,
@NonNull String reason) {
- RecentsAnimationDeviceState deviceState = new RecentsAnimationDeviceState(context);
- OverviewComponentObserver observer = new OverviewComponentObserver(context, deviceState);
- Intent intent = observer.getHomeIntent();
- observer.onDestroy();
- deviceState.destroy();
+ Intent intent = OverviewComponentObserver.INSTANCE.get(context).getHomeIntent();
startHomeIntentSafely(context, intent, options, reason);
}
@@ -317,6 +333,17 @@ public final class OverviewComponentObserver {
}
}
+ /**
+ * Interface for listening to overview changes
+ */
+ public interface OverviewChangeListener {
+
+ /**
+ * Called when the overview target changes
+ */
+ void onOverviewTargetChange(boolean isHomeAndOverviewSame);
+ }
+
private static Intent createHomeIntent() {
return new Intent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_HOME)
diff --git a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
index 2828a84f5e..f91f696a15 100644
--- a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
+++ b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
@@ -204,27 +204,13 @@ public class QuickstepTestInformationHandler extends TestInformationHandler {
@Override
protected WindowInsets getWindowInsets() {
- RecentsAnimationDeviceState rads = new RecentsAnimationDeviceState(mContext);
- OverviewComponentObserver observer = new OverviewComponentObserver(mContext, rads);
- try {
- RecentsViewContainer container = observer.getContainerInterface().getCreatedContainer();
-
- return container == null ? null : container.getRootView().getRootWindowInsets();
- } finally {
- observer.onDestroy();
- rads.destroy();
- }
+ RecentsViewContainer container = getRecentsViewContainer();
+ return container == null ? null : container.getRootView().getRootWindowInsets();
}
private RecentsViewContainer getRecentsViewContainer() {
- RecentsAnimationDeviceState rads = new RecentsAnimationDeviceState(mContext);
- OverviewComponentObserver observer = new OverviewComponentObserver(mContext, rads);
- try {
- return observer.getContainerInterface().getCreatedContainer();
- } finally {
- observer.onDestroy();
- rads.destroy();
- }
+ return OverviewComponentObserver.INSTANCE.get(mContext)
+ .getContainerInterface().getCreatedContainer();
}
@Override
diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java
index 61a150b8b6..834cf44d8b 100644
--- a/quickstep/src/com/android/quickstep/RecentsActivity.java
+++ b/quickstep/src/com/android/quickstep/RecentsActivity.java
@@ -363,14 +363,6 @@ public final class RecentsActivity extends StatefulActivity implem
this, LAUNCHER_ACTIVITY_STOPPED_MESSAGE);
}
- @Override
- public void onUiChangedWhileSleeping() {
- super.onUiChangedWhileSleeping();
- // Dismiss recents and navigate to home if the device goes to sleep
- // while in recents.
- startHome();
- }
-
@Override
protected void onResume() {
super.onResume();
@@ -554,12 +546,6 @@ public final class RecentsActivity extends StatefulActivity implem
return overviewCommandHelper == null || overviewCommandHelper.canStartHomeSafely();
}
- @NonNull
- @Override
- public TISBindHelper getTISBindHelper() {
- return mTISBindHelper;
- }
-
@Override
public boolean isRecentsViewVisible() {
return getStateManager().getState().isRecentsViewVisible();
diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java
index 50d4dab8c0..c8e53ab7af 100644
--- a/quickstep/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java
@@ -90,6 +90,7 @@ import com.android.launcher3.util.ScreenOnTracker;
import com.android.launcher3.util.TraceHelper;
import com.android.quickstep.OverviewCommandHelper.CommandType;
import com.android.quickstep.fallback.window.RecentsWindowManager;
+import com.android.quickstep.OverviewComponentObserver.OverviewChangeListener;
import com.android.quickstep.fallback.window.RecentsWindowSwipeHandler;
import com.android.quickstep.inputconsumers.BubbleBarInputConsumer;
import com.android.quickstep.inputconsumers.OneHandedModeInputConsumer;
@@ -103,7 +104,6 @@ import com.android.quickstep.views.RecentsViewContainer;
import com.android.systemui.shared.recents.IOverviewProxy;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.statusbar.phone.BarTransitions;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.InputChannelCompat.InputEventReceiver;
import com.android.systemui.shared.system.InputConsumerController;
import com.android.systemui.shared.system.InputMonitorCompat;
@@ -124,7 +124,6 @@ import com.android.wm.shell.startingsurface.IStartingWindow;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
-import java.util.HashSet;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -150,8 +149,6 @@ public class TouchInteractionService extends Service {
private final WeakReference mTis;
- private final Set mOnOverviewTargetChangeListeners = new HashSet<>();
-
private TISBinder(TouchInteractionService tis) {
mTis = new WeakReference<>(tis);
}
@@ -498,28 +495,11 @@ public class TouchInteractionService extends Service {
tis -> tis.mDeviceState.setGestureBlockingTaskId(taskId));
}
- /** Registers a listener to be run on Overview Target updates. */
- public void registerOverviewTargetChangeListener(@NonNull Runnable listener) {
- mOnOverviewTargetChangeListeners.add(listener);
- }
-
- /** Unregisters an OverviewTargetChange listener. */
- public void unregisterOverviewTargetChangeListener(@NonNull Runnable listener) {
- mOnOverviewTargetChangeListeners.remove(listener);
- }
-
- protected void onOverviewTargetChange() {
- Set listeners = new HashSet<>(mOnOverviewTargetChangeListeners);
- for (Runnable listener : listeners) {
- listener.run();
- }
- }
-
/** Refreshes the current overview target. */
public void refreshOverviewTarget() {
executeForTouchInteractionService(tis -> {
tis.mAllAppsActionManager.onDestroy();
- tis.onOverviewTargetChange(tis.mOverviewComponentObserver.isHomeAndOverviewSame());
+ tis.onOverviewTargetChanged(tis.mOverviewComponentObserver.isHomeAndOverviewSame());
});
}
}
@@ -601,6 +581,7 @@ public class TouchInteractionService extends Service {
private final Runnable mUserUnlockedRunnable = this::onUserUnlocked;
private final ScreenOnTracker.ScreenOnListener mScreenOnListener = this::onScreenOnChanged;
+ private final OverviewChangeListener mOverviewChangeListener = this::onOverviewTargetChanged;
private final TaskbarNavButtonCallbacks mNavCallbacks = new TaskbarNavButtonCallbacks() {
@Override
@@ -612,9 +593,13 @@ public class TouchInteractionService extends Service {
public void onToggleOverview() {
mOverviewCommandHelper.addCommand(CommandType.TOGGLE);
}
+
+ @Override
+ public void onHideOverview() {
+ mOverviewCommandHelper.addCommand(CommandType.HIDE);
+ }
};
- private ActivityManagerWrapper mAM;
private OverviewCommandHelper mOverviewCommandHelper;
private OverviewComponentObserver mOverviewComponentObserver;
private InputConsumerController mInputConsumer;
@@ -650,7 +635,6 @@ public class TouchInteractionService extends Service {
// Initialize anything here that is needed in direct boot mode.
// Everything else should be initialized in onUserUnlocked() below.
mMainChoreographer = Choreographer.getInstance();
- mAM = ActivityManagerWrapper.getInstance();
mDeviceState = new RecentsAnimationDeviceState(this, true);
mRotationTouchHelper = mDeviceState.getRotationTouchHelper();
mAllAppsActionManager = new AllAppsActionManager(
@@ -723,7 +707,7 @@ public class TouchInteractionService extends Service {
Log.d(TAG, "onUserUnlocked: userId=" + getUserId()
+ " instance=" + System.identityHashCode(this));
mTaskAnimationManager = new TaskAnimationManager(this, mRecentsWindowManager);
- mOverviewComponentObserver = new OverviewComponentObserver(this, mDeviceState);
+ mOverviewComponentObserver = OverviewComponentObserver.INSTANCE.get(this);
mOverviewCommandHelper = new OverviewCommandHelper(this,
mOverviewComponentObserver, mTaskAnimationManager);
mResetGestureInputConsumer = new ResetGestureInputConsumer(
@@ -739,8 +723,8 @@ public class TouchInteractionService extends Service {
// new ModelPreload().start(this);
resetHomeBounceSeenOnQuickstepEnabledFirstTime();
- mOverviewComponentObserver.setOverviewChangeListener(this::onOverviewTargetChange);
- onOverviewTargetChange(mOverviewComponentObserver.isHomeAndOverviewSame());
+ mOverviewComponentObserver.addOverviewChangeListener(mOverviewChangeListener);
+ onOverviewTargetChanged(mOverviewComponentObserver.isHomeAndOverviewSame());
mTaskbarManager.onUserUnlocked();
}
@@ -765,7 +749,7 @@ public class TouchInteractionService extends Service {
}
}
- private void onOverviewTargetChange(boolean isHomeAndOverviewSame) {
+ private void onOverviewTargetChanged(boolean isHomeAndOverviewSame) {
mAllAppsActionManager.setHomeAndOverviewSame(isHomeAndOverviewSame);
RecentsViewContainer newOverviewContainer =
mOverviewComponentObserver.getContainerInterface().getCreatedContainer();
@@ -777,7 +761,6 @@ public class TouchInteractionService extends Service {
mTaskbarManager.setRecentsViewContainer(newOverviewContainer);
}
}
- mTISBinder.onOverviewTargetChange();
}
private PendingIntent createAllAppsPendingIntent() {
@@ -796,7 +779,7 @@ public class TouchInteractionService extends Service {
if (LockedUserState.get(this).isUserUnlocked()) {
long systemUiStateFlags = mDeviceState.getSystemUiStateFlags();
SystemUiProxy.INSTANCE.get(this).setLastSystemUiStateFlags(systemUiStateFlags);
- mOverviewComponentObserver.onSystemUiStateChanged();
+ mOverviewComponentObserver.setHomeDisabled(mDeviceState.isHomeDisabled());
mTaskbarManager.onSystemUiFlagsChanged(systemUiStateFlags);
mTaskAnimationManager.onSystemUiFlagsChanged(lastSysUIFlags, systemUiStateFlags);
}
@@ -817,7 +800,8 @@ public class TouchInteractionService extends Service {
sIsInitialized = false;
if (LockedUserState.get(this).isUserUnlocked()) {
mInputConsumer.unregisterInputConsumer();
- mOverviewComponentObserver.onDestroy();
+ mOverviewComponentObserver.setHomeDisabled(false);
+ mOverviewComponentObserver.removeOverviewChangeListener(mOverviewChangeListener);
}
disposeEventHandlers("TouchInteractionService onDestroy()");
mDeviceState.destroy();
diff --git a/quickstep/src/com/android/quickstep/dagger/QuickstepBaseAppComponent.java b/quickstep/src/com/android/quickstep/dagger/QuickstepBaseAppComponent.java
index b2670e835c..aae9ebe33a 100644
--- a/quickstep/src/com/android/quickstep/dagger/QuickstepBaseAppComponent.java
+++ b/quickstep/src/com/android/quickstep/dagger/QuickstepBaseAppComponent.java
@@ -19,6 +19,7 @@ package com.android.quickstep.dagger;
import com.android.launcher3.dagger.LauncherAppComponent;
import com.android.launcher3.dagger.LauncherBaseAppComponent;
import com.android.launcher3.model.WellbeingModel;
+import com.android.quickstep.OverviewComponentObserver;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.util.AsyncClockEventDelegate;
@@ -37,4 +38,6 @@ public interface QuickstepBaseAppComponent extends LauncherBaseAppComponent {
AsyncClockEventDelegate getAsyncClockEventDelegate();
SystemUiProxy getSystemUiProxy();
+
+ OverviewComponentObserver getOverviewComponentObserver();
}
diff --git a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt
index f4c8c99b3b..da0c517373 100644
--- a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt
+++ b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt
@@ -321,10 +321,6 @@ class RecentsWindowManager(context: Context) :
return taskbarUIController
}
- override fun getTISBindHelper(): TISBindHelper {
- return tisBindHelper
- }
-
fun registerInitListener(onInitListener: Predicate) {
this.onInitListener = onInitListener
}
diff --git a/quickstep/src/com/android/quickstep/interaction/AllSetActivity.java b/quickstep/src/com/android/quickstep/interaction/AllSetActivity.java
index 99c2c1c52b..4995e77564 100644
--- a/quickstep/src/com/android/quickstep/interaction/AllSetActivity.java
+++ b/quickstep/src/com/android/quickstep/interaction/AllSetActivity.java
@@ -70,6 +70,8 @@ import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.taskbar.TaskbarManager;
import com.android.launcher3.util.Executors;
import com.android.quickstep.GestureState;
+import com.android.quickstep.OverviewComponentObserver;
+import com.android.quickstep.OverviewComponentObserver.OverviewChangeListener;
import com.android.quickstep.TouchInteractionService.TISBinder;
import com.android.quickstep.util.LottieAnimationColorUtils;
import com.android.quickstep.util.TISBindHelper;
@@ -121,7 +123,7 @@ public class AllSetActivity extends Activity {
private TextView mHintView;
- private final Runnable mOverviewTargetChangeRunnable = this::onOverviewTargetChanged;
+ private final OverviewChangeListener mOverviewChangeListener = this::onOverviewTargetChange;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -197,6 +199,9 @@ public class AllSetActivity extends Activity {
setUpBackgroundAnimation(getDP().isTablet);
getIDP().addOnChangeListener(mOnIDPChangeListener);
+
+ OverviewComponentObserver.INSTANCE.get(this)
+ .addOverviewChangeListener(mOverviewChangeListener);
}
private InvariantDeviceProfile getIDP() {
@@ -286,7 +291,6 @@ public class AllSetActivity extends Activity {
private void onTISConnected(TISBinder binder) {
setSetupUIVisible(isResumed());
binder.setSwipeUpProxy(isResumed() ? this::createSwipeUpProxy : null);
- binder.registerOverviewTargetChangeListener(mOverviewTargetChangeRunnable);
binder.preloadOverviewForSUWAllSet();
TaskbarManager taskbarManager = binder.getTaskbarManager();
if (taskbarManager != null) {
@@ -294,11 +298,10 @@ public class AllSetActivity extends Activity {
}
}
- private void onOverviewTargetChanged() {
+ private void onOverviewTargetChange(boolean isHomeAndOverviewSame) {
TISBinder binder = mTISBindHelper.getBinder();
if (binder != null) {
binder.preloadOverviewForSUWAllSet();
- binder.unregisterOverviewTargetChangeListener(mOverviewTargetChangeRunnable);
}
}
@@ -318,7 +321,6 @@ public class AllSetActivity extends Activity {
if (binder != null) {
setSetupUIVisible(false);
binder.setSwipeUpProxy(null);
- binder.unregisterOverviewTargetChangeListener(mOverviewTargetChangeRunnable);
}
}
@@ -346,6 +348,8 @@ public class AllSetActivity extends Activity {
if (!isChangingConfigurations()) {
dispatchLauncherAnimStartEnd();
}
+ OverviewComponentObserver.INSTANCE.get(this)
+ .removeOverviewChangeListener(mOverviewChangeListener);
}
private AnimatedFloat createSwipeUpProxy(GestureState state) {
diff --git a/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java b/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
index e462706c98..1c4e7a7eb7 100644
--- a/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
@@ -86,10 +86,8 @@ abstract class SwipeUpGestureTutorialController extends TutorialController {
SwipeUpGestureTutorialController(TutorialFragment tutorialFragment, TutorialType tutorialType) {
super(tutorialFragment, tutorialType);
RecentsAnimationDeviceState deviceState = new RecentsAnimationDeviceState(mContext);
- OverviewComponentObserver observer = new OverviewComponentObserver(mContext, deviceState);
mTaskViewSwipeUpAnimation = new ViewSwipeUpAnimation(mContext, deviceState,
- new GestureState(observer, -1));
- observer.onDestroy();
+ new GestureState(OverviewComponentObserver.INSTANCE.get(mContext), -1));
deviceState.destroy();
DeviceProfile dp = InvariantDeviceProfile.INSTANCE.get(mContext)
diff --git a/quickstep/src/com/android/quickstep/util/ContextualSearchInvoker.kt b/quickstep/src/com/android/quickstep/util/ContextualSearchInvoker.kt
index 3be8ea6c6b..d00a39cd8c 100644
--- a/quickstep/src/com/android/quickstep/util/ContextualSearchInvoker.kt
+++ b/quickstep/src/com/android/quickstep/util/ContextualSearchInvoker.kt
@@ -34,7 +34,6 @@ import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_LAUN
import com.android.quickstep.BaseContainerInterface
import com.android.quickstep.DeviceConfigWrapper
import com.android.quickstep.OverviewComponentObserver
-import com.android.quickstep.RecentsAnimationDeviceState
import com.android.quickstep.SystemUiProxy
import com.android.quickstep.TopTaskTracker
import com.android.quickstep.views.RecentsView
@@ -162,7 +161,11 @@ internal constructor(
statsLogManager.logger().log(LAUNCHER_LAUNCH_OMNI_FAILED_NOT_AVAILABLE)
return false
}
-
+ if (isFakeLandscape()) {
+ // TODO (b/383421642): Fake landscape is to be removed in 25Q3 and this entire block
+ // can be removed when that happens.
+ return false
+ }
return true
}
@@ -198,6 +201,13 @@ internal constructor(
return true
}
+ private fun isFakeLandscape(): Boolean =
+ getRecentsContainerInterface()
+ ?.getCreatedContainer()
+ ?.getOverviewPanel>()
+ ?.getPagedOrientationHandler()
+ ?.isLayoutNaturalToLauncher == false
+
private fun isInSplitscreen(): Boolean {
return topTaskTracker.getRunningSplitTaskIds().isNotEmpty()
}
@@ -212,14 +222,7 @@ internal constructor(
@VisibleForTesting
fun getRecentsContainerInterface(): BaseContainerInterface<*, *>? {
- val rads = RecentsAnimationDeviceState(context)
- val observer = OverviewComponentObserver(context, rads)
- try {
- return observer.containerInterface
- } finally {
- observer.onDestroy()
- rads.destroy()
- }
+ return OverviewComponentObserver.INSTANCE.get(context).containerInterface
}
/**
diff --git a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
index 1eb91ae047..c524286c3e 100644
--- a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
+++ b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
@@ -583,10 +583,8 @@ public class SplitSelectStateController {
/**
* Init {@code SplitFromDesktopController}
*/
- public void initSplitFromDesktopController(QuickstepLauncher launcher,
- OverviewComponentObserver overviewComponentObserver) {
- initSplitFromDesktopController(
- new SplitFromDesktopController(launcher, overviewComponentObserver));
+ public void initSplitFromDesktopController(QuickstepLauncher launcher) {
+ initSplitFromDesktopController(new SplitFromDesktopController(launcher));
}
@VisibleForTesting
@@ -853,10 +851,9 @@ public class SplitSelectStateController {
private DesktopSplitSelectListenerImpl mSplitSelectListener;
private Drawable mAppIcon;
- public SplitFromDesktopController(QuickstepLauncher launcher,
- OverviewComponentObserver overviewComponentObserver) {
+ public SplitFromDesktopController(QuickstepLauncher launcher) {
mLauncher = launcher;
- mOverviewComponentObserver = overviewComponentObserver;
+ mOverviewComponentObserver = OverviewComponentObserver.INSTANCE.get(launcher);
mSplitPlaceholderSize = mLauncher.getResources().getDimensionPixelSize(
R.dimen.split_placeholder_size);
mSplitPlaceholderInset = mLauncher.getResources().getDimensionPixelSize(
diff --git a/quickstep/src/com/android/quickstep/util/SplitWithKeyboardShortcutController.java b/quickstep/src/com/android/quickstep/util/SplitWithKeyboardShortcutController.java
index 744c08cc3c..0ba408399e 100644
--- a/quickstep/src/com/android/quickstep/util/SplitWithKeyboardShortcutController.java
+++ b/quickstep/src/com/android/quickstep/util/SplitWithKeyboardShortcutController.java
@@ -63,12 +63,11 @@ public class SplitWithKeyboardShortcutController {
public SplitWithKeyboardShortcutController(QuickstepLauncher launcher,
SplitSelectStateController controller,
- OverviewComponentObserver overviewComponentObserver,
RecentsAnimationDeviceState deviceState) {
mLauncher = launcher;
mController = controller;
mDeviceState = deviceState;
- mOverviewComponentObserver = overviewComponentObserver;
+ mOverviewComponentObserver = OverviewComponentObserver.INSTANCE.get(launcher);
mSplitPlaceholderSize = mLauncher.getResources().getDimensionPixelSize(
R.dimen.split_placeholder_size);
@@ -106,7 +105,6 @@ public class SplitWithKeyboardShortcutController {
}
public void onDestroy() {
- mOverviewComponentObserver.onDestroy();
mDeviceState.destroy();
}
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index ae906de306..6752775be3 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -3900,25 +3900,40 @@ public abstract class RecentsView<
: distanceFromDismissedTask;
// Set timings based on if user is initiating splitscreen on the focused task,
// or splitting/dismissing some other task.
- float animationStartProgress = isSlidingTasks
- ? Utilities.boundToRange(
- splitTimings.getGridSlideStartOffset()
- + (splitTimings.getGridSlideStaggerOffset()
- * staggerColumn),
- 0f,
- dismissTranslationInterpolationEnd)
- : Utilities.boundToRange(
- INITIAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
- + ADDITIONAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
- * staggerColumn, 0f, dismissTranslationInterpolationEnd);
- float animationEndProgress = isSlidingTasks
- ? Utilities.boundToRange(
- splitTimings.getGridSlideStartOffset()
- + (splitTimings.getGridSlideStaggerOffset() * staggerColumn)
- + splitTimings.getGridSlideDurationOffset(),
- 0f,
- dismissTranslationInterpolationEnd)
- : dismissTranslationInterpolationEnd;
+ final float animationStartProgress;
+ if (isSlidingTasks) {
+ float slidingStartOffset = splitTimings.getGridSlideStartOffset()
+ + (splitTimings.getGridSlideStaggerOffset() * staggerColumn);
+ if (areAllDesktopTasksDismissed) {
+ animationStartProgress = Utilities.boundToRange(
+ slidingStartOffset
+ + splitTimings.getDesktopFadeSplitAnimationEndOffset(),
+ 0f,
+ dismissTranslationInterpolationEnd);
+ } else {
+ animationStartProgress = Utilities.boundToRange(
+ slidingStartOffset,
+ 0f,
+ dismissTranslationInterpolationEnd);
+ }
+ } else {
+ animationStartProgress = Utilities.boundToRange(
+ INITIAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
+ + ADDITIONAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
+ * staggerColumn, 0f, dismissTranslationInterpolationEnd);
+ }
+
+ final float animationEndProgress;
+ if (isSlidingTasks && taskView != nextFocusedTaskView) {
+ animationEndProgress = Utilities.boundToRange(
+ splitTimings.getGridSlideStartOffset()
+ + (splitTimings.getGridSlideStaggerOffset() * staggerColumn)
+ + splitTimings.getGridSlideDurationOffset(),
+ 0f,
+ dismissTranslationInterpolationEnd);
+ } else {
+ animationEndProgress = dismissTranslationInterpolationEnd;
+ }
Interpolator dismissInterpolator = isSlidingTasks ? EMPHASIZED : LINEAR;
@@ -3930,7 +3945,6 @@ public abstract class RecentsView<
clampToProgress(LINEAR, animationStartProgress,
dismissTranslationInterpolationEnd));
primaryTranslation += dismissedTaskWidth;
- animationEndProgress = dismissTranslationInterpolationEnd;
float secondaryTranslation = -mTaskGridVerticalDiff;
if (!nextFocusedTaskFromTop) {
secondaryTranslation -= mTopBottomRowHeightDiff;
@@ -3958,11 +3972,6 @@ public abstract class RecentsView<
startTranslation = isTaskViewVisible(taskView) ? 0
: finalTranslation + (mIsRtl ? -mLastComputedTaskSize.right
: mLastComputedTaskSize.right);
- animationStartProgress = Utilities.boundToRange(
- animationStartProgress
- + splitTimings.getDesktopFadeSplitAnimationEndOffset(),
- 0f,
- dismissTranslationInterpolationEnd);
}
Animator dismissAnimator = ObjectAnimator.ofFloat(taskView,
taskView.getPrimaryDismissTranslationProperty(),
diff --git a/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java b/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java
index b04753b3b8..a1d22fe494 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java
@@ -25,7 +25,6 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.launcher3.BaseActivity;
@@ -34,7 +33,6 @@ import com.android.launcher3.statehandlers.DesktopVisibilityController;
import com.android.launcher3.taskbar.TaskbarUIController;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.ScrimView;
-import com.android.quickstep.util.TISBindHelper;
/**
* Interface to be implemented by the parent view of RecentsView
@@ -217,6 +215,4 @@ public interface RecentsViewContainer extends ActivityContext {
void setTaskbarUIController(@Nullable TaskbarUIController taskbarUIController);
@Nullable TaskbarUIController getTaskbarUIController();
-
- @NonNull TISBindHelper getTISBindHelper();
}
diff --git a/quickstep/src_protolog/com/android/launcher3/util/StateManagerProtoLogProxy.java b/quickstep/src_protolog/com/android/launcher3/util/StateManagerProtoLogProxy.java
index bc989dc5aa..c319cb1378 100644
--- a/quickstep/src_protolog/com/android/launcher3/util/StateManagerProtoLogProxy.java
+++ b/quickstep/src_protolog/com/android/launcher3/util/StateManagerProtoLogProxy.java
@@ -18,6 +18,7 @@ package com.android.launcher3.util;
import static com.android.launcher3.Flags.enableStateManagerProtoLog;
import static com.android.quickstep.util.QuickstepProtoLogGroup.LAUNCHER_STATE_MANAGER;
+import static com.android.quickstep.util.QuickstepProtoLogGroup.isProtoLogInitialized;
import androidx.annotation.NonNull;
@@ -30,7 +31,7 @@ public class StateManagerProtoLogProxy {
public static void logGoToState(
@NonNull Object fromState, @NonNull Object toState, @NonNull String trace) {
- if (!enableStateManagerProtoLog()) return;
+ if (!enableStateManagerProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(LAUNCHER_STATE_MANAGER,
"StateManager.goToState: fromState: %s, toState: %s, partial trace:\n%s",
fromState,
@@ -40,7 +41,7 @@ public class StateManagerProtoLogProxy {
public static void logCreateAtomicAnimation(
@NonNull Object fromState, @NonNull Object toState, @NonNull String trace) {
- if (!enableStateManagerProtoLog()) return;
+ if (!enableStateManagerProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(LAUNCHER_STATE_MANAGER, "StateManager.createAtomicAnimation: "
+ "fromState: %s, toState: %s, partial trace:\n%s",
fromState,
@@ -49,17 +50,17 @@ public class StateManagerProtoLogProxy {
}
public static void logOnStateTransitionStart(@NonNull Object state) {
- if (!enableStateManagerProtoLog()) return;
+ if (!enableStateManagerProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(LAUNCHER_STATE_MANAGER, "StateManager.onStateTransitionStart: state: %s", state);
}
public static void logOnStateTransitionEnd(@NonNull Object state) {
- if (!enableStateManagerProtoLog()) return;
+ if (!enableStateManagerProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(LAUNCHER_STATE_MANAGER, "StateManager.onStateTransitionEnd: state: %s", state);
}
public static void logCancelAnimation(boolean animationOngoing, @NonNull String trace) {
- if (!enableStateManagerProtoLog()) return;
+ if (!enableStateManagerProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(LAUNCHER_STATE_MANAGER,
"StateManager.cancelAnimation: animation ongoing: %b, partial trace:\n%s",
animationOngoing,
diff --git a/quickstep/src_protolog/com/android/quickstep/util/ActiveGestureProtoLogProxy.java b/quickstep/src_protolog/com/android/quickstep/util/ActiveGestureProtoLogProxy.java
index f25f6f4ab7..be1a4e8c3c 100644
--- a/quickstep/src_protolog/com/android/quickstep/util/ActiveGestureProtoLogProxy.java
+++ b/quickstep/src_protolog/com/android/quickstep/util/ActiveGestureProtoLogProxy.java
@@ -37,6 +37,7 @@ import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent
import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.SET_END_TARGET;
import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.START_RECENTS_ANIMATION;
import static com.android.quickstep.util.QuickstepProtoLogGroup.ACTIVE_GESTURE_LOG;
+import static com.android.quickstep.util.QuickstepProtoLogGroup.isProtoLogInitialized;
import android.graphics.Point;
import android.graphics.RectF;
@@ -62,7 +63,7 @@ public class ActiveGestureProtoLogProxy {
public static void logLauncherDestroyed() {
ActiveGestureLog.INSTANCE.addLog("Launcher destroyed", LAUNCHER_DESTROYED);
- if (!enableActiveGestureProtoLog()) return;
+ if (isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "Launcher destroyed");
}
@@ -70,7 +71,7 @@ public class ActiveGestureProtoLogProxy {
ActiveGestureLog.INSTANCE.addLog(
/* event= */ "AbsSwipeUpHandler.onRecentsAnimationCanceled",
/* gestureEvent= */ CANCEL_RECENTS_ANIMATION);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "AbsSwipeUpHandler.onRecentsAnimationCanceled");
}
@@ -78,7 +79,7 @@ public class ActiveGestureProtoLogProxy {
ActiveGestureLog.INSTANCE.addLog(
/* event= */ "RecentsAnimationCallbacks.onAnimationFinished",
ON_FINISH_RECENTS_ANIMATION);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "AbsSwipeUpHandler.onAnimationFinished");
}
@@ -86,27 +87,27 @@ public class ActiveGestureProtoLogProxy {
ActiveGestureLog.INSTANCE.addLog(
"AbsSwipeUpHandler.cancelCurrentAnimation",
ActiveGestureErrorDetector.GestureEvent.CANCEL_CURRENT_ANIMATION);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "AbsSwipeUpHandler.cancelCurrentAnimation");
}
public static void logAbsSwipeUpHandlerOnTasksAppeared() {
ActiveGestureLog.INSTANCE.addLog("AbsSwipeUpHandler.onTasksAppeared: "
+ "force finish recents animation complete; clearing state callback.");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "AbsSwipeUpHandler.onTasksAppeared: "
+ "force finish recents animation complete; clearing state callback.");
}
public static void logHandOffAnimation() {
ActiveGestureLog.INSTANCE.addLog("AbsSwipeUpHandler.handOffAnimation");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "AbsSwipeUpHandler.handOffAnimation");
}
public static void logFinishRecentsAnimationOnTasksAppeared() {
ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimationOnTasksAppeared");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "finishRecentsAnimationOnTasksAppeared");
}
@@ -114,14 +115,14 @@ public class ActiveGestureProtoLogProxy {
ActiveGestureLog.INSTANCE.addLog(
/* event= */ "RecentsAnimationCallbacks.onAnimationCanceled",
/* gestureEvent= */ ON_CANCEL_RECENTS_ANIMATION);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "RecentsAnimationCallbacks.onAnimationCanceled");
}
public static void logRecentsAnimationCallbacksOnTasksAppeared() {
ActiveGestureLog.INSTANCE.addLog("RecentsAnimationCallbacks.onTasksAppeared",
ActiveGestureErrorDetector.GestureEvent.TASK_APPEARED);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "RecentsAnimationCallbacks.onTasksAppeared");
}
@@ -129,39 +130,39 @@ public class ActiveGestureProtoLogProxy {
ActiveGestureLog.INSTANCE.addLog(
/* event= */ "TaskAnimationManager.startRecentsAnimation",
/* gestureEvent= */ START_RECENTS_ANIMATION);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "TaskAnimationManager.startRecentsAnimation");
}
public static void logLaunchingSideTaskFailed() {
ActiveGestureLog.INSTANCE.addLog("Unable to launch side task (no recents)");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "Unable to launch side task (no recents)");
}
public static void logContinueRecentsAnimation() {
ActiveGestureLog.INSTANCE.addLog(/* event= */ "continueRecentsAnimation");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "continueRecentsAnimation");
}
public static void logCleanUpRecentsAnimationSkipped() {
ActiveGestureLog.INSTANCE.addLog(
/* event= */ "cleanUpRecentsAnimation skipped due to wrong callbacks");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "cleanUpRecentsAnimation skipped due to wrong callbacks");
}
public static void logCleanUpRecentsAnimation() {
ActiveGestureLog.INSTANCE.addLog(/* event= */ "cleanUpRecentsAnimation");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "cleanUpRecentsAnimation");
}
public static void logOnInputEventUserLocked() {
ActiveGestureLog.INSTANCE.addLog(
"TIS.onInputEvent: Cannot process input event: user is locked");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"TIS.onInputEvent: Cannot process input event: user is locked");
}
@@ -171,7 +172,7 @@ public class ActiveGestureProtoLogProxy {
+ "but a previously-requested recents animation hasn't started. "
+ "Ignoring all following motion events.",
RECENTS_ANIMATION_START_PENDING);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "TIS.onMotionEvent: A new gesture has been started, "
+ "but a previously-requested recents animation hasn't started. "
+ "Ignoring all following motion events.");
@@ -180,53 +181,53 @@ public class ActiveGestureProtoLogProxy {
public static void logOnInputEventThreeButtonNav() {
ActiveGestureLog.INSTANCE.addLog("TIS.onInputEvent: Cannot process input event: "
+ "using 3-button nav and event is not a trackpad event");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "TIS.onInputEvent: Cannot process input event: "
+ "using 3-button nav and event is not a trackpad event");
}
public static void logPreloadRecentsAnimation() {
ActiveGestureLog.INSTANCE.addLog("preloadRecentsAnimation");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "preloadRecentsAnimation");
}
public static void logRecentTasksMissing() {
ActiveGestureLog.INSTANCE.addLog("Null mRecentTasks", RECENT_TASKS_MISSING);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "Null mRecentTasks");
}
public static void logExecuteHomeCommand() {
ActiveGestureLog.INSTANCE.addLog("OverviewCommandHelper.executeCommand(HOME)");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "OverviewCommandHelper.executeCommand(HOME)");
}
public static void logFinishRecentsAnimationCallback() {
ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimation-callback");
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "finishRecentsAnimation-callback");
}
public static void logOnScrollerAnimationAborted() {
ActiveGestureLog.INSTANCE.addLog("scroller animation aborted",
ActiveGestureErrorDetector.GestureEvent.SCROLLER_ANIMATION_ABORTED);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "scroller animation aborted");
}
public static void logInputConsumerBecameActive(@NonNull String consumerName) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"%s became active", consumerName));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "%s became active", consumerName);
}
public static void logTaskLaunchFailed(int launchedTaskId) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"Launch failed, task (id=%d) finished mid transition", launchedTaskId));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"Launch failed, task (id=%d) finished mid transition", launchedTaskId);
}
@@ -234,7 +235,7 @@ public class ActiveGestureProtoLogProxy {
public static void logOnPageEndTransition(int nextPageIndex) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"onPageEndTransition: current page index updated: %d", nextPageIndex));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"onPageEndTransition: current page index updated: %d", nextPageIndex);
}
@@ -244,7 +245,7 @@ public class ActiveGestureProtoLogProxy {
"Quick switch from home fallback case: The TaskView at index %d is missing.",
taskIndex),
QUICK_SWITCH_FROM_HOME_FALLBACK);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"Quick switch from home fallback case: The TaskView at index %d is missing.",
taskIndex);
@@ -255,7 +256,7 @@ public class ActiveGestureProtoLogProxy {
"Quick switch from home failed: TaskViews at indices %d and 0 are missing.",
taskIndex),
QUICK_SWITCH_FROM_HOME_FAILED);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"Quick switch from home failed: TaskViews at indices %d and 0 are missing.",
taskIndex);
@@ -265,42 +266,42 @@ public class ActiveGestureProtoLogProxy {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"finishRecentsAnimation: %b", toRecents),
/* gestureEvent= */ FINISH_RECENTS_ANIMATION);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "finishRecentsAnimation: %b", toRecents);
}
public static void logSetEndTarget(@NonNull String target) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"setEndTarget %s", target), /* gestureEvent= */ SET_END_TARGET);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "setEndTarget %s", target);
}
public static void logStartHomeIntent(@NonNull String reason) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"OverviewComponentObserver.startHomeIntent: %s", reason));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "OverviewComponentObserver.startHomeIntent: %s", reason);
}
public static void logRunningTaskPackage(@NonNull String packageName) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"Current running task package name=%s", packageName));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "Current running task package name=%s", packageName);
}
public static void logSysuiStateFlags(@NonNull String stateFlags) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"Current SystemUi state flags=%s", stateFlags));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "Current SystemUi state flags=%s", stateFlags);
}
public static void logSetInputConsumer(@NonNull String consumerName, @NonNull String reason) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"setInputConsumer: %s. reason(s):%s", consumerName, reason));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"setInputConsumer: %s. reason(s):%s", consumerName, reason);
}
@@ -312,7 +313,7 @@ public class ActiveGestureProtoLogProxy {
+ "one (%s) was excluded from recents",
otherTaskPackage,
runningTaskPackage));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"Changing active task to %s because the previous task running on top of this "
+ "one (%s) was excluded from recents",
@@ -328,7 +329,7 @@ public class ActiveGestureProtoLogProxy {
/* gestureEvent= */ action == ACTION_DOWN
? MOTION_DOWN
: MOTION_UP);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"onMotionEvent(%d, %d): %s, %s", x, y, actionString, classification);
}
@@ -341,7 +342,7 @@ public class ActiveGestureProtoLogProxy {
classification,
pointerCount),
MOTION_MOVE);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"onMotionEvent: %s, %s, pointerCount: %d", action, classification, pointerCount);
}
@@ -350,7 +351,7 @@ public class ActiveGestureProtoLogProxy {
@NonNull String action, @NonNull String classification) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"onMotionEvent: %s, %s", action, classification));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "onMotionEvent: %s, %s", action, classification);
}
@@ -362,7 +363,7 @@ public class ActiveGestureProtoLogProxy {
startNavMode,
currentNavMode),
NAVIGATION_MODE_SWITCHED);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"TIS.onInputEvent: Navigation mode switched mid-gesture (%s -> %s); "
+ "cancelling gesture.",
@@ -373,7 +374,7 @@ public class ActiveGestureProtoLogProxy {
public static void logUnknownInputEvent(@NonNull String event) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"TIS.onInputEvent: Cannot process input event: received unknown event %s", event));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"TIS.onInputEvent: Cannot process input event: received unknown event %s", event);
}
@@ -381,14 +382,14 @@ public class ActiveGestureProtoLogProxy {
public static void logFinishRunningRecentsAnimation(boolean toHome) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"finishRunningRecentsAnimation: %b", toHome));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "finishRunningRecentsAnimation: %b", toHome);
}
public static void logOnRecentsAnimationStartCancelled() {
ActiveGestureLog.INSTANCE.addLog("RecentsAnimationCallbacks.onAnimationStart (canceled): 0",
/* gestureEvent= */ ON_START_RECENTS_ANIMATION);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "RecentsAnimationCallbacks.onAnimationStart (canceled): 0");
}
@@ -396,7 +397,7 @@ public class ActiveGestureProtoLogProxy {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"RecentsAnimationCallbacks.onAnimationStart (canceled): %d", appCount),
/* gestureEvent= */ ON_START_RECENTS_ANIMATION);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"RecentsAnimationCallbacks.onAnimationStart (canceled): %d", appCount);
}
@@ -406,7 +407,7 @@ public class ActiveGestureProtoLogProxy {
"TaskAnimationManager.startRecentsAnimation(%s): "
+ "Setting mRecentsAnimationStartPending = false",
callback));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"TaskAnimationManager.startRecentsAnimation(%s): "
+ "Setting mRecentsAnimationStartPending = false",
@@ -418,7 +419,7 @@ public class ActiveGestureProtoLogProxy {
"TaskAnimationManager.startRecentsAnimation: "
+ "Setting mRecentsAnimationStartPending = %b",
value));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"TaskAnimationManager.startRecentsAnimation: "
+ "Setting mRecentsAnimationStartPending = %b",
@@ -428,28 +429,28 @@ public class ActiveGestureProtoLogProxy {
public static void logLaunchingSideTask(int taskId) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"Launching side task id=%d", taskId));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "Launching side task id=%d", taskId);
}
public static void logOnInputEventActionDown(@NonNull ActiveGestureLog.CompoundString reason) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"TIS.onMotionEvent: ").append(reason));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "TIS.onMotionEvent: %s", reason.toString());
}
public static void logStartNewTask(@NonNull ActiveGestureLog.CompoundString tasks) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"Launching task: ").append(tasks));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "TIS.onMotionEvent: %s", tasks.toString());
}
public static void logMotionPauseDetectorEvent(@NonNull ActiveGestureLog.CompoundString event) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"MotionPauseDetector: ").append(event));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "MotionPauseDetector: %s", event.toString());
}
@@ -457,7 +458,7 @@ public class ActiveGestureProtoLogProxy {
@NonNull ActiveGestureLog.CompoundString reason) {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"handleTaskAppeared check failed: ").append(reason));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "handleTaskAppeared check failed: %s", reason.toString());
}
@@ -469,7 +470,7 @@ public class ActiveGestureProtoLogProxy {
@NonNull String string,
@Nullable ActiveGestureErrorDetector.GestureEvent gestureEvent) {
ActiveGestureLog.INSTANCE.addLog(string, gestureEvent);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "%s", string);
}
@@ -477,7 +478,7 @@ public class ActiveGestureProtoLogProxy {
ActiveGestureLog.INSTANCE.addLog(new ActiveGestureLog.CompoundString(
"onSettledOnEndTarget %s", endTarget),
/* gestureEvent= */ ON_SETTLED_ON_END_TARGET);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG, "onSettledOnEndTarget %s", endTarget);
}
@@ -488,7 +489,7 @@ public class ActiveGestureProtoLogProxy {
velocityY,
angle),
velocityX == 0 && velocityY == 0 ? INVALID_VELOCITY_ON_SWIPE_UP : null);
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"calculateEndTarget: velocities=(x=%fdp/ms, y=%fdp/ms), angle=%f",
velocityX,
@@ -501,7 +502,7 @@ public class ActiveGestureProtoLogProxy {
"Forcefully finishing recents animation: Unexpected task appeared id=%d, pkg=%s",
taskId,
packageName));
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"Forcefully finishing recents animation: Unexpected task appeared id=%d, pkg=%s",
taskId,
@@ -511,7 +512,7 @@ public class ActiveGestureProtoLogProxy {
public static void logCreateTouchRegionForDisplay(int displayRotation,
@NonNull Point displaySize, @NonNull RectF swipeRegion, @NonNull RectF ohmRegion,
int gesturalHeight, int largerGesturalHeight, @NonNull String reason) {
- if (!enableActiveGestureProtoLog()) return;
+ if (!enableActiveGestureProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(ACTIVE_GESTURE_LOG,
"OrientationTouchTransformer.createRegionForDisplay: "
+ "dispRot=%d, dispSize=%s, swipeRegion=%s, ohmRegion=%s, "
diff --git a/quickstep/src_protolog/com/android/quickstep/util/QuickstepProtoLogGroup.java b/quickstep/src_protolog/com/android/quickstep/util/QuickstepProtoLogGroup.java
index bb02a112d2..2327cfcf1d 100644
--- a/quickstep/src_protolog/com/android/quickstep/util/QuickstepProtoLogGroup.java
+++ b/quickstep/src_protolog/com/android/quickstep/util/QuickstepProtoLogGroup.java
@@ -16,6 +16,8 @@
package com.android.quickstep.util;
+import android.util.Log;
+
import androidx.annotation.NonNull;
import com.android.internal.protolog.ProtoLog;
@@ -26,7 +28,7 @@ import java.util.UUID;
/** Enums used to interface with the ProtoLog API. */
public enum QuickstepProtoLogGroup implements IProtoLogGroup {
- ACTIVE_GESTURE_LOG(true, true, false, "ActiveGestureLog"),
+ ACTIVE_GESTURE_LOG(true, true, Constants.DEBUG_ACTIVE_GESTURE, "ActiveGestureLog"),
RECENTS_WINDOW(true, true, Constants.DEBUG_RECENTS_WINDOW, "RecentsWindow"),
LAUNCHER_STATE_MANAGER(true, true, Constants.DEBUG_STATE_MANAGER, "LauncherStateManager");
@@ -35,7 +37,23 @@ public enum QuickstepProtoLogGroup implements IProtoLogGroup {
private volatile boolean mLogToLogcat;
private final @NonNull String mTag;
+ public static boolean isProtoLogInitialized() {
+ if (!Variables.sIsInitialized) {
+ Log.w(Constants.TAG,
+ "Attempting to log to ProtoLog before initializing it.",
+ new IllegalStateException());
+ }
+ return Variables.sIsInitialized;
+ }
+
public static void initProtoLog() {
+ if (Variables.sIsInitialized) {
+ Log.e(Constants.TAG,
+ "Attempting to re-initialize ProtoLog.", new IllegalStateException());
+ return;
+ }
+ Log.i(Constants.TAG, "Initializing ProtoLog.");
+ Variables.sIsInitialized = true;
ProtoLog.init(QuickstepProtoLogGroup.values());
}
@@ -95,8 +113,16 @@ public enum QuickstepProtoLogGroup implements IProtoLogGroup {
this.mLogToLogcat = logToLogcat;
}
+ private static final class Variables {
+
+ private static boolean sIsInitialized = false;
+ }
+
private static final class Constants {
+ private static final String TAG = "QuickstepProtoLogGroup";
+
+ private static final boolean DEBUG_ACTIVE_GESTURE = false;
private static final boolean DEBUG_RECENTS_WINDOW = false;
private static final boolean DEBUG_STATE_MANAGER = true; // b/279059025, b/325463989
diff --git a/quickstep/src_protolog/com/android/quickstep/util/RecentsWindowProtoLogProxy.java b/quickstep/src_protolog/com/android/quickstep/util/RecentsWindowProtoLogProxy.java
index f54ad67697..2c9ae33ab6 100644
--- a/quickstep/src_protolog/com/android/quickstep/util/RecentsWindowProtoLogProxy.java
+++ b/quickstep/src_protolog/com/android/quickstep/util/RecentsWindowProtoLogProxy.java
@@ -18,6 +18,7 @@ package com.android.quickstep.util;
import static com.android.launcher3.Flags.enableRecentsWindowProtoLog;
import static com.android.quickstep.util.QuickstepProtoLogGroup.RECENTS_WINDOW;
+import static com.android.quickstep.util.QuickstepProtoLogGroup.isProtoLogInitialized;
import androidx.annotation.NonNull;
@@ -36,17 +37,17 @@ import com.android.internal.protolog.common.IProtoLogGroup;
public class RecentsWindowProtoLogProxy {
public static void logOnStateSetStart(@NonNull String stateName) {
- if (!enableRecentsWindowProtoLog()) return;
+ if (!enableRecentsWindowProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(RECENTS_WINDOW, "onStateSetStart: %s", stateName);
}
public static void logOnStateSetEnd(@NonNull String stateName) {
- if (!enableRecentsWindowProtoLog()) return;
+ if (!enableRecentsWindowProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(RECENTS_WINDOW, "onStateSetEnd: %s", stateName);
}
public static void logStartRecentsWindow(boolean isShown, boolean windowViewIsNull) {
- if (!enableRecentsWindowProtoLog()) return;
+ if (!enableRecentsWindowProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(RECENTS_WINDOW,
"Starting recents window: isShow= %b, windowViewIsNull=%b",
isShown,
@@ -54,7 +55,7 @@ public class RecentsWindowProtoLogProxy {
}
public static void logCleanup(boolean isShown) {
- if (!enableRecentsWindowProtoLog()) return;
+ if (!enableRecentsWindowProtoLog() || !isProtoLogInitialized()) return;
ProtoLog.d(RECENTS_WINDOW, "Cleaning up recents window: isShow= %b", isShown);
}
}
diff --git a/quickstep/tests/multivalentTests/src/com/android/quickstep/LauncherSwipeHandlerV2Test.kt b/quickstep/tests/multivalentTests/src/com/android/quickstep/LauncherSwipeHandlerV2Test.kt
index 32b5b859ae..36c2f2381c 100644
--- a/quickstep/tests/multivalentTests/src/com/android/quickstep/LauncherSwipeHandlerV2Test.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/quickstep/LauncherSwipeHandlerV2Test.kt
@@ -68,7 +68,7 @@ class LauncherSwipeHandlerV2Test {
)
val deviceState = mock(RecentsAnimationDeviceState::class.java)
whenever(deviceState.rotationTouchHelper).thenReturn(mock(RotationTouchHelper::class.java))
- gestureState = spy(GestureState(OverviewComponentObserver(sandboxContext, deviceState), 0))
+ gestureState = spy(GestureState(OverviewComponentObserver.INSTANCE.get(sandboxContext), 0))
underTest =
LauncherSwipeHandlerV2(
diff --git a/quickstep/tests/multivalentTests/src/com/android/quickstep/util/ContextualSearchInvokerTest.java b/quickstep/tests/multivalentTests/src/com/android/quickstep/util/ContextualSearchInvokerTest.java
index 88774be33c..61971b1fc8 100644
--- a/quickstep/tests/multivalentTests/src/com/android/quickstep/util/ContextualSearchInvokerTest.java
+++ b/quickstep/tests/multivalentTests/src/com/android/quickstep/util/ContextualSearchInvokerTest.java
@@ -52,6 +52,7 @@ import com.android.quickstep.BaseContainerInterface;
import com.android.quickstep.DeviceConfigWrapper;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.TopTaskTracker;
+import com.android.quickstep.orientation.RecentsPagedOrientationHandler;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.RecentsViewContainer;
@@ -82,6 +83,7 @@ public class ContextualSearchInvokerTest {
private @Mock BaseContainerInterface mMockContainerInterface;
private @Mock RecentsViewContainer mMockRecentsViewContainer;
private @Mock RecentsView mMockRecentsView;
+ private @Mock RecentsPagedOrientationHandler mMockOrientationHandler;
private ContextualSearchInvoker mContextualSearchInvoker;
@Before
@@ -189,6 +191,15 @@ public class ContextualSearchInvokerTest {
verify(mMockStatsLogger).log(LAUNCHER_LAUNCH_OMNI_ATTEMPTED_SPLITSCREEN);
}
+ @Test
+ public void runContextualSearchInvocationChecksAndLogFailures_isFakeLandscape() {
+ when(mMockRecentsView.getPagedOrientationHandler()).thenReturn(mMockOrientationHandler);
+ when(mMockOrientationHandler.isLayoutNaturalToLauncher()).thenReturn(false);
+ assertFalse("Expect invocation checks to fail in fake landscape.",
+ mContextualSearchInvoker.runContextualSearchInvocationChecksAndLogFailures());
+ verifyNoMoreInteractions(mMockStatsLogManager);
+ }
+
@Test
public void invokeContextualSearchUncheckedWithHaptic_cssIsAvailable_commitHapticEnabled() {
try (AutoCloseable flag = overrideSearchHapticCommitFlag(true)) {
diff --git a/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java b/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
index 695211ba32..5bb2fad38b 100644
--- a/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
+++ b/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
@@ -64,6 +64,7 @@ import com.android.launcher3.util.rule.ScreenRecordRule;
import com.android.launcher3.util.rule.TestIsolationRule;
import com.android.launcher3.util.rule.TestStabilityRule;
import com.android.launcher3.util.rule.ViewCaptureRule;
+import com.android.quickstep.OverviewComponentObserver.OverviewChangeListener;
import com.android.quickstep.fallback.window.RecentsWindowManager;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.RecentsViewContainer;
@@ -330,7 +331,7 @@ public class FallbackRecentsTest {
return recentsViewContainer.getOverviewPanel().getTaskViewCount();
}
- private class OverviewUpdateHandler {
+ private class OverviewUpdateHandler implements OverviewChangeListener {
final RecentsAnimationDeviceState mRads;
final OverviewComponentObserver mObserver;
@@ -339,19 +340,24 @@ public class FallbackRecentsTest {
OverviewUpdateHandler() {
Context ctx = getInstrumentation().getTargetContext();
mRads = new RecentsAnimationDeviceState(ctx);
- mObserver = new OverviewComponentObserver(ctx, mRads);
+ mObserver = OverviewComponentObserver.INSTANCE.get(ctx);
mChangeCounter = new CountDownLatch(1);
if (mObserver.getHomeIntent().getComponent()
.getPackageName().equals(mOtherLauncherActivity.packageName)) {
// Home already same
mChangeCounter.countDown();
} else {
- mObserver.setOverviewChangeListener(b -> mChangeCounter.countDown());
+ mObserver.addOverviewChangeListener(this);
}
}
+ @Override
+ public void onOverviewTargetChange(boolean isHomeAndOverviewSame) {
+ mChangeCounter.countDown();
+ }
+
void destroy() {
- mObserver.onDestroy();
+ mObserver.removeOverviewChangeListener(this);
mRads.destroy();
}
}
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 716f5dcec0..4dd5e1dcd0 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -68,10 +68,8 @@
"Werk"
"Gesprekke"
"Neem notas"
-
-
-
-
+ "Wys Voeg By-knoppie"
+ "Versteek Voeg By-knoppie"
"Voeg by"
"Voeg %1$s-legstuk by"
"Wys almal"
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 1f7f5f7604..c40ef69e3a 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -68,10 +68,8 @@
"ሥራ"
"ውይይቶች"
"የማስታወሻ አያያዝ"
-
-
-
-
+ "የማከል አዝራርን አሳይ"
+ "የማከል አዝራርን ደብቅ"
"አክል"
"ምግብር %1$sን አክል"
"ሁሉንም አሳይ"
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index bbdfebddaa..98c4f3ee39 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -46,7 +46,7 @@
"العرض %1$d الطول %2$d"
"أداة %1$s"
"التطبيق المصغّرة \"%1$s\"، بعرض %2$d وارتفاع %3$d"
- "انقر مع الاستمرار على التطبيق المصغّر لنقله إلى الشاشة الرئيسية"
+ "يُرجى النقر مع الاستمرار على التطبيق المصغّر لنقله إلى الشاشة الرئيسية"
"إضافة إلى الشاشة الرئيسية"
"تمت إضافة الأداة %1$s إلى الشاشة الرئيسية."
"اقتراحات"
@@ -68,10 +68,8 @@
"تطبيقات العمل"
"المحادثات"
"تدوين الملاحظات"
-
-
-
-
+ "إظهار زر الإضافة"
+ "إخفاء زر الإضافة"
"إضافة"
"إضافة التطبيق المصغّر \"%1$s\""
"عرض الكل"
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 44cb92f14c..acce0d2d7a 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -68,10 +68,8 @@
"কৰ্মস্থান"
"বাৰ্তালাপ"
"টোকা গ্ৰহণ কৰা"
-
-
-
-
+ "যোগ দিয়ক বুটামটো দেখুৱাওক"
+ "যোগ দিয়ক বুটামটো লুকুৱাওক"
"যোগ দিয়ক"
"%1$s ৱিজেট যোগ দিয়ক"
"আটাইবোৰ দেখুৱাওক"
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index f2bf5f75a5..8eda4262bf 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -68,10 +68,8 @@
"İş"
"Söhbətlər"
"Qeydgötürmə"
-
-
-
-
+ "Əlavə edin düyməsini göstərin"
+ "Əlavə edin düyməsini gizlədin"
"Əlavə edin"
"%1$s vidcet əlavə edin"
"Hamısını göstər"
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 53b1a0242a..33941ff253 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -68,10 +68,8 @@
"Posao"
"Konverzacije"
"Pravljenje beležaka"
-
-
-
-
+ "Prikažite dugme za dodavanje"
+ "Sakrijte dugme za dodavanje"
"Dodaj"
"Dodajte vidžet %1$s"
"Prikaži sve"
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 586a44a199..d395006f53 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -68,10 +68,8 @@
"Працоўныя"
"Размовы"
"Стварэнне нататак"
-
-
-
-
+ "Паказаць кнопку \"Дадаць\""
+ "Схаваць кнопку \"Дадаць\""
"Дадаць"
"Дадаць віджэт \"%1$s\""
"Паказаць усе"
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index ea53cef015..cf298c3263 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -68,10 +68,8 @@
"Служебни"
"Разговори"
"Водене на бележки"
-
-
-
-
+ "Показване на бутона за добавяне"
+ "Скриване на бутона за добавяне"
"Добавяне"
"Добавяне на приспособлението „%1$s“"
"Вижте всички"
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 3e71dc83eb..f2654bba95 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -68,10 +68,8 @@
"অফিস"
"কথোপকথন"
"নোট নেওয়া"
-
-
-
-
+ "যোগ করার বোতাম দেখুন"
+ "যোগ করার বোতাম লুকান"
"যোগ করুন"
"%1$s উইজেট যোগ করুন"
"সব দেখুন"
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 5173061f8f..3277e22bfd 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -68,10 +68,8 @@
"Posao"
"Razgovori"
"Pisanje bilješki"
-
-
-
-
+ "Prikazivanje dugmeta za dodavanje"
+ "Sakrivanje dugmeta za dodavanje"
"Dodajte"
"Dodavanje vidžeta %1$s"
"Prikaži sve"
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 722658164e..f8f8e286cc 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -68,10 +68,8 @@
"Treball"
"Converses"
"Presa de notes"
-
-
-
-
+ "Mostra el botó Afegeix"
+ "Amaga el botó Afegeix"
"Afegeix"
"Afegeix el widget %1$s"
"Mostra-ho tot"
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 51fb1797d3..5fa91540ba 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -68,10 +68,8 @@
"Práce"
"Konverzace"
"Psaní poznámek"
-
-
-
-
+ "Zobrazit tlačítko přidání"
+ "Skrýt tlačítko přidání"
"Přidat"
"Přidat widget %1$s"
"Zobrazit vše"
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 4b4664a2c0..16e3473636 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -68,10 +68,8 @@
"Arbejde"
"Samtaler"
"Notetagning"
-
-
-
-
+ "Vis knappen Tilføj"
+ "Skjul knappen Tilføj"
"Tilføj"
"Tilføj %1$s-widget"
"Vis alle"
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 4fe0def6b1..cb6482194a 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -68,10 +68,8 @@
"Geschäftlich"
"Unterhaltungen"
"Notizen"
-
-
-
-
+ "Schaltfläche „Hinzufügen“ anzeigen"
+ "Schaltfläche „Hinzufügen“ ausblenden"
"Hinzufügen"
"Widget „%1$s“ hinzufügen"
"Alle anzeigen"
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 3a6d8497e1..672ba05925 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -68,10 +68,8 @@
"Εργασίας"
"Συζητήσεις"
"Δημιουργία σημειώσεων"
-
-
-
-
+ "Εμφάνιση κουμπιού προσθήκης"
+ "Απόκρυψη κουμπιού προσθήκης"
"Προσθήκη"
"Προσθήκη του γραφικού στοιχείου %1$s"
"Εμφάνιση όλων"
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index fb5466b90d..a4f88ded2b 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -68,10 +68,8 @@
"Work"
"Conversations"
"Note-taking"
-
-
-
-
+ "Show add button"
+ "Hide add button"
"Add"
"Add %1$s widget"
"Show all"
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index fb5466b90d..a4f88ded2b 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -68,10 +68,8 @@
"Work"
"Conversations"
"Note-taking"
-
-
-
-
+ "Show add button"
+ "Hide add button"
"Add"
"Add %1$s widget"
"Show all"
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index fb5466b90d..a4f88ded2b 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -68,10 +68,8 @@
"Work"
"Conversations"
"Note-taking"
-
-
-
-
+ "Show add button"
+ "Hide add button"
"Add"
"Add %1$s widget"
"Show all"
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index c522d08fec..0344113ce0 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -68,10 +68,8 @@
"Trabajo"
"Conversaciones"
"Tomar notas"
-
-
-
-
+ "Mostrar botón Agregar"
+ "Ocultar botón Agregar"
"Agregar"
"Agregar widget %1$s"
"Mostrar todos"
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index fd11b09166..fc34acf35a 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -68,10 +68,8 @@
"Trabajo"
"Conversaciones"
"Toma de notas"
-
-
-
-
+ "Mostrar el botón Añadir"
+ "Ocultar el botón Añadir"
"Añadir"
"Añadir widget %1$s"
"Mostrar todo"
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 0bc557f253..5fc3b82c02 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -68,10 +68,8 @@
"Töö"
"Vestlused"
"Märkmete tegemine"
-
-
-
-
+ "Kuva lisamisnupp"
+ "Peida lisamisnupp"
"Lisa"
"Lisa vidin %1$s"
"Kuva kõik"
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 4e69c3dc5f..99f127a745 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -68,10 +68,8 @@
"Lanekoak"
"Elkarrizketak"
"Oharrak idazteko"
-
-
-
-
+ "Erakutsi gehitzeko botoia"
+ "Ezkutatu gehitzeko botoia"
"Gehitu"
"Gehitu %1$s widgeta"
"Erakutsi guztiak"
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index a772f0c225..aa6f378de6 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -68,10 +68,8 @@
"ابزارههای کاری"
"مکالمهها"
"یادداشتبرداری"
-
-
-
-
+ "نشان دادن دکمه افزودن"
+ "پنهان کردن دکمه افزودن"
"افزودن"
"افزودن ابزاره %1$s"
"نمایش همه"
@@ -189,13 +187,13 @@
"کاری"
"نمایه کاری"
"برنامههای کاری نشاندار هستند و سرپرست فناوری اطلاعات میتواند آنها را ببیند"
- "متوجهام"
+ "متوجهم"
"برنامههای کاری موقتاً متوقف شدهاند."
"از برنامههای کاریتان اعلان دریافت نخواهید کرد"
"برنامههای کاری نمیتوانند برای شما اعلان ارسال کنند، از باتری استفاده کنند، یا به مکانتان دسترسی داشته باشند"
"از برنامههای کاریتان تماس تلفنی، پیام نوشتاری، یا اعلان دریافت نخواهید کرد"
"برنامههای کاری نشاندار هستند و سرپرست فناوری اطلاعات میتواند آنها را ببیند."
- "متوجهام"
+ "متوجهم"
"توقف موقت برنامههای کاری"
"ازسرگیری"
"برنامه زمانی برنامههای کاری"
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 7c7045fcbe..6beb593879 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -68,10 +68,8 @@
"Työ"
"Keskustelut"
"Muistiinpanojen tekeminen"
-
-
-
-
+ "Näytä lisää-painike"
+ "Piilota Lisää-painike"
"Lisää"
"Lisää widget: %1$s"
"Näytä kaikki"
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 8209d3a2f0..696d8af851 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -68,10 +68,8 @@
"Professionnels"
"Conversations"
"Prise de note"
-
-
-
-
+ "Afficher le bouton Ajouter"
+ "Masquer le bouton Ajouter"
"Ajouter"
"Ajoutez le widget %1$s"
"Tout afficher"
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index f2517ff328..c870afae7e 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -68,10 +68,8 @@
"Professionnels"
"Conversations"
"Prise de notes"
-
-
-
-
+ "Afficher le bouton \"Ajouter\""
+ "Masquer le bouton \"Ajouter\""
"Ajouter"
"Ajoutez un widget %1$s"
"Tout afficher"
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 8945603285..5bcf2fdc2f 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -68,10 +68,8 @@
"Widgets do traballo"
"Conversas"
"Toma de notas"
-
-
-
-
+ "Mostrar o botón de engadir"
+ "Ocultar o botón de engadir"
"Engadir"
"Engadir o widget %1$s"
"Mostrar todo"
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 0f3f265beb..1480ea96c7 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -68,10 +68,8 @@
"ઑફિસ"
"વાતચીતો"
"નોંધ લેવી"
-
-
-
-
+ "\'ઉમેરો\' બટન બતાવો"
+ "\'ઉમેરો\' બટન છુપાવો"
"ઉમેરો"
"%1$s વિજેટ ઉમેરો"
"બધા બતાવો"
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 28a29caba4..32a2a96445 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -68,10 +68,8 @@
"वर्क विजेट"
"बातचीत"
"नोट बनाने से जुड़े विजेट"
-
-
-
-
+ "\'जोड़ें\' बटन दिखाएं"
+ "\'जोड़ें\' बटन छिपाएं"
"जोड़ें"
"%1$s विजेट जोड़ें"
"सभी दिखाएं"
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 79726e4351..726efe8834 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -68,10 +68,8 @@
"Posao"
"Razgovori"
"Pisanje bilježaka"
-
-
-
-
+ "Prikaži gumb za dodavanje"
+ "Sakrij gumb za dodavanje"
"Dodaj"
"Dodaj widget %1$s"
"Prikaži sve"
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 154cac00ae..b85d3df9df 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -68,10 +68,8 @@
"Munka"
"Beszélgetések"
"Jegyzetelés"
-
-
-
-
+ "Hozzáadás gomb megjelenítése"
+ "Hozzáadás gomb elrejtése"
"Hozzáadás"
"%1$s modul hozzáadása"
"Az összes megjelenítése"
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 85a1f28cf4..36e89b4fe5 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -68,10 +68,8 @@
"Աշխատանքային"
"Զրույցներ"
"Նշումների ստեղծում"
-
-
-
-
+ "Ցույց տալ «Ավելացնել» կոճակը"
+ "Թաքցնել «Ավելացնել» կոճակը"
"Ավելացնել"
"Ավելացնել %1$s վիջեթը"
"Բոլորը"
@@ -141,7 +139,7 @@
"Ծանուցումների կետիկները ցուցադրելու համար միացրեք ծանուցումները %1$s-ի համար"
"Փոխել կարգավորումները"
"Ցուցադրել ծանուցումների կետիկները"
- "Մշակողի ընտրանքներ"
+ "Ծրագրավորողի ընտրանքներ"
"Ավելացնել պատկերակները հիմնական էկրանին"
"Նոր հավելվածների համար"
"Անհայտ է"
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 27079dd2bf..0d5a819295 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -68,10 +68,8 @@
"Kerja"
"Percakapan"
"Pembuatan catatan"
-
-
-
-
+ "Tampilkan tombol tambahkan"
+ "Sembunyikan tombol tambahkan"
"Tambahkan"
"Tambahkan widget %1$s"
"Tampilkan semua"
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 067388151f..8f3c604cc5 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -68,10 +68,8 @@
"Vinna"
"Samtöl"
"Glósugerð"
-
-
-
-
+ "Sýna hnapp til að bæta við"
+ "Fela hnapp til að bæta við"
"Bæta við"
"Bæta græjunni %1$s við"
"Sýna allt"
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 97441a0503..c7fd68f202 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -68,10 +68,8 @@
"Lavoro"
"Conversazioni"
"Aggiunta di note"
-
-
-
-
+ "Mostra pulsante Aggiungi"
+ "Nascondi pulsante Aggiungi"
"Aggiungi"
"Aggiungi widget %1$s"
"Mostra tutto"
@@ -127,7 +125,7 @@
"Cartella: %1$s, %2$d o più elementi"
"Coppia di app: %1$s and %2$s"
"Sfondo e stile"
- "Modifica la schermata Home"
+ "Modifica schermata Home"
"Impostazioni schermata Home"
"Disattivata dall\'amministratore"
"Consenti rotazione della schermata Home"
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index adf1ad4cf2..6dfbe68432 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -68,16 +68,14 @@
"ווידג\'טים לעבודה"
"שיחות"
"כתיבת הערות"
-
-
-
-
+ "הצגת כפתור ההוספה"
+ "הסתרת כפתור ההוספה"
"הוספה"
"הוספת הווידג\'ט %1$s"
"הצגת הכול"
"הצגת כל הווידג\'טים"
"כל הווידג\'טים מוצגים"
- "אפשר לשנות את הגדרות הווידג\'ט בהקשה"
+ "אפשר לשנות את הגדרות הווידג\'ט בלחיצה"
"שינוי הגדרות הווידג\'ט"
"חיפוש אפליקציות"
"טעינת אפליקציות מתבצעת…"
@@ -110,7 +108,7 @@
"מאפשרת לאפליקציה לשנות את ההגדרות וקיצורי הדרך בדף הבית."
"לא ניתן לטעון את הווידג\'ט"
"הגדרות הווידג\'ט"
- "צריך להקיש כדי לסיים את תהליך ההגדרה"
+ "צריך ללחוץ כדי לסיים את תהליך ההגדרה"
"זוהי אפליקציית מערכת ולא ניתן להסיר את התקנתה."
"עריכת השם"
"%1$s מושבתת"
@@ -119,8 +117,8 @@
"מסך הבית %1$d מתוך %2$d"
"מסך הבית חדש"
"תיקייה פתוחה, %1$d על %2$d"
- "יש להקיש כדי לסגור את התיקייה"
- "יש להקיש כדי לשמור שינוי שם"
+ "יש ללחוץ כדי לסגור את התיקייה"
+ "יש ללחוץ כדי לשמור שינוי שם"
"התיקייה נסגרה"
"שם התיקייה שונה ל-%1$s"
"תיקייה: %1$s, מספר הפריטים: %2$d"
@@ -202,7 +200,7 @@
"סינון"
"הפעולה נכשלה: %1$s"
"מרחב פרטי"
- "יש להקיש כדי להגדיר או לפתוח"
+ "יש ללחוץ כדי להגדיר או לפתוח"
"פרטי"
"הגדרות המרחב הפרטי"
"פרטי, פתוח."
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 7045661e82..9b012c5fc0 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -68,10 +68,8 @@
"仕事用"
"会話"
"メモ"
-
-
-
-
+ "追加ボタンを表示する"
+ "追加ボタンを非表示にする"
"追加"
"%1$sウィジェットを追加"
"すべて表示"
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 30aa835505..955d65fb1d 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -68,10 +68,8 @@
"სამსახური"
"მიმოწერები"
"ჩანიშვნა"
-
-
-
-
+ "დამატების ღილაკის ჩვენება"
+ "დამატების ღილაკის დამალვა"
"დამატება"
"%1$s ვიჯეტის დამატება"
"ყველას ჩვენება"
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 2317944de1..c50d007145 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -68,10 +68,8 @@
"Жұмыс виджеттері"
"Әңгімелер"
"Ескертпе жазу"
-
-
-
-
+ "Қосу түймесін көрсету"
+ "Қосу түймесін жасыру"
"Қосу"
"Виджет (%1$s) қосу"
"Барлығын көру"
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index cfc29322ce..7a73e69601 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -68,10 +68,8 @@
"ការងារ"
"ការសន្ទនា"
"ការកត់ត្រា"
-
-
-
-
+ "បង្ហាញប៊ូតុង \"បញ្ចូល\""
+ "លាក់ប៊ូតុង \"បញ្ចូល\""
"បញ្ចូល"
"បញ្ចូលធាតុក្រាហ្វិក %1$s"
"បង្ហាញទាំងអស់"
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index a1daac08fe..8c988bf0ef 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -68,10 +68,8 @@
"ಕೆಲಸ"
"ಸಂಭಾಷಣೆಗಳು"
"ಟಿಪ್ಪಣಿ ತೆಗೆದುಕೊಳ್ಳುವುದು"
-
-
-
-
+ "ಸೇರಿಸಿ ಬಟನ್ ಅನ್ನು ತೋರಿಸಿ"
+ "ಸೇರಿಸಿ ಬಟನ್ ಅನ್ನು ಮರೆಮಾಡಿ"
"ಸೇರಿಸಿ"
"%1$s ವಿಜೆಟ್ ಸೇರಿಸಿ"
"ಎಲ್ಲಾ ತೋರಿಸಿ"
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index db40d207dd..9f7217bab3 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -68,10 +68,8 @@
"직장 위젯"
"대화"
"메모"
-
-
-
-
+ "추가 버튼 표시"
+ "추가 버튼 숨기기"
"추가"
"%1$s 위젯 추가"
"모두 표시"
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index eb46e1665d..b7ce9d73ac 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -68,10 +68,8 @@
"Жумуш"
"Сүйлөшүүлөр"
"Эскертме жазуу"
-
-
-
-
+ "Кошуу баскычын көрсөтүү"
+ "Кошуу баскычын жашыруу"
"Кошуу"
"%1$s виджетин кошуу"
"Баарын көрсөтүү"
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 89bb218c9c..33fff3de96 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -68,10 +68,8 @@
"ວຽກ"
"ການສົນທະນາ"
"ການຈົດບັນທຶກ"
-
-
-
-
+ "ສະແດງປຸ່ມເພີ່ມ"
+ "ເຊື່ອງປຸ່ມເພີ່ມ"
"ເພີ່ມ"
"ເພີ່ມວິດເຈັດ %1$s"
"ສະແດງທັງໝົດ"
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 839c876d20..0d0f5dba20 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -68,10 +68,8 @@
"Darbas"
"Pokalbiai"
"Užrašų kūrimas"
-
-
-
-
+ "Rodyti mygtuką „Pridėti“"
+ "Slėpti mygtuką „Pridėti“"
"Pridėti"
"Pridėti valdiklį: %1$s"
"Rodyti viską"
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 8620b7b4d6..c86c6bb996 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -68,10 +68,8 @@
"Darba"
"Sarunas"
"Piezīmju pierakstīšana"
-
-
-
-
+ "Rādīt pogu Pievienot"
+ "Paslēpt pogu Pievienot"
"Pievienot"
"Pievienot logrīku %1$s"
"Rādīt visus"
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 2685c60b1f..cb5f15a263 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -68,10 +68,8 @@
"Работни"
"Разговори"
"Фаќање белешки"
-
-
-
-
+ "Прикажи го копчето за додавање"
+ "Скриј го копчето за додавање"
"Додај"
"Додај го виџетот %1$s"
"Прикажи ги сите"
@@ -203,7 +201,7 @@
"Не успеа: %1$s"
"Приватен простор"
"Допрете за да поставите или отворите"
- "Приватен простор"
+ "Приватен"
"Поставки за „Приватен простор“"
"Приватно, отклучено."
"Приватно, заклучено."
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index b9da88041c..2c8258502e 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -68,10 +68,8 @@
"ജോലി"
"സംഭാഷണങ്ങൾ"
"കുറിപ്പ് രേഖപ്പെടുത്തൽ"
-
-
-
-
+ "\'ചേർക്കുക ബട്ടൺ\' കാണിക്കുക"
+ "\'ചേർക്കുക ബട്ടൺ\' മറയ്ക്കുക"
"ചേർക്കുക"
"%1$s വിജറ്റ് ചേർക്കുക"
"എല്ലാം കാണിക്കൂ"
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 8197832a94..434a731d2a 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -68,10 +68,8 @@
"Ажил"
"Харилцан яриа"
"Тэмдэглэл хөтлөх"
-
-
-
-
+ "Нэмэх товчийг харуулах"
+ "Нэмэх товчийг нуух"
"Нэмэх"
"%1$s виджетийг нэмэх"
"Бүгдийг харуул"
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 52813531f2..c872cc6938 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -68,10 +68,8 @@
"ऑफिस"
"संभाषणे"
"टिपा घेणे"
-
-
-
-
+ "जोडा बटण दाखवा"
+ "जोडा बटण लपवा"
"जोडा"
"%1$s विजेट जोडा"
"सर्व दाखवा"
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 5592cd5cff..f5dca938d7 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -68,10 +68,8 @@
"Kerja"
"Perbualan"
"Pengambilan nota"
-
-
-
-
+ "Tunjukkan butang tambah"
+ "Sembunyikan butang tambah"
"Tambah"
"Tambahkan widget %1$s"
"Tunjukkan semua"
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index c7bb07516d..24f443565e 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -68,10 +68,8 @@
"အလုပ်"
"စကားဝိုင်းများ"
"မှတ်စုလိုက်ခြင်း"
-
-
-
-
+ "ထည့်ရန်ခလုတ် ပြပါ"
+ "ထည့်ရန်ခလုတ် ဖျောက်ပါ"
"ထည့်ရန်"
"%1$s ဝိဂျက်ထည့်ရန်"
"အားလုံးပြပါ"
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index c9b8de084b..a79740dc93 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -68,10 +68,8 @@
"Jobb"
"Samtaler"
"Notatskriving"
-
-
-
-
+ "Vis Legg til-knappen"
+ "Skjul Legg til-knappen"
"Legg til"
"Legg til %1$s-modulen"
"Vis alle"
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index a966f9eb21..f35b94399b 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -68,10 +68,8 @@
"कामसम्बन्धी"
"वार्तालापहरू"
"नोट लेख्ने कार्य"
-
-
-
-
+ "\"हाल्नुहोस्\" नामक बटन देखाउनुहोस्"
+ "\"हाल्नुहोस्\" नामक बटन लुकाउनुहोस्"
"हाल्नुहोस्"
"%1$s विजेट हाल्नुहोस्"
"सबै देखाउनुहोस्"
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 1c819fc70f..508397632e 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -68,10 +68,8 @@
"Werk"
"Gesprekken"
"Aantekeningen maken"
-
-
-
-
+ "Knop Toevoegen tonen"
+ "Knop Toevoegen verbergen"
"Toevoegen"
"Widget %1$s toevoegen"
"Alles tonen"
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 14c9617536..a26a7c50d5 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -68,10 +68,8 @@
"ୱାର୍କ"
"ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ"
"ନୋଟ-ଟେକିଂ"
-
-
-
-
+ "\'ଯୋଗ କରନ୍ତୁ\' ବଟନକୁ ଦେଖାନ୍ତୁ"
+ "\'ଯୋଗ କରନ୍ତୁ\' ବଟନକୁ ଲୁଚାନ୍ତୁ"
"ଯୋଗ କରନ୍ତୁ"
"%1$s ୱିଜେଟ ଯୋଗ କରନ୍ତୁ"
"ସବୁ ଦେଖାନ୍ତୁ"
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 2882620b2a..feda5b57bc 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -68,10 +68,8 @@
"ਕੰਮ"
"ਗੱਲਾਂਬਾਤਾਂ"
"ਨੋਟ ਬਣਾਉਣਾ"
-
-
-
-
+ "\'ਸ਼ਾਮਲ ਕਰੋ\' ਬਟਨ ਦਿਖਾਓ"
+ "\'ਸ਼ਾਮਲ ਕਰੋ\' ਬਟਨ ਲੁਕਾਓ"
"ਸ਼ਾਮਲ ਕਰੋ"
"%1$s ਵਿਜੇਟ ਸ਼ਾਮਲ ਕਰੋ"
"ਸਭ ਦਿਖਾਓ"
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index ae4ff2fe13..bf1299d997 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -68,10 +68,8 @@
"Służbowe"
"Rozmowy"
"Notatki"
-
-
-
-
+ "Pokaż przycisk Dodaj"
+ "Ukryj przycisk Dodaj"
"Dodaj"
"Dodaj widżet %1$s"
"Pokaż wszystko"
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index cd3f2a6932..17af43755f 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -68,10 +68,8 @@
"Trabalho"
"Conversas"
"Tomar notas"
-
-
-
-
+ "Mostrar botão para adicionar"
+ "Ocultar botão para adicionar"
"Adicionar"
"Adicione o widget %1$s"
"Mostrar tudo"
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index f40c5b3164..10132c96b6 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -46,7 +46,7 @@
"%1$d de largura por %2$d de altura"
"Widget %1$s"
"Widget %1$s: %2$d de largura por %3$d de altura"
- "Toque no widget e o pressione para definir a posição dele na tela inicial"
+ "Toque no widget e o pressione para definir a posição dele na tela inicial"
"Adicionar à tela inicial"
"Widget %1$s adicionado à tela inicial"
"Sugestões"
@@ -68,10 +68,8 @@
"Trabalho"
"Conversas"
"Anotações"
-
-
-
-
+ "Mostrar botão de adição"
+ "Ocultar botão de adição"
"Adicionar"
"Adicionar o widget %1$s"
"Mostrar tudo"
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 5a98b55f35..5763edbd2c 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -68,10 +68,8 @@
"Serviciu"
"Conversații"
"Luare de notițe"
-
-
-
-
+ "Afișează butonul de adăugare"
+ "Ascunde butonul de adăugare"
"Adaugă"
"Adaugă widgetul %1$s"
"Afișează tot"
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 2437f29604..d9f0b4044e 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -68,10 +68,8 @@
"Рабочие виджеты"
"Разговоры"
"Создание заметок"
-
-
-
-
+ "Показать кнопку добавления виджета"
+ "Скрыть кнопку добавления виджета"
"Добавить"
"Добавить виджет \"%1$s\""
"Показать все"
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 2277d244c5..756d6fe334 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -68,10 +68,8 @@
"කාර්යාලය"
"සංවාද"
"සටහන් කර ගැනීම"
-
-
-
-
+ "එක් කිරීමේ බොත්තම පෙන්වන්න"
+ "එක් කිරීමේ බොත්තම සඟවන්න"
"එක් කරන්න"
"%1$s විජට්ටුව එක් කරන්න"
"සියල්ල පෙන්වන්න"
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 37e2a7ed37..5fc0c416bb 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -68,10 +68,8 @@
"Pracovné"
"Konverzácie"
"Zapisovanie poznámok"
-
-
-
-
+ "Zobraziť tlačidlo Pridať"
+ "Skryť tlačidlo Pridať"
"Pridať"
"Pridať miniaplikáciu %1$s"
"Zobraziť všetko"
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 6072e9f619..5ab0106379 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -68,10 +68,8 @@
"Služba"
"Pogovori"
"Ustvarjanje zapiskov"
-
-
-
-
+ "Pokaži gumb za dodajanje"
+ "Skrij gumb za dodajanje"
"Dodaj"
"Dodajanje pripomočka »%1$s«"
"Pokaži vse"
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 995db0ff3f..ab42407f54 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -68,10 +68,8 @@
"Puna"
"Bisedat"
"Mbajtja e shënimeve"
-
-
-
-
+ "Shfaq butonin e shtimit"
+ "Fshih butonin e shtimit"
"Shto"
"Shto miniaplikacionin %1$s"
"Shfaq të gjitha"
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index ee69f343cd..2b2fac8fbe 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -68,10 +68,8 @@
"Посао"
"Конверзације"
"Прављење бележака"
-
-
-
-
+ "Прикажите дугме за додавање"
+ "Сакријте дугме за додавање"
"Додај"
"Додајте виџет %1$s"
"Прикажи све"
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 0aeac3b19b..74e35acfb9 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -68,10 +68,8 @@
"Arbete"
"Konversationer"
"Anteckna"
-
-
-
-
+ "Visa knappen Lägg till"
+ "Dölj knappen Lägg till"
"Lägg till"
"Lägg till widgeten %1$s"
"Visa alla"
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 674e8f92ea..d696410e54 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -68,10 +68,8 @@
"Kazini"
"Mazungumzo"
"Kuandika madokezo"
-
-
-
-
+ "Onyesha kitufe cha kuweka"
+ "Ficha kitufe cha kuweka"
"Weka"
"Weka wijeti ya %1$s"
"Onyesha zote"
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 62876076b4..0b942520bd 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -68,10 +68,8 @@
"பணி"
"உரையாடல்கள்"
"குறிப்பெடுத்தல்"
-
-
-
-
+ "சேர்ப்பதற்கான பட்டனைக் காட்டும்"
+ "சேர்ப்பதற்கான பட்டனை மறைக்கும்"
"சேர்"
"%1$s விட்ஜெட்டைச் சேர்க்கும்"
"எல்லாம் காட்டு"
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index ba7bf2c165..bf9df6aec3 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -68,10 +68,8 @@
"ఆఫీస్"
"సంభాషణలు"
"నోట్-టేకింగ్"
-
-
-
-
+ "యాడ్ చేసే (జోడించే) బటన్ను చూపండి"
+ "యాడ్ చేసే (జోడించే) బటన్ను దాచండి"
"జోడించండి"
"%1$s విడ్జెట్ను జోడించండి"
"అన్నీ చూడండి"
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 0338163cc2..08944eda88 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -68,10 +68,8 @@
"งาน"
"การสนทนา"
"การจดบันทึก"
-
-
-
-
+ "แสดงปุ่มเพิ่ม"
+ "ซ่อนปุ่มเพิ่ม"
"เพิ่ม"
"เพิ่มวิดเจ็ต %1$s"
"แสดงทั้งหมด"
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 4bd5c58c88..b504adc5e1 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -68,10 +68,8 @@
"Trabaho"
"Mga Pag-uusap"
"Pagtatala"
-
-
-
-
+ "Ipakita ang button na magdagdag"
+ "I-hide ang button na magdagdag"
"Idagdag"
"Idagdag ang widget na %1$s"
"Ipakita lahat"
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index c11a5cdfbe..094b597c33 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -68,10 +68,8 @@
"İş"
"Görüşmeler"
"Not alma"
-
-
-
-
+ "Ekle düğmesini göster"
+ "Ekle düğmesini gizle"
"Ekle"
"%1$s widget\'ı ekle"
"Tümünü göster"
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index da56b6c9e8..f90998d851 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -68,10 +68,8 @@
"Робочі"
"Розмови"
"Створення нотаток"
-
-
-
-
+ "Показати кнопку \"Додати\""
+ "Сховати кнопку \"Додати\""
"Додати"
"Додати віджет \"%1$s\""
"Показати всі"
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index f978e2ec80..1a906025ad 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -68,10 +68,8 @@
"دفتری ویجیٹس"
"گفتگوئیں"
"نوٹ لکھنا"
-
-
-
-
+ "شامل کریں بٹن دکھائیں"
+ "شامل کریں بٹن چھپائیں"
"شامل کریں"
"%1$s ویجیٹ شامل کریں"
"سبھی دکھائیں"
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 371eece072..62fede8bb2 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -68,10 +68,8 @@
"Ish"
"Suhbatlar"
"Qayd olish"
-
-
-
-
+ "Qoʻshish tugmasini koʻrsatish"
+ "Qoʻshish tugmasini berkitish"
"Chiqarish"
"%1$s vidjetini chiqarish"
"Hammasi"
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 94fef7e418..8e5f75c4b1 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -68,10 +68,8 @@
"Công việc"
"Cuộc trò chuyện"
"Ghi chú"
-
-
-
-
+ "Hiện nút thêm"
+ "Ẩn nút thêm"
"Thêm"
"Thêm tiện ích %1$s"
"Hiện tất cả"
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 6492e2b740..edc56466d8 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -68,10 +68,8 @@
"工作"
"对话"
"记事"
-
-
-
-
+ "显示“添加”按钮"
+ "隐藏“添加”按钮"
"添加"
"添加“%1$s”微件"
"全部显示"
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index d60bc6d578..7f4ac599a6 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -68,10 +68,8 @@
"工作"
"對話"
"做筆記"
-
-
-
-
+ "顯示新增按鈕"
+ "隱藏新增按鈕"
"新增"
"加%1$s小工具"
"顯示全部"
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 618fb9080a..f527a2a0a8 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -68,10 +68,8 @@
"工作"
"對話"
"做筆記"
-
-
-
-
+ "顯示新增按鈕"
+ "隱藏新增按鈕"
"新增"
"新增「%1$s」小工具"
"全部顯示"
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 2b102b0ea9..3c3a75c8e3 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -68,10 +68,8 @@
"Umsebenzi"
"Izingxoxo"
"Ukuthatha amanothi"
-
-
-
-
+ "Bonisa inkinobho yokwengeza"
+ "Fihla inkinobho yokwengeza"
"Engeza"
"Engeza iwijethi ye-%1$s"
"Bonisa konke"
diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java
index dddc43f913..aefb2b1594 100644
--- a/src/com/android/launcher3/InvariantDeviceProfile.java
+++ b/src/com/android/launcher3/InvariantDeviceProfile.java
@@ -245,10 +245,6 @@ public class InvariantDeviceProfile implements SafeCloseable {
@TargetApi(23)
private InvariantDeviceProfile(Context context) {
String gridName = getCurrentGridName(context);
- FileLog.d(TAG, "New InvariantDeviceProfile, before initGrid(): "
- + "gridName:" + gridName
- + ", LauncherPrefs GRID_NAME:" + LauncherPrefs.get(context).get(GRID_NAME)
- + ", LauncherPrefs DB_FILE:" + LauncherPrefs.get(context).get(DB_FILE));
initGrid(context, gridName);
DisplayController.INSTANCE.get(context).setPriorityListener(
(displayContext, info, flags) -> {
@@ -353,6 +349,11 @@ public class InvariantDeviceProfile implements SafeCloseable {
}
private String initGrid(Context context, String gridName) {
+ FileLog.d(TAG, "Before initGrid:"
+ + "gridName:" + gridName
+ + ", dbFile:" + dbFile
+ + ", LauncherPrefs GRID_NAME:" + LauncherPrefs.get(context).get(GRID_NAME)
+ + ", LauncherPrefs DB_FILE:" + LauncherPrefs.get(context).get(DB_FILE));
Info displayInfo = DisplayController.INSTANCE.get(context).getInfo();
List allOptions = getPredefinedDeviceProfiles(
context,
@@ -378,8 +379,9 @@ public class InvariantDeviceProfile implements SafeCloseable {
}
initGrid(context, displayInfo, displayOption);
- FileLog.d(TAG, "initGrid: "
+ FileLog.d(TAG, "After initGrid:"
+ "gridName:" + gridName
+ + ", dbFile:" + dbFile
+ ", LauncherPrefs GRID_NAME:" + LauncherPrefs.get(context).get(GRID_NAME)
+ ", LauncherPrefs DB_FILE:" + LauncherPrefs.get(context).get(DB_FILE));
return displayOption.grid.name;
@@ -397,7 +399,7 @@ public class InvariantDeviceProfile implements SafeCloseable {
*/
@Deprecated
public void reset(Context context) {
- initGrid(context, getDefaultGridName(context));
+ initGrid(context, getCurrentGridName(context));
}
@VisibleForTesting
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 5037316be5..51e5b51e2b 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1678,7 +1678,7 @@ public class Launcher extends StatefulActivity
if (FeatureFlags.enableSplitContextually()) {
handleSplitAnimationGoingToHome(LAUNCHER_SPLIT_SELECTION_EXIT_HOME);
}
- mOverlayManager.hideOverlay(isStarted() && !isForceInvisible());
+ mOverlayManager.hideOverlay(isStarted());
handleGestureContract(intent);
} else if (Intent.ACTION_ALL_APPS.equals(intent.getAction())) {
showAllAppsFromIntent(alreadyOnHome);
diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java
index de1bcc34db..9ff647526d 100644
--- a/src/com/android/launcher3/folder/FolderIcon.java
+++ b/src/com/android/launcher3/folder/FolderIcon.java
@@ -177,12 +177,16 @@ public class FolderIcon extends FrameLayout implements FolderListener, FloatingI
FolderIcon icon = inflateIcon(resId, activityContext, group, folderInfo);
folder.setFolderIcon(icon);
folder.bind(folderInfo);
+
icon.setFolder(folder);
+ folderInfo.addListener(icon);
return icon;
}
/**
- * Builds a FolderIcon to be added to the Launcher
+ * Builds a FolderIcon to be added to the activity.
+ * This method doesn't add any listeners to the FolderInfo, and hence any changes to the info
+ * will not be reflected in the folder.
*/
public static FolderIcon inflateIcon(int resId, ActivityContext activity,
@Nullable ViewGroup group, FolderInfo folderInfo) {
@@ -228,8 +232,6 @@ public class FolderIcon extends FrameLayout implements FolderListener, FloatingI
icon.mPreviewVerifier.setFolderInfo(folderInfo);
icon.updatePreviewItems(false);
- folderInfo.addListener(icon);
-
return icon;
}
diff --git a/src/com/android/launcher3/graphics/GridCustomizationsProvider.java b/src/com/android/launcher3/graphics/GridCustomizationsProvider.java
index 7367f2e998..836ae98bcf 100644
--- a/src/com/android/launcher3/graphics/GridCustomizationsProvider.java
+++ b/src/com/android/launcher3/graphics/GridCustomizationsProvider.java
@@ -51,11 +51,12 @@ import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.RunnableList;
import com.android.systemui.shared.Flags;
+import java.lang.ref.WeakReference;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.Set;
-import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
/**
@@ -121,7 +122,7 @@ public class GridCustomizationsProvider extends ContentProvider {
// Set of all active previews used to track duplicate memory allocations
private final Set mActivePreviews =
- Collections.newSetFromMap(new WeakHashMap<>());
+ Collections.newSetFromMap(new ConcurrentHashMap<>());
@Override
public boolean onCreate() {
@@ -317,8 +318,15 @@ public class GridCustomizationsProvider extends ContentProvider {
Bundle result = new Bundle();
result.putParcelable(KEY_SURFACE_PACKAGE, renderer.getSurfacePackage());
- Messenger messenger =
- new Messenger(new Handler(UI_HELPER_EXECUTOR.getLooper(), observer));
+ mActivePreviews.add(observer);
+ lifeCycleTracker.add(() -> mActivePreviews.remove(observer));
+
+ // Wrap the callback in a weak reference. This ensures that the callback is not kept
+ // alive due to the Messenger's IBinder
+ Messenger messenger = new Messenger(new Handler(
+ UI_HELPER_EXECUTOR.getLooper(),
+ new WeakCallbackWrapper(observer)));
+
Message msg = Message.obtain();
msg.replyTo = messenger;
result.putParcelable(KEY_CALLBACK, msg);
@@ -400,4 +408,34 @@ public class GridCustomizationsProvider extends ContentProvider {
&& plo.renderer.getDisplayId() == renderer.getDisplayId();
}
}
+
+ /**
+ * A WeakReference wrapper around Handler.Callback to avoid passing hard-reference over IPC
+ * when using a Messenger
+ */
+ private static class WeakCallbackWrapper implements Handler.Callback {
+
+ private final WeakReference mActual;
+ private final Message mCleanupMessage;
+
+ WeakCallbackWrapper(Handler.Callback actual) {
+ mActual = new WeakReference<>(actual);
+ mCleanupMessage = new Message();
+ }
+
+ @Override
+ public boolean handleMessage(Message message) {
+ Handler.Callback actual = mActual.get();
+ return actual != null && actual.handleMessage(message);
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ super.finalize();
+ Handler.Callback actual = mActual.get();
+ if (actual != null) {
+ actual.handleMessage(mCleanupMessage);
+ }
+ }
+ }
}
diff --git a/src/com/android/launcher3/graphics/PreviewSurfaceRenderer.java b/src/com/android/launcher3/graphics/PreviewSurfaceRenderer.java
index 3000b252d4..a7cf1a7876 100644
--- a/src/com/android/launcher3/graphics/PreviewSurfaceRenderer.java
+++ b/src/com/android/launcher3/graphics/PreviewSurfaceRenderer.java
@@ -105,7 +105,6 @@ public class PreviewSurfaceRenderer {
private final SurfaceControlViewHost mSurfaceControlViewHost;
private boolean mDestroyed = false;
- private LauncherPreviewRenderer mRenderer;
private boolean mHideQsb;
@Nullable private FrameLayout mViewRoot = null;
@@ -224,9 +223,8 @@ public class PreviewSurfaceRenderer {
* @param hide True to hide and false to show.
*/
public void hideBottomRow(boolean hide) {
- if (mRenderer != null) {
- mRenderer.hideBottomRow(hide);
- }
+ mHideQsb = hide;
+ loadAsync();
}
/**
@@ -368,15 +366,16 @@ public class PreviewSurfaceRenderer {
if (mDestroyed) {
return;
}
+ LauncherPreviewRenderer renderer;
if (Flags.newCustomizationPickerUi()) {
- mRenderer = new LauncherPreviewRenderer(inflationContext, idp, mPreviewColorOverride,
+ renderer = new LauncherPreviewRenderer(inflationContext, idp, mPreviewColorOverride,
mWallpaperColors, launcherWidgetSpanInfo);
} else {
- mRenderer = new LauncherPreviewRenderer(inflationContext, idp,
+ renderer = new LauncherPreviewRenderer(inflationContext, idp,
mWallpaperColors, launcherWidgetSpanInfo);
}
- mRenderer.hideBottomRow(mHideQsb);
- View view = mRenderer.getRenderedView(dataModel, widgetProviderInfoMap);
+ renderer.hideBottomRow(mHideQsb);
+ View view = renderer.getRenderedView(dataModel, widgetProviderInfoMap);
// This aspect scales the view to fit in the surface and centers it
final float scale = Math.min(mWidth / (float) view.getMeasuredWidth(),
mHeight / (float) view.getMeasuredHeight());