mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 19:38:21 +00:00
Bug: 221455508
Test: opened all apps, widgets, -1 screen, notifications shade and keyboard in various combinations and orders; locked screen, launched app, returned home with the back/home buttons, opened overview
Change-Id: Ia0b406aacf72b34bd6b7ff1c01278ab6895a7da4
Merged-In: Ia0b406aacf72b34bd6b7ff1c01278ab6895a7da4
(cherry picked from commit 9c1a452a1d)
220 lines
9.7 KiB
Java
220 lines
9.7 KiB
Java
/*
|
|
* Copyright (C) 2021 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package com.android.launcher3.taskbar;
|
|
|
|
import android.content.pm.ActivityInfo.Config;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.VisibleForTesting;
|
|
|
|
import com.android.launcher3.taskbar.allapps.TaskbarAllAppsController;
|
|
import com.android.systemui.shared.rotation.RotationButtonController;
|
|
|
|
import java.io.PrintWriter;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Hosts various taskbar controllers to facilitate passing between one another.
|
|
*/
|
|
public class TaskbarControllers {
|
|
|
|
public final TaskbarActivityContext taskbarActivityContext;
|
|
|
|
public final TaskbarDragController taskbarDragController;
|
|
public final TaskbarNavButtonController navButtonController;
|
|
public final NavbarButtonsViewController navbarButtonsViewController;
|
|
public final RotationButtonController rotationButtonController;
|
|
public final TaskbarDragLayerController taskbarDragLayerController;
|
|
public final TaskbarScrimViewController taskbarScrimViewController;
|
|
public final TaskbarViewController taskbarViewController;
|
|
public final TaskbarUnfoldAnimationController taskbarUnfoldAnimationController;
|
|
public final TaskbarKeyguardController taskbarKeyguardController;
|
|
public final StashedHandleViewController stashedHandleViewController;
|
|
public final TaskbarStashController taskbarStashController;
|
|
public final TaskbarEduController taskbarEduController;
|
|
public final TaskbarAutohideSuspendController taskbarAutohideSuspendController;
|
|
public final TaskbarPopupController taskbarPopupController;
|
|
public final TaskbarForceVisibleImmersiveController taskbarForceVisibleImmersiveController;
|
|
public final TaskbarAllAppsController taskbarAllAppsController;
|
|
public final TaskbarInsetsController taskbarInsetsController;
|
|
|
|
@Nullable private LoggableTaskbarController[] mControllersToLog = null;
|
|
|
|
/** Do not store this controller, as it may change at runtime. */
|
|
@NonNull public TaskbarUIController uiController = TaskbarUIController.DEFAULT;
|
|
|
|
private boolean mAreAllControllersInitialized;
|
|
private final List<Runnable> mPostInitCallbacks = new ArrayList<>();
|
|
|
|
@Nullable private TaskbarSharedState mSharedState = null;
|
|
|
|
public TaskbarControllers(TaskbarActivityContext taskbarActivityContext,
|
|
TaskbarDragController taskbarDragController,
|
|
TaskbarNavButtonController navButtonController,
|
|
NavbarButtonsViewController navbarButtonsViewController,
|
|
RotationButtonController rotationButtonController,
|
|
TaskbarDragLayerController taskbarDragLayerController,
|
|
TaskbarViewController taskbarViewController,
|
|
TaskbarScrimViewController taskbarScrimViewController,
|
|
TaskbarUnfoldAnimationController taskbarUnfoldAnimationController,
|
|
TaskbarKeyguardController taskbarKeyguardController,
|
|
StashedHandleViewController stashedHandleViewController,
|
|
TaskbarStashController taskbarStashController,
|
|
TaskbarEduController taskbarEduController,
|
|
TaskbarAutohideSuspendController taskbarAutoHideSuspendController,
|
|
TaskbarPopupController taskbarPopupController,
|
|
TaskbarForceVisibleImmersiveController taskbarForceVisibleImmersiveController,
|
|
TaskbarAllAppsController taskbarAllAppsController,
|
|
TaskbarInsetsController taskbarInsetsController) {
|
|
this.taskbarActivityContext = taskbarActivityContext;
|
|
this.taskbarDragController = taskbarDragController;
|
|
this.navButtonController = navButtonController;
|
|
this.navbarButtonsViewController = navbarButtonsViewController;
|
|
this.rotationButtonController = rotationButtonController;
|
|
this.taskbarDragLayerController = taskbarDragLayerController;
|
|
this.taskbarViewController = taskbarViewController;
|
|
this.taskbarScrimViewController = taskbarScrimViewController;
|
|
this.taskbarUnfoldAnimationController = taskbarUnfoldAnimationController;
|
|
this.taskbarKeyguardController = taskbarKeyguardController;
|
|
this.stashedHandleViewController = stashedHandleViewController;
|
|
this.taskbarStashController = taskbarStashController;
|
|
this.taskbarEduController = taskbarEduController;
|
|
this.taskbarAutohideSuspendController = taskbarAutoHideSuspendController;
|
|
this.taskbarPopupController = taskbarPopupController;
|
|
this.taskbarForceVisibleImmersiveController = taskbarForceVisibleImmersiveController;
|
|
this.taskbarAllAppsController = taskbarAllAppsController;
|
|
this.taskbarInsetsController = taskbarInsetsController;
|
|
}
|
|
|
|
/**
|
|
* Initializes all controllers. Note that controllers can now reference each other through this
|
|
* TaskbarControllers instance, but should be careful to only access things that were created
|
|
* in constructors for now, as some controllers may still be waiting for init().
|
|
*/
|
|
public void init(@NonNull TaskbarSharedState sharedState) {
|
|
mAreAllControllersInitialized = false;
|
|
mSharedState = sharedState;
|
|
|
|
taskbarDragController.init(this);
|
|
navbarButtonsViewController.init(this);
|
|
rotationButtonController.init();
|
|
taskbarDragLayerController.init(this);
|
|
taskbarViewController.init(this);
|
|
taskbarScrimViewController.init(this);
|
|
taskbarUnfoldAnimationController.init(this);
|
|
taskbarKeyguardController.init(navbarButtonsViewController);
|
|
stashedHandleViewController.init(this);
|
|
taskbarStashController.init(this, sharedState.setupUIVisible);
|
|
taskbarEduController.init(this);
|
|
taskbarPopupController.init(this);
|
|
taskbarForceVisibleImmersiveController.init(this);
|
|
taskbarAllAppsController.init(this, sharedState.allAppsVisible);
|
|
navButtonController.init(this);
|
|
taskbarInsetsController.init(this);
|
|
|
|
mControllersToLog = new LoggableTaskbarController[] {
|
|
taskbarDragController, navButtonController, navbarButtonsViewController,
|
|
taskbarDragLayerController, taskbarScrimViewController, taskbarViewController,
|
|
taskbarUnfoldAnimationController, taskbarKeyguardController,
|
|
stashedHandleViewController, taskbarStashController, taskbarEduController,
|
|
taskbarAutohideSuspendController, taskbarPopupController, taskbarInsetsController
|
|
};
|
|
|
|
mAreAllControllersInitialized = true;
|
|
for (Runnable postInitCallback : mPostInitCallbacks) {
|
|
postInitCallback.run();
|
|
}
|
|
mPostInitCallbacks.clear();
|
|
}
|
|
|
|
@Nullable
|
|
public TaskbarSharedState getSharedState() {
|
|
// This should only be null if called before init() and after destroy().
|
|
return mSharedState;
|
|
}
|
|
|
|
public void onConfigurationChanged(@Config int configChanges) {
|
|
navbarButtonsViewController.onConfigurationChanged(configChanges);
|
|
}
|
|
|
|
/**
|
|
* Cleans up all controllers.
|
|
*/
|
|
public void onDestroy() {
|
|
mSharedState = null;
|
|
|
|
navbarButtonsViewController.onDestroy();
|
|
uiController.onDestroy();
|
|
rotationButtonController.onDestroy();
|
|
taskbarDragLayerController.onDestroy();
|
|
taskbarKeyguardController.onDestroy();
|
|
taskbarUnfoldAnimationController.onDestroy();
|
|
taskbarViewController.onDestroy();
|
|
stashedHandleViewController.onDestroy();
|
|
taskbarAutohideSuspendController.onDestroy();
|
|
taskbarPopupController.onDestroy();
|
|
taskbarForceVisibleImmersiveController.onDestroy();
|
|
taskbarAllAppsController.onDestroy();
|
|
navButtonController.onDestroy();
|
|
taskbarInsetsController.onDestroy();
|
|
|
|
mControllersToLog = null;
|
|
}
|
|
|
|
/**
|
|
* If all controllers are already initialized, runs the given callback immediately. Otherwise,
|
|
* queues it to run after calling init() on all controllers. This should likely be used in any
|
|
* case where one controller is telling another controller to do something inside init().
|
|
*/
|
|
public void runAfterInit(Runnable callback) {
|
|
if (mAreAllControllersInitialized) {
|
|
callback.run();
|
|
} else {
|
|
mPostInitCallbacks.add(callback);
|
|
}
|
|
}
|
|
|
|
protected void dumpLogs(String prefix, PrintWriter pw) {
|
|
pw.println(prefix + "TaskbarControllers:");
|
|
|
|
if (mControllersToLog == null) {
|
|
pw.println(String.format(
|
|
"%s\t%s", prefix, "All taskbar controllers have already been destroyed."));
|
|
return;
|
|
}
|
|
|
|
pw.println(String.format(
|
|
"%s\tmAreAllControllersInitialized=%b", prefix, mAreAllControllersInitialized));
|
|
for (LoggableTaskbarController controller : mControllersToLog) {
|
|
controller.dumpLogs(prefix + "\t", pw);
|
|
}
|
|
uiController.dumpLogs(prefix + "\t", pw);
|
|
rotationButtonController.dumpLogs(prefix + "\t", pw);
|
|
}
|
|
|
|
@VisibleForTesting
|
|
TaskbarActivityContext getTaskbarActivityContext() {
|
|
// Used to mock
|
|
return taskbarActivityContext;
|
|
}
|
|
|
|
protected interface LoggableTaskbarController {
|
|
void dumpLogs(String prefix, PrintWriter pw);
|
|
}
|
|
}
|