Merge "Add skeleton Growth Framework nudge controller." into main

This commit is contained in:
Li Lin
2025-03-13 09:49:00 -07:00
committed by Android (Google) Code Review
4 changed files with 75 additions and 3 deletions
@@ -139,6 +139,7 @@ import com.android.launcher3.taskbar.bubbles.stashing.PersistentBubbleStashContr
import com.android.launcher3.taskbar.bubbles.stashing.TransientBubbleStashController;
import com.android.launcher3.taskbar.customization.TaskbarFeatureEvaluator;
import com.android.launcher3.taskbar.customization.TaskbarSpecsEvaluator;
import com.android.launcher3.taskbar.growth.NudgeController;
import com.android.launcher3.taskbar.navbutton.NearestTouchFrame;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayController;
import com.android.launcher3.testing.TestLogging;
@@ -381,7 +382,8 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
new TaskbarPinningController(this),
bubbleControllersOptional,
new TaskbarDesktopModeController(this,
DesktopVisibilityController.INSTANCE.get(this)));
DesktopVisibilityController.INSTANCE.get(this)),
new NudgeController(this));
mLauncherPrefs = LauncherPrefs.get(this);
onViewCreated();
@@ -25,6 +25,7 @@ import androidx.annotation.VisibleForTesting;
import com.android.launcher3.anim.AnimatedFloat;
import com.android.launcher3.taskbar.allapps.TaskbarAllAppsController;
import com.android.launcher3.taskbar.bubbles.BubbleControllers;
import com.android.launcher3.taskbar.growth.NudgeController;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayController;
import com.android.systemui.shared.rotation.RotationButtonController;
import com.android.wm.shell.shared.bubbles.BubbleBarLocation;
@@ -67,6 +68,7 @@ public class TaskbarControllers {
public final TaskbarPinningController taskbarPinningController;
public final Optional<BubbleControllers> bubbleControllers;
public final TaskbarDesktopModeController taskbarDesktopModeController;
public final NudgeController nudgeController;
@Nullable private LoggableTaskbarController[] mControllersToLog = null;
@Nullable private BackgroundRendererController[] mBackgroundRendererControllers = null;
@@ -115,7 +117,8 @@ public class TaskbarControllers {
KeyboardQuickSwitchController keyboardQuickSwitchController,
TaskbarPinningController taskbarPinningController,
Optional<BubbleControllers> bubbleControllers,
TaskbarDesktopModeController taskbarDesktopModeController) {
TaskbarDesktopModeController taskbarDesktopModeController,
NudgeController nudgeController) {
this.taskbarActivityContext = taskbarActivityContext;
this.taskbarDragController = taskbarDragController;
this.navButtonController = navButtonController;
@@ -143,6 +146,7 @@ public class TaskbarControllers {
this.taskbarPinningController = taskbarPinningController;
this.bubbleControllers = bubbleControllers;
this.taskbarDesktopModeController = taskbarDesktopModeController;
this.nudgeController = nudgeController;
}
/**
@@ -179,6 +183,7 @@ public class TaskbarControllers {
keyboardQuickSwitchController.init(this);
taskbarPinningController.init(this, mSharedState);
taskbarDesktopModeController.init(this, mSharedState);
nudgeController.init(this);
mControllersToLog = new LoggableTaskbarController[] {
taskbarDragController, navButtonController, navbarButtonsViewController,
@@ -189,6 +194,7 @@ public class TaskbarControllers {
voiceInteractionWindowController, taskbarRecentAppsController,
taskbarTranslationController, taskbarEduTooltipController,
keyboardQuickSwitchController, taskbarPinningController,
nudgeController
};
mBackgroundRendererControllers = new BackgroundRendererController[] {
taskbarDragLayerController, taskbarScrimViewController,
@@ -344,7 +350,7 @@ public class TaskbarControllers {
return taskbarActivityContext;
}
protected interface LoggableTaskbarController {
public interface LoggableTaskbarController {
void dumpLogs(String prefix, PrintWriter pw);
}
@@ -0,0 +1,61 @@
/*
* Copyright (C) 2025 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.taskbar.growth
import android.content.Context
import com.android.launcher3.Utilities
import com.android.launcher3.taskbar.TaskbarActivityContext
import com.android.launcher3.taskbar.TaskbarControllers
import com.android.launcher3.taskbar.TaskbarControllers.LoggableTaskbarController
import com.android.launcher3.util.DisplayController
import com.android.launcher3.views.ActivityContext
import java.io.PrintWriter
/** Controls nudge lifecycles. */
class NudgeController(context: Context) : LoggableTaskbarController {
protected val activityContext: TaskbarActivityContext = ActivityContext.lookupContext(context)
private val isNudgeEnabled: Boolean
get() {
return !Utilities.isRunningInTestHarness() &&
!activityContext.isPhoneMode &&
!activityContext.isTinyTaskbar
}
private lateinit var controllers: TaskbarControllers
fun init(controllers: TaskbarControllers) {
this.controllers = controllers
}
fun maybeShow(payload: NudgePayload) {
if (!isNudgeEnabled || !DisplayController.isTransientTaskbar(activityContext)) {
return
}
// TODO: b/398033012 - create and show nudge view based on the payload.
}
/** Closes the current [nudgeView]. */
fun hide() {
// TODO: b/398033012 - hide the nudge view.
}
override fun dumpLogs(prefix: String?, pw: PrintWriter?) {
pw?.println(prefix + "NudgeController:")
pw?.println("$prefix\tisNudgeEnabled=$isNudgeEnabled")
}
}
@@ -17,6 +17,7 @@ package com.android.launcher3.taskbar
import com.android.launcher3.taskbar.allapps.TaskbarAllAppsController
import com.android.launcher3.taskbar.bubbles.BubbleControllers
import com.android.launcher3.taskbar.growth.NudgeController
import com.android.launcher3.taskbar.overlay.TaskbarOverlayController
import com.android.systemui.shared.rotation.RotationButtonController
import java.util.Optional
@@ -58,6 +59,7 @@ abstract class TaskbarBaseTestCase {
@Mock lateinit var taskbarPinningController: TaskbarPinningController
@Mock lateinit var optionalBubbleControllers: Optional<BubbleControllers>
@Mock lateinit var taskbarDesktopModeController: TaskbarDesktopModeController
@Mock lateinit var nudgeController: NudgeController
lateinit var taskbarControllers: TaskbarControllers
@@ -100,6 +102,7 @@ abstract class TaskbarBaseTestCase {
taskbarPinningController,
optionalBubbleControllers,
taskbarDesktopModeController,
nudgeController,
)
}
}