summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dave Mankoff <mankoff@google.com> 2023-03-23 17:01:31 +0000
committer Dave Mankoff <mankoff@google.com> 2023-03-24 15:02:17 +0000
commit96eddc1f23d9792fd3125f8c3a8b415040258740 (patch)
tree982033ae731466164ebdd30c26cf6f089e5dc46b
parent0af487566de8908c1ccad3f94ae41225757335c3 (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
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/FalsingModule.java13
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/classifier/ClassifierTest.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java48
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);
}
}