Merge "Moving the resources related to PiP to the WindowManager/Shell." into tm-dev

This commit is contained in:
Mateusz Cicheński
2022-02-23 19:49:36 +00:00
committed by Android (Google) Code Review
9 changed files with 88 additions and 64 deletions

View File

@@ -24,19 +24,6 @@
<!-- Flags enabling default window features. See Window.java --> <!-- Flags enabling default window features. See Window.java -->
<bool name="config_defaultWindowFeatureOptionsPanel">false</bool> <bool name="config_defaultWindowFeatureOptionsPanel">false</bool>
<!-- The percentage of the screen width to use for the default width or height of
picture-in-picture windows. Regardless of the percent set here, calculated size will never
be smaller than @dimen/default_minimal_size_pip_resizable_task. -->
<item name="config_pictureInPictureDefaultSizePercent" format="float" type="dimen">0.2</item>
<!-- Default insets [LEFT/RIGHTxTOP/BOTTOM] from the screen edge for picture-in-picture windows.
These values are in DPs and will be converted to pixel sizes internally. -->
<string translatable="false" name="config_defaultPictureInPictureScreenEdgeInsets">24x24</string>
<!-- The default gravity for the picture-in-picture window.
Currently, this maps to Gravity.BOTTOM | Gravity.RIGHT -->
<integer name="config_defaultPictureInPictureGravity">0x55</integer>
<!-- The maximum height of the expanded horizontal picture-in-picture window --> <!-- The maximum height of the expanded horizontal picture-in-picture window -->
<item name="config_pictureInPictureExpandedHorizontalHeight" <item name="config_pictureInPictureExpandedHorizontalHeight"
format="dimension" type="dimen">110dp</item> format="dimension" type="dimen">110dp</item>

View File

@@ -3704,26 +3704,6 @@
snapped to any position between the first target and the last target. --> snapped to any position between the first target and the last target. -->
<bool name="config_dockedStackDividerFreeSnapMode">false</bool> <bool name="config_dockedStackDividerFreeSnapMode">false</bool>
<!-- Default insets [LEFT/RIGHTxTOP/BOTTOM] from the screen edge for picture-in-picture windows.
These values are in DPs and will be converted to pixel sizes internally. -->
<string translatable="false" name="config_defaultPictureInPictureScreenEdgeInsets">16x16</string>
<!-- The percentage of the screen width to use for the default width or height of
picture-in-picture windows. Regardless of the percent set here, calculated size will never
be smaller than @dimen/default_minimal_size_pip_resizable_task. -->
<item name="config_pictureInPictureDefaultSizePercent" format="float" type="dimen">0.23</item>
<!-- The default aspect ratio for picture-in-picture windows. -->
<item name="config_pictureInPictureDefaultAspectRatio" format="float" type="dimen">1.777778</item>
<!-- This is the limit for the max and min aspect ratio (1 / this value) at which the min size
will be used instead of an adaptive size based loosely on area. -->
<item name="config_pictureInPictureAspectRatioLimitForMinSize" format="float" type="dimen">1.777778</item>
<!-- The default gravity for the picture-in-picture window.
Currently, this maps to Gravity.BOTTOM | Gravity.RIGHT -->
<integer name="config_defaultPictureInPictureGravity">0x55</integer>
<!-- The minimum aspect ratio (width/height) that is supported for picture-in-picture. Any <!-- The minimum aspect ratio (width/height) that is supported for picture-in-picture. Any
ratio smaller than this is considered too tall and thin to be usable. Currently, this ratio smaller than this is considered too tall and thin to be usable. Currently, this
is the inverse of the max landscape aspect ratio (1:2.39), but this is an extremely is the inverse of the max landscape aspect ratio (1:2.39), but this is an extremely

View File

@@ -717,16 +717,6 @@
<!-- The default minimal size of a resizable task, in both dimensions. --> <!-- The default minimal size of a resizable task, in both dimensions. -->
<dimen name="default_minimal_size_resizable_task">220dp</dimen> <dimen name="default_minimal_size_resizable_task">220dp</dimen>
<!-- The default minimal size of a PiP task, in both dimensions. -->
<dimen name="default_minimal_size_pip_resizable_task">108dp</dimen>
<!--
The overridable minimal size of a PiP task, in both dimensions.
Different from default_minimal_size_pip_resizable_task, this is to limit the dimension
when the pinned stack size is overridden by app via minWidth/minHeight.
-->
<dimen name="overridable_minimal_size_pip_resizable_task">48dp</dimen>
<!-- Height of a task when in minimized mode from the top when launcher is resizable. --> <!-- Height of a task when in minimized mode from the top when launcher is resizable. -->
<dimen name="task_height_of_minimized_mode">80dp</dimen> <dimen name="task_height_of_minimized_mode">80dp</dimen>

