Loading core/java/com/android/internal/policy/PipSnapAlgorithm.java +18 −11 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ import android.content.res.Configuration; import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; import android.hardware.display.DisplayManager; import android.view.Gravity; import android.view.ViewConfiguration; import android.widget.Scroller; Loading @@ -44,9 +43,6 @@ public class PipSnapAlgorithm { // The friction multiplier to control how slippery the PIP is when flung private static final float SCROLL_FRICTION_MULTIPLIER = 8f; // The fraction of the stack width to show when minimized private static final float MINIMIZED_VISIBLE_FRACTION = 0.25f; private final Context mContext; private final ArrayList<Integer> mSnapGravities = new ArrayList<>(); Loading @@ -56,8 +52,12 @@ public class PipSnapAlgorithm { private Scroller mScroller; private int mOrientation = Configuration.ORIENTATION_UNDEFINED; private final int mMinimizedVisibleSize; public PipSnapAlgorithm(Context context) { mContext = context; mMinimizedVisibleSize = context.getResources().getDimensionPixelSize( com.android.internal.R.dimen.pip_minimized_visible_size); onConfigurationChanged(); } Loading Loading @@ -129,11 +129,10 @@ public class PipSnapAlgorithm { * Applies the offset to the {@param stackBounds} to adjust it to a minimized state. */ public void applyMinimizedOffset(Rect stackBounds, Rect movementBounds, Point displaySize) { int visibleWidth = (int) (MINIMIZED_VISIBLE_FRACTION * stackBounds.width()); if (stackBounds.left <= movementBounds.centerX()) { stackBounds.offsetTo(-stackBounds.width() + visibleWidth, stackBounds.top); stackBounds.offsetTo(-stackBounds.width() + mMinimizedVisibleSize, stackBounds.top); } else { stackBounds.offsetTo(displaySize.x - visibleWidth, stackBounds.top); stackBounds.offsetTo(displaySize.x - mMinimizedVisibleSize, stackBounds.top); } } Loading Loading @@ -220,15 +219,23 @@ public class PipSnapAlgorithm { * the new bounds out to {@param boundsOut}. */ private void snapRectToClosestEdge(Rect stackBounds, Rect movementBounds, Rect boundsOut) { final int fromLeft = Math.abs(stackBounds.left - movementBounds.left); final int fromTop = Math.abs(stackBounds.top - movementBounds.top); final int fromRight = Math.abs(movementBounds.right - stackBounds.left); final int fromBottom = Math.abs(movementBounds.bottom - stackBounds.top); // If the stackBounds are minimized, then it should only be snapped back horizontally final int boundedLeft = Math.max(movementBounds.left, Math.min(movementBounds.right, stackBounds.left)); final int boundedTop = Math.max(movementBounds.top, Math.min(movementBounds.bottom, stackBounds.top)); boundsOut.set(stackBounds); if (stackBounds.left < movementBounds.left || stackBounds.left > movementBounds.right) { boundsOut.offsetTo(boundedLeft, boundsOut.top); return; } // Otherwise, just find the closest edge final int fromLeft = Math.abs(stackBounds.left - movementBounds.left); final int fromTop = Math.abs(stackBounds.top - movementBounds.top); final int fromRight = Math.abs(movementBounds.right - stackBounds.left); final int fromBottom = Math.abs(movementBounds.bottom - stackBounds.top); if (fromLeft <= fromTop && fromLeft <= fromRight && fromLeft <= fromBottom) { boundsOut.offsetTo(movementBounds.left, boundedTop); } else if (fromTop <= fromLeft && fromTop <= fromRight && fromTop <= fromBottom) { Loading core/res/res/values/dimens.xml +3 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,9 @@ when the user opens homescreen. --> <dimen name="docked_stack_minimize_thickness">8dp</dimen> <!-- The amount to leave on-screen when the PIP is minimized. --> <dimen name="pip_minimized_visible_size">48dp</dimen> <!-- Min width for a tablet device --> <dimen name="min_xlarge_screen_width">800dp</dimen> Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -1542,6 +1542,7 @@ <java-symbol type="dimen" name="docked_stack_divider_thickness" /> <java-symbol type="dimen" name="docked_stack_divider_insets" /> <java-symbol type="dimen" name="docked_stack_minimize_thickness" /> <java-symbol type="dimen" name="pip_minimized_visible_size" /> <java-symbol type="integer" name="config_dockedStackDividerSnapMode" /> <java-symbol type="fraction" name="docked_stack_divider_fixed_ratio" /> <java-symbol type="fraction" name="thumbnail_fullscreen_scale" /> Loading packages/SystemUI/res/layout/pip_menu_action.xml +5 −28 Original line number Diff line number Diff line Loading @@ -13,32 +13,9 @@ See the License for the specific language governing permissions and limitations under the License. --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="?android:selectableItemBackground"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:orientation="vertical"> <ImageView android:id="@+id/icon" android:layout_width="@dimen/pip_menu_action_icon_size" android:layout_height="@dimen/pip_menu_action_icon_size" android:layout_gravity="center_horizontal" android:layout_marginBottom="4dp" /> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:includeFontPadding="false" android:gravity="center" android:textSize="12sp" android:textColor="#ffffffff" android:textAllCaps="true" android:fontFamily="sans-serif" /> </LinearLayout> </FrameLayout> No newline at end of file xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="48dp" android:layout_height="48dp" android:padding="10dp" android:background="?android:selectableItemBackgroundBorderless" /> No newline at end of file packages/SystemUI/res/layout/pip_menu_activity.xml +23 −32 Original line number Diff line number Diff line Loading @@ -13,47 +13,38 @@ See the License for the specific language governing permissions and limitations under the License. --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/menu" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#66000000"> android:background="#00000000"> <!-- The above background is only for the dismiss button ripple to show. --> <LinearLayout android:id="@+id/actions" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="48dp"> </LinearLayout> <ImageView android:id="@+id/dismiss" android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="top|end" android:padding="10dp" android:contentDescription="@string/pip_phone_dismiss" android:src="@drawable/ic_close_white" android:background="?android:selectableItemBackgroundBorderless" /> <LinearLayout <FrameLayout android:id="@+id/actions_container" android:layout_width="match_parent" android:layout_height="48dp" android:layout_gravity="bottom" android:orientation="horizontal"> <TextView android:id="@+id/dismiss" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:textSize="12sp" android:textColor="#ffffffff" android:fontFamily="sans-serif" android:text="@string/pip_phone_dismiss" android:background="?android:selectableItemBackground" /> <TextView android:id="@+id/expand" android:layout_width="0dp" android:paddingStart="24dp" android:paddingEnd="24dp" android:background="#66000000" android:visibility="invisible"> <LinearLayout android:id="@+id/actions" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:textSize="12sp" android:textColor="#ffffffff" android:fontFamily="sans-serif" android:text="@string/pip_phone_expand" android:background="?android:selectableItemBackground" /> </LinearLayout> android:layout_gravity="center_horizontal" android:orientation="horizontal" /> </FrameLayout> </FrameLayout> Loading
core/java/com/android/internal/policy/PipSnapAlgorithm.java +18 −11 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ import android.content.res.Configuration; import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; import android.hardware.display.DisplayManager; import android.view.Gravity; import android.view.ViewConfiguration; import android.widget.Scroller; Loading @@ -44,9 +43,6 @@ public class PipSnapAlgorithm { // The friction multiplier to control how slippery the PIP is when flung private static final float SCROLL_FRICTION_MULTIPLIER = 8f; // The fraction of the stack width to show when minimized private static final float MINIMIZED_VISIBLE_FRACTION = 0.25f; private final Context mContext; private final ArrayList<Integer> mSnapGravities = new ArrayList<>(); Loading @@ -56,8 +52,12 @@ public class PipSnapAlgorithm { private Scroller mScroller; private int mOrientation = Configuration.ORIENTATION_UNDEFINED; private final int mMinimizedVisibleSize; public PipSnapAlgorithm(Context context) { mContext = context; mMinimizedVisibleSize = context.getResources().getDimensionPixelSize( com.android.internal.R.dimen.pip_minimized_visible_size); onConfigurationChanged(); } Loading Loading @@ -129,11 +129,10 @@ public class PipSnapAlgorithm { * Applies the offset to the {@param stackBounds} to adjust it to a minimized state. */ public void applyMinimizedOffset(Rect stackBounds, Rect movementBounds, Point displaySize) { int visibleWidth = (int) (MINIMIZED_VISIBLE_FRACTION * stackBounds.width()); if (stackBounds.left <= movementBounds.centerX()) { stackBounds.offsetTo(-stackBounds.width() + visibleWidth, stackBounds.top); stackBounds.offsetTo(-stackBounds.width() + mMinimizedVisibleSize, stackBounds.top); } else { stackBounds.offsetTo(displaySize.x - visibleWidth, stackBounds.top); stackBounds.offsetTo(displaySize.x - mMinimizedVisibleSize, stackBounds.top); } } Loading Loading @@ -220,15 +219,23 @@ public class PipSnapAlgorithm { * the new bounds out to {@param boundsOut}. */ private void snapRectToClosestEdge(Rect stackBounds, Rect movementBounds, Rect boundsOut) { final int fromLeft = Math.abs(stackBounds.left - movementBounds.left); final int fromTop = Math.abs(stackBounds.top - movementBounds.top); final int fromRight = Math.abs(movementBounds.right - stackBounds.left); final int fromBottom = Math.abs(movementBounds.bottom - stackBounds.top); // If the stackBounds are minimized, then it should only be snapped back horizontally final int boundedLeft = Math.max(movementBounds.left, Math.min(movementBounds.right, stackBounds.left)); final int boundedTop = Math.max(movementBounds.top, Math.min(movementBounds.bottom, stackBounds.top)); boundsOut.set(stackBounds); if (stackBounds.left < movementBounds.left || stackBounds.left > movementBounds.right) { boundsOut.offsetTo(boundedLeft, boundsOut.top); return; } // Otherwise, just find the closest edge final int fromLeft = Math.abs(stackBounds.left - movementBounds.left); final int fromTop = Math.abs(stackBounds.top - movementBounds.top); final int fromRight = Math.abs(movementBounds.right - stackBounds.left); final int fromBottom = Math.abs(movementBounds.bottom - stackBounds.top); if (fromLeft <= fromTop && fromLeft <= fromRight && fromLeft <= fromBottom) { boundsOut.offsetTo(movementBounds.left, boundedTop); } else if (fromTop <= fromLeft && fromTop <= fromRight && fromTop <= fromBottom) { Loading
core/res/res/values/dimens.xml +3 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,9 @@ when the user opens homescreen. --> <dimen name="docked_stack_minimize_thickness">8dp</dimen> <!-- The amount to leave on-screen when the PIP is minimized. --> <dimen name="pip_minimized_visible_size">48dp</dimen> <!-- Min width for a tablet device --> <dimen name="min_xlarge_screen_width">800dp</dimen> Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -1542,6 +1542,7 @@ <java-symbol type="dimen" name="docked_stack_divider_thickness" /> <java-symbol type="dimen" name="docked_stack_divider_insets" /> <java-symbol type="dimen" name="docked_stack_minimize_thickness" /> <java-symbol type="dimen" name="pip_minimized_visible_size" /> <java-symbol type="integer" name="config_dockedStackDividerSnapMode" /> <java-symbol type="fraction" name="docked_stack_divider_fixed_ratio" /> <java-symbol type="fraction" name="thumbnail_fullscreen_scale" /> Loading
packages/SystemUI/res/layout/pip_menu_action.xml +5 −28 Original line number Diff line number Diff line Loading @@ -13,32 +13,9 @@ See the License for the specific language governing permissions and limitations under the License. --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="?android:selectableItemBackground"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:orientation="vertical"> <ImageView android:id="@+id/icon" android:layout_width="@dimen/pip_menu_action_icon_size" android:layout_height="@dimen/pip_menu_action_icon_size" android:layout_gravity="center_horizontal" android:layout_marginBottom="4dp" /> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:includeFontPadding="false" android:gravity="center" android:textSize="12sp" android:textColor="#ffffffff" android:textAllCaps="true" android:fontFamily="sans-serif" /> </LinearLayout> </FrameLayout> No newline at end of file xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="48dp" android:layout_height="48dp" android:padding="10dp" android:background="?android:selectableItemBackgroundBorderless" /> No newline at end of file
packages/SystemUI/res/layout/pip_menu_activity.xml +23 −32 Original line number Diff line number Diff line Loading @@ -13,47 +13,38 @@ See the License for the specific language governing permissions and limitations under the License. --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/menu" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#66000000"> android:background="#00000000"> <!-- The above background is only for the dismiss button ripple to show. --> <LinearLayout android:id="@+id/actions" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="48dp"> </LinearLayout> <ImageView android:id="@+id/dismiss" android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="top|end" android:padding="10dp" android:contentDescription="@string/pip_phone_dismiss" android:src="@drawable/ic_close_white" android:background="?android:selectableItemBackgroundBorderless" /> <LinearLayout <FrameLayout android:id="@+id/actions_container" android:layout_width="match_parent" android:layout_height="48dp" android:layout_gravity="bottom" android:orientation="horizontal"> <TextView android:id="@+id/dismiss" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:textSize="12sp" android:textColor="#ffffffff" android:fontFamily="sans-serif" android:text="@string/pip_phone_dismiss" android:background="?android:selectableItemBackground" /> <TextView android:id="@+id/expand" android:layout_width="0dp" android:paddingStart="24dp" android:paddingEnd="24dp" android:background="#66000000" android:visibility="invisible"> <LinearLayout android:id="@+id/actions" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:textSize="12sp" android:textColor="#ffffffff" android:fontFamily="sans-serif" android:text="@string/pip_phone_expand" android:background="?android:selectableItemBackground" /> </LinearLayout> android:layout_gravity="center_horizontal" android:orientation="horizontal" /> </FrameLayout> </FrameLayout>