summaryrefslogtreecommitdiff
path: root/core/java/android/widget/TextView.java
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2021-01-08 07:20:49 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-01-08 07:20:49 +0000
commit8fc190c6fcfba3f374f25e3b96fd1480203e40f8 (patch)
tree5740fbab20525558673c5d7b5e567499aacbd3da /core/java/android/widget/TextView.java
parent6609f2b0954d904be5877a57fc22871276245b84 (diff)
parent30fe6aa9648e6138f7cf2e58105a8affbec91364 (diff)
Merge "IME API: InputConnecton#setImeTemporarilyConsumesInput(boolean)"
Diffstat (limited to 'core/java/android/widget/TextView.java')
-rw-r--r--core/java/android/widget/TextView.java35
1 files changed, 33 insertions, 2 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 4edfc5f309b2..1599f2bdef2e 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -494,6 +494,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private TextUtils.TruncateAt mEllipsize;
+ // A flag to indicate the cursor was hidden by IME.
+ private boolean mImeTemporarilyConsumesInput;
+
+ // Whether cursor is visible without regard to {@link mImeTemporarilyConsumesInput}.
+ // {code true} is the default value.
+ private boolean mCursorVisibleFromAttr = true;
+
static class Drawables {
static final int LEFT = 0;
static final int TOP = 1;
@@ -10496,7 +10503,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
/**
* Set whether the cursor is visible. The default is true. Note that this property only
- * makes sense for editable TextView.
+ * makes sense for editable TextView. If IME is temporarily consuming the input, the cursor will
+ * be always invisible, visibility will be updated as the last state when IME does not consume
+ * the input anymore.
*
* @see #isCursorVisible()
*
@@ -10504,6 +10513,25 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
*/
@android.view.RemotableViewMethod
public void setCursorVisible(boolean visible) {
+ mCursorVisibleFromAttr = visible;
+ updateCursorVisibleInternal();
+ }
+
+ /**
+ * Sets the IME is temporarily consuming the input and make the cursor invisible if
+ * {@code imeTemporarilyConsumesInput} is {@code true}. Otherwise, make the cursor visible.
+ *
+ * @param imeTemporarilyConsumesInput {@code true} if IME is temporarily consuming the input
+ *
+ * @hide
+ */
+ public void setImeTemporarilyConsumesInput(boolean imeTemporarilyConsumesInput) {
+ mImeTemporarilyConsumesInput = imeTemporarilyConsumesInput;
+ updateCursorVisibleInternal();
+ }
+
+ private void updateCursorVisibleInternal() {
+ boolean visible = mCursorVisibleFromAttr && !mImeTemporarilyConsumesInput;
if (visible && mEditor == null) return; // visible is the default value with no edit data
createEditorIfNeeded();
if (mEditor.mCursorVisible != visible) {
@@ -10518,7 +10546,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
/**
- * @return whether or not the cursor is visible (assuming this TextView is editable)
+ * @return whether or not the cursor is visible (assuming this TextView is editable). This
+ * method may return {@code false} when the IME is temporarily consuming the input even if the
+ * {@code mEditor.mCursorVisible} attribute is {@code true} or {@code #setCursorVisible(true)}
+ * is called.
*
* @see #setCursorVisible(boolean)
*