View File

@@ -408,11 +408,6 @@
<java-symbol type="array" name="config_localPrivateDisplayPorts" /> <java-symbol type="array" name="config_localPrivateDisplayPorts" />
<java-symbol type="integer" name="config_defaultDisplayDefaultColorMode" /> <java-symbol type="integer" name="config_defaultDisplayDefaultColorMode" />
<java-symbol type="bool" name="config_enableAppWidgetService" /> <java-symbol type="bool" name="config_enableAppWidgetService" />
<java-symbol type="string" name="config_defaultPictureInPictureScreenEdgeInsets" />
<java-symbol type="dimen" name="config_pictureInPictureDefaultSizePercent" />
<java-symbol type="dimen" name="config_pictureInPictureDefaultAspectRatio" />
<java-symbol type="dimen" name="config_pictureInPictureAspectRatioLimitForMinSize" />
<java-symbol type="integer" name="config_defaultPictureInPictureGravity" />
<java-symbol type="dimen" name="config_pictureInPictureMinAspectRatio" /> <java-symbol type="dimen" name="config_pictureInPictureMinAspectRatio" />
<java-symbol type="dimen" name="config_pictureInPictureMaxAspectRatio" /> <java-symbol type="dimen" name="config_pictureInPictureMaxAspectRatio" />
<java-symbol type="integer" name="config_pictureInPictureMaxNumberOfActions" /> <java-symbol type="integer" name="config_pictureInPictureMaxNumberOfActions" />
@@ -2016,8 +2011,6 @@
<java-symbol type="id" name="replace_message" /> <java-symbol type="id" name="replace_message" />
<java-symbol type="fraction" name="config_dimBehindFadeDuration" /> <java-symbol type="fraction" name="config_dimBehindFadeDuration" />
<java-symbol type="dimen" name="default_minimal_size_resizable_task" /> <java-symbol type="dimen" name="default_minimal_size_resizable_task" />
<java-symbol type="dimen" name="default_minimal_size_pip_resizable_task" />
<java-symbol type="dimen" name="overridable_minimal_size_pip_resizable_task" />
<java-symbol type="dimen" name="task_height_of_minimized_mode" /> <java-symbol type="dimen" name="task_height_of_minimized_mode" />
<java-symbol type="fraction" name="config_screenAutoBrightnessDozeScaleFactor" /> <java-symbol type="fraction" name="config_screenAutoBrightnessDozeScaleFactor" />
<java-symbol type="bool" name="config_allowPriorityVibrationsInLowPowerMode" /> <java-symbol type="bool" name="config_allowPriorityVibrationsInLowPowerMode" />

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2022 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<!-- These resources are around just to allow their values to be customized
for TV products. Do not translate. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- The percentage of the screen width to use for the default width or height of
picture-in-picture windows. Regardless of the percent set here, calculated size will never
be smaller than @dimen/default_minimal_size_pip_resizable_task. -->
<item name="config_pictureInPictureDefaultSizePercent" format="float" type="dimen">0.2</item>
<!-- Default insets [LEFT/RIGHTxTOP/BOTTOM] from the screen edge for picture-in-picture windows.
These values are in DPs and will be converted to pixel sizes internally. -->
<string translatable="false" name="config_defaultPictureInPictureScreenEdgeInsets">
24x24
</string>
<!-- The default gravity for the picture-in-picture window.
Currently, this maps to Gravity.BOTTOM | Gravity.RIGHT -->
<integer name="config_defaultPictureInPictureGravity">0x55</integer>
</resources>

View File

