diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java | 76 |
1 files changed, 42 insertions, 34 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java index 9c3395f9332d..c84589a9e142 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java @@ -18,11 +18,13 @@ package com.android.systemui.statusbar.policy; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; +import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.Notification; import android.app.PendingIntent; import android.app.RemoteInput; +import android.content.ClipData; import android.content.ClipDescription; import android.content.Context; import android.content.Intent; @@ -43,6 +45,7 @@ import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; +import android.view.OnReceiveContentCallback; import android.view.View; import android.view.ViewAnimationUtils; import android.view.ViewGroup; @@ -57,9 +60,6 @@ import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; -import androidx.core.view.inputmethod.InputConnectionCompat; -import androidx.core.view.inputmethod.InputContentInfoCompat; - import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.internal.statusbar.IStatusBarService; @@ -73,7 +73,9 @@ import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewW import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.phone.LightBarController; +import java.util.Collections; import java.util.HashMap; +import java.util.Set; import java.util.function.Consumer; /** @@ -313,6 +315,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene mRemoteInputs = remoteInputs; mRemoteInput = remoteInput; mEditText.setHint(mRemoteInput.getLabel()); + mEditText.mSupportedMimeTypes = remoteInput.getAllowedDataTypes(); mEntry.editedSuggestionInfo = editedSuggestionInfo; if (editedSuggestionInfo != null) { @@ -571,6 +574,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene boolean mShowImeOnInputConnection; private LightBarController mLightBarController; UserHandle mUser; + private Set<String> mSupportedMimeTypes; public RemoteEditText(Context context, AttributeSet attrs) { super(context, attrs); @@ -578,6 +582,40 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene mLightBarController = Dependency.get(LightBarController.class); } + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + setOnReceiveContentCallback(new OnReceiveContentCallback<View>() { + @Override + public boolean onReceiveContent(@NonNull View view, @NonNull Payload payload) { + ClipData clip = payload.getClip(); + if (clip.getItemCount() == 0) { + return false; + } + Uri contentUri = clip.getItemAt(0).getUri(); + ClipDescription description = clip.getDescription(); + String mimeType = null; + if (description.getMimeTypeCount() > 0) { + mimeType = description.getMimeType(0); + } + if (mimeType != null) { + Intent dataIntent = mRemoteInputView + .prepareRemoteInputFromData(mimeType, contentUri); + mRemoteInputView.sendRemoteInput(dataIntent); + } + return true; + } + + @NonNull + @Override + public Set<String> getSupportedMimeTypes(@NonNull View view) { + return mSupportedMimeTypes != null + ? mSupportedMimeTypes + : Collections.emptySet(); + } + }); + } + private void defocusIfNeeded(boolean animate) { if (mRemoteInputView != null && mRemoteInputView.mEntry.getRow().isChangingPosition() || isTemporarilyDetached()) { @@ -670,36 +708,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { - // TODO: Pass RemoteInput data types to allow image insertion. - // String[] allowedDataTypes = mRemoteInputView.mRemoteInput.getAllowedDataTypes() - // .toArray(new String[0]); - // EditorInfoCompat.setContentMimeTypes(outAttrs, allowedDataTypes); - final InputConnection inputConnection = super.onCreateInputConnection(outAttrs); - - final InputConnectionCompat.OnCommitContentListener callback = - new InputConnectionCompat.OnCommitContentListener() { - @Override - public boolean onCommitContent( - InputContentInfoCompat inputContentInfoCompat, int i, - Bundle bundle) { - Uri contentUri = inputContentInfoCompat.getContentUri(); - ClipDescription description = inputContentInfoCompat.getDescription(); - String mimeType = null; - if (description != null && description.getMimeTypeCount() > 0) { - mimeType = description.getMimeType(0); - } - if (mimeType != null) { - Intent dataIntent = mRemoteInputView.prepareRemoteInputFromData( - mimeType, contentUri); - mRemoteInputView.sendRemoteInput(dataIntent); - } - return true; - } - }; - - InputConnection ic = inputConnection == null ? null : - InputConnectionCompat.createWrapper(inputConnection, outAttrs, callback); - + final InputConnection ic = super.onCreateInputConnection(outAttrs); Context userContext = null; try { userContext = mContext.createPackageContextAsUser( @@ -747,7 +756,6 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene } else { setBackground(null); } - } } } |