赞
踩
TaskStack 用于管理 app,一般一个应用程序对应一个 TaskStack,其父容器为 TaskStackContainers(DisplayContent 的子容器),子容器为 Task。
关于其父类及祖父类的介绍,见 → WindowContainer简介、ConfigurationContainer简介。
源码地址→/frameworks/base/services/core/java/com/android/server/wm/TaskStack.java
(1)类定义
- //Task 为子节点类型
- public class TaskStack extends WindowContainer<Task> implements BoundsAnimationTarget, ConfigurationContainerListener
(2)主要属性
- final int mStackId
-
- private final Rect mAdjustedBounds = new Rect()
-
- private final Rect mFullyAdjustedImeBounds = new Rect()
-
- private SurfaceControl mAnimationBackgroundSurface
-
- private WindowStateAnimator mAnimationBackgroundAnimator
-
- final AppTokenList mExitingAppTokens = new AppTokenList()
-
- private WindowState mImeWin
-
- private Rect mBoundsAnimationTarget = new Rect()
-
- private Rect mBoundsAnimationSourceHintBounds = new Rect()
-
- ActivityStack mActivityStack
-
- private final Point mLastSurfaceSize = new Point()
(3)构造方法
- TaskStack(WindowManagerService service, int stackId, ActivityStack activityStack) {
- super(service);
- mStackId = stackId;
- mActivityStack = activityStack;
- activityStack.registerConfigurationChangeListener(this);
- ...
- }
(4)Task 相关
- //mChildren.get(mChildren.size() - 1)
- Task findHomeTask()
-
- //addTask(task, position, task.showForAllUsers(), true)
- void addTask(Task task, int position)
-
- //positionChildAt(position, task, moveParents, showForAllUsers)
- void addTask(Task task, int position, boolean showForAllUsers, boolean moveParents)
-
- //mExitingAppTokens.get(i).getTask() == task ? mExitingAppTokens.remove(i)
- void removeChild(Task task)
-
- //removeImmediately()
- void removeIfPossible()
-
- //super.removeImmediately()
- void removeImmediately()
-
- //child.positionAt(position)
- void positionChildAt(Task child, int position)
-
- //positionChildAt(POSITION_TOP, child, includingParents)
- void positionChildAtTop(Task child, boolean includingParents)
-
- //positionChildAt(POSITION_BOTTOM, child, includingParents)
- void positionChildAtBottom(Task child, boolean includingParents)
-
- //positionChildAt(position, child, includingParents, child.showForAllUsers())
- void positionChildAt(int position, Task child, boolean includingParents)
-
- //mChildren.get(i).mUserId == userId ? true : false
- boolean hasTaskForUser(int userId)
-
- //mChildren.get(i).prepareFreezingBounds()
- void prepareFreezingTaskBounds()
(5)Stack 相关
- //inPinnedWindowingMode() ? (int)Math.ceil(mWmService.dipToPixel(PINNED_WINDOWING_MODE_ELEVATION_IN_DIP, displayMetrics) * 2) : 0
- int getStackOutset()
-
- //return displayContentRect.top + (int)((originalStackBottom - displayContentRect.top) * ADJUSTED_STACK_FRACTION_MIN)
- int getMinTopStackBottom(final Rect displayContentRect, int originalStackBottom)
(6)Bounds 相关
- //super.setBounds(bounds)
- public int setBounds(Rect bounds)
-
- //out.set(super.getBounds())
- void getRawBounds(Rect out)
-
- //super.getBounds()
- Rect getRawBounds()
-
- //bounds.set(super.getBounds())
- public void getBounds(Rect bounds)
-
- //super.getBounds()
- public Rect getBounds()
-
- //outBounds.set(mBoundsAnimationTarget)
- void getFinalAnimationBounds(Rect outBounds)
-
- //outBounds.set(mBoundsAnimationSourceHintBounds)
- void getFinalAnimationSourceHintBounds(Rect outBounds)
-
- //getBounds(outBounds)
- void getAnimationOrCurrentBounds(Rect outBounds)
-
- //matchParentBounds()
- boolean fillsParent()
-
- //获取包含指定坐标的 task
- void findTaskForResizePoint(int x, int y, int delta, DisplayContent.TaskForResizePointSearchResult results)
-
- //设置不可触摸区域
- void setTouchExcludeRegion(Task focusedTask, int delta, Region touchExcludeRegion, Rect contentRect, Rect postExclude)
(7)Display 相关
- //final DisplayContent targetDc = mWmService.mRoot.getDisplayContent(displayId)
- //targetDc.moveStackToDisplay(this, onTop)
- void reparent(int displayId, Rect outStackBounds, boolean onTop)
-
- //final int outset = getStackOutset();
- //outPos.x -= outset; outPos.y -= outset
- void getRelativeDisplayedPosition(Point outPos)
-
- //super.onDisplayChanged(dc)
- void onDisplayChanged(DisplayContent dc)
-
- //return mDisplayContent.getDisplayInfo()
- public DisplayInfo getDisplayInfo()
-
- //return mDisplayContent != null
- public boolean isAttached()
(8)Surface 相关
- //mLastSurfaceSize
- Point getLastSurfaceSize()
-
- //super.prepareSurfaces()
- void prepareSurfaces()
(9)动画相关
- //hideAnimationSurface()
- void resetAnimationBackgroundAnimator()
-
- //mAnimationBackgroundAnimator = winAnimator
- void setAnimationBackground(WindowStateAnimator winAnimator, int color)
-
- //mChildren.get(i).isTaskAnimating()
- boolean isTaskAnimating()
-
- public void onPipAnimationEndResize()
-
- //return mBoundsAnimating
- public boolean isForceScaled()
-
- //return mBoundsAnimating
- public boolean isAnimatingBounds()
-
- //return mBoundsAnimatingToFullscreen
- public boolean lastAnimatingBoundsWasToFullscreen()
-
- //return isAnimatingBounds() && lastAnimatingBoundsWasToFullscreen()
- public boolean isAnimatingBoundsToFullscreen()
-
- public boolean onAnimationStart(boolean schedulePipModeChangedCallback, boolean forceUpdate, int animationType)
-
- public void onAnimationEnd(boolean schedulePipModeChangedCallback, Rect finalStackSize, boolean moveToFullscreen)
-
- //return mAnimatingAppWindowTokenRegistry
- AnimatingAppWindowTokenRegistry getAnimatingAppWindowTokenRegistry()
(10)Dock 相关
- //DockedDividerUtils.calculateBoundsForPosition(target.position, dockSide, outBounds, displayWidth, displayHeight, dividerSize)
- void snapDockedStackAfterRotation(Configuration parentConfig, DisplayCutout displayCutout, Rect outBounds)
-
- //getStackDockedModeBounds(parentConfig, false, outStackBounds, dockedBounds, mDisplayContent.mDividerControllerLocked.getContentWidth(), dockedOnTopOrLeft)
- void getStackDockedModeBoundsLocked(Configuration parentConfig, Rect dockedBounds, Rect currentTempTaskBounds, Rect outStackBounds, Rect outTempTaskBounds)
-
- //getStackDockedModeBoundsLocked(mDisplayContent.getConfiguration(), dockedBounds, null, bounds, tempBounds)
- void resetDockedStackToMiddle()
-
- //getDockSide(mDisplayContent.getConfiguration(), getRawBounds())
- int getDockSide()
-
- //getDockSide(dc, dc.getConfiguration(), getRawBounds())
- int getDockSideForDisplay(DisplayContent dc)
-
- //getDockSide(mDisplayContent, parentConfig, bounds)
- int getDockSide(Configuration parentConfig, Rect bounds)
-
- //return mMinimizeAmount != 0f
- boolean isAdjustedForMinimizedDockedStack()
-
- //mMinimizeAmount = minimizeAmount
- //updateAdjustedBounds()
- boolean setAdjustedForMinimizedDock(float minimizeAmount)
-
- //repositionSplitScreenStackAfterRotation(parentConfig, primary, inOutBounds)
- //snapDockedStackAfterRotation(parentConfig, cutout, inOutBounds)
- void calculateDockedBoundsForConfigChange(Configuration parentConfig, Rect inOutBounds)
(11)输入法相关
- //updateAdjustForIme(adjustImeAmount, adjustDividerAmount, true)
- void setAdjustedForIme(WindowState imeWin, boolean keepLastAmount)
-
- //mAdjustImeAmount = adjustAmount; mAdjustDividerAmount = adjustDividerAmount;
- //updateAdjustedBounds()
- boolean updateAdjustForIme(float adjustAmount, float adjustDividerAmount, boolean force)
-
- //mAdjustedForIme
- boolean isAdjustedForIme()
-
- //return mImeWin != null && mImeWin.isAnimatingLw()
- boolean isAnimatingForIme()
-
- //mImeWin = null; mImeGoingAway = false; mAdjustImeAmount = 0f; mAdjustDividerAmount = 0f
- //updateAdjustedBounds()
- void resetAdjustedForIme(boolean adjustBoundsNow)
-
- //mChildren.get(i).setDragResizing(true, DRAG_RESIZE_MODE_DOCKED_DIVIDER)
- //mChildren.get(i).setWaitingForDrawnIfResizingChanged()
- void beginImeAdjustAnimation()
-
- //mChildren.get(j).setDragResizing(false, DRAG_RESIZE_MODE_DOCKED_DIVIDER)
- void endImeAdjustAnimation()
-
- //task.alignToAdjustedBounds(mAdjustedBounds, insetBounds, getDockSide() == DOCKED_TOP)
- void applyAdjustForImeIfNeeded(Task task)
(12)画中画(PictureInPicture)
- Rect getPictureInPictureBounds(float aspectRatio, Rect stackBounds)
-
- void setPictureInPictureAspectRatio(float aspectRatio)
-
- void setPictureInPictureActions(List<RemoteAction> actions)
(13)Pinned 相关
- //getPendingTransaction().setAlpha(sc, mCancelCurrentBoundsAnimation ? 1 : alpha)
- public boolean setPinnedStackAlpha(float alpha)
-
- //mWmService.mActivityTaskManager.resizePinnedStack(stackBounds, tempTaskBounds)
- public boolean setPinnedStackSize(Rect stackBounds, Rect tempTaskBounds)
-
- return mBoundsAnimating && mCancelCurrentBoundsAnimation
- public boolean pinnedStackResizeDisallowed()
-
- void animateResizePinnedStack(Rect toBounds, Rect sourceHintBounds, int animationDuration, boolean fromFullscreen)
-
- //inOutBounds.set(mTmpRect3)
- boolean calculatePinnedBoundsForConfigChange(Rect inOutBounds)
(14)dim 相关
- //getBounds(out)
- public void getDimBounds(Rect out)
-
- //mDimmer.dimAbove(getPendingTransaction(), alpha)
- void dim(float alpha)
-
- //mDimmer.stopDim(getPendingTransaction())
- void stopDimming()
(15)其他
- //return (canSpecifyOrientation()) ? super.getOrientation() : SCREEN_ORIENTATION_UNSET
- int getOrientation()
-
- //updateSurfaceSize(getPendingTransaction())
- public void onConfigurationChanged(Configuration newParentConfig)
-
- //mWmService.mWindowPlacerLocked.requestTraversal()
- void onParentChanged()
-
- //return (mBoundsAnimatingRequested || mBoundsAnimating)
- public boolean deferScheduleMultiWindowModeChanged()
-
- boolean shouldIgnoreInput()
-
- public boolean shouldDeferStartOnMoveToFullscreen()
-
- void switchUser()
-
- int getMinimizeDistance()
-
- //getDisplayContent().mBoundsAnimationController.onAllWindowsDrawn()
- void onAllWindowsDrawn()
-
- boolean checkCompleteDeferredRemoval()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。