@@ -70,4 +70,30 @@
<!-- Animation duration when exit starting window: reveal app --> <!-- Animation duration when exit starting window: reveal app -->
<integer name="starting_window_app_reveal_anim_duration">266</integer> <integer name="starting_window_app_reveal_anim_duration">266</integer>
<!-- Default insets [LEFT/RIGHTxTOP/BOTTOM] from the screen edge for picture-in-picture windows.
These values are in DPs and will be converted to pixel sizes internally. -->
<string translatable="false" name="config_defaultPictureInPictureScreenEdgeInsets">
16x16
</string>
<!-- The percentage of the screen width to use for the default width or height of
picture-in-picture windows. Regardless of the percent set here, calculated size will never
be smaller than @dimen/default_minimal_size_pip_resizable_task. -->
<item name="config_pictureInPictureDefaultSizePercent" format="float" type="dimen">0.23</item>
<!-- The default aspect ratio for picture-in-picture windows. -->
<item name="config_pictureInPictureDefaultAspectRatio" format="float" type="dimen">
1.777778
</item>
<!-- This is the limit for the max and min aspect ratio (1 / this value) at which the min size
will be used instead of an adaptive size based loosely on area. -->
<item name="config_pictureInPictureAspectRatioLimitForMinSize" format="float" type="dimen">
1.777778
</item>
<!-- The default gravity for the picture-in-picture window.
Currently, this maps to Gravity.BOTTOM | Gravity.RIGHT -->
<integer name="config_defaultPictureInPictureGravity">0x55</integer>
</resources> </resources>

View File

@@ -254,4 +254,14 @@
<!-- The distance of the shift icon when early exit starting window. --> <!-- The distance of the shift icon when early exit starting window. -->
<dimen name="starting_surface_early_exit_icon_distance">32dp</dimen> <dimen name="starting_surface_early_exit_icon_distance">32dp</dimen>
<!-- The default minimal size of a PiP task, in both dimensions. -->
<dimen name="default_minimal_size_pip_resizable_task">108dp</dimen>
<!--
The overridable minimal size of a PiP task, in both dimensions.
Different from default_minimal_size_pip_resizable_task, this is to limit the dimension
when the pinned stack size is overridden by app via minWidth/minHeight.
-->
<dimen name="overridable_minimal_size_pip_resizable_task">48dp</dimen>
</resources> </resources>

View File

