Loading libs/WindowManager/Shell/res/drawable/desktop_mode_decor_title.xml +0 −1 Original line number Diff line number Diff line Loading @@ -17,5 +17,4 @@ <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@android:color/white" /> <corners android:radius="20dp" /> </shape> libs/WindowManager/Shell/res/layout/desktop_mode_window_decor.xml +2 −14 Original line number Diff line number Diff line Loading @@ -17,26 +17,14 @@ <com.android.wm.shell.windowdecor.WindowDecorLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/desktop_mode_caption" android:layout_width="wrap_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:background="@drawable/desktop_mode_decor_title"> <Button style="@style/CaptionButtonStyle" android:id="@+id/back_button" android:contentDescription="@string/back_button_text" android:background="@drawable/decor_back_button_dark" /> <Button android:id="@+id/caption_handle" android:layout_width="128dp" android:layout_height="32dp" android:layout_margin="5dp" android:padding="4dp" android:contentDescription="@string/handle_text" android:background="@drawable/decor_handle_dark"/> <Button style="@style/CaptionButtonStyle" android:id="@+id/close_window" android:contentDescription="@string/close_button_text" android:background="@drawable/decor_close_button_dark"/> </com.android.wm.shell.windowdecor.WindowDecorLinearLayout> No newline at end of file libs/WindowManager/Shell/res/values/dimen.xml +2 −2 Original line number Diff line number Diff line Loading @@ -364,8 +364,8 @@ <!-- Height of button (32dp) + 2 * margin (5dp each). --> <dimen name="freeform_decor_caption_height">42dp</dimen> <!-- Width of buttons (64dp) + handle (128dp) + padding (24dp total). --> <dimen name="freeform_decor_caption_width">216dp</dimen> <!-- Width of buttons (32dp each) + padding (128dp total). --> <dimen name="freeform_decor_caption_menu_width">256dp</dimen> <dimen name="freeform_resize_handle">30dp</dimen> Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +1 −5 Original line number Diff line number Diff line Loading @@ -227,11 +227,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { public void onClick(View v) { final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(mTaskId); final int id = v.getId(); if (id == R.id.close_window) { mTaskOperations.closeTask(mTaskToken); } else if (id == R.id.back_button) { mTaskOperations.injectBackKey(); } else if (id == R.id.caption_handle) { if (id == R.id.caption_handle) { decoration.createHandleMenu(); } else if (id == R.id.desktop_button) { mDesktopModeController.ifPresent(c -> c.setDesktopModeActive(true)); Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +26 −37 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.content.res.Resources; import android.graphics.Color; import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.drawable.VectorDrawable; import android.os.Handler; import android.view.Choreographer; Loading Loading @@ -60,6 +59,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin private DragDetector mDragDetector; private RelayoutParams mRelayoutParams = new RelayoutParams(); private final int mCaptionMenuWidthId = R.dimen.freeform_decor_caption_menu_width; private final WindowDecoration.RelayoutResult<WindowDecorLinearLayout> mResult = new WindowDecoration.RelayoutResult<>(); Loading Loading @@ -131,22 +131,10 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mRelayoutParams.mRunningTaskInfo = taskInfo; mRelayoutParams.mLayoutResId = R.layout.desktop_mode_window_decor; mRelayoutParams.mCaptionHeightId = R.dimen.freeform_decor_caption_height; mRelayoutParams.mCaptionWidthId = R.dimen.freeform_decor_caption_width; mRelayoutParams.mShadowRadiusId = shadowRadiusID; if (isDragResizeable) { mRelayoutParams.setOutsets(outsetLeftId, outsetTopId, outsetRightId, outsetBottomId); } final Resources resources = mDecorWindowContext.getResources(); final Rect taskBounds = taskInfo.configuration.windowConfiguration.getBounds(); final int captionHeight = loadDimensionPixelSize(resources, mRelayoutParams.mCaptionHeightId); final int captionWidth = loadDimensionPixelSize(resources, mRelayoutParams.mCaptionWidthId); final int captionLeft = taskBounds.width() / 2 - captionWidth / 2; final int captionTop = taskBounds.top <= captionHeight / 2 ? 0 : -captionHeight / 2; mRelayoutParams.setCaptionPosition(captionLeft, captionTop); relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult); // After this line, mTaskInfo is up-to-date and should be used instead of taskInfo Loading Loading @@ -212,10 +200,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin private void setupRootView() { final View caption = mResult.mRootView.findViewById(R.id.desktop_mode_caption); caption.setOnTouchListener(mOnCaptionTouchListener); final View close = caption.findViewById(R.id.close_window); close.setOnClickListener(mOnCaptionButtonClickListener); final View back = caption.findViewById(R.id.back_button); back.setOnClickListener(mOnCaptionButtonClickListener); final View handle = caption.findViewById(R.id.caption_handle); handle.setOnTouchListener(mOnCaptionTouchListener); handle.setOnClickListener(mOnCaptionButtonClickListener); Loading @@ -230,8 +214,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin desktop.setOnClickListener(mOnCaptionButtonClickListener); final View split = menu.findViewById(R.id.split_screen_button); split.setOnClickListener(mOnCaptionButtonClickListener); final View more = menu.findViewById(R.id.more_button); more.setOnClickListener(mOnCaptionButtonClickListener); } /** Loading Loading @@ -264,10 +246,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin void setButtonVisibility(boolean visible) { final int visibility = visible ? View.VISIBLE : View.GONE; final View caption = mResult.mRootView.findViewById(R.id.desktop_mode_caption); final View back = caption.findViewById(R.id.back_button); final View close = caption.findViewById(R.id.close_window); back.setVisibility(visibility); close.setVisibility(visibility); final int buttonTintColorRes = mDesktopActive ? R.color.decor_button_dark_color : R.color.decor_button_light_color; Loading Loading @@ -297,14 +275,18 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin void createHandleMenu() { final SurfaceControl.Transaction t = new SurfaceControl.Transaction(); final Resources resources = mDecorWindowContext.getResources(); final int x = mRelayoutParams.mCaptionX; final int y = mRelayoutParams.mCaptionY; final int width = loadDimensionPixelSize(resources, mRelayoutParams.mCaptionWidthId); final int height = loadDimensionPixelSize(resources, mRelayoutParams.mCaptionHeightId); final int captionWidth = mTaskInfo.getConfiguration() .windowConfiguration.getBounds().width(); final int menuWidth = loadDimensionPixelSize( resources, mCaptionMenuWidthId); final int height = loadDimensionPixelSize( resources, mRelayoutParams.mCaptionHeightId); final int x = mRelayoutParams.mCaptionX + (captionWidth / 2) - (menuWidth / 2) - mResult.mDecorContainerOffsetX; final int y = mRelayoutParams.mCaptionY - mResult.mDecorContainerOffsetY; String namePrefix = "Caption Menu"; mHandleMenu = addWindow(R.layout.desktop_mode_decor_handle_menu, namePrefix, t, x - mResult.mDecorContainerOffsetX, y - mResult.mDecorContainerOffsetY, width, height); mHandleMenu = addWindow(R.layout.desktop_mode_decor_handle_menu, namePrefix, t, x, y, menuWidth, height); mSyncQueue.runInSync(transaction -> { transaction.merge(t); t.close(); Loading Loading @@ -370,7 +352,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin if (mResult.mRootView == null) return false; final PointF inputPoint = offsetCaptionLocation(ev); final View view = mResult.mRootView.findViewById(layoutId); return view != null && view.pointInView(inputPoint.x, inputPoint.y, 0); return view != null && pointInView(view, inputPoint.x, inputPoint.y); } boolean checkTouchEventInHandle(MotionEvent ev) { Loading @@ -387,32 +369,39 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin */ void checkClickEvent(MotionEvent ev) { if (mResult.mRootView == null) return; final View caption = mResult.mRootView.findViewById(R.id.desktop_mode_caption); final PointF inputPoint = offsetCaptionLocation(ev); if (!isHandleMenuActive()) { final View caption = mResult.mRootView.findViewById(R.id.desktop_mode_caption); final View handle = caption.findViewById(R.id.caption_handle); clickIfPointInView(inputPoint, handle); clickIfPointInView(new PointF(ev.getX(), ev.getY()), handle); } else { final View menu = mHandleMenu.mWindowViewHost.getView(); final int captionWidth = mTaskInfo.getConfiguration().windowConfiguration .getBounds().width(); final int menuX = mRelayoutParams.mCaptionX + (captionWidth / 2) - (menu.getWidth() / 2); final PointF inputPoint = new PointF(ev.getX() - menuX, ev.getY()); final View fullscreen = menu.findViewById(R.id.fullscreen_button); if (clickIfPointInView(inputPoint, fullscreen)) return; final View desktop = menu.findViewById(R.id.desktop_button); if (clickIfPointInView(inputPoint, desktop)) return; final View split = menu.findViewById(R.id.split_screen_button); if (clickIfPointInView(inputPoint, split)) return; final View more = menu.findViewById(R.id.more_button); clickIfPointInView(inputPoint, more); } } private boolean clickIfPointInView(PointF inputPoint, View v) { if (v.pointInView(inputPoint.x - v.getLeft(), inputPoint.y, 0)) { if (pointInView(v, inputPoint.x, inputPoint.y)) { mOnCaptionButtonClickListener.onClick(v); return true; } return false; } private boolean pointInView(View v, float x, float y) { return v != null && v.getLeft() <= x && v.getRight() >= x && v.getTop() <= y && v.getBottom() >= y; } @Override public void close() { closeDragResizeListener(); Loading Loading
libs/WindowManager/Shell/res/drawable/desktop_mode_decor_title.xml +0 −1 Original line number Diff line number Diff line Loading @@ -17,5 +17,4 @@ <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@android:color/white" /> <corners android:radius="20dp" /> </shape>
libs/WindowManager/Shell/res/layout/desktop_mode_window_decor.xml +2 −14 Original line number Diff line number Diff line Loading @@ -17,26 +17,14 @@ <com.android.wm.shell.windowdecor.WindowDecorLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/desktop_mode_caption" android:layout_width="wrap_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:background="@drawable/desktop_mode_decor_title"> <Button style="@style/CaptionButtonStyle" android:id="@+id/back_button" android:contentDescription="@string/back_button_text" android:background="@drawable/decor_back_button_dark" /> <Button android:id="@+id/caption_handle" android:layout_width="128dp" android:layout_height="32dp" android:layout_margin="5dp" android:padding="4dp" android:contentDescription="@string/handle_text" android:background="@drawable/decor_handle_dark"/> <Button style="@style/CaptionButtonStyle" android:id="@+id/close_window" android:contentDescription="@string/close_button_text" android:background="@drawable/decor_close_button_dark"/> </com.android.wm.shell.windowdecor.WindowDecorLinearLayout> No newline at end of file
libs/WindowManager/Shell/res/values/dimen.xml +2 −2 Original line number Diff line number Diff line Loading @@ -364,8 +364,8 @@ <!-- Height of button (32dp) + 2 * margin (5dp each). --> <dimen name="freeform_decor_caption_height">42dp</dimen> <!-- Width of buttons (64dp) + handle (128dp) + padding (24dp total). --> <dimen name="freeform_decor_caption_width">216dp</dimen> <!-- Width of buttons (32dp each) + padding (128dp total). --> <dimen name="freeform_decor_caption_menu_width">256dp</dimen> <dimen name="freeform_resize_handle">30dp</dimen> Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +1 −5 Original line number Diff line number Diff line Loading @@ -227,11 +227,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { public void onClick(View v) { final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(mTaskId); final int id = v.getId(); if (id == R.id.close_window) { mTaskOperations.closeTask(mTaskToken); } else if (id == R.id.back_button) { mTaskOperations.injectBackKey(); } else if (id == R.id.caption_handle) { if (id == R.id.caption_handle) { decoration.createHandleMenu(); } else if (id == R.id.desktop_button) { mDesktopModeController.ifPresent(c -> c.setDesktopModeActive(true)); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +26 −37 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.content.res.Resources; import android.graphics.Color; import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.drawable.VectorDrawable; import android.os.Handler; import android.view.Choreographer; Loading Loading @@ -60,6 +59,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin private DragDetector mDragDetector; private RelayoutParams mRelayoutParams = new RelayoutParams(); private final int mCaptionMenuWidthId = R.dimen.freeform_decor_caption_menu_width; private final WindowDecoration.RelayoutResult<WindowDecorLinearLayout> mResult = new WindowDecoration.RelayoutResult<>(); Loading Loading @@ -131,22 +131,10 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mRelayoutParams.mRunningTaskInfo = taskInfo; mRelayoutParams.mLayoutResId = R.layout.desktop_mode_window_decor; mRelayoutParams.mCaptionHeightId = R.dimen.freeform_decor_caption_height; mRelayoutParams.mCaptionWidthId = R.dimen.freeform_decor_caption_width; mRelayoutParams.mShadowRadiusId = shadowRadiusID; if (isDragResizeable) { mRelayoutParams.setOutsets(outsetLeftId, outsetTopId, outsetRightId, outsetBottomId); } final Resources resources = mDecorWindowContext.getResources(); final Rect taskBounds = taskInfo.configuration.windowConfiguration.getBounds(); final int captionHeight = loadDimensionPixelSize(resources, mRelayoutParams.mCaptionHeightId); final int captionWidth = loadDimensionPixelSize(resources, mRelayoutParams.mCaptionWidthId); final int captionLeft = taskBounds.width() / 2 - captionWidth / 2; final int captionTop = taskBounds.top <= captionHeight / 2 ? 0 : -captionHeight / 2; mRelayoutParams.setCaptionPosition(captionLeft, captionTop); relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult); // After this line, mTaskInfo is up-to-date and should be used instead of taskInfo Loading Loading @@ -212,10 +200,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin private void setupRootView() { final View caption = mResult.mRootView.findViewById(R.id.desktop_mode_caption); caption.setOnTouchListener(mOnCaptionTouchListener); final View close = caption.findViewById(R.id.close_window); close.setOnClickListener(mOnCaptionButtonClickListener); final View back = caption.findViewById(R.id.back_button); back.setOnClickListener(mOnCaptionButtonClickListener); final View handle = caption.findViewById(R.id.caption_handle); handle.setOnTouchListener(mOnCaptionTouchListener); handle.setOnClickListener(mOnCaptionButtonClickListener); Loading @@ -230,8 +214,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin desktop.setOnClickListener(mOnCaptionButtonClickListener); final View split = menu.findViewById(R.id.split_screen_button); split.setOnClickListener(mOnCaptionButtonClickListener); final View more = menu.findViewById(R.id.more_button); more.setOnClickListener(mOnCaptionButtonClickListener); } /** Loading Loading @@ -264,10 +246,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin void setButtonVisibility(boolean visible) { final int visibility = visible ? View.VISIBLE : View.GONE; final View caption = mResult.mRootView.findViewById(R.id.desktop_mode_caption); final View back = caption.findViewById(R.id.back_button); final View close = caption.findViewById(R.id.close_window); back.setVisibility(visibility); close.setVisibility(visibility); final int buttonTintColorRes = mDesktopActive ? R.color.decor_button_dark_color : R.color.decor_button_light_color; Loading Loading @@ -297,14 +275,18 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin void createHandleMenu() { final SurfaceControl.Transaction t = new SurfaceControl.Transaction(); final Resources resources = mDecorWindowContext.getResources(); final int x = mRelayoutParams.mCaptionX; final int y = mRelayoutParams.mCaptionY; final int width = loadDimensionPixelSize(resources, mRelayoutParams.mCaptionWidthId); final int height = loadDimensionPixelSize(resources, mRelayoutParams.mCaptionHeightId); final int captionWidth = mTaskInfo.getConfiguration() .windowConfiguration.getBounds().width(); final int menuWidth = loadDimensionPixelSize( resources, mCaptionMenuWidthId); final int height = loadDimensionPixelSize( resources, mRelayoutParams.mCaptionHeightId); final int x = mRelayoutParams.mCaptionX + (captionWidth / 2) - (menuWidth / 2) - mResult.mDecorContainerOffsetX; final int y = mRelayoutParams.mCaptionY - mResult.mDecorContainerOffsetY; String namePrefix = "Caption Menu"; mHandleMenu = addWindow(R.layout.desktop_mode_decor_handle_menu, namePrefix, t, x - mResult.mDecorContainerOffsetX, y - mResult.mDecorContainerOffsetY, width, height); mHandleMenu = addWindow(R.layout.desktop_mode_decor_handle_menu, namePrefix, t, x, y, menuWidth, height); mSyncQueue.runInSync(transaction -> { transaction.merge(t); t.close(); Loading Loading @@ -370,7 +352,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin if (mResult.mRootView == null) return false; final PointF inputPoint = offsetCaptionLocation(ev); final View view = mResult.mRootView.findViewById(layoutId); return view != null && view.pointInView(inputPoint.x, inputPoint.y, 0); return view != null && pointInView(view, inputPoint.x, inputPoint.y); } boolean checkTouchEventInHandle(MotionEvent ev) { Loading @@ -387,32 +369,39 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin */ void checkClickEvent(MotionEvent ev) { if (mResult.mRootView == null) return; final View caption = mResult.mRootView.findViewById(R.id.desktop_mode_caption); final PointF inputPoint = offsetCaptionLocation(ev); if (!isHandleMenuActive()) { final View caption = mResult.mRootView.findViewById(R.id.desktop_mode_caption); final View handle = caption.findViewById(R.id.caption_handle); clickIfPointInView(inputPoint, handle); clickIfPointInView(new PointF(ev.getX(), ev.getY()), handle); } else { final View menu = mHandleMenu.mWindowViewHost.getView(); final int captionWidth = mTaskInfo.getConfiguration().windowConfiguration .getBounds().width(); final int menuX = mRelayoutParams.mCaptionX + (captionWidth / 2) - (menu.getWidth() / 2); final PointF inputPoint = new PointF(ev.getX() - menuX, ev.getY()); final View fullscreen = menu.findViewById(R.id.fullscreen_button); if (clickIfPointInView(inputPoint, fullscreen)) return; final View desktop = menu.findViewById(R.id.desktop_button); if (clickIfPointInView(inputPoint, desktop)) return; final View split = menu.findViewById(R.id.split_screen_button); if (clickIfPointInView(inputPoint, split)) return; final View more = menu.findViewById(R.id.more_button); clickIfPointInView(inputPoint, more); } } private boolean clickIfPointInView(PointF inputPoint, View v) { if (v.pointInView(inputPoint.x - v.getLeft(), inputPoint.y, 0)) { if (pointInView(v, inputPoint.x, inputPoint.y)) { mOnCaptionButtonClickListener.onClick(v); return true; } return false; } private boolean pointInView(View v, float x, float y) { return v != null && v.getLeft() <= x && v.getRight() >= x && v.getTop() <= y && v.getBottom() >= y; } @Override public void close() { closeDragResizeListener(); Loading