Loading services/core/java/com/android/server/wm/DisplayContent.java +12 −12 Original line number Diff line number Diff line Loading @@ -20,8 +20,8 @@ import static android.app.ActivityManager.HOME_STACK_ID; import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY; import static com.android.server.wm.WindowManagerService.TAG; import static com.android.server.wm.WindowState.RESIZE_HANDLE_WIDTH_IN_DP; import android.content.res.Configuration; import android.graphics.Rect; import android.graphics.Region; import android.util.DisplayMetrics; Loading Loading @@ -72,6 +72,7 @@ class DisplayContent { boolean mDisplayScalingDisabled; private final DisplayInfo mDisplayInfo = new DisplayInfo(); private final Display mDisplay; private final DisplayMetrics mDisplayMetrics = new DisplayMetrics(); Rect mBaseDisplayRect = new Rect(); Rect mContentRect = new Rect(); Loading @@ -82,11 +83,11 @@ class DisplayContent { final boolean isDefaultDisplay; /** Window tokens that are in the process of exiting, but still on screen for animations. */ final ArrayList<WindowToken> mExitingTokens = new ArrayList<WindowToken>(); final ArrayList<WindowToken> mExitingTokens = new ArrayList<>(); /** Array containing all TaskStacks on this display. Array * is stored in display order with the current bottom stack at 0. */ private final ArrayList<TaskStack> mStacks = new ArrayList<TaskStack>(); private final ArrayList<TaskStack> mStacks = new ArrayList<>(); /** A special TaskStack with id==HOME_STACK_ID that moves to the bottom whenever any TaskStack * (except a future lockscreen TaskStack) moves to the top. */ Loading Loading @@ -117,6 +118,7 @@ class DisplayContent { mDisplay = display; mDisplayId = display.getDisplayId(); display.getDisplayInfo(mDisplayInfo); display.getMetrics(mDisplayMetrics); isDefaultDisplay = mDisplayId == Display.DEFAULT_DISPLAY; mService = service; } Loading @@ -137,6 +139,10 @@ class DisplayContent { return mDisplayInfo; } DisplayMetrics getDisplayMetrics() { return mDisplayMetrics; } /** * Returns true if the specified UID has access to this display. */ Loading Loading @@ -174,6 +180,7 @@ class DisplayContent { void updateDisplayInfo() { mDisplay.getDisplayInfo(mDisplayInfo); mDisplay.getMetrics(mDisplayMetrics); for (int i = mStacks.size() - 1; i >= 0; --i) { mStacks.get(i).updateDisplayInfo(null); } Loading Loading @@ -247,7 +254,7 @@ class DisplayContent { * falls within. Returns -1 if the touch doesn't fall into a resizing area. */ int taskIdForControlPoint(int x, int y) { final int delta = calculatePixelFromDp(WindowState.RESIZE_HANDLE_WIDTH_IN_DP); final int delta = mService.dipToPixel(RESIZE_HANDLE_WIDTH_IN_DP, mDisplayMetrics); for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { TaskStack stack = mStacks.get(stackNdx); if (!stack.allowTaskResize()) { Loading Loading @@ -275,17 +282,10 @@ class DisplayContent { return -1; } private int calculatePixelFromDp(int dp) { final Configuration serviceConfig = mService.mCurConfiguration; // TODO(multidisplay): Update Dp to that of display stack is on. final float density = serviceConfig.densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE; return (int)(dp * density); } void setTouchExcludeRegion(Task focusedTask) { mTouchExcludeRegion.set(mBaseDisplayRect); WindowList windows = getWindowList(); final int delta = calculatePixelFromDp(WindowState.RESIZE_HANDLE_WIDTH_IN_DP); final int delta = mService.dipToPixel(RESIZE_HANDLE_WIDTH_IN_DP, mDisplayMetrics); for (int i = windows.size() - 1; i >= 0; --i) { final WindowState win = windows.get(i); final Task task = win.mAppToken != null ? win.getTask() : null; Loading services/core/java/com/android/server/wm/TaskPositioner.java +5 −10 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import static android.app.ActivityManager.FREEFORM_WORKSPACE_STACK_ID; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static com.android.server.wm.WindowManagerService.DEBUG_TASK_POSITIONING; import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS; import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_HEIGHT_IN_DP; import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_WIDTH_IN_DP; import android.annotation.IntDef; import android.graphics.Point; Loading @@ -31,7 +33,6 @@ import android.os.Process; import android.os.RemoteException; import android.util.DisplayMetrics; import android.util.Slog; import android.util.TypedValue; import android.view.Display; import android.view.DisplayInfo; import android.view.InputChannel; Loading Loading @@ -247,7 +248,7 @@ class TaskPositioner implements DimLayer.DimLayerUser { mService.pauseRotationLocked(); mDimLayer = new DimLayer(mService, this, mDisplay.getDisplayId()); mSideMargin = (int)dipToPx(SIDE_MARGIN_DIP); mSideMargin = mService.dipToPixel(SIDE_MARGIN_DIP, mDisplayMetrics); } void unregister() { Loading Loading @@ -331,10 +332,8 @@ class TaskPositioner implements DimLayer.DimLayerUser { // This is a resizing operation. final int deltaX = Math.round(x - mStartDragX); final int deltaY = Math.round(y - mStartDragY); // TODO: fix the min sizes when we have mininum width/height support, // use hard-coded min sizes for now. final int minSizeX = (int)(dipToPx(96)); final int minSizeY = (int)(dipToPx(64)); final int minSizeX = mService.dipToPixel(MINIMUM_VISIBLE_WIDTH_IN_DP, mDisplayMetrics); final int minSizeY = mService.dipToPixel(MINIMUM_VISIBLE_HEIGHT_IN_DP, mDisplayMetrics); int left = mWindowOriginalBounds.left; int top = mWindowOriginalBounds.top; int right = mWindowOriginalBounds.right; Loading Loading @@ -431,8 +430,4 @@ class TaskPositioner implements DimLayer.DimLayerUser { * WindowManagerService.TYPE_LAYER_MULTIPLIER + WindowManagerService.TYPE_LAYER_OFFSET; } private float dipToPx(float dip) { return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, mDisplayMetrics); } } services/core/java/com/android/server/wm/WindowManagerService.java +4 −0 Original line number Diff line number Diff line Loading @@ -9863,6 +9863,10 @@ public class WindowManagerService extends IWindowManager.Stub } } static int dipToPixel(int dip, DisplayMetrics displayMetrics) { return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, displayMetrics); } private final class LocalService extends WindowManagerInternal { @Override public void requestTraversalFromDisplayManager() { Loading services/core/java/com/android/server/wm/WindowState.java +13 −14 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.wm; import static android.app.ActivityManager.FREEFORM_WORKSPACE_STACK_ID; import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW; import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; Loading Loading @@ -81,12 +80,14 @@ final class WindowState implements WindowManagerPolicy.WindowState { static final String TAG = "WindowState"; // The minimal size of a window within the usable area of the freeform stack. private static final int MINIMUM_VISIBLE_WIDTH_IN_DP = 48; private static final int MINIMUM_VISIBLE_HEIGHT_IN_DP = 32; // TODO(multi-window): fix the min sizes when we have mininum width/height support, // use hard-coded min sizes for now. static final int MINIMUM_VISIBLE_WIDTH_IN_DP = 48; static final int MINIMUM_VISIBLE_HEIGHT_IN_DP = 32; // The thickness of a window resize handle outside the window bounds on the free form workspace // to capture touch events in that area. static final int RESIZE_HANDLE_WIDTH_IN_DP = 10; static final int RESIZE_HANDLE_WIDTH_IN_DP = 30; static final boolean BOUNDS_FOR_TOUCH = true; Loading Loading @@ -689,8 +690,11 @@ final class WindowState implements WindowManagerPolicy.WindowState { // into a usable area.. final int height = Math.min(mFrame.height(), mContentFrame.height()); final int width = Math.min(mContentFrame.width(), mFrame.width()); final int minVisibleHeight = calculatePixelFromDp(MINIMUM_VISIBLE_HEIGHT_IN_DP); final int minVisibleWidth = calculatePixelFromDp(MINIMUM_VISIBLE_WIDTH_IN_DP); final DisplayMetrics displayMetrics = getDisplayContent().getDisplayMetrics(); final int minVisibleHeight = mService.dipToPixel(MINIMUM_VISIBLE_HEIGHT_IN_DP, displayMetrics); final int minVisibleWidth = mService.dipToPixel(MINIMUM_VISIBLE_WIDTH_IN_DP, displayMetrics); final int top = Math.max(mContentFrame.top, Math.min(mFrame.top, mContentFrame.bottom - minVisibleHeight)); final int left = Math.max(mContentFrame.left + minVisibleWidth - width, Loading Loading @@ -941,7 +945,9 @@ final class WindowState implements WindowManagerPolicy.WindowState { task.getBounds(bounds); if (forTouch == BOUNDS_FOR_TOUCH) { if (task.inFreeformWorkspace()) { final int delta = calculatePixelFromDp(RESIZE_HANDLE_WIDTH_IN_DP); final DisplayMetrics displayMetrics = getDisplayContent().getDisplayMetrics(); final int delta = mService.dipToPixel(RESIZE_HANDLE_WIDTH_IN_DP, displayMetrics); bounds.inset(-delta, -delta); } } Loading Loading @@ -1682,13 +1688,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { return mService.mTaskPositioner != null && mService.mTaskPositioner.isTaskResizing(task); } private int calculatePixelFromDp(int dp) { final Configuration serviceConfig = mService.mCurConfiguration; // TODO(multidisplay): Update Dp to that of display stack is on. final float density = serviceConfig.densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE; return (int)(dp * density); } void dump(PrintWriter pw, String prefix, boolean dumpAll) { final TaskStack stack = getStack(); pw.print(prefix); pw.print("mDisplayId="); pw.print(getDisplayId()); Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +12 −12 Original line number Diff line number Diff line Loading @@ -20,8 +20,8 @@ import static android.app.ActivityManager.HOME_STACK_ID; import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY; import static com.android.server.wm.WindowManagerService.TAG; import static com.android.server.wm.WindowState.RESIZE_HANDLE_WIDTH_IN_DP; import android.content.res.Configuration; import android.graphics.Rect; import android.graphics.Region; import android.util.DisplayMetrics; Loading Loading @@ -72,6 +72,7 @@ class DisplayContent { boolean mDisplayScalingDisabled; private final DisplayInfo mDisplayInfo = new DisplayInfo(); private final Display mDisplay; private final DisplayMetrics mDisplayMetrics = new DisplayMetrics(); Rect mBaseDisplayRect = new Rect(); Rect mContentRect = new Rect(); Loading @@ -82,11 +83,11 @@ class DisplayContent { final boolean isDefaultDisplay; /** Window tokens that are in the process of exiting, but still on screen for animations. */ final ArrayList<WindowToken> mExitingTokens = new ArrayList<WindowToken>(); final ArrayList<WindowToken> mExitingTokens = new ArrayList<>(); /** Array containing all TaskStacks on this display. Array * is stored in display order with the current bottom stack at 0. */ private final ArrayList<TaskStack> mStacks = new ArrayList<TaskStack>(); private final ArrayList<TaskStack> mStacks = new ArrayList<>(); /** A special TaskStack with id==HOME_STACK_ID that moves to the bottom whenever any TaskStack * (except a future lockscreen TaskStack) moves to the top. */ Loading Loading @@ -117,6 +118,7 @@ class DisplayContent { mDisplay = display; mDisplayId = display.getDisplayId(); display.getDisplayInfo(mDisplayInfo); display.getMetrics(mDisplayMetrics); isDefaultDisplay = mDisplayId == Display.DEFAULT_DISPLAY; mService = service; } Loading @@ -137,6 +139,10 @@ class DisplayContent { return mDisplayInfo; } DisplayMetrics getDisplayMetrics() { return mDisplayMetrics; } /** * Returns true if the specified UID has access to this display. */ Loading Loading @@ -174,6 +180,7 @@ class DisplayContent { void updateDisplayInfo() { mDisplay.getDisplayInfo(mDisplayInfo); mDisplay.getMetrics(mDisplayMetrics); for (int i = mStacks.size() - 1; i >= 0; --i) { mStacks.get(i).updateDisplayInfo(null); } Loading Loading @@ -247,7 +254,7 @@ class DisplayContent { * falls within. Returns -1 if the touch doesn't fall into a resizing area. */ int taskIdForControlPoint(int x, int y) { final int delta = calculatePixelFromDp(WindowState.RESIZE_HANDLE_WIDTH_IN_DP); final int delta = mService.dipToPixel(RESIZE_HANDLE_WIDTH_IN_DP, mDisplayMetrics); for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { TaskStack stack = mStacks.get(stackNdx); if (!stack.allowTaskResize()) { Loading Loading @@ -275,17 +282,10 @@ class DisplayContent { return -1; } private int calculatePixelFromDp(int dp) { final Configuration serviceConfig = mService.mCurConfiguration; // TODO(multidisplay): Update Dp to that of display stack is on. final float density = serviceConfig.densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE; return (int)(dp * density); } void setTouchExcludeRegion(Task focusedTask) { mTouchExcludeRegion.set(mBaseDisplayRect); WindowList windows = getWindowList(); final int delta = calculatePixelFromDp(WindowState.RESIZE_HANDLE_WIDTH_IN_DP); final int delta = mService.dipToPixel(RESIZE_HANDLE_WIDTH_IN_DP, mDisplayMetrics); for (int i = windows.size() - 1; i >= 0; --i) { final WindowState win = windows.get(i); final Task task = win.mAppToken != null ? win.getTask() : null; Loading
services/core/java/com/android/server/wm/TaskPositioner.java +5 −10 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import static android.app.ActivityManager.FREEFORM_WORKSPACE_STACK_ID; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static com.android.server.wm.WindowManagerService.DEBUG_TASK_POSITIONING; import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS; import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_HEIGHT_IN_DP; import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_WIDTH_IN_DP; import android.annotation.IntDef; import android.graphics.Point; Loading @@ -31,7 +33,6 @@ import android.os.Process; import android.os.RemoteException; import android.util.DisplayMetrics; import android.util.Slog; import android.util.TypedValue; import android.view.Display; import android.view.DisplayInfo; import android.view.InputChannel; Loading Loading @@ -247,7 +248,7 @@ class TaskPositioner implements DimLayer.DimLayerUser { mService.pauseRotationLocked(); mDimLayer = new DimLayer(mService, this, mDisplay.getDisplayId()); mSideMargin = (int)dipToPx(SIDE_MARGIN_DIP); mSideMargin = mService.dipToPixel(SIDE_MARGIN_DIP, mDisplayMetrics); } void unregister() { Loading Loading @@ -331,10 +332,8 @@ class TaskPositioner implements DimLayer.DimLayerUser { // This is a resizing operation. final int deltaX = Math.round(x - mStartDragX); final int deltaY = Math.round(y - mStartDragY); // TODO: fix the min sizes when we have mininum width/height support, // use hard-coded min sizes for now. final int minSizeX = (int)(dipToPx(96)); final int minSizeY = (int)(dipToPx(64)); final int minSizeX = mService.dipToPixel(MINIMUM_VISIBLE_WIDTH_IN_DP, mDisplayMetrics); final int minSizeY = mService.dipToPixel(MINIMUM_VISIBLE_HEIGHT_IN_DP, mDisplayMetrics); int left = mWindowOriginalBounds.left; int top = mWindowOriginalBounds.top; int right = mWindowOriginalBounds.right; Loading Loading @@ -431,8 +430,4 @@ class TaskPositioner implements DimLayer.DimLayerUser { * WindowManagerService.TYPE_LAYER_MULTIPLIER + WindowManagerService.TYPE_LAYER_OFFSET; } private float dipToPx(float dip) { return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, mDisplayMetrics); } }
services/core/java/com/android/server/wm/WindowManagerService.java +4 −0 Original line number Diff line number Diff line Loading @@ -9863,6 +9863,10 @@ public class WindowManagerService extends IWindowManager.Stub } } static int dipToPixel(int dip, DisplayMetrics displayMetrics) { return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, displayMetrics); } private final class LocalService extends WindowManagerInternal { @Override public void requestTraversalFromDisplayManager() { Loading
services/core/java/com/android/server/wm/WindowState.java +13 −14 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.wm; import static android.app.ActivityManager.FREEFORM_WORKSPACE_STACK_ID; import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW; import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; Loading Loading @@ -81,12 +80,14 @@ final class WindowState implements WindowManagerPolicy.WindowState { static final String TAG = "WindowState"; // The minimal size of a window within the usable area of the freeform stack. private static final int MINIMUM_VISIBLE_WIDTH_IN_DP = 48; private static final int MINIMUM_VISIBLE_HEIGHT_IN_DP = 32; // TODO(multi-window): fix the min sizes when we have mininum width/height support, // use hard-coded min sizes for now. static final int MINIMUM_VISIBLE_WIDTH_IN_DP = 48; static final int MINIMUM_VISIBLE_HEIGHT_IN_DP = 32; // The thickness of a window resize handle outside the window bounds on the free form workspace // to capture touch events in that area. static final int RESIZE_HANDLE_WIDTH_IN_DP = 10; static final int RESIZE_HANDLE_WIDTH_IN_DP = 30; static final boolean BOUNDS_FOR_TOUCH = true; Loading Loading @@ -689,8 +690,11 @@ final class WindowState implements WindowManagerPolicy.WindowState { // into a usable area.. final int height = Math.min(mFrame.height(), mContentFrame.height()); final int width = Math.min(mContentFrame.width(), mFrame.width()); final int minVisibleHeight = calculatePixelFromDp(MINIMUM_VISIBLE_HEIGHT_IN_DP); final int minVisibleWidth = calculatePixelFromDp(MINIMUM_VISIBLE_WIDTH_IN_DP); final DisplayMetrics displayMetrics = getDisplayContent().getDisplayMetrics(); final int minVisibleHeight = mService.dipToPixel(MINIMUM_VISIBLE_HEIGHT_IN_DP, displayMetrics); final int minVisibleWidth = mService.dipToPixel(MINIMUM_VISIBLE_WIDTH_IN_DP, displayMetrics); final int top = Math.max(mContentFrame.top, Math.min(mFrame.top, mContentFrame.bottom - minVisibleHeight)); final int left = Math.max(mContentFrame.left + minVisibleWidth - width, Loading Loading @@ -941,7 +945,9 @@ final class WindowState implements WindowManagerPolicy.WindowState { task.getBounds(bounds); if (forTouch == BOUNDS_FOR_TOUCH) { if (task.inFreeformWorkspace()) { final int delta = calculatePixelFromDp(RESIZE_HANDLE_WIDTH_IN_DP); final DisplayMetrics displayMetrics = getDisplayContent().getDisplayMetrics(); final int delta = mService.dipToPixel(RESIZE_HANDLE_WIDTH_IN_DP, displayMetrics); bounds.inset(-delta, -delta); } } Loading Loading @@ -1682,13 +1688,6 @@ final class WindowState implements WindowManagerPolicy.WindowState { return mService.mTaskPositioner != null && mService.mTaskPositioner.isTaskResizing(task); } private int calculatePixelFromDp(int dp) { final Configuration serviceConfig = mService.mCurConfiguration; // TODO(multidisplay): Update Dp to that of display stack is on. final float density = serviceConfig.densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE; return (int)(dp * density); } void dump(PrintWriter pw, String prefix, boolean dumpAll) { final TaskStack stack = getStack(); pw.print(prefix); pw.print("mDisplayId="); pw.print(getDisplayId()); Loading