Skip to content
Snippets Groups Projects
Commit 24879149 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Re-enable IME image inserting for RemoteInputView"

parents 16b27d50 29f6c4bf
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment