summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yohei Yukawa <yukawa@google.com> 2016-08-11 11:00:23 -0700
committer Yohei Yukawa <yukawa@google.com> 2016-08-11 11:00:23 -0700
commited841cbdd709d3874506510fd774d961be711f31 (patch)
treefe61a1b371bc7cbe6fa16c326685f8e210adafd2
parent0b26adbb8b42168d4fc5ef240b1e2730fcfd5c61 (diff)
Make View#isTemporarilyDetached() less confusing
In Android N, View#isTemporarilyDetached() returns true if it is called when the same View instance is handling View#onFinishTemporaryDetach(). Returning true there is, however, sometimes confusing, especially scenarios like the following case: @Override public void onFinishTemporaryDetach() { doSomeRestoringWorks(); } private void doSomeRestoringWorks() { doSomething(); } private doSomething() { if (isTemporarilyDetached()) { // As of N, we hit here if this is called as a result of // View#onFinishTemporaryDetach(). } else { // but is the logic here is more likely to be appropriate // when handling View#onFinishTemporaryDetach()? } } What this CL aims to do is to let View#isTemporarilyDetached() return false when it is called while handling View#onFinishTemporaryDetach(), because it should make View#onFinishTemporaryDetach() more useful. Regarding the app compatibility, View#isTemporarilyDetached() was added in API 24 hence the impact on this change is still limited. Bug: 30791718 Change-Id: If384da9f9e6ff849598896901626fd021bae5cda
-rw-r--r--core/java/android/view/View.java15
1 files changed, 13 insertions, 2 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index e7553ec943ec..475b4c15b38e 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -830,7 +830,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*/
protected static boolean sPreserveMarginParamsInLayoutParamConversion;
-
/**
* This view does not want keystrokes. Use with TAKES_FOCUS_MASK when
* calling setFlags.
@@ -9852,6 +9851,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
/**
+ * Tells whether the {@link View} is in the state between {@link #onStartTemporaryDetach()}
+ * and {@link #onFinishTemporaryDetach()}.
+ *
+ * <p>This method always returns {@code true} when called directly or indirectly from
+ * {@link #onStartTemporaryDetach()}. The return value when called directly or indirectly from
+ * {@link #onFinishTemporaryDetach()}, however, depends on the OS version.
+ * <ul>
+ * <li>{@code true} on {@link android.os.Build.VERSION_CODES#N API 24}</li>
+ * <li>{@code false} on {@link android.os.Build.VERSION_CODES#N_MR1 API 25}} and later</li>
+ * </ul>
+ * </p>
+ *
* @return {@code true} when the View is in the state between {@link #onStartTemporaryDetach()}
* and {@link #onFinishTemporaryDetach()}.
*/
@@ -9886,8 +9897,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*/
@CallSuper
public void dispatchFinishTemporaryDetach() {
- onFinishTemporaryDetach();
mPrivateFlags3 &= ~PFLAG3_TEMPORARY_DETACH;
+ onFinishTemporaryDetach();
if (hasWindowFocus() && hasFocus()) {
InputMethodManager.getInstance().focusIn(this);
}