2021-06-08 20:03:43 -07:00
|
|
|
/*
|
|
|
|
|
* 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;
|
|
|
|
|
|
2021-11-26 11:38:28 +00:00
|
|
|
import android.content.pm.ActivityInfo.Config;
|
|
|
|
|
|
2021-06-08 20:03:43 -07:00
|
|
|
import androidx.annotation.NonNull;
|
2021-12-15 13:09:39 -08:00
|
|
|
import androidx.annotation.Nullable;
|
2021-06-08 20:03:43 -07:00
|
|
|
|
2021-10-21 15:31:51 +01:00
|
|
|
import com.android.systemui.shared.rotation.RotationButtonController;
|
2021-06-08 20:03:43 -07:00
|
|
|
|
2021-12-15 13:09:39 -08:00
|
|
|
import java.io.PrintWriter;
|
2021-11-24 10:54:27 -08:00
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
2021-06-08 20:03:43 -07:00
|
|
|
/**
|
|
|
|
|
* Hosts various taskbar controllers to facilitate passing between one another.
|
|
|
|
|
*/
|
|
|
|
|
public class TaskbarControllers {
|
|
|
|
|
|
|
|
|
|
public final TaskbarActivityContext taskbarActivityContext;
|
2021-12-15 13:09:39 -08:00
|
|
|
|
2021-06-08 20:03:43 -07:00
|
|
|
public final TaskbarDragController taskbarDragController;
|
|
|
|
|
public final TaskbarNavButtonController navButtonController;
|
|
|
|
|
public final NavbarButtonsViewController navbarButtonsViewController;
|
|
|
|
|
public final RotationButtonController rotationButtonController;
|
|
|
|
|
public final TaskbarDragLayerController taskbarDragLayerController;
|
2021-09-24 10:48:01 -07:00
|
|
|
public final TaskbarScrimViewController taskbarScrimViewController;
|
2021-06-08 20:03:43 -07:00
|
|
|
public final TaskbarViewController taskbarViewController;
|
2021-08-27 14:11:53 +01:00
|
|
|
public final TaskbarUnfoldAnimationController taskbarUnfoldAnimationController;
|
2021-06-04 15:35:46 -07:00
|
|
|
public final TaskbarKeyguardController taskbarKeyguardController;
|
2021-06-01 16:54:07 -07:00
|
|
|
public final StashedHandleViewController stashedHandleViewController;
|
|
|
|
|
public final TaskbarStashController taskbarStashController;
|
2021-07-30 16:00:20 -10:00
|
|
|
public final TaskbarEduController taskbarEduController;
|
2021-10-27 14:48:47 -07:00
|
|
|
public final TaskbarAutohideSuspendController taskbarAutohideSuspendController;
|
2021-10-12 12:38:55 -07:00
|
|
|
public final TaskbarPopupController taskbarPopupController;
|
2021-06-08 20:03:43 -07:00
|
|
|
|
2021-12-15 13:09:39 -08:00
|
|
|
@Nullable private LoggableTaskbarController[] mControllersToLog = null;
|
|
|
|
|
|
2021-06-08 20:03:43 -07:00
|
|
|
/** Do not store this controller, as it may change at runtime. */
|
|
|
|
|
@NonNull public TaskbarUIController uiController = TaskbarUIController.DEFAULT;
|
|
|
|
|
|
2021-11-24 10:54:27 -08:00
|
|
|
private boolean mAreAllControllersInitialized;
|
|
|
|
|
private final List<Runnable> mPostInitCallbacks = new ArrayList<>();
|
|
|
|
|
|
2021-06-08 20:03:43 -07:00
|
|
|
public TaskbarControllers(TaskbarActivityContext taskbarActivityContext,
|
|
|
|
|
TaskbarDragController taskbarDragController,
|
|
|
|
|
TaskbarNavButtonController navButtonController,
|
|
|
|
|
NavbarButtonsViewController navbarButtonsViewController,
|
|
|
|
|
RotationButtonController rotationButtonController,
|
|
|
|
|
TaskbarDragLayerController taskbarDragLayerController,
|
2021-06-04 15:35:46 -07:00
|
|
|
TaskbarViewController taskbarViewController,
|
2021-09-24 10:48:01 -07:00
|
|
|
TaskbarScrimViewController taskbarScrimViewController,
|
2021-08-27 14:11:53 +01:00
|
|
|
TaskbarUnfoldAnimationController taskbarUnfoldAnimationController,
|
2021-06-01 16:54:07 -07:00
|
|
|
TaskbarKeyguardController taskbarKeyguardController,
|
|
|
|
|
StashedHandleViewController stashedHandleViewController,
|
2021-07-30 16:00:20 -10:00
|
|
|
TaskbarStashController taskbarStashController,
|
2021-10-27 14:48:47 -07:00
|
|
|
TaskbarEduController taskbarEduController,
|
2021-10-12 12:38:55 -07:00
|
|
|
TaskbarAutohideSuspendController taskbarAutoHideSuspendController,
|
|
|
|
|
TaskbarPopupController taskbarPopupController) {
|
2021-06-08 20:03:43 -07:00
|
|
|
this.taskbarActivityContext = taskbarActivityContext;
|
|
|
|
|
this.taskbarDragController = taskbarDragController;
|
|
|
|
|
this.navButtonController = navButtonController;
|
|
|
|
|
this.navbarButtonsViewController = navbarButtonsViewController;
|
|
|
|
|
this.rotationButtonController = rotationButtonController;
|
|
|
|
|
this.taskbarDragLayerController = taskbarDragLayerController;
|
|
|
|
|
this.taskbarViewController = taskbarViewController;
|
2021-09-24 10:48:01 -07:00
|
|
|
this.taskbarScrimViewController = taskbarScrimViewController;
|
2021-08-27 14:11:53 +01:00
|
|
|
this.taskbarUnfoldAnimationController = taskbarUnfoldAnimationController;
|
2021-06-04 15:35:46 -07:00
|
|
|
this.taskbarKeyguardController = taskbarKeyguardController;
|
2021-06-01 16:54:07 -07:00
|
|
|
this.stashedHandleViewController = stashedHandleViewController;
|
|
|
|
|
this.taskbarStashController = taskbarStashController;
|
2021-07-30 16:00:20 -10:00
|
|
|
this.taskbarEduController = taskbarEduController;
|
2021-10-27 14:48:47 -07:00
|
|
|
this.taskbarAutohideSuspendController = taskbarAutoHideSuspendController;
|
2021-10-12 12:38:55 -07:00
|
|
|
this.taskbarPopupController = taskbarPopupController;
|
2021-06-08 20:03:43 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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().
|
|
|
|
|
*/
|
2021-10-01 11:31:45 -07:00
|
|
|
public void init(TaskbarSharedState sharedState) {
|
2021-11-24 10:54:27 -08:00
|
|
|
mAreAllControllersInitialized = false;
|
|
|
|
|
|
2021-10-27 14:48:47 -07:00
|
|
|
taskbarDragController.init(this);
|
2021-10-28 16:39:32 -07:00
|
|
|
navbarButtonsViewController.init(this);
|
2021-10-21 15:31:51 +01:00
|
|
|
rotationButtonController.init();
|
2021-06-08 20:03:43 -07:00
|
|
|
taskbarDragLayerController.init(this);
|
|
|
|
|
taskbarViewController.init(this);
|
2021-09-24 10:48:01 -07:00
|
|
|
taskbarScrimViewController.init(this);
|
2021-08-27 14:11:53 +01:00
|
|
|
taskbarUnfoldAnimationController.init(this);
|
2021-06-04 15:35:46 -07:00
|
|
|
taskbarKeyguardController.init(navbarButtonsViewController);
|
2021-06-01 16:54:07 -07:00
|
|
|
stashedHandleViewController.init(this);
|
2021-10-01 11:31:45 -07:00
|
|
|
taskbarStashController.init(this, sharedState);
|
2021-08-24 10:56:31 -07:00
|
|
|
taskbarEduController.init(this);
|
2021-10-19 14:47:23 -07:00
|
|
|
taskbarPopupController.init(this);
|
2021-11-24 10:54:27 -08:00
|
|
|
|
2021-12-15 13:09:39 -08:00
|
|
|
mControllersToLog = new LoggableTaskbarController[] {
|
|
|
|
|
taskbarDragController, navButtonController, navbarButtonsViewController,
|
|
|
|
|
taskbarDragLayerController, taskbarScrimViewController, taskbarViewController,
|
|
|
|
|
taskbarUnfoldAnimationController, taskbarKeyguardController,
|
|
|
|
|
stashedHandleViewController, taskbarStashController, taskbarEduController,
|
|
|
|
|
taskbarAutohideSuspendController, taskbarPopupController
|
|
|
|
|
};
|
|
|
|
|
|
2021-11-24 10:54:27 -08:00
|
|
|
mAreAllControllersInitialized = true;
|
|
|
|
|
for (Runnable postInitCallback : mPostInitCallbacks) {
|
|
|
|
|
postInitCallback.run();
|
|
|
|
|
}
|
|
|
|
|
mPostInitCallbacks.clear();
|
2021-06-08 20:03:43 -07:00
|
|
|
}
|
|
|
|
|
|
2021-11-26 11:38:28 +00:00
|
|
|
public void onConfigurationChanged(@Config int configChanges) {
|
|
|
|
|
navbarButtonsViewController.onConfigurationChanged(configChanges);
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-08 20:03:43 -07:00
|
|
|
/**
|
|
|
|
|
* Cleans up all controllers.
|
|
|
|
|
*/
|
|
|
|
|
public void onDestroy() {
|
2021-10-05 17:44:06 -07:00
|
|
|
navbarButtonsViewController.onDestroy();
|
2021-06-08 20:03:43 -07:00
|
|
|
uiController.onDestroy();
|
|
|
|
|
rotationButtonController.onDestroy();
|
|
|
|
|
taskbarDragLayerController.onDestroy();
|
2021-06-04 15:35:46 -07:00
|
|
|
taskbarKeyguardController.onDestroy();
|
2021-08-27 14:11:53 +01:00
|
|
|
taskbarUnfoldAnimationController.onDestroy();
|
2021-06-23 12:36:18 -07:00
|
|
|
taskbarViewController.onDestroy();
|
2021-08-17 16:07:22 -07:00
|
|
|
stashedHandleViewController.onDestroy();
|
2021-10-27 14:48:47 -07:00
|
|
|
taskbarAutohideSuspendController.onDestroy();
|
2021-10-19 14:47:23 -07:00
|
|
|
taskbarPopupController.onDestroy();
|
2021-12-15 13:09:39 -08:00
|
|
|
|
|
|
|
|
mControllersToLog = null;
|
2021-06-08 20:03:43 -07:00
|
|
|
}
|
2021-11-24 10:54:27 -08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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);
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-12-15 13:09:39 -08:00
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (LoggableTaskbarController controller : mControllersToLog) {
|
|
|
|
|
controller.dumpLogs(prefix + "\t", pw);
|
|
|
|
|
}
|
|
|
|
|
rotationButtonController.dumpLogs(prefix + "\t", pw);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected interface LoggableTaskbarController {
|
|
|
|
|
void dumpLogs(String prefix, PrintWriter pw);
|
|
|
|
|
}
|
2021-06-08 20:03:43 -07:00
|
|
|
}
|