From 98ca72c5f89019c992d1ef810df8a309ccc75f63 Mon Sep 17 00:00:00 2001 From: Diego Vela Date: Tue, 22 Mar 2022 21:01:14 -0700 Subject: [PATCH] DO NOT MERGE Fix Emulator not emitting folding features. Fix emulator not emitting folding features. Emitting the fold state was removed since it works differently for emulators. Emulators write to settings while the reference implementation reads the value from DeviceStateManager. Update the setting producer to also read the state from settings. Bug: 218872245 Test: Manual - open window manager samples on an emulator. Change-Id: I7def87bd406c2ae5b1ac27be58a3b22a239c3e82 --- .../window/common/CommonFoldingFeature.java | 5 +++-- .../SettingsDisplayFeatureProducer.java | 19 +++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/libs/WindowManager/Jetpack/src/androidx/window/common/CommonFoldingFeature.java b/libs/WindowManager/Jetpack/src/androidx/window/common/CommonFoldingFeature.java index 624d130e8698e..8733c152dca92 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/common/CommonFoldingFeature.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/common/CommonFoldingFeature.java @@ -80,7 +80,7 @@ public final class CommonFoldingFeature { /** * The possible states for a folding hinge. */ - @IntDef({COMMON_STATE_FLAT, COMMON_STATE_HALF_OPENED}) + @IntDef({COMMON_STATE_UNKNOWN, COMMON_STATE_FLAT, COMMON_STATE_HALF_OPENED}) @Retention(RetentionPolicy.SOURCE) public @interface State { } @@ -236,7 +236,8 @@ public final class CommonFoldingFeature { } private static void assertValidState(@Nullable Integer state) { - if (state != null && state != COMMON_STATE_FLAT && state != COMMON_STATE_HALF_OPENED) { + if (state != null && state != COMMON_STATE_FLAT + && state != COMMON_STATE_HALF_OPENED && state != COMMON_STATE_UNKNOWN) { throw new IllegalArgumentException("Invalid state: " + state + "must be either COMMON_STATE_FLAT or COMMON_STATE_HALF_OPENED"); } diff --git a/libs/WindowManager/Jetpack/src/androidx/window/common/SettingsDisplayFeatureProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/common/SettingsDisplayFeatureProducer.java index e9d213e06fa90..0e696eb8efb79 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/common/SettingsDisplayFeatureProducer.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/common/SettingsDisplayFeatureProducer.java @@ -16,6 +16,8 @@ package androidx.window.common; +import static androidx.window.common.CommonFoldingFeature.COMMON_STATE_FLAT; +import static androidx.window.common.CommonFoldingFeature.COMMON_STATE_HALF_OPENED; import static androidx.window.common.CommonFoldingFeature.COMMON_STATE_UNKNOWN; import static androidx.window.common.CommonFoldingFeature.parseListFromString; @@ -42,7 +44,10 @@ import java.util.Optional; public final class SettingsDisplayFeatureProducer extends BaseDataProducer> { private static final String DISPLAY_FEATURES = "display_features"; + private static final String DEVICE_POSTURE = "device_posture"; + private final Uri mDevicePostureUri = + Settings.Global.getUriFor(DEVICE_POSTURE); private final Uri mDisplayFeaturesUri = Settings.Global.getUriFor(DISPLAY_FEATURES); @@ -55,6 +60,15 @@ public final class SettingsDisplayFeatureProducer mObserver = new SettingsObserver(); } + private int getPosture() { + int posture = Settings.Global.getInt(mResolver, DEVICE_POSTURE, COMMON_STATE_UNKNOWN); + if (posture == COMMON_STATE_HALF_OPENED || posture == COMMON_STATE_FLAT) { + return posture; + } else { + return COMMON_STATE_UNKNOWN; + } + } + @Override @NonNull public Optional> getData() { @@ -66,7 +80,7 @@ public final class SettingsDisplayFeatureProducer if (TextUtils.isEmpty(displayFeaturesString)) { return Optional.of(Collections.emptyList()); } - return Optional.of(parseListFromString(displayFeaturesString, COMMON_STATE_UNKNOWN)); + return Optional.of(parseListFromString(displayFeaturesString, getPosture())); } /** @@ -80,6 +94,7 @@ public final class SettingsDisplayFeatureProducer mRegisteredObservers = true; mResolver.registerContentObserver(mDisplayFeaturesUri, false /* notifyForDescendants */, mObserver /* ContentObserver */); + mResolver.registerContentObserver(mDevicePostureUri, false, mObserver); } /** @@ -101,7 +116,7 @@ public final class SettingsDisplayFeatureProducer @Override public void onChange(boolean selfChange, Uri uri) { - if (mDisplayFeaturesUri.equals(uri)) { + if (mDisplayFeaturesUri.equals(uri) || mDevicePostureUri.equals(uri)) { notifyDataChanged(); } }