blob: 9f03d9aec1669f0b0d0210f0580f459972e513f8 [file] [log] [blame]
/*
* Copyright (C) 2022 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.wm.shell.windowdecor;
import android.app.ActivityManager;
import android.os.IBinder;
import android.view.SurfaceControl;
import android.window.TransitionInfo;
import com.android.wm.shell.freeform.FreeformTaskTransitionStarter;
/**
* The interface used by some {@link com.android.wm.shell.ShellTaskOrganizer.TaskListener} to help
* customize {@link WindowDecoration}. Its implementations are responsible to interpret user's
* interactions with UI widgets in window decorations and send corresponding requests to system
* servers.
*/
public interface WindowDecorViewModel {
/**
* Sets the transition starter that starts freeform task transitions. Only called when
* {@link com.android.wm.shell.transition.Transitions#ENABLE_SHELL_TRANSITIONS} is {@code true}.
*
* @param transitionStarter the transition starter that starts freeform task transitions
*/
void setFreeformTaskTransitionStarter(FreeformTaskTransitionStarter transitionStarter);
/**
* Creates a window decoration for the given task. Can be {@code null} for Fullscreen tasks but
* not Freeform ones.
*
* @param taskInfo the initial task info of the task
* @param taskSurface the surface of the task
* @param startT the start transaction to be applied before the transition
* @param finishT the finish transaction to restore states after the transition
* @return {@code true} if window decoration was created, {@code false} otherwise
*/
boolean onTaskOpening(
ActivityManager.RunningTaskInfo taskInfo,
SurfaceControl taskSurface,
SurfaceControl.Transaction startT,
SurfaceControl.Transaction finishT);
/**
* Notifies a task info update on the given task, with the window decoration created previously
* for this task by {@link #onTaskOpening}.
*
* @param taskInfo the new task info of the task
*/
void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo);
/**
* Notifies a transition is about to start about the given task to give the window decoration a
* chance to prepare for this transition. Unlike {@link #onTaskInfoChanged}, this method creates
* a window decoration if one does not exist but is required.
*
* @param taskInfo the initial task info of the task
* @param taskSurface the surface of the task
* @param startT the start transaction to be applied before the transition
* @param finishT the finish transaction to restore states after the transition
*/
void onTaskChanging(
ActivityManager.RunningTaskInfo taskInfo,
SurfaceControl taskSurface,
SurfaceControl.Transaction startT,
SurfaceControl.Transaction finishT);
/**
* Notifies that the given task is about to close to give the window decoration a chance to
* prepare for this transition.
*
* @param taskInfo the initial task info of the task
* @param startT the start transaction to be applied before the transition
* @param finishT the finish transaction to restore states after the transition
*/
void onTaskClosing(
ActivityManager.RunningTaskInfo taskInfo,
SurfaceControl.Transaction startT,
SurfaceControl.Transaction finishT);
/**
* Destroys the window decoration of the give task.
*
* @param taskInfo the info of the task
*/
void destroyWindowDecoration(ActivityManager.RunningTaskInfo taskInfo);
/**
* Notifies that a shell transition is about to start. If the transition is of type
* TRANSIT_ENTER_DESKTOP, it will save that transition to unpause relayout for the transitioning
* task after the transition has ended.
*
* @param transition the ready transaction
* @param info of Transition to check if relayout needs to be paused for a task
* @param change a change in the given transition
*/
default void onTransitionReady(IBinder transition, TransitionInfo info,
TransitionInfo.Change change) {}
/**
* Notifies that a shell transition is about to merge with another to give the window
* decoration a chance to prepare for this merge.
*
* @param merged the transaction being merged
* @param playing the transaction being merged into
*/
default void onTransitionMerged(IBinder merged, IBinder playing) {}
/**
* Notifies that a shell transition is about to finish to give the window decoration a chance
* to clean up.
*
* @param transaction
*/
default void onTransitionFinished(IBinder transaction) {}
}