Loading core/java/com/android/internal/policy/DividerSnapAlgorithm.java +6 −5 Original line number Diff line number Diff line Loading @@ -104,17 +104,18 @@ public class DividerSnapAlgorithm { public DividerSnapAlgorithm(Resources res, int displayWidth, int displayHeight, int dividerSize, boolean isHorizontalDivision, Rect insets) { this(res, displayWidth, displayHeight, dividerSize, isHorizontalDivision, insets, DOCKED_INVALID, false); DOCKED_INVALID, false /* minimized */, true /* resizable */); } public DividerSnapAlgorithm(Resources res, int displayWidth, int displayHeight, int dividerSize, boolean isHorizontalDivision, Rect insets, int dockSide) { this(res, displayWidth, displayHeight, dividerSize, isHorizontalDivision, insets, dockSide, false); dockSide, false /* minimized */, true /* resizable */); } public DividerSnapAlgorithm(Resources res, int displayWidth, int displayHeight, int dividerSize, boolean isHorizontalDivision, Rect insets, int dockSide, boolean isMinimizedMode) { boolean isHorizontalDivision, Rect insets, int dockSide, boolean isMinimizedMode, boolean isHomeResizable) { mMinFlingVelocityPxPerSecond = MIN_FLING_VELOCITY_DP_PER_SECOND * res.getDisplayMetrics().density; mMinDismissVelocityPxPerSecond = Loading @@ -132,8 +133,8 @@ public class DividerSnapAlgorithm { com.android.internal.R.fraction.docked_stack_divider_fixed_ratio, 1, 1); mMinimalSizeResizableTask = res.getDimensionPixelSize( com.android.internal.R.dimen.default_minimal_size_resizable_task); mTaskHeightInMinimizedMode = res.getDimensionPixelSize( com.android.internal.R.dimen.task_height_of_minimized_mode); mTaskHeightInMinimizedMode = isHomeResizable ? res.getDimensionPixelSize( com.android.internal.R.dimen.task_height_of_minimized_mode) : 0; calculateTargets(isHorizontalDivision, dockSide); mFirstSplitTarget = mTargets.get(1); mLastSplitTarget = mTargets.get(mTargets.size() - 2); Loading packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java +3 −3 Original line number Diff line number Diff line Loading @@ -127,7 +127,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, snap.calculateNonDismissingSnapTarget(position); sdl.resizeSplits(target.position, t); if (isSplitActive()) { if (isSplitActive() && mHomeStackResizable) { WindowManagerProxy.applyHomeTasksMinimized(sdl, mSplits.mSecondary.token, t); } if (mWindowManagerProxy.queueSyncTransactionIfWaiting(t)) { Loading Loading @@ -428,7 +428,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, } private void updateTouchable() { mWindowManager.setTouchable((mHomeStackResizable || !mMinimized) && !mAdjustedForIme); mWindowManager.setTouchable(!mAdjustedForIme); } /** Loading Loading @@ -523,7 +523,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, } void ensureMinimizedSplit() { setHomeMinimized(true /* minimized */, mSplits.mSecondary.isResizeable); setHomeMinimized(true /* minimized */, mHomeStackResizable); if (!isDividerVisible()) { // Wasn't in split-mode yet, so enter now. if (DEBUG) { Loading packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +19 −58 Original line number Diff line number Diff line Loading @@ -320,8 +320,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, super.onAttachedToWindow(); // Save the current target if not minimized once attached to window if (mHomeStackResizable && mDockSide != WindowManager.DOCKED_INVALID && !mIsInMinimizeInteraction) { if (mDockSide != WindowManager.DOCKED_INVALID && !mIsInMinimizeInteraction) { saveSnapTargetBeforeMinimized(mSnapTargetBeforeMinimized); } mFirstLayout = true; Loading Loading @@ -470,8 +469,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, } public DividerSnapAlgorithm getSnapAlgorithm() { return mDockedStackMinimized && mHomeStackResizable ? mSplitLayout.getMinimizedSnapAlgorithm() return mDockedStackMinimized ? mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable) : mSplitLayout.getSnapAlgorithm(); } Loading Loading @@ -629,7 +627,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, } // Record last snap target the divider moved to if (mHomeStackResizable && !mIsInMinimizeInteraction) { if (!mIsInMinimizeInteraction) { // The last snapTarget position can be negative when the last divider position was // offscreen. In that case, save the middle (default) SnapTarget so calculating next // position isn't negative. Loading Loading @@ -774,7 +772,8 @@ public class DividerView extends FrameLayout implements OnTouchListener, mSplitLayout.resizeSplits(midPos); Transaction t = mTiles.getTransaction(); if (mDockedStackMinimized) { int position = mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget().position; int position = mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable) .getMiddleTarget().position; calculateBoundsForPosition(position, mDockSide, mDockedRect); calculateBoundsForPosition(position, DockedDividerUtils.invertDockSide(mDockSide), mOtherRect); Loading Loading @@ -811,23 +810,9 @@ public class DividerView extends FrameLayout implements OnTouchListener, updateDockSide(); if (!minimized) { resetBackground(); } else if (!isHomeStackResizable) { if (mDockSide == WindowManager.DOCKED_TOP) { mBackground.setPivotY(0); mBackground.setScaleY(MINIMIZE_DOCK_SCALE); } else if (mDockSide == WindowManager.DOCKED_LEFT || mDockSide == WindowManager.DOCKED_RIGHT) { mBackground.setPivotX(mDockSide == WindowManager.DOCKED_LEFT ? 0 : mBackground.getWidth()); mBackground.setScaleX(MINIMIZE_DOCK_SCALE); } } mMinimizedShadow.setAlpha(minimized ? 1f : 0f); if (!isHomeStackResizable) { mHandle.setAlpha(minimized ? 0f : 1f); mDockedStackMinimized = minimized; } else if (mDockedStackMinimized != minimized) { if (mDockedStackMinimized != minimized) { mDockedStackMinimized = minimized; if (mSplitLayout.mDisplayLayout.rotation() != mDefaultDisplay.getRotation()) { // Splitscreen to minimize is about to starts after rotating landscape to seascape, Loading @@ -840,8 +825,8 @@ public class DividerView extends FrameLayout implements OnTouchListener, // Relayout to recalculate the divider shadow when minimizing requestLayout(); mIsInMinimizeInteraction = true; resizeStackSurfaces( mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget(), t); resizeStackSurfaces(mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable) .getMiddleTarget(), t); } else { resizeStackSurfaces(mSnapTargetBeforeMinimized, t); mIsInMinimizeInteraction = false; Loading @@ -860,13 +845,13 @@ public class DividerView extends FrameLayout implements OnTouchListener, t.show(sc).apply(); mTiles.releaseTransaction(t); }); if (isHomeStackResizable) { SnapTarget miniMid = mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget(); SnapTarget miniMid = mSplitLayout.getMinimizedSnapAlgorithm(isHomeStackResizable).getMiddleTarget(); if (mDockedStackMinimized) { mDividerPositionY = mDividerPositionX = miniMid.position; } } } /** * Tries to grab a surface control from ViewRootImpl. If this isn't available for some reason Loading Loading @@ -903,38 +888,15 @@ public class DividerView extends FrameLayout implements OnTouchListener, if (DEBUG) Slog.d(TAG, "setMinDock: " + mDockedStackMinimized + "->" + minimized); mHomeStackResizable = isHomeStackResizable; updateDockSide(); if (!isHomeStackResizable) { mMinimizedShadow.animate() .alpha(minimized ? 1f : 0f) .setInterpolator(Interpolators.ALPHA_IN) .setDuration(animDuration) .start(); mHandle.animate() .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .setDuration(animDuration) .alpha(minimized ? 0f : 1f) .start(); if (mDockSide == WindowManager.DOCKED_TOP) { mBackground.setPivotY(0); mBackground.animate() .scaleY(minimized ? MINIMIZE_DOCK_SCALE : 1f); } else if (mDockSide == WindowManager.DOCKED_LEFT || mDockSide == WindowManager.DOCKED_RIGHT) { mBackground.setPivotX(mDockSide == WindowManager.DOCKED_LEFT ? 0 : mBackground.getWidth()); mBackground.animate() .scaleX(minimized ? MINIMIZE_DOCK_SCALE : 1f); } mDockedStackMinimized = minimized; } else if (mDockedStackMinimized != minimized) { if (mDockedStackMinimized != minimized) { mIsInMinimizeInteraction = true; mDockedStackMinimized = minimized; stopDragging(minimized ? mSnapTargetBeforeMinimized.position : getCurrentPosition(), minimized ? mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget() ? mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable) .getMiddleTarget() : mSnapTargetBeforeMinimized, animDuration, Interpolators.FAST_OUT_SLOW_IN, 0); setAdjustedForIme(false, animDuration); Loading Loading @@ -1127,7 +1089,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, final boolean ownTransaction = transaction == null; final Transaction t = ownTransaction ? mTiles.getTransaction() : transaction; mLastResizeRect.set(mDockedRect); if (mHomeStackResizable && mIsInMinimizeInteraction) { if (mIsInMinimizeInteraction) { calculateBoundsForPosition(mSnapTargetBeforeMinimized.position, mDockSide, mDockedTaskRect); calculateBoundsForPosition(mSnapTargetBeforeMinimized.position, Loading @@ -1138,8 +1100,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, mDockedTaskRect.offset(Math.max(position, -mDividerSize) - mDockedTaskRect.left + mDividerSize, 0); } resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect); resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect); if (ownTransaction) { t.apply(); mTiles.releaseTransaction(t); Loading Loading @@ -1420,7 +1381,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, void onUndockingTask() { int dockSide = mSplitLayout.getPrimarySplitSide(); if (inSplitMode() && (mHomeStackResizable || !mDockedStackMinimized)) { if (inSplitMode()) { startDragging(false /* animate */, false /* touching */); SnapTarget target = dockSideTopLeft(dockSide) ? mSplitLayout.getSnapAlgorithm().getDismissEndTarget() Loading packages/SystemUI/src/com/android/systemui/stackdivider/SplitDisplayLayout.java +5 −11 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.systemui.stackdivider; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static android.view.WindowManager.DOCKED_BOTTOM; Loading Loading @@ -113,11 +111,6 @@ public class SplitDisplayLayout { } } boolean isMinimized() { return mTiles.mSecondary.topActivityType == ACTIVITY_TYPE_HOME || mTiles.mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS; } DividerSnapAlgorithm getSnapAlgorithm() { if (mSnapAlgorithm == null) { updateResources(); Loading @@ -129,14 +122,14 @@ public class SplitDisplayLayout { return mSnapAlgorithm; } DividerSnapAlgorithm getMinimizedSnapAlgorithm() { DividerSnapAlgorithm getMinimizedSnapAlgorithm(boolean homeStackResizable) { if (mMinimizedSnapAlgorithm == null) { updateResources(); boolean isHorizontalDivision = !mDisplayLayout.isLandscape(); mMinimizedSnapAlgorithm = new DividerSnapAlgorithm(mContext.getResources(), mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize, isHorizontalDivision, mDisplayLayout.stableInsets(), getPrimarySplitSide(), true /* isMinimized */); true /* isMinimized */, homeStackResizable); } return mMinimizedSnapAlgorithm; } Loading Loading @@ -168,8 +161,9 @@ public class SplitDisplayLayout { mDisplayLayout.height(), mDividerSize); } Rect calcMinimizedHomeStackBounds() { DividerSnapAlgorithm.SnapTarget miniMid = getMinimizedSnapAlgorithm().getMiddleTarget(); Rect calcResizableMinimizedHomeStackBounds() { DividerSnapAlgorithm.SnapTarget miniMid = getMinimizedSnapAlgorithm(true /* resizable */).getMiddleTarget(); Rect homeBounds = new Rect(); DockedDividerUtils.calculateBoundsForPosition(miniMid.position, DockedDividerUtils.invertDockSide(getPrimarySplitSide()), homeBounds, Loading packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java +8 −6 Original line number Diff line number Diff line Loading @@ -165,8 +165,9 @@ class SplitScreenTaskOrganizer extends TaskOrganizer { Log.e(TAG, "Got handleTaskInfoChanged when not initialized: " + info); return; } final boolean secondaryWasHomeOrRecents = mSecondary.topActivityType == ACTIVITY_TYPE_HOME || mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS; final boolean secondaryImpliedMinimize = mSecondary.topActivityType == ACTIVITY_TYPE_HOME || (mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS && mDivider.isHomeStackResizable()); final boolean primaryWasEmpty = mPrimary.topActivityType == ACTIVITY_TYPE_UNDEFINED; final boolean secondaryWasEmpty = mSecondary.topActivityType == ACTIVITY_TYPE_UNDEFINED; if (info.token.asBinder() == mPrimary.token.asBinder()) { Loading @@ -176,13 +177,14 @@ class SplitScreenTaskOrganizer extends TaskOrganizer { } final boolean primaryIsEmpty = mPrimary.topActivityType == ACTIVITY_TYPE_UNDEFINED; final boolean secondaryIsEmpty = mSecondary.topActivityType == ACTIVITY_TYPE_UNDEFINED; final boolean secondaryIsHomeOrRecents = mSecondary.topActivityType == ACTIVITY_TYPE_HOME || mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS; final boolean secondaryImpliesMinimize = mSecondary.topActivityType == ACTIVITY_TYPE_HOME || (mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS && mDivider.isHomeStackResizable()); if (DEBUG) { Log.d(TAG, "onTaskInfoChanged " + mPrimary + " " + mSecondary); } if (primaryIsEmpty == primaryWasEmpty && secondaryWasEmpty == secondaryIsEmpty && secondaryWasHomeOrRecents == secondaryIsHomeOrRecents) { && secondaryImpliedMinimize == secondaryImpliesMinimize) { // No relevant changes return; } Loading Loading @@ -211,7 +213,7 @@ class SplitScreenTaskOrganizer extends TaskOrganizer { } mDivider.startEnterSplit(); } } else if (secondaryIsHomeOrRecents) { } else if (secondaryImpliesMinimize) { // Both splits are populated but the secondary split has a home/recents stack on top, // so enter minimized mode. mDivider.ensureMinimizedSplit(); Loading Loading
core/java/com/android/internal/policy/DividerSnapAlgorithm.java +6 −5 Original line number Diff line number Diff line Loading @@ -104,17 +104,18 @@ public class DividerSnapAlgorithm { public DividerSnapAlgorithm(Resources res, int displayWidth, int displayHeight, int dividerSize, boolean isHorizontalDivision, Rect insets) { this(res, displayWidth, displayHeight, dividerSize, isHorizontalDivision, insets, DOCKED_INVALID, false); DOCKED_INVALID, false /* minimized */, true /* resizable */); } public DividerSnapAlgorithm(Resources res, int displayWidth, int displayHeight, int dividerSize, boolean isHorizontalDivision, Rect insets, int dockSide) { this(res, displayWidth, displayHeight, dividerSize, isHorizontalDivision, insets, dockSide, false); dockSide, false /* minimized */, true /* resizable */); } public DividerSnapAlgorithm(Resources res, int displayWidth, int displayHeight, int dividerSize, boolean isHorizontalDivision, Rect insets, int dockSide, boolean isMinimizedMode) { boolean isHorizontalDivision, Rect insets, int dockSide, boolean isMinimizedMode, boolean isHomeResizable) { mMinFlingVelocityPxPerSecond = MIN_FLING_VELOCITY_DP_PER_SECOND * res.getDisplayMetrics().density; mMinDismissVelocityPxPerSecond = Loading @@ -132,8 +133,8 @@ public class DividerSnapAlgorithm { com.android.internal.R.fraction.docked_stack_divider_fixed_ratio, 1, 1); mMinimalSizeResizableTask = res.getDimensionPixelSize( com.android.internal.R.dimen.default_minimal_size_resizable_task); mTaskHeightInMinimizedMode = res.getDimensionPixelSize( com.android.internal.R.dimen.task_height_of_minimized_mode); mTaskHeightInMinimizedMode = isHomeResizable ? res.getDimensionPixelSize( com.android.internal.R.dimen.task_height_of_minimized_mode) : 0; calculateTargets(isHorizontalDivision, dockSide); mFirstSplitTarget = mTargets.get(1); mLastSplitTarget = mTargets.get(mTargets.size() - 2); Loading
packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java +3 −3 Original line number Diff line number Diff line Loading @@ -127,7 +127,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, snap.calculateNonDismissingSnapTarget(position); sdl.resizeSplits(target.position, t); if (isSplitActive()) { if (isSplitActive() && mHomeStackResizable) { WindowManagerProxy.applyHomeTasksMinimized(sdl, mSplits.mSecondary.token, t); } if (mWindowManagerProxy.queueSyncTransactionIfWaiting(t)) { Loading Loading @@ -428,7 +428,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, } private void updateTouchable() { mWindowManager.setTouchable((mHomeStackResizable || !mMinimized) && !mAdjustedForIme); mWindowManager.setTouchable(!mAdjustedForIme); } /** Loading Loading @@ -523,7 +523,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, } void ensureMinimizedSplit() { setHomeMinimized(true /* minimized */, mSplits.mSecondary.isResizeable); setHomeMinimized(true /* minimized */, mHomeStackResizable); if (!isDividerVisible()) { // Wasn't in split-mode yet, so enter now. if (DEBUG) { Loading
packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +19 −58 Original line number Diff line number Diff line Loading @@ -320,8 +320,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, super.onAttachedToWindow(); // Save the current target if not minimized once attached to window if (mHomeStackResizable && mDockSide != WindowManager.DOCKED_INVALID && !mIsInMinimizeInteraction) { if (mDockSide != WindowManager.DOCKED_INVALID && !mIsInMinimizeInteraction) { saveSnapTargetBeforeMinimized(mSnapTargetBeforeMinimized); } mFirstLayout = true; Loading Loading @@ -470,8 +469,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, } public DividerSnapAlgorithm getSnapAlgorithm() { return mDockedStackMinimized && mHomeStackResizable ? mSplitLayout.getMinimizedSnapAlgorithm() return mDockedStackMinimized ? mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable) : mSplitLayout.getSnapAlgorithm(); } Loading Loading @@ -629,7 +627,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, } // Record last snap target the divider moved to if (mHomeStackResizable && !mIsInMinimizeInteraction) { if (!mIsInMinimizeInteraction) { // The last snapTarget position can be negative when the last divider position was // offscreen. In that case, save the middle (default) SnapTarget so calculating next // position isn't negative. Loading Loading @@ -774,7 +772,8 @@ public class DividerView extends FrameLayout implements OnTouchListener, mSplitLayout.resizeSplits(midPos); Transaction t = mTiles.getTransaction(); if (mDockedStackMinimized) { int position = mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget().position; int position = mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable) .getMiddleTarget().position; calculateBoundsForPosition(position, mDockSide, mDockedRect); calculateBoundsForPosition(position, DockedDividerUtils.invertDockSide(mDockSide), mOtherRect); Loading Loading @@ -811,23 +810,9 @@ public class DividerView extends FrameLayout implements OnTouchListener, updateDockSide(); if (!minimized) { resetBackground(); } else if (!isHomeStackResizable) { if (mDockSide == WindowManager.DOCKED_TOP) { mBackground.setPivotY(0); mBackground.setScaleY(MINIMIZE_DOCK_SCALE); } else if (mDockSide == WindowManager.DOCKED_LEFT || mDockSide == WindowManager.DOCKED_RIGHT) { mBackground.setPivotX(mDockSide == WindowManager.DOCKED_LEFT ? 0 : mBackground.getWidth()); mBackground.setScaleX(MINIMIZE_DOCK_SCALE); } } mMinimizedShadow.setAlpha(minimized ? 1f : 0f); if (!isHomeStackResizable) { mHandle.setAlpha(minimized ? 0f : 1f); mDockedStackMinimized = minimized; } else if (mDockedStackMinimized != minimized) { if (mDockedStackMinimized != minimized) { mDockedStackMinimized = minimized; if (mSplitLayout.mDisplayLayout.rotation() != mDefaultDisplay.getRotation()) { // Splitscreen to minimize is about to starts after rotating landscape to seascape, Loading @@ -840,8 +825,8 @@ public class DividerView extends FrameLayout implements OnTouchListener, // Relayout to recalculate the divider shadow when minimizing requestLayout(); mIsInMinimizeInteraction = true; resizeStackSurfaces( mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget(), t); resizeStackSurfaces(mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable) .getMiddleTarget(), t); } else { resizeStackSurfaces(mSnapTargetBeforeMinimized, t); mIsInMinimizeInteraction = false; Loading @@ -860,13 +845,13 @@ public class DividerView extends FrameLayout implements OnTouchListener, t.show(sc).apply(); mTiles.releaseTransaction(t); }); if (isHomeStackResizable) { SnapTarget miniMid = mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget(); SnapTarget miniMid = mSplitLayout.getMinimizedSnapAlgorithm(isHomeStackResizable).getMiddleTarget(); if (mDockedStackMinimized) { mDividerPositionY = mDividerPositionX = miniMid.position; } } } /** * Tries to grab a surface control from ViewRootImpl. If this isn't available for some reason Loading Loading @@ -903,38 +888,15 @@ public class DividerView extends FrameLayout implements OnTouchListener, if (DEBUG) Slog.d(TAG, "setMinDock: " + mDockedStackMinimized + "->" + minimized); mHomeStackResizable = isHomeStackResizable; updateDockSide(); if (!isHomeStackResizable) { mMinimizedShadow.animate() .alpha(minimized ? 1f : 0f) .setInterpolator(Interpolators.ALPHA_IN) .setDuration(animDuration) .start(); mHandle.animate() .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .setDuration(animDuration) .alpha(minimized ? 0f : 1f) .start(); if (mDockSide == WindowManager.DOCKED_TOP) { mBackground.setPivotY(0); mBackground.animate() .scaleY(minimized ? MINIMIZE_DOCK_SCALE : 1f); } else if (mDockSide == WindowManager.DOCKED_LEFT || mDockSide == WindowManager.DOCKED_RIGHT) { mBackground.setPivotX(mDockSide == WindowManager.DOCKED_LEFT ? 0 : mBackground.getWidth()); mBackground.animate() .scaleX(minimized ? MINIMIZE_DOCK_SCALE : 1f); } mDockedStackMinimized = minimized; } else if (mDockedStackMinimized != minimized) { if (mDockedStackMinimized != minimized) { mIsInMinimizeInteraction = true; mDockedStackMinimized = minimized; stopDragging(minimized ? mSnapTargetBeforeMinimized.position : getCurrentPosition(), minimized ? mSplitLayout.getMinimizedSnapAlgorithm().getMiddleTarget() ? mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable) .getMiddleTarget() : mSnapTargetBeforeMinimized, animDuration, Interpolators.FAST_OUT_SLOW_IN, 0); setAdjustedForIme(false, animDuration); Loading Loading @@ -1127,7 +1089,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, final boolean ownTransaction = transaction == null; final Transaction t = ownTransaction ? mTiles.getTransaction() : transaction; mLastResizeRect.set(mDockedRect); if (mHomeStackResizable && mIsInMinimizeInteraction) { if (mIsInMinimizeInteraction) { calculateBoundsForPosition(mSnapTargetBeforeMinimized.position, mDockSide, mDockedTaskRect); calculateBoundsForPosition(mSnapTargetBeforeMinimized.position, Loading @@ -1138,8 +1100,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, mDockedTaskRect.offset(Math.max(position, -mDividerSize) - mDockedTaskRect.left + mDividerSize, 0); } resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect); resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect); if (ownTransaction) { t.apply(); mTiles.releaseTransaction(t); Loading Loading @@ -1420,7 +1381,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, void onUndockingTask() { int dockSide = mSplitLayout.getPrimarySplitSide(); if (inSplitMode() && (mHomeStackResizable || !mDockedStackMinimized)) { if (inSplitMode()) { startDragging(false /* animate */, false /* touching */); SnapTarget target = dockSideTopLeft(dockSide) ? mSplitLayout.getSnapAlgorithm().getDismissEndTarget() Loading
packages/SystemUI/src/com/android/systemui/stackdivider/SplitDisplayLayout.java +5 −11 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.systemui.stackdivider; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static android.view.WindowManager.DOCKED_BOTTOM; Loading Loading @@ -113,11 +111,6 @@ public class SplitDisplayLayout { } } boolean isMinimized() { return mTiles.mSecondary.topActivityType == ACTIVITY_TYPE_HOME || mTiles.mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS; } DividerSnapAlgorithm getSnapAlgorithm() { if (mSnapAlgorithm == null) { updateResources(); Loading @@ -129,14 +122,14 @@ public class SplitDisplayLayout { return mSnapAlgorithm; } DividerSnapAlgorithm getMinimizedSnapAlgorithm() { DividerSnapAlgorithm getMinimizedSnapAlgorithm(boolean homeStackResizable) { if (mMinimizedSnapAlgorithm == null) { updateResources(); boolean isHorizontalDivision = !mDisplayLayout.isLandscape(); mMinimizedSnapAlgorithm = new DividerSnapAlgorithm(mContext.getResources(), mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize, isHorizontalDivision, mDisplayLayout.stableInsets(), getPrimarySplitSide(), true /* isMinimized */); true /* isMinimized */, homeStackResizable); } return mMinimizedSnapAlgorithm; } Loading Loading @@ -168,8 +161,9 @@ public class SplitDisplayLayout { mDisplayLayout.height(), mDividerSize); } Rect calcMinimizedHomeStackBounds() { DividerSnapAlgorithm.SnapTarget miniMid = getMinimizedSnapAlgorithm().getMiddleTarget(); Rect calcResizableMinimizedHomeStackBounds() { DividerSnapAlgorithm.SnapTarget miniMid = getMinimizedSnapAlgorithm(true /* resizable */).getMiddleTarget(); Rect homeBounds = new Rect(); DockedDividerUtils.calculateBoundsForPosition(miniMid.position, DockedDividerUtils.invertDockSide(getPrimarySplitSide()), homeBounds, Loading
packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java +8 −6 Original line number Diff line number Diff line Loading @@ -165,8 +165,9 @@ class SplitScreenTaskOrganizer extends TaskOrganizer { Log.e(TAG, "Got handleTaskInfoChanged when not initialized: " + info); return; } final boolean secondaryWasHomeOrRecents = mSecondary.topActivityType == ACTIVITY_TYPE_HOME || mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS; final boolean secondaryImpliedMinimize = mSecondary.topActivityType == ACTIVITY_TYPE_HOME || (mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS && mDivider.isHomeStackResizable()); final boolean primaryWasEmpty = mPrimary.topActivityType == ACTIVITY_TYPE_UNDEFINED; final boolean secondaryWasEmpty = mSecondary.topActivityType == ACTIVITY_TYPE_UNDEFINED; if (info.token.asBinder() == mPrimary.token.asBinder()) { Loading @@ -176,13 +177,14 @@ class SplitScreenTaskOrganizer extends TaskOrganizer { } final boolean primaryIsEmpty = mPrimary.topActivityType == ACTIVITY_TYPE_UNDEFINED; final boolean secondaryIsEmpty = mSecondary.topActivityType == ACTIVITY_TYPE_UNDEFINED; final boolean secondaryIsHomeOrRecents = mSecondary.topActivityType == ACTIVITY_TYPE_HOME || mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS; final boolean secondaryImpliesMinimize = mSecondary.topActivityType == ACTIVITY_TYPE_HOME || (mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS && mDivider.isHomeStackResizable()); if (DEBUG) { Log.d(TAG, "onTaskInfoChanged " + mPrimary + " " + mSecondary); } if (primaryIsEmpty == primaryWasEmpty && secondaryWasEmpty == secondaryIsEmpty && secondaryWasHomeOrRecents == secondaryIsHomeOrRecents) { && secondaryImpliedMinimize == secondaryImpliesMinimize) { // No relevant changes return; } Loading Loading @@ -211,7 +213,7 @@ class SplitScreenTaskOrganizer extends TaskOrganizer { } mDivider.startEnterSplit(); } } else if (secondaryIsHomeOrRecents) { } else if (secondaryImpliesMinimize) { // Both splits are populated but the secondary split has a home/recents stack on top, // so enter minimized mode. mDivider.ensureMinimizedSplit(); Loading