Add more assertions for View temporary detach
This CL does not require new behavior change but only clarify how
currently View is behaving, as a preparation to fix Bug 30791718.
Bug: 30791718
Change-Id: I1bb73f5de9e3b817dd6f9c71f70afb7cc43e9713
diff --git a/tests/tests/view/src/android/view/cts/MockView.java b/tests/tests/view/src/android/view/cts/MockView.java
index c5e4ab4..6b2cc18 100644
--- a/tests/tests/view/src/android/view/cts/MockView.java
+++ b/tests/tests/view/src/android/view/cts/MockView.java
@@ -71,10 +71,6 @@
private boolean mCalledOnKeyPreIme = false;
private boolean mCalledOnResolvePointerIcon = false;
private boolean mCalledOnVisibilityAggregated = false;
- private boolean mCalledDispatchStartTemporaryDetach = false;
- private boolean mCalledDispatchFinishTemporaryDetach = false;
- private boolean mCalledOnStartTemporaryDetach = false;
- private boolean mCalledOnFinishTemporaryDetach = false;
private int mOldWidth = -1;
private int mOldHeight = -1;
@@ -638,46 +634,6 @@
return mLastAggregatedVisibility;
}
- @Override
- public void dispatchStartTemporaryDetach() {
- super.dispatchStartTemporaryDetach();
- mCalledDispatchStartTemporaryDetach = true;
- }
-
- @Override
- public void dispatchFinishTemporaryDetach() {
- super.dispatchFinishTemporaryDetach();
- mCalledDispatchFinishTemporaryDetach = true;
- }
-
- @Override
- public void onStartTemporaryDetach() {
- super.onStartTemporaryDetach();
- mCalledOnStartTemporaryDetach = true;
- }
-
- @Override
- public void onFinishTemporaryDetach() {
- super.onFinishTemporaryDetach();
- mCalledOnFinishTemporaryDetach = true;
- }
-
- public boolean hasCalledDispatchStartTemporaryDetach() {
- return mCalledDispatchStartTemporaryDetach;
- }
-
- public boolean hasCalledDispatchFinishTemporaryDetach() {
- return mCalledDispatchFinishTemporaryDetach;
- }
-
- public boolean hasCalledOnStartTemporaryDetach() {
- return mCalledOnStartTemporaryDetach;
- }
-
- public boolean hasCalledOnFinishTemporaryDetach() {
- return mCalledOnFinishTemporaryDetach;
- }
-
public void reset() {
mCalledOnCreateContextMenu = false;
@@ -719,10 +675,6 @@
mCalledOnResolvePointerIcon = false;
mCalledOnVisibilityAggregated = false;
mCalledOnVisibilityAggregated = false;
- mCalledDispatchStartTemporaryDetach = false;
- mCalledDispatchFinishTemporaryDetach = false;
- mCalledOnStartTemporaryDetach = false;
- mCalledOnFinishTemporaryDetach = false;
mOldWidth = -1;
mOldHeight = -1;
diff --git a/tests/tests/view/src/android/view/cts/ViewTest.java b/tests/tests/view/src/android/view/cts/ViewTest.java
index 7d11c68..876878f 100644
--- a/tests/tests/view/src/android/view/cts/ViewTest.java
+++ b/tests/tests/view/src/android/view/cts/ViewTest.java
@@ -94,6 +94,7 @@
import java.util.Collections;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* Test {@link View}.
@@ -3622,13 +3623,100 @@
}
public void testOnStartAndFinishTemporaryDetach() throws Throwable {
- final MockView view = (MockView) mActivity.findViewById(R.id.mock_view);
+ final AtomicBoolean exitedDispatchStartTemporaryDetach = new AtomicBoolean(false);
+ final AtomicBoolean exitedDispatchFinishTemporaryDetach = new AtomicBoolean(false);
+
+ final View view = new View(mActivity) {
+ private boolean mEnteredDispatchStartTemporaryDetach = false;
+ private boolean mExitedDispatchStartTemporaryDetach = false;
+ private boolean mEnteredDispatchFinishTemporaryDetach = false;
+ private boolean mExitedDispatchFinishTemporaryDetach = false;
+
+ private boolean mCalledOnStartTemporaryDetach = false;
+ private boolean mCalledOnFinishTemporaryDetach = false;
+
+ @Override
+ public void dispatchStartTemporaryDetach() {
+ assertFalse(mEnteredDispatchStartTemporaryDetach);
+ assertFalse(mExitedDispatchStartTemporaryDetach);
+ assertFalse(mEnteredDispatchFinishTemporaryDetach);
+ assertFalse(mExitedDispatchFinishTemporaryDetach);
+ assertFalse(mCalledOnStartTemporaryDetach);
+ assertFalse(mCalledOnFinishTemporaryDetach);
+ mEnteredDispatchStartTemporaryDetach = true;
+
+ assertFalse(isTemporarilyDetached());
+
+ super.dispatchStartTemporaryDetach();
+
+ assertTrue(isTemporarilyDetached());
+
+ assertTrue(mEnteredDispatchStartTemporaryDetach);
+ assertFalse(mExitedDispatchStartTemporaryDetach);
+ assertFalse(mEnteredDispatchFinishTemporaryDetach);
+ assertFalse(mExitedDispatchFinishTemporaryDetach);
+ assertTrue(mCalledOnStartTemporaryDetach);
+ assertFalse(mCalledOnFinishTemporaryDetach);
+ mExitedDispatchStartTemporaryDetach = true;
+ exitedDispatchStartTemporaryDetach.set(true);
+ }
+
+ @Override
+ public void dispatchFinishTemporaryDetach() {
+ assertTrue(mEnteredDispatchStartTemporaryDetach);
+ assertTrue(mExitedDispatchStartTemporaryDetach);
+ assertFalse(mEnteredDispatchFinishTemporaryDetach);
+ assertFalse(mExitedDispatchFinishTemporaryDetach);
+ assertTrue(mCalledOnStartTemporaryDetach);
+ assertFalse(mCalledOnFinishTemporaryDetach);
+ mEnteredDispatchFinishTemporaryDetach = true;
+
+ assertTrue(isTemporarilyDetached());
+
+ super.dispatchFinishTemporaryDetach();
+
+ assertFalse(isTemporarilyDetached());
+
+ assertTrue(mEnteredDispatchStartTemporaryDetach);
+ assertTrue(mExitedDispatchStartTemporaryDetach);
+ assertTrue(mEnteredDispatchFinishTemporaryDetach);
+ assertFalse(mExitedDispatchFinishTemporaryDetach);
+ assertTrue(mCalledOnStartTemporaryDetach);
+ assertTrue(mCalledOnFinishTemporaryDetach);
+ mExitedDispatchFinishTemporaryDetach = true;
+ exitedDispatchFinishTemporaryDetach.set(true);
+ }
+
+ @Override
+ public void onStartTemporaryDetach() {
+ assertTrue(mEnteredDispatchStartTemporaryDetach);
+ assertFalse(mExitedDispatchStartTemporaryDetach);
+ assertFalse(mEnteredDispatchFinishTemporaryDetach);
+ assertFalse(mExitedDispatchFinishTemporaryDetach);
+ assertFalse(mCalledOnStartTemporaryDetach);
+ assertFalse(mCalledOnFinishTemporaryDetach);
+
+ assertTrue(isTemporarilyDetached());
+
+ mCalledOnStartTemporaryDetach = true;
+ }
+
+ @Override
+ public void onFinishTemporaryDetach() {
+ assertTrue(mEnteredDispatchStartTemporaryDetach);
+ assertTrue(mExitedDispatchStartTemporaryDetach);
+ assertTrue(mEnteredDispatchFinishTemporaryDetach);
+ assertFalse(mExitedDispatchFinishTemporaryDetach);
+ assertTrue(mCalledOnStartTemporaryDetach);
+ assertFalse(mCalledOnFinishTemporaryDetach);
+
+ assertTrue(isTemporarilyDetached());
+
+ mCalledOnFinishTemporaryDetach = true;
+ }
+ };
assertFalse(view.isTemporarilyDetached());
- assertFalse(view.hasCalledDispatchStartTemporaryDetach());
- assertFalse(view.hasCalledDispatchFinishTemporaryDetach());
- assertFalse(view.hasCalledOnStartTemporaryDetach());
- assertFalse(view.hasCalledOnFinishTemporaryDetach());
runTestOnUiThread(new Runnable() {
@Override
@@ -3639,10 +3727,8 @@
getInstrumentation().waitForIdleSync();
assertTrue(view.isTemporarilyDetached());
- assertTrue(view.hasCalledDispatchStartTemporaryDetach());
- assertFalse(view.hasCalledDispatchFinishTemporaryDetach());
- assertTrue(view.hasCalledOnStartTemporaryDetach());
- assertFalse(view.hasCalledOnFinishTemporaryDetach());
+ assertTrue(exitedDispatchStartTemporaryDetach.get());
+ assertFalse(exitedDispatchFinishTemporaryDetach.get());
runTestOnUiThread(new Runnable() {
@Override
@@ -3653,10 +3739,8 @@
getInstrumentation().waitForIdleSync();
assertFalse(view.isTemporarilyDetached());
- assertTrue(view.hasCalledDispatchStartTemporaryDetach());
- assertTrue(view.hasCalledDispatchFinishTemporaryDetach());
- assertTrue(view.hasCalledOnStartTemporaryDetach());
- assertTrue(view.hasCalledOnFinishTemporaryDetach());
+ assertTrue(exitedDispatchStartTemporaryDetach.get());
+ assertTrue(exitedDispatchFinishTemporaryDetach.get());
}
public void testKeyPreIme() throws Throwable {