@@ -32,6 +32,7 @@ import android.util.Size;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.Gravity; import android.view.Gravity;
import com.android.wm.shell.R;
import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.DisplayLayout;
import java.io.PrintWriter; import java.io.PrintWriter;
@@ -76,15 +77,15 @@ public class PipBoundsAlgorithm {
protected void reloadResources(Context context) { protected void reloadResources(Context context) {
final Resources res = context.getResources(); final Resources res = context.getResources();
mDefaultAspectRatio = res.getFloat( mDefaultAspectRatio = res.getFloat(
com.android.internal.R.dimen.config_pictureInPictureDefaultAspectRatio); R.dimen.config_pictureInPictureDefaultAspectRatio);
mDefaultStackGravity = res.getInteger( mDefaultStackGravity = res.getInteger(
com.android.internal.R.integer.config_defaultPictureInPictureGravity); R.integer.config_defaultPictureInPictureGravity);
mDefaultMinSize = res.getDimensionPixelSize( mDefaultMinSize = res.getDimensionPixelSize(
com.android.internal.R.dimen.default_minimal_size_pip_resizable_task); R.dimen.default_minimal_size_pip_resizable_task);
mOverridableMinSize = res.getDimensionPixelSize( mOverridableMinSize = res.getDimensionPixelSize(
com.android.internal.R.dimen.overridable_minimal_size_pip_resizable_task); R.dimen.overridable_minimal_size_pip_resizable_task);
final String screenEdgeInsetsDpString = res.getString( final String screenEdgeInsetsDpString = res.getString(
com.android.internal.R.string.config_defaultPictureInPictureScreenEdgeInsets); R.string.config_defaultPictureInPictureScreenEdgeInsets);
final Size screenEdgeInsetsDp = !screenEdgeInsetsDpString.isEmpty() final Size screenEdgeInsetsDp = !screenEdgeInsetsDpString.isEmpty()
? Size.parseSize(screenEdgeInsetsDpString) ? Size.parseSize(screenEdgeInsetsDpString)
: null; : null;
@@ -96,9 +97,9 @@ public class PipBoundsAlgorithm {
mMaxAspectRatio = res.getFloat( mMaxAspectRatio = res.getFloat(
com.android.internal.R.dimen.config_pictureInPictureMaxAspectRatio); com.android.internal.R.dimen.config_pictureInPictureMaxAspectRatio);
mDefaultSizePercent = res.getFloat( mDefaultSizePercent = res.getFloat(
com.android.internal.R.dimen.config_pictureInPictureDefaultSizePercent); R.dimen.config_pictureInPictureDefaultSizePercent);
mMaxAspectRatioForMinSize = res.getFloat( mMaxAspectRatioForMinSize = res.getFloat(
com.android.internal.R.dimen.config_pictureInPictureAspectRatioLimitForMinSize); R.dimen.config_pictureInPictureAspectRatioLimitForMinSize);
mMinAspectRatioForMinSize = 1f / mMaxAspectRatioForMinSize; mMinAspectRatioForMinSize = 1f / mMaxAspectRatioForMinSize;
} }

View File

@@ -29,6 +29,7 @@ import android.view.Gravity;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import com.android.wm.shell.R;
import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.DisplayLayout;
@@ -72,16 +73,16 @@ public class PipBoundsAlgorithmTest extends ShellTestCase {
private void initializeMockResources() { private void initializeMockResources() {
final TestableResources res = mContext.getOrCreateTestableResources(); final TestableResources res = mContext.getOrCreateTestableResources();
res.addOverride( res.addOverride(
com.android.internal.R.dimen.config_pictureInPictureDefaultAspectRatio, R.dimen.config_pictureInPictureDefaultAspectRatio,
DEFAULT_ASPECT_RATIO); DEFAULT_ASPECT_RATIO);
res.addOverride( res.addOverride(
com.android.internal.R.integer.config_defaultPictureInPictureGravity, R.integer.config_defaultPictureInPictureGravity,
Gravity.END | Gravity.BOTTOM); Gravity.END | Gravity.BOTTOM);
res.addOverride( res.addOverride(
com.android.internal.R.dimen.default_minimal_size_pip_resizable_task, R.dimen.default_minimal_size_pip_resizable_task,
DEFAULT_MIN_EDGE_SIZE); DEFAULT_MIN_EDGE_SIZE);
res.addOverride( res.addOverride(
com.android.internal.R.string.config_defaultPictureInPictureScreenEdgeInsets, R.string.config_defaultPictureInPictureScreenEdgeInsets,
"16x16"); "16x16");
res.addOverride( res.addOverride(
com.android.internal.R.dimen.config_pictureInPictureMinAspectRatio, com.android.internal.R.dimen.config_pictureInPictureMinAspectRatio,
@@ -107,7 +108,7 @@ public class PipBoundsAlgorithmTest extends ShellTestCase {
public void onConfigurationChanged_reloadResources() { public void onConfigurationChanged_reloadResources() {
final float newDefaultAspectRatio = (DEFAULT_ASPECT_RATIO + MAX_ASPECT_RATIO) / 2; final float newDefaultAspectRatio = (DEFAULT_ASPECT_RATIO + MAX_ASPECT_RATIO) / 2;
final TestableResources res = mContext.getOrCreateTestableResources(); final TestableResources res = mContext.getOrCreateTestableResources();
res.addOverride(com.android.internal.R.dimen.config_pictureInPictureDefaultAspectRatio, res.addOverride(R.dimen.config_pictureInPictureDefaultAspectRatio,
newDefaultAspectRatio); newDefaultAspectRatio);
mPipBoundsAlgorithm.onConfigurationChanged(mContext); mPipBoundsAlgorithm.onConfigurationChanged(mContext);
@@ -463,7 +464,7 @@ public class PipBoundsAlgorithmTest extends ShellTestCase {
private void overrideDefaultAspectRatio(float aspectRatio) { private void overrideDefaultAspectRatio(float aspectRatio) {
final TestableResources res = mContext.getOrCreateTestableResources(); final TestableResources res = mContext.getOrCreateTestableResources();
res.addOverride( res.addOverride(
com.android.internal.R.dimen.config_pictureInPictureDefaultAspectRatio, R.dimen.config_pictureInPictureDefaultAspectRatio,
aspectRatio); aspectRatio);
mPipBoundsAlgorithm.onConfigurationChanged(mContext); mPipBoundsAlgorithm.onConfigurationChanged(mContext);
} }
@@ -471,7 +472,7 @@ public class PipBoundsAlgorithmTest extends ShellTestCase {
private void overrideDefaultStackGravity(int stackGravity) { private void overrideDefaultStackGravity(int stackGravity) {
final TestableResources res = mContext.getOrCreateTestableResources(); final TestableResources res = mContext.getOrCreateTestableResources();
res.addOverride( res.addOverride(
com.android.internal.R.integer.config_defaultPictureInPictureGravity, R.integer.config_defaultPictureInPictureGravity,
stackGravity); stackGravity);
mPipBoundsAlgorithm.onConfigurationChanged(mContext); mPipBoundsAlgorithm.onConfigurationChanged(mContext);
} }