Merge changes from topics "cc-composing-update", "cc-merge-equals" into sc-dev

* changes:
  ContentCapture: Don't ignore events with changed composing/selection span
  ContentCapture: Notify when Composing region changes.
This commit is contained in:
Ahaan Ugale
2021-06-23 05:05:19 +00:00
committed by Android (Google) Code Review
5 changed files with 42 additions and 3 deletions

View File

@@ -286,6 +286,15 @@ public final class ContentCaptureEvent implements Parcelable {
return this;
}
boolean hasSameComposingSpan(@NonNull ContentCaptureEvent other) {
return mComposingStart == other.mComposingStart && mComposingEnd == other.mComposingEnd;
}
boolean hasSameSelectionSpan(@NonNull ContentCaptureEvent other) {
return mSelectionStartIndex == other.mSelectionStartIndex
&& mSelectionEndIndex == other.mSelectionEndIndex;
}
private int getComposingStart() {
return mComposingStart;
}

View File

@@ -368,7 +368,10 @@ public final class MainContentCaptureSession extends ContentCaptureSession {
final CharSequence lastText = lastEvent.getText();
final boolean bothNonEmpty = !TextUtils.isEmpty(lastText)
&& !TextUtils.isEmpty(text);
boolean equalContent = TextUtils.equals(lastText, text);
boolean equalContent =
TextUtils.equals(lastText, text)
&& lastEvent.hasSameComposingSpan(event)
&& lastEvent.hasSameSelectionSpan(event);
if (equalContent) {
addEvent = false;
} else if (bothNonEmpty) {

View File

@@ -162,6 +162,17 @@ public class BaseInputConnection implements InputConnection {
return false;
}
/**
* Called after only the composing region is modified (so it isn't called if the text also
* changes).
* <p>
* Default implementation does nothing.
*
* @hide
*/
public void endComposingRegionEditInternal() {
}
/**
* Default implementation calls {@link #finishComposingText()} and
* {@code setImeConsumesInput(false)}.
@@ -468,6 +479,7 @@ public class BaseInputConnection implements InputConnection {
// Note: sendCurrentText does nothing unless mFallbackMode is set
sendCurrentText();
endBatchEdit();
endComposingRegionEditInternal();
}
return true;
}
@@ -734,6 +746,7 @@ public class BaseInputConnection implements InputConnection {
// Note: sendCurrentText does nothing unless mFallbackMode is set
sendCurrentText();
endBatchEdit();
endComposingRegionEditInternal();
}
return true;
}

View File

@@ -10832,11 +10832,19 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
notifyContentCaptureTextChanged();
}
/**
* Notifies the ContentCapture service that the text of the view has changed (only if
* ContentCapture has been notified of this view's existence already).
*
* @hide
*/
public void notifyContentCaptureTextChanged() {
// TODO(b/121045053): should use a flag / boolean to keep status of SHOWN / HIDDEN instead
// of using isLaidout(), so it's not called in cases where it's laid out but a
// notifyAppeared was not sent.
// ContentCapture
if (isLaidOut() && isImportantForContentCapture() && getNotifiedContentCaptureAppeared()) {
final ContentCaptureManager cm = mContext.getSystemService(ContentCaptureManager.class);
if (cm != null && cm.isContentCaptureEnabled()) {

View File

@@ -98,6 +98,12 @@ public class EditableInputConnection extends BaseInputConnection
return false;
}
@Override
public void endComposingRegionEditInternal() {
// The ContentCapture service is interested in Composing-state changes.
mTextView.notifyContentCaptureTextChanged();
}
@Override
public void closeConnection() {
super.closeConnection();