diff options
| author | 2023-03-23 17:01:31 +0000 | |
|---|---|---|
| committer | 2023-03-24 15:02:17 +0000 | |
| commit | 96eddc1f23d9792fd3125f8c3a8b415040258740 (patch) | |
| tree | 982033ae731466164ebdd30c26cf6f089e5dc46b | |
| parent | 0af487566de8908c1ccad3f94ae41225757335c3 (diff) | |
Don't report non-foldables as unfolded.
The FoldStateListener is reporting non-foldable phones as unfolded.
Previously, Falsing relied on this being null.
Inspect the foldability of a device directly and incorporate this into
the FalsingDataProvider.
Bug: 274914759
Test: manual && atest SystemUITests:com.android.systemui.classifier
Change-Id: Ibe768067d69464b14368ae0d67110453f9368c6a
4 files changed, 57 insertions, 16 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java index f83885b7bb32..d6c85fbaf5a9 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java @@ -16,6 +16,8 @@ package com.android.systemui.classifier; +import static com.android.systemui.classifier.FalsingModule.IS_FOLDABLE_DEVICE; + import android.hardware.devicestate.DeviceStateManager.FoldStateListener; import android.util.DisplayMetrics; import android.view.MotionEvent; @@ -30,6 +32,7 @@ import java.util.ArrayList; import java.util.List; import javax.inject.Inject; +import javax.inject.Named; /** * Acts as a cache and utility class for FalsingClassifiers. @@ -46,6 +49,7 @@ public class FalsingDataProvider { private BatteryController mBatteryController; private final FoldStateListener mFoldStateListener; private final DockManager mDockManager; + private boolean mIsFoldableDevice; private final float mXdpi; private final float mYdpi; private final List<SessionListener> mSessionListeners = new ArrayList<>(); @@ -70,7 +74,8 @@ public class FalsingDataProvider { DisplayMetrics displayMetrics, BatteryController batteryController, FoldStateListener foldStateListener, - DockManager dockManager) { + DockManager dockManager, + @Named(IS_FOLDABLE_DEVICE) boolean isFoldableDevice) { mXdpi = displayMetrics.xdpi; mYdpi = displayMetrics.ydpi; mWidthPixels = displayMetrics.widthPixels; @@ -78,6 +83,7 @@ public class FalsingDataProvider { mBatteryController = batteryController; mFoldStateListener = foldStateListener; mDockManager = dockManager; + mIsFoldableDevice = isFoldableDevice; FalsingClassifier.logInfo("xdpi, ydpi: " + getXdpi() + ", " + getYdpi()); FalsingClassifier.logInfo("width, height: " + getWidthPixels() + ", " + getHeightPixels()); @@ -417,7 +423,7 @@ public class FalsingDataProvider { } public boolean isUnfolded() { - return Boolean.FALSE.equals(mFoldStateListener.getFolded()); + return mIsFoldableDevice && Boolean.FALSE.equals(mFoldStateListener.getFolded()); } /** Implement to be alerted abotu the beginning and ending of falsing tracking. */ diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingModule.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingModule.java index 5302af9db836..c7f3b2d08efd 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingModule.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingModule.java @@ -43,6 +43,7 @@ public interface FalsingModule { String LONG_TAP_TOUCH_SLOP = "falsing_long_tap_slop"; String DOUBLE_TAP_TOUCH_SLOP = "falsing_double_tap_touch_slop"; String DOUBLE_TAP_TIMEOUT_MS = "falsing_double_tap_timeout_ms"; + String IS_FOLDABLE_DEVICE = "falsing_foldable_device"; /** */ @Binds @@ -89,4 +90,16 @@ public interface FalsingModule { static float providesLongTapTouchSlop(ViewConfiguration viewConfiguration) { return viewConfiguration.getScaledTouchSlop() * 1.25f; } + + /** */ + @Provides + @Named(IS_FOLDABLE_DEVICE) + static boolean providesIsFoldableDevice(@Main Resources resources) { + try { + return resources.getIntArray( + com.android.internal.R.array.config_foldedDeviceStates).length != 0; + } catch (Resources.NotFoundException e) { + return false; + } + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/ClassifierTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/ClassifierTest.java index 94cf384267ad..925461765546 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/ClassifierTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/ClassifierTest.java @@ -50,7 +50,7 @@ public class ClassifierTest extends SysuiTestCase { displayMetrics.widthPixels = 1000; displayMetrics.heightPixels = 1000; mDataProvider = new FalsingDataProvider( - displayMetrics, mBatteryController, mFoldStateListener, mDockManager); + displayMetrics, mBatteryController, mFoldStateListener, mDockManager, false); } @After diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java index 8eadadff1ca5..7e066808b5bd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java @@ -54,18 +54,18 @@ public class FalsingDataProviderTest extends ClassifierTest { @Mock private FoldStateListener mFoldStateListener; private final DockManagerFake mDockManager = new DockManagerFake(); + private DisplayMetrics mDisplayMetrics; @Before public void setup() { super.setup(); MockitoAnnotations.initMocks(this); - DisplayMetrics displayMetrics = new DisplayMetrics(); - displayMetrics.xdpi = 100; - displayMetrics.ydpi = 100; - displayMetrics.widthPixels = 1000; - displayMetrics.heightPixels = 1000; - mDataProvider = new FalsingDataProvider( - displayMetrics, mBatteryController, mFoldStateListener, mDockManager); + mDisplayMetrics = new DisplayMetrics(); + mDisplayMetrics.xdpi = 100; + mDisplayMetrics.ydpi = 100; + mDisplayMetrics.widthPixels = 1000; + mDisplayMetrics.heightPixels = 1000; + mDataProvider = createWithFoldCapability(false); } @After @@ -345,20 +345,42 @@ public class FalsingDataProviderTest extends ClassifierTest { } @Test - public void test_FoldedState_Folded() { + public void test_UnfoldedState_Folded() { + FalsingDataProvider falsingDataProvider = createWithFoldCapability(true); when(mFoldStateListener.getFolded()).thenReturn(true); - assertThat(mDataProvider.isUnfolded()).isFalse(); + assertThat(falsingDataProvider.isUnfolded()).isFalse(); } @Test - public void test_FoldedState_Unfolded() { + public void test_UnfoldedState_Unfolded() { + FalsingDataProvider falsingDataProvider = createWithFoldCapability(true); when(mFoldStateListener.getFolded()).thenReturn(false); - assertThat(mDataProvider.isUnfolded()).isTrue(); + assertThat(falsingDataProvider.isUnfolded()).isTrue(); } @Test - public void test_FoldedState_NotFoldable() { + public void test_Nonfoldabled_TrueFoldState() { + FalsingDataProvider falsingDataProvider = createWithFoldCapability(false); + when(mFoldStateListener.getFolded()).thenReturn(true); + assertThat(falsingDataProvider.isUnfolded()).isFalse(); + } + + @Test + public void test_Nonfoldabled_FalseFoldState() { + FalsingDataProvider falsingDataProvider = createWithFoldCapability(false); + when(mFoldStateListener.getFolded()).thenReturn(false); + assertThat(falsingDataProvider.isUnfolded()).isFalse(); + } + + @Test + public void test_Nonfoldabled_NullFoldState() { + FalsingDataProvider falsingDataProvider = createWithFoldCapability(true); when(mFoldStateListener.getFolded()).thenReturn(null); - assertThat(mDataProvider.isUnfolded()).isFalse(); + assertThat(falsingDataProvider.isUnfolded()).isFalse(); + } + + private FalsingDataProvider createWithFoldCapability(boolean foldable) { + return new FalsingDataProvider( + mDisplayMetrics, mBatteryController, mFoldStateListener, mDockManager, foldable); } } |