diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-05-03 02:22:35 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-05-03 02:22:35 +0000 |
commit | 94611188cd1acb51adc50d2ea10aaa10a5913ae5 (patch) | |
tree | 663f11c8c813048fff306936fdcace2b503237c0 | |
parent | 0bead2d7bdf9cd415f1d626c8f92ddf6bbbec22a (diff) | |
parent | 95cf483d870874c6e3e0b5f6609fee2d20d12486 (diff) | |
download | base-94611188cd1acb51adc50d2ea10aaa10a5913ae5.tar.gz |
Merge cherrypicks of ['googleplex-android-review.googlesource.com/22634065', 'googleplex-android-review.googlesource.com/22901260'] into tm-qpr3-c-release.
Change-Id: I1ed6c0674f4b40af7a1c3a399823e525be240a01
4 files changed, 29 insertions, 17 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java index 0bdf98c8680f..defc07ec3982 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java @@ -38,7 +38,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.Set; import java.util.function.Consumer; /** @@ -129,14 +128,13 @@ public final class DeviceStateManagerFoldingFeatureProducer } @Override - protected void onListenersChanged( - @NonNull Set<Consumer<List<CommonFoldingFeature>>> callbacks) { - super.onListenersChanged(callbacks); - if (callbacks.isEmpty()) { + protected void onListenersChanged() { + super.onListenersChanged(); + if (hasListeners()) { + mRawFoldSupplier.addDataChangedCallback(this::notifyFoldingFeatureChange); + } else { mCurrentDeviceState = INVALID_DEVICE_STATE; mRawFoldSupplier.removeDataChangedCallback(this::notifyFoldingFeatureChange); - } else { - mRawFoldSupplier.addDataChangedCallback(this::notifyFoldingFeatureChange); } } diff --git a/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java index 7906342d445d..8906e6d3d02e 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java @@ -31,7 +31,6 @@ import androidx.window.util.BaseDataProducer; import com.android.internal.R; import java.util.Optional; -import java.util.Set; import java.util.function.Consumer; /** @@ -86,11 +85,11 @@ public final class RawFoldingFeatureProducer extends BaseDataProducer<String> { } @Override - protected void onListenersChanged(Set<Consumer<String>> callbacks) { - if (callbacks.isEmpty()) { - unregisterObserversIfNeeded(); - } else { + protected void onListenersChanged() { + if (hasListeners()) { registerObserversIfNeeded(); + } else { + unregisterObserversIfNeeded(); } } diff --git a/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java index 46c925aaf8a2..de52f0969fa8 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java @@ -51,10 +51,10 @@ public abstract class BaseDataProducer<T> implements DataProducer<T>, public final void addDataChangedCallback(@NonNull Consumer<T> callback) { synchronized (mLock) { mCallbacks.add(callback); - Optional<T> currentData = getCurrentData(); - currentData.ifPresent(callback); - onListenersChanged(mCallbacks); } + Optional<T> currentData = getCurrentData(); + currentData.ifPresent(callback); + onListenersChanged(); } /** @@ -67,11 +67,22 @@ public abstract class BaseDataProducer<T> implements DataProducer<T>, public final void removeDataChangedCallback(@NonNull Consumer<T> callback) { synchronized (mLock) { mCallbacks.remove(callback); - onListenersChanged(mCallbacks); } + onListenersChanged(); } - protected void onListenersChanged(Set<Consumer<T>> callbacks) {} + /** + * Returns {@code true} if there are any registered callbacks {@code false} if there are no + * registered callbacks. + */ + // TODO(b/278132889) Improve the structure of BaseDataProdcuer while avoiding known issues. + public final boolean hasListeners() { + synchronized (mLock) { + return !mCallbacks.isEmpty(); + } + } + + protected void onListenersChanged() {} /** * @return the current data if available and {@code Optional.empty()} otherwise. diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 95fea0ee22f5..399156090594 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -3867,7 +3867,11 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // configuration update when the window has requested to be hidden. Doing so can lead to // the client erroneously accepting a configuration that would have otherwise caused an // activity restart. We instead hand back the last reported {@link MergedConfiguration}. + // Also note since starting window isn't a window of activity, it won't make activity + // restart, so here should allow starting window to set the last reported configuration + // during relayout, which could happen before activity request visible. if (useLatestConfig || (relayoutVisible && (mActivityRecord == null + || mAttrs.type == TYPE_APPLICATION_STARTING || mActivityRecord.isVisibleRequested()))) { final Configuration globalConfig = getProcessGlobalConfiguration(); final Configuration overrideConfig = getMergedOverrideConfiguration(); |