105 lines
3.7 KiB
Java
105 lines
3.7 KiB
Java
package app.fedilab.android.helper;
|
|
|
|
import android.content.Context;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.util.AttributeSet;
|
|
import android.view.inputmethod.EditorInfo;
|
|
import android.view.inputmethod.InputConnection;
|
|
|
|
import androidx.core.view.inputmethod.EditorInfoCompat;
|
|
import androidx.core.view.inputmethod.InputConnectionCompat;
|
|
import androidx.core.view.inputmethod.InputContentInfoCompat;
|
|
|
|
|
|
public class MastalabAutoCompleteTextView extends androidx.appcompat.widget.AppCompatAutoCompleteTextView {
|
|
|
|
|
|
private String[] imgTypeString;
|
|
private KeyBoardInputCallbackListener keyBoardInputCallbackListener;
|
|
final InputConnectionCompat.OnCommitContentListener callback =
|
|
new InputConnectionCompat.OnCommitContentListener() {
|
|
@Override
|
|
public boolean onCommitContent(InputContentInfoCompat inputContentInfo,
|
|
int flags, Bundle opts) {
|
|
|
|
// read and display inputContentInfo asynchronously
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && (flags &
|
|
InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0) {
|
|
try {
|
|
inputContentInfo.requestPermission();
|
|
} catch (Exception e) {
|
|
return false; // return false if failed
|
|
}
|
|
}
|
|
boolean supported = false;
|
|
for (final String mimeType : imgTypeString) {
|
|
if (inputContentInfo.getDescription().hasMimeType(mimeType)) {
|
|
supported = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!supported) {
|
|
return false;
|
|
}
|
|
|
|
if (keyBoardInputCallbackListener != null) {
|
|
keyBoardInputCallbackListener.onCommitContent(inputContentInfo, flags, opts);
|
|
}
|
|
return true; // return true if succeeded
|
|
}
|
|
};
|
|
|
|
|
|
public MastalabAutoCompleteTextView(Context context) {
|
|
super(context);
|
|
initView();
|
|
}
|
|
|
|
public MastalabAutoCompleteTextView(Context context, AttributeSet attrs) {
|
|
super(context, attrs);
|
|
setText(getText());
|
|
initView();
|
|
}
|
|
|
|
public MastalabAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
super(context, attrs, defStyleAttr);
|
|
initView();
|
|
}
|
|
|
|
@Override
|
|
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
|
|
final InputConnection ic = super.onCreateInputConnection(outAttrs);
|
|
EditorInfoCompat.setContentMimeTypes(outAttrs,
|
|
imgTypeString);
|
|
return InputConnectionCompat.createWrapper(ic, outAttrs, callback);
|
|
}
|
|
|
|
private void initView() {
|
|
imgTypeString = new String[]{"image/png",
|
|
"image/gif",
|
|
"image/jpeg",
|
|
"image/webp"};
|
|
}
|
|
|
|
public void setKeyBoardInputCallbackListener(KeyBoardInputCallbackListener keyBoardInputCallbackListener) {
|
|
this.keyBoardInputCallbackListener = keyBoardInputCallbackListener;
|
|
}
|
|
|
|
@SuppressWarnings("unused")
|
|
public String[] getImgTypeString() {
|
|
return imgTypeString;
|
|
}
|
|
|
|
@SuppressWarnings("unused")
|
|
public void setImgTypeString(String[] imgTypeString) {
|
|
this.imgTypeString = imgTypeString;
|
|
}
|
|
|
|
|
|
public interface KeyBoardInputCallbackListener {
|
|
void onCommitContent(InputContentInfoCompat inputContentInfo,
|
|
int flags, Bundle opts);
|
|
}
|
|
}
|