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
This commit is contained in:
Diego Vela
2022-03-22 21:01:14 -07:00
parent 795ffb4348
commit 98ca72c5f8
2 changed files with 20 additions and 4 deletions

View File

@@ -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");
}

View File

@@ -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<List<CommonFoldingFeature>> {
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<List<CommonFoldingFeature>> 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();
}
}