Loading packages/SystemUI/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java +76 −35 Original line number Diff line number Diff line Loading @@ -52,34 +52,23 @@ public class TaskGridLayoutAlgorithm { private float mAppAspectRatio; private Rect mSystemInsets = new Rect(); public TaskGridLayoutAlgorithm(Context context) { reloadOnConfigurationChange(context); } public void reloadOnConfigurationChange(Context context) { Resources res = context.getResources(); mPaddingLeftRight = res.getDimensionPixelSize(R.dimen.recents_grid_padding_left_right); mPaddingTopBottom = res.getDimensionPixelSize(R.dimen.recents_grid_padding_top_bottom); mPaddingTaskView = res.getDimensionPixelSize(R.dimen.recents_grid_padding_task_view); mTaskGridRect = new Rect(); mTitleBarHeight = res.getDimensionPixelSize(R.dimen.recents_grid_task_view_header_height); WindowManager windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); windowManager.getDefaultDisplay().getRealSize(mScreenSize); updateAppAspectRatio(); } /** * When the amount of tasks is determined, the size and position of every task view can be * decided. Each instance of TaskGridRectInfo store the task view information for a certain * amount of tasks. */ class TaskGridRectInfo { Rect size; int[] xOffsets; int[] yOffsets; public TaskViewTransform getTransform(int taskIndex, int taskCount, TaskViewTransform transformOut, TaskStackLayoutAlgorithm stackLayout) { public TaskGridRectInfo(int taskCount) { size = new Rect(); xOffsets = new int[taskCount]; yOffsets = new int[taskCount]; int layoutTaskCount = Math.min(MAX_LAYOUT_TASK_COUNT, taskCount); // We also need to invert the index in order to display the most recent tasks first. int taskLayoutIndex = taskCount - taskIndex - 1; int tasksPerLine = layoutTaskCount < 2 ? 1 : ( layoutTaskCount < 5 ? 2 : ( layoutTaskCount < 7 ? 3 : 4)); Loading @@ -100,21 +89,66 @@ public class TaskGridLayoutAlgorithm { taskHeight = maxTaskHeight; taskWidth = (int) ((taskHeight - mTitleBarHeight) * mAppAspectRatio); } size.set(0, 0, taskWidth, taskHeight); int emptySpaceX = mDisplayRect.width() - 2 * mPaddingLeftRight - (tasksPerLine * taskWidth) - (tasksPerLine - 1) * mPaddingTaskView; int emptySpaceY = mDisplayRect.height() - 2 * mPaddingTopBottom - (lines * taskHeight) - (lines - 1) * mPaddingTaskView; mTaskGridRect.set(0, 0, taskWidth, taskHeight); for (int taskIndex = 0; taskIndex < taskCount; taskIndex++) { // We also need to invert the index in order to display the most recent tasks first. int taskLayoutIndex = taskCount - taskIndex - 1; int xIndex = taskLayoutIndex % tasksPerLine; int yIndex = taskLayoutIndex / tasksPerLine; int x = emptySpaceX / 2 + mPaddingLeftRight + (taskWidth + mPaddingTaskView) * xIndex; int y = emptySpaceY / 2 + mPaddingTopBottom + (taskHeight + mPaddingTaskView) * yIndex; xOffsets[taskIndex] = emptySpaceX / 2 + mPaddingLeftRight + (taskWidth + mPaddingTaskView) * xIndex; yOffsets[taskIndex] = emptySpaceY / 2 + mPaddingTopBottom + (taskHeight + mPaddingTaskView) * yIndex; } } } /** * We can find task view sizes and positions from mTaskGridRectInfoList[k - 1] when there * are k tasks. */ TaskGridRectInfo[] mTaskGridRectInfoList; public TaskGridLayoutAlgorithm(Context context) { reloadOnConfigurationChange(context); } public void reloadOnConfigurationChange(Context context) { Resources res = context.getResources(); mPaddingLeftRight = res.getDimensionPixelSize(R.dimen.recents_grid_padding_left_right); mPaddingTopBottom = res.getDimensionPixelSize(R.dimen.recents_grid_padding_top_bottom); mPaddingTaskView = res.getDimensionPixelSize(R.dimen.recents_grid_padding_task_view); mTaskGridRect = new Rect(); mTitleBarHeight = res.getDimensionPixelSize(R.dimen.recents_grid_task_view_header_height); WindowManager windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); windowManager.getDefaultDisplay().getRealSize(mScreenSize); updateAppAspectRatio(); } public TaskViewTransform getTransform(int taskIndex, int taskCount, TaskViewTransform transformOut, TaskStackLayoutAlgorithm stackLayout) { TaskGridRectInfo gridInfo = mTaskGridRectInfoList[taskCount - 1]; mTaskGridRect.set(gridInfo.size); int x = gridInfo.xOffsets[taskIndex]; int y = gridInfo.yOffsets[taskIndex]; float z = stackLayout.mMaxTranslationZ; float dimAlpha = 0f; float viewOutlineAlpha = 0f; // We also need to invert the index in order to display the most recent tasks first. int taskLayoutIndex = taskCount - taskIndex - 1; boolean isTaskViewVisible = (taskLayoutIndex < MAX_LAYOUT_TASK_COUNT); // Fill out the transform Loading @@ -134,6 +168,13 @@ public class TaskGridLayoutAlgorithm { public void initialize(Rect displayRect, Rect windowRect) { mDisplayRect = displayRect; mWindowRect = windowRect; // Pre-calculate the positions and offsets of task views so that we can reuse them directly // in the future. mTaskGridRectInfoList = new TaskGridRectInfo[MAX_LAYOUT_TASK_COUNT]; for (int i = 0; i < MAX_LAYOUT_TASK_COUNT; i++) { mTaskGridRectInfoList[i] = new TaskGridRectInfo(i + 1); } } public void setSystemInsets(Rect systemInsets) { Loading Loading
packages/SystemUI/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java +76 −35 Original line number Diff line number Diff line Loading @@ -52,34 +52,23 @@ public class TaskGridLayoutAlgorithm { private float mAppAspectRatio; private Rect mSystemInsets = new Rect(); public TaskGridLayoutAlgorithm(Context context) { reloadOnConfigurationChange(context); } public void reloadOnConfigurationChange(Context context) { Resources res = context.getResources(); mPaddingLeftRight = res.getDimensionPixelSize(R.dimen.recents_grid_padding_left_right); mPaddingTopBottom = res.getDimensionPixelSize(R.dimen.recents_grid_padding_top_bottom); mPaddingTaskView = res.getDimensionPixelSize(R.dimen.recents_grid_padding_task_view); mTaskGridRect = new Rect(); mTitleBarHeight = res.getDimensionPixelSize(R.dimen.recents_grid_task_view_header_height); WindowManager windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); windowManager.getDefaultDisplay().getRealSize(mScreenSize); updateAppAspectRatio(); } /** * When the amount of tasks is determined, the size and position of every task view can be * decided. Each instance of TaskGridRectInfo store the task view information for a certain * amount of tasks. */ class TaskGridRectInfo { Rect size; int[] xOffsets; int[] yOffsets; public TaskViewTransform getTransform(int taskIndex, int taskCount, TaskViewTransform transformOut, TaskStackLayoutAlgorithm stackLayout) { public TaskGridRectInfo(int taskCount) { size = new Rect(); xOffsets = new int[taskCount]; yOffsets = new int[taskCount]; int layoutTaskCount = Math.min(MAX_LAYOUT_TASK_COUNT, taskCount); // We also need to invert the index in order to display the most recent tasks first. int taskLayoutIndex = taskCount - taskIndex - 1; int tasksPerLine = layoutTaskCount < 2 ? 1 : ( layoutTaskCount < 5 ? 2 : ( layoutTaskCount < 7 ? 3 : 4)); Loading @@ -100,21 +89,66 @@ public class TaskGridLayoutAlgorithm { taskHeight = maxTaskHeight; taskWidth = (int) ((taskHeight - mTitleBarHeight) * mAppAspectRatio); } size.set(0, 0, taskWidth, taskHeight); int emptySpaceX = mDisplayRect.width() - 2 * mPaddingLeftRight - (tasksPerLine * taskWidth) - (tasksPerLine - 1) * mPaddingTaskView; int emptySpaceY = mDisplayRect.height() - 2 * mPaddingTopBottom - (lines * taskHeight) - (lines - 1) * mPaddingTaskView; mTaskGridRect.set(0, 0, taskWidth, taskHeight); for (int taskIndex = 0; taskIndex < taskCount; taskIndex++) { // We also need to invert the index in order to display the most recent tasks first. int taskLayoutIndex = taskCount - taskIndex - 1; int xIndex = taskLayoutIndex % tasksPerLine; int yIndex = taskLayoutIndex / tasksPerLine; int x = emptySpaceX / 2 + mPaddingLeftRight + (taskWidth + mPaddingTaskView) * xIndex; int y = emptySpaceY / 2 + mPaddingTopBottom + (taskHeight + mPaddingTaskView) * yIndex; xOffsets[taskIndex] = emptySpaceX / 2 + mPaddingLeftRight + (taskWidth + mPaddingTaskView) * xIndex; yOffsets[taskIndex] = emptySpaceY / 2 + mPaddingTopBottom + (taskHeight + mPaddingTaskView) * yIndex; } } } /** * We can find task view sizes and positions from mTaskGridRectInfoList[k - 1] when there * are k tasks. */ TaskGridRectInfo[] mTaskGridRectInfoList; public TaskGridLayoutAlgorithm(Context context) { reloadOnConfigurationChange(context); } public void reloadOnConfigurationChange(Context context) { Resources res = context.getResources(); mPaddingLeftRight = res.getDimensionPixelSize(R.dimen.recents_grid_padding_left_right); mPaddingTopBottom = res.getDimensionPixelSize(R.dimen.recents_grid_padding_top_bottom); mPaddingTaskView = res.getDimensionPixelSize(R.dimen.recents_grid_padding_task_view); mTaskGridRect = new Rect(); mTitleBarHeight = res.getDimensionPixelSize(R.dimen.recents_grid_task_view_header_height); WindowManager windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); windowManager.getDefaultDisplay().getRealSize(mScreenSize); updateAppAspectRatio(); } public TaskViewTransform getTransform(int taskIndex, int taskCount, TaskViewTransform transformOut, TaskStackLayoutAlgorithm stackLayout) { TaskGridRectInfo gridInfo = mTaskGridRectInfoList[taskCount - 1]; mTaskGridRect.set(gridInfo.size); int x = gridInfo.xOffsets[taskIndex]; int y = gridInfo.yOffsets[taskIndex]; float z = stackLayout.mMaxTranslationZ; float dimAlpha = 0f; float viewOutlineAlpha = 0f; // We also need to invert the index in order to display the most recent tasks first. int taskLayoutIndex = taskCount - taskIndex - 1; boolean isTaskViewVisible = (taskLayoutIndex < MAX_LAYOUT_TASK_COUNT); // Fill out the transform Loading @@ -134,6 +168,13 @@ public class TaskGridLayoutAlgorithm { public void initialize(Rect displayRect, Rect windowRect) { mDisplayRect = displayRect; mWindowRect = windowRect; // Pre-calculate the positions and offsets of task views so that we can reuse them directly // in the future. mTaskGridRectInfoList = new TaskGridRectInfo[MAX_LAYOUT_TASK_COUNT]; for (int i = 0; i < MAX_LAYOUT_TASK_COUNT; i++) { mTaskGridRectInfoList[i] = new TaskGridRectInfo(i + 1); } } public void setSystemInsets(Rect systemInsets) { Loading