Loading libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java +5 −7 Original line number Diff line number Diff line Loading @@ -39,7 +39,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; /** Loading Loading @@ -167,14 +166,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); } } Loading libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java +4 −5 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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(); } } Loading libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java +16 −5 Original line number Diff line number Diff line Loading @@ -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); } onListenersChanged(); } /** Loading @@ -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(); } /** * 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(Set<Consumer<T>> callbacks) {} protected void onListenersChanged() {} /** * @return the current data if available and {@code Optional.empty()} otherwise. Loading Loading
libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java +5 −7 Original line number Diff line number Diff line Loading @@ -39,7 +39,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; /** Loading Loading @@ -167,14 +166,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); } } Loading
libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java +4 −5 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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(); } } Loading
libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java +16 −5 Original line number Diff line number Diff line Loading @@ -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); } onListenersChanged(); } /** Loading @@ -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(); } /** * 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(Set<Consumer<T>> callbacks) {} protected void onListenersChanged() {} /** * @return the current data if available and {@code Optional.empty()} otherwise. Loading