Cleaning up some no-op calls during workspace binding
Bug: 318539160
Flag: None
Test: Manual
Change-Id: Ida21d849a06ed9c0ebf5671214dd9ee8525288d3
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 2b203e1..2471254 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -237,7 +237,6 @@
import com.android.launcher3.util.Thunk;
import com.android.launcher3.util.TouchController;
import com.android.launcher3.util.TraceHelper;
-import com.android.launcher3.util.ViewOnDrawExecutor;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.ComposeInitializer;
import com.android.launcher3.views.FloatingIconView;
@@ -2233,12 +2232,6 @@
return info;
}
- public void clearPendingExecutor(ViewOnDrawExecutor executor) {
- if (mModelCallbacks.getPendingExecutor() == executor) {
- mModelCallbacks.setPendingExecutor(null);
- }
- }
-
/**
* Call back when ModelCallbacks finish binding the Launcher data.
*/
diff --git a/src/com/android/launcher3/ModelCallbacks.kt b/src/com/android/launcher3/ModelCallbacks.kt
index f6bc1f1..0e38007 100644
--- a/src/com/android/launcher3/ModelCallbacks.kt
+++ b/src/com/android/launcher3/ModelCallbacks.kt
@@ -3,7 +3,6 @@
import android.annotation.TargetApi
import android.os.Build
import android.os.Trace
-import android.view.ViewTreeObserver.OnDrawListener
import androidx.annotation.UiThread
import com.android.launcher3.LauncherConstants.TraceEvents
import com.android.launcher3.WorkspaceLayoutManager.FIRST_SCREEN_ID
@@ -18,7 +17,6 @@
import com.android.launcher3.model.data.WorkspaceItemInfo
import com.android.launcher3.popup.PopupContainerWithArrow
import com.android.launcher3.util.ComponentKey
-import com.android.launcher3.util.Executors
import com.android.launcher3.util.IntArray as LIntArray
import com.android.launcher3.util.IntSet as LIntSet
import com.android.launcher3.util.PackageUserKey
@@ -77,11 +75,15 @@
workspaceItemCount: Int,
isBindSync: Boolean
) {
+ if (Utilities.ATLEAST_S) {
+ Trace.endAsyncSection(
+ TraceEvents.DISPLAY_WORKSPACE_TRACE_METHOD_NAME,
+ TraceEvents.DISPLAY_WORKSPACE_TRACE_COOKIE
+ )
+ }
synchronouslyBoundPages = boundPages
pagesToBindSynchronously = LIntSet()
clearPendingBinds()
- val executor = ViewOnDrawExecutor(pendingTasks)
- pendingExecutor = executor
if (!launcher.isInState(LauncherState.ALL_APPS)) {
launcher.appsView.appsStore.enableDeferUpdates(AllAppsStore.DEFER_UPDATES_NEXT_DRAW)
pendingTasks.add {
@@ -90,24 +92,15 @@
)
}
}
- executor.onLoadAnimationCompleted()
- executor.attachTo(launcher)
- if (Utilities.ATLEAST_S) {
- Trace.endAsyncSection(
- TraceEvents.DISPLAY_WORKSPACE_TRACE_METHOD_NAME,
- TraceEvents.DISPLAY_WORKSPACE_TRACE_COOKIE
- )
- }
- launcher.bindComplete(workspaceItemCount, isBindSync)
- launcher.rootView.viewTreeObserver.addOnDrawListener(
- object : OnDrawListener {
- override fun onDraw() {
- Executors.MAIN_EXECUTOR.handler.postAtFrontOfQueue {
- launcher.rootView.getViewTreeObserver().removeOnDrawListener(this)
- }
+ val executor =
+ ViewOnDrawExecutor(pendingTasks) {
+ if (pendingExecutor == it) {
+ pendingExecutor = null
}
}
- )
+ pendingExecutor = executor
+ executor.attachTo(launcher)
+ launcher.bindComplete(workspaceItemCount, isBindSync)
}
/**
diff --git a/src/com/android/launcher3/util/ViewOnDrawExecutor.java b/src/com/android/launcher3/util/ViewOnDrawExecutor.java
index fada4a3..26bfd36 100644
--- a/src/com/android/launcher3/util/ViewOnDrawExecutor.java
+++ b/src/com/android/launcher3/util/ViewOnDrawExecutor.java
@@ -20,6 +20,8 @@
import android.view.View.OnAttachStateChangeListener;
import android.view.ViewTreeObserver.OnDrawListener;
+import androidx.annotation.NonNull;
+
import com.android.launcher3.Launcher;
import java.util.function.Consumer;
@@ -31,26 +33,23 @@
OnAttachStateChangeListener {
private final RunnableList mTasks;
-
- private Consumer<ViewOnDrawExecutor> mOnClearCallback;
+ private final Consumer<ViewOnDrawExecutor> mOnClearCallback;
private View mAttachedView;
private boolean mCompleted;
- private boolean mLoadAnimationCompleted;
private boolean mFirstDrawCompleted;
private boolean mCancelled;
- public ViewOnDrawExecutor(RunnableList tasks) {
+ public ViewOnDrawExecutor(RunnableList tasks,
+ @NonNull Consumer<ViewOnDrawExecutor> onClearCallback) {
mTasks = tasks;
+ mOnClearCallback = onClearCallback;
}
public void attachTo(Launcher launcher) {
- mOnClearCallback = launcher::clearPendingExecutor;
mAttachedView = launcher.getWorkspace();
-
mAttachedView.addOnAttachStateChangeListener(this);
-
if (mAttachedView.isAttachedToWindow()) {
attachObserver();
}
@@ -77,17 +76,10 @@
mAttachedView.post(this);
}
- public void onLoadAnimationCompleted() {
- mLoadAnimationCompleted = true;
- if (mAttachedView != null) {
- mAttachedView.post(this);
- }
- }
-
@Override
public void run() {
- // Post the pending tasks after both onDraw and onLoadAnimationCompleted have been called.
- if (mLoadAnimationCompleted && mFirstDrawCompleted && !mCompleted) {
+ // Post the pending tasks after first draw
+ if (mFirstDrawCompleted && !mCompleted) {
markCompleted();
}
}
@@ -104,9 +96,8 @@
mAttachedView.getViewTreeObserver().removeOnDrawListener(this);
mAttachedView.removeOnAttachStateChangeListener(this);
}
- if (mOnClearCallback != null) {
- mOnClearCallback.accept(this);
- }
+
+ mOnClearCallback.accept(this);
}
public void cancel() {