summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Filip Gruszczynski <gruszczy@google.com> 2015-10-05 15:59:38 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2015-10-05 15:59:38 +0000
commitd1728e7656f9e90a16c2dc407a1085f3f2eacba9 (patch)
tree089a9e627bab4de194025c96edc9346c6a9b42cb
parentaad6b8b13509eaa30e3030689d52f5546649e87e (diff)
parentcd9c97db8de38fdfadab6411733f4680deebca07 (diff)
Merge "Adjust docked stack divider for orientation."
-rw-r--r--services/core/java/com/android/server/wm/DockedStackDividerController.java19
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java26
-rw-r--r--services/core/java/com/android/server/wm/WindowSurfacePlacer.java3
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();
}
/**