diff options
author | 2015-10-05 15:59:38 +0000 | |
---|---|---|
committer | 2015-10-05 15:59:38 +0000 | |
commit | d1728e7656f9e90a16c2dc407a1085f3f2eacba9 (patch) | |
tree | 089a9e627bab4de194025c96edc9346c6a9b42cb | |
parent | aad6b8b13509eaa30e3030689d52f5546649e87e (diff) | |
parent | cd9c97db8de38fdfadab6411733f4680deebca07 (diff) |
Merge "Adjust docked stack divider for orientation."
3 files changed, 39 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 8c5d319439ba..b9028e39a1c1 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -17,6 +17,7 @@ package com.android.server.wm; import static android.app.ActivityManager.DOCKED_STACK_ID; +import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; @@ -25,16 +26,15 @@ import static android.view.WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING import static android.view.WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; import static com.android.server.wm.TaskStack.DOCKED_BOTTOM; -import static com.android.server.wm.TaskStack.DOCKED_INVALID; import static com.android.server.wm.TaskStack.DOCKED_LEFT; import static com.android.server.wm.TaskStack.DOCKED_RIGHT; import static com.android.server.wm.TaskStack.DOCKED_TOP; import android.content.Context; +import android.content.res.Configuration; import android.graphics.PixelFormat; import android.graphics.Rect; import android.os.RemoteException; -import android.util.Slog; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -58,7 +58,6 @@ public class DockedStackDividerController implements View.OnTouchListener { private Rect mOriginalRect = new Rect(); private int mDockSide; - DockedStackDividerController(Context context, DisplayContent displayContent) { mContext = context; mDisplayContent = displayContent; @@ -66,13 +65,16 @@ public class DockedStackDividerController implements View.OnTouchListener { com.android.internal.R.dimen.docked_stack_divider_thickness); } - private void addDivider() { + private void addDivider(Configuration configuration) { View view = LayoutInflater.from(mContext).inflate( com.android.internal.R.layout.docked_stack_divider, null); view.setOnTouchListener(this); WindowManagerGlobal manager = WindowManagerGlobal.getInstance(); + final boolean landscape = configuration.orientation == ORIENTATION_LANDSCAPE; + final int width = landscape ? mDividerWidth : MATCH_PARENT; + final int height = landscape ? MATCH_PARENT : mDividerWidth; WindowManager.LayoutParams params = new WindowManager.LayoutParams( - mDividerWidth, MATCH_PARENT, TYPE_DOCK_DIVIDER, + width, height, TYPE_DOCK_DIVIDER, FLAG_TOUCHABLE_WHEN_WAKING | FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL | FLAG_WATCH_OUTSIDE_TOUCH | FLAG_SPLIT_TOUCH, PixelFormat.OPAQUE); @@ -92,10 +94,13 @@ public class DockedStackDividerController implements View.OnTouchListener { return mView != null; } - void update() { + void update(Configuration configuration, boolean forceUpdate) { + if (forceUpdate && mView != null) { + removeDivider(); + } TaskStack stack = mDisplayContent.getDockedStackLocked(); if (stack != null && mView == null) { - addDivider(); + addDivider(configuration); } else if (stack == null && mView != null) { removeDivider(); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index c4201d90a56c..1b72876dcb14 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3420,12 +3420,20 @@ public class WindowManagerService extends IWindowManager.Stub } synchronized(mWindowMap) { + final boolean orientationChanged = mCurConfiguration.orientation != config.orientation; mCurConfiguration = new Configuration(config); if (mWaitingForConfig) { mWaitingForConfig = false; mLastFinishedFreezeSource = "new-config"; } mWindowPlacerLocked.performSurfacePlacement(); + if (orientationChanged) { + for (int i = mDisplayContents.size() - 1; i >= 0; i--) { + DisplayContent content = mDisplayContents.valueAt(i); + Message.obtain(mH, H.UPDATE_DOCKED_STACK_DIVIDER, H.DOCK_DIVIDER_FORCE_UPDATE, + H.UNUSED, content).sendToTarget(); + } + } } } @@ -7165,6 +7173,21 @@ public class WindowManagerService extends IWindowManager.Stub public static final int RESIZE_STACK = 43; public static final int RESIZE_TASK = 44; + /** + * Used to indicate in the message that the dock divider needs to be updated only if it's + * necessary. + */ + static final int DOCK_DIVIDER_NO_FORCE_UPDATE = 0; + /** + * Used to indicate in the message that the dock divider should be force-removed before + * updating, so new configuration can be applied. + */ + static final int DOCK_DIVIDER_FORCE_UPDATE = 1; + /** + * Used to denote that an integer field in a message will not be used. + */ + public static final int UNUSED = 0; + @Override public void handleMessage(Message msg) { if (DEBUG_WINDOW_TRACE) { @@ -7706,8 +7729,9 @@ public class WindowManagerService extends IWindowManager.Stub break; case UPDATE_DOCKED_STACK_DIVIDER: { DisplayContent content = (DisplayContent) msg.obj; + final boolean forceUpdate = msg.arg1 == DOCK_DIVIDER_FORCE_UPDATE; synchronized (mWindowMap) { - content.mDividerControllerLocked.update(); + content.mDividerControllerLocked.update(mCurConfiguration, forceUpdate); } } break; diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index db9fcf174f17..112646ad7818 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -965,7 +965,8 @@ class WindowSurfacePlacer { } mService.mPolicy.finishLayoutLw(); - mService.mH.obtainMessage(UPDATE_DOCKED_STACK_DIVIDER, displayContent).sendToTarget(); + mService.mH.obtainMessage(UPDATE_DOCKED_STACK_DIVIDER, + DOCK_DIVIDER_NO_FORCE_UPDATE, UNUSED, displayContent).sendToTarget(); } /** |