summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-03 02:22:35 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-03 02:22:35 +0000
commit94611188cd1acb51adc50d2ea10aaa10a5913ae5 (patch)
tree663f11c8c813048fff306936fdcace2b503237c0
parent0bead2d7bdf9cd415f1d626c8f92ddf6bbbec22a (diff)
parent95cf483d870874c6e3e0b5f6609fee2d20d12486 (diff)
downloadbase-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
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java12
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java9
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java21
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java4
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();