Fix no features emitting.

Fix no features emitting by emitting if they are present.
Ignore emitting features if the current state is not valid.
No features are emitted on registration because consumers are not
registered to the source.
The following tests ar fixed
 ExtensionWindowLayoutComponent#testDisplayFeatures
 ExtensionWindowLayoutComponentTest#testSidecarHasSameDisplayFeatures
 ExtensionWindowLayoutComponentTest#testGetWindowLayoutInfo_windowRecreated_windowLayoutUpdates
 ExtensionWindowLayoutComponentTest#testGetWindowLayoutInfo_configChanged_windowLayoutUpdates
 ExtensionWindowLayoutComponentTest#testGetWindowLayoutInfo_windowRecreated_windowLayoutUpdates

Bug: 232354881
Test: atest CtsWindowManagerJetpackTestCases:ExtensionWindowLayoutComponent
Change-Id: Ia1f7631576bad0bbefdca0fea3308973c5514056
This commit is contained in:
Diego Vela
2022-05-19 14:18:35 -07:00
parent 76bf9ac13c
commit a8d0f22b7e
3 changed files with 10 additions and 2 deletions

View File

@@ -199,7 +199,7 @@ public final class CommonFoldingFeature {
throw new IllegalArgumentException(
"Display feature rectangle cannot have zero width and height simultaneously.");
}
this.mRect = rect;
this.mRect = new Rect(rect);
}
/** Returns the type of the feature. */
@@ -217,7 +217,7 @@ public final class CommonFoldingFeature {
/** Returns the bounds of the feature. */
@NonNull
public Rect getRect() {
return mRect;
return new Rect(mRect);
}
@Override

View File

@@ -166,6 +166,9 @@ public final class DeviceStateManagerFoldingFeatureProducer
}
private void notifyFoldingFeatureChange(String displayFeaturesString) {
if (!isCurrentStateValid()) {
return;
}
if (TextUtils.isEmpty(displayFeaturesString)) {
notifyDataChanged(new ArrayList<>());
} else {

View File

@@ -79,6 +79,11 @@ public class WindowLayoutComponentImpl implements WindowLayoutComponent {
*/
public void addWindowLayoutInfoListener(@NonNull Activity activity,
@NonNull Consumer<WindowLayoutInfo> consumer) {
mFoldingFeatureProducer.getData((features) -> {
// Get the WindowLayoutInfo from the activity and pass the value to the layoutConsumer.
WindowLayoutInfo newWindowLayout = getWindowLayoutInfo(activity, features);
consumer.accept(newWindowLayout);
});
mWindowLayoutChangeListeners.put(activity, consumer);
}