Send update config change when letterbox is moved

When letterbox is repositioned, window configuration bounds are changed.
Because we currently only report public config changes in
diffPublicOnly, the client doesn't report changes in window
configuration.

We should always report window configuration bounds change to notify
that the position of window has changed.

Bug: 262900133
Test: atest FrameworksCoreTests:android.app.activity.ActivityThreadTest
      Manual test with app in bug
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:70187af25ce3f56f85ddd703f982caa82f685605)
Merged-In: I9fc10876c03933ac8aac05205d56ad6537df72a8
Change-Id: I9fc10876c03933ac8aac05205d56ad6537df72a8
This commit is contained in:
Graciela Wissen Putri
2023-05-02 15:32:24 +00:00
committed by Graciela Putri
parent 81ebe91609
commit 2d435949ef
3 changed files with 9 additions and 5 deletions

View File

@@ -36,6 +36,7 @@ import static android.view.Display.INVALID_DISPLAY;
import static android.window.ConfigurationHelper.freeTextLayoutCachesIfNeeded; import static android.window.ConfigurationHelper.freeTextLayoutCachesIfNeeded;
import static android.window.ConfigurationHelper.isDifferentDisplay; import static android.window.ConfigurationHelper.isDifferentDisplay;
import static android.window.ConfigurationHelper.shouldUpdateResources; import static android.window.ConfigurationHelper.shouldUpdateResources;
import static android.window.ConfigurationHelper.shouldUpdateWindowMetricsBounds;
import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE;
@@ -5987,6 +5988,11 @@ public final class ActivityThread extends ClientTransactionHandler
public static boolean shouldReportChange(@Nullable Configuration currentConfig, public static boolean shouldReportChange(@Nullable Configuration currentConfig,
@NonNull Configuration newConfig, @Nullable SizeConfigurationBuckets sizeBuckets, @NonNull Configuration newConfig, @Nullable SizeConfigurationBuckets sizeBuckets,
int handledConfigChanges) { int handledConfigChanges) {
// Always report changes in window configuration bounds
if (shouldUpdateWindowMetricsBounds(currentConfig, newConfig)) {
return true;
}
final int publicDiff = currentConfig.diffPublicOnly(newConfig); final int publicDiff = currentConfig.diffPublicOnly(newConfig);
// Don't report the change if there's no public diff between current and new config. // Don't report the change if there's no public diff between current and new config.
if (publicDiff == 0) { if (publicDiff == 0) {

View File

@@ -106,7 +106,7 @@ public class ConfigurationHelper {
* @see WindowManager#getCurrentWindowMetrics() * @see WindowManager#getCurrentWindowMetrics()
* @see WindowManager#getMaximumWindowMetrics() * @see WindowManager#getMaximumWindowMetrics()
*/ */
private static boolean shouldUpdateWindowMetricsBounds(@NonNull Configuration currentConfig, public static boolean shouldUpdateWindowMetricsBounds(@NonNull Configuration currentConfig,
@NonNull Configuration newConfig) { @NonNull Configuration newConfig) {
final Rect currentBounds = currentConfig.windowConfiguration.getBounds(); final Rect currentBounds = currentConfig.windowConfiguration.getBounds();
final Rect newBounds = newConfig.windowConfiguration.getBounds(); final Rect newBounds = newConfig.windowConfiguration.getBounds();

View File

@@ -351,10 +351,8 @@ public class ActivityThreadTest {
final Rect bounds = activity.getWindowManager().getCurrentWindowMetrics().getBounds(); final Rect bounds = activity.getWindowManager().getCurrentWindowMetrics().getBounds();
assertEquals(activityConfigPortrait.windowConfiguration.getBounds(), bounds); assertEquals(activityConfigPortrait.windowConfiguration.getBounds(), bounds);
// Ensure that Activity#onConfigurationChanged() not be called because the changes in // Ensure changes in window configuration bounds are reported
// WindowConfiguration shouldn't be reported, and we only apply the latest Configuration assertEquals(numOfConfig + 1, activity.mNumOfConfigChanges);
// update in transaction.
assertEquals(numOfConfig, activity.mNumOfConfigChanges);
} }
@Test @Test