feat:Input add getSelection API

This commit is contained in:
pengfei.zhou 2021-06-11 17:40:02 +08:00 committed by osborn
parent 5263731dd7
commit e528630f71
12 changed files with 69 additions and 9 deletions

View File

@ -19,6 +19,7 @@ import android.content.Context;
import android.text.Editable;
import android.text.InputFilter;
import android.text.InputType;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.TypedValue;
@ -30,9 +31,12 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import com.github.pengfeizhou.jscore.JSONBuilder;
import com.github.pengfeizhou.jscore.JSObject;
import com.github.pengfeizhou.jscore.JSValue;
import org.json.JSONObject;
import java.util.LinkedList;
import pub.doric.DoricContext;
@ -73,15 +77,15 @@ public class InputNode extends ViewNode<EditText> implements TextWatcher, View.O
InputFilter[] currentFilters = view.getFilters();
LinkedList<InputFilter> list = new LinkedList<>();
for (int i = 0; i < currentFilters.length; i++) {
if (!(currentFilters[i] instanceof InputFilter.LengthFilter)) {
list.add(currentFilters[i]);
for (InputFilter currentFilter : currentFilters) {
if (!(currentFilter instanceof InputFilter.LengthFilter)) {
list.add(currentFilter);
}
}
if (prop.isNumber()) {
list.add(new InputFilter.LengthFilter(prop.asNumber().toInt()));
}
InputFilter[] newFilters = list.toArray(new InputFilter[list.size()]);
InputFilter[] newFilters = list.toArray(new InputFilter[0]);
view.setFilters(newFilters);
break;
@ -288,6 +292,14 @@ public class InputNode extends ViewNode<EditText> implements TextWatcher, View.O
doricPromise.resolve();
}
@DoricMethod
public JSONObject getSelection() {
return new JSONBuilder()
.put("start", mView.getSelectionStart())
.put("end", mView.getSelectionEnd())
.toJSONObject();
}
@DoricMethod
public void requestFocus(DoricPromise promise) {
mView.requestFocus();

View File

@ -67,6 +67,17 @@ function getInput(c: Partial<Input>) {
}
}
}),
preferenceView().applyChild({
title: {
text: "maxLength"
},
switch: {
state: true,
onSwitch: (ret) => {
inputView.maxLength = 20
}
}
}),
];
}

View File

@ -243,6 +243,13 @@ - (void)setSelection:(NSDictionary *)params withPromise:(DoricPromise *)promise
[promise resolve:nil];
}
- (NSDictionary *)getSelection {
return @{
@"start": @([self.view offsetFromPosition:self.view.beginningOfDocument toPosition:self.view.selectedTextRange.start]),
@"end": @([self.view offsetFromPosition:self.view.beginningOfDocument toPosition:self.view.selectedTextRange.end]),
};
}
- (void)requestFocus {
[self.view becomeFirstResponder];
}

View File

@ -2791,6 +2791,9 @@ var Input = /** @class */ (function (_super) {
end: end,
});
};
Input.prototype.getSelection = function (context) {
return this.nativeChannel(context, 'getSelection')();
};
Input.prototype.requestFocus = function (context) {
return this.nativeChannel(context, 'requestFocus')();
};

View File

@ -2154,6 +2154,9 @@ class Input extends View {
end,
});
}
getSelection(context) {
return this.nativeChannel(context, 'getSelection')();
}
requestFocus(context) {
return this.nativeChannel(context, 'requestFocus')();
}

View File

@ -3675,6 +3675,9 @@ class Input extends View {
end,
});
}
getSelection(context) {
return this.nativeChannel(context, 'getSelection')();
}
requestFocus(context) {
return this.nativeChannel(context, 'requestFocus')();
}

6
doric-js/index.d.ts vendored
View File

@ -785,7 +785,11 @@ declare module 'doric/lib/src/widget/input' {
returnKeyType?: ReturnKeyType;
onSubmitEditing?: (text: string) => void;
getText(context: BridgeContext): Promise<string>;
setSelection(context: BridgeContext, start: number, end?: number): Promise<string>;
setSelection(context: BridgeContext, start: number, end?: number): Promise<any>;
getSelection(context: BridgeContext): Promise<{
start: number;
end: number;
}>;
requestFocus(context: BridgeContext): Promise<any>;
releaseFocus(context: BridgeContext): Promise<any>;
}

View File

@ -27,7 +27,11 @@ export declare class Input extends View {
returnKeyType?: ReturnKeyType;
onSubmitEditing?: (text: string) => void;
getText(context: BridgeContext): Promise<string>;
setSelection(context: BridgeContext, start: number, end?: number): Promise<string>;
setSelection(context: BridgeContext, start: number, end?: number): Promise<any>;
getSelection(context: BridgeContext): Promise<{
start: number;
end: number;
}>;
requestFocus(context: BridgeContext): Promise<any>;
releaseFocus(context: BridgeContext): Promise<any>;
}

View File

@ -45,6 +45,9 @@ export class Input extends View {
end,
});
}
getSelection(context) {
return this.nativeChannel(context, 'getSelection')();
}
requestFocus(context) {
return this.nativeChannel(context, 'requestFocus')();
}

View File

@ -75,7 +75,6 @@ export class Input extends View {
@Property
onSubmitEditing?: (text: string) => void
getText(context: BridgeContext) {
return this.nativeChannel(context, 'getText')() as Promise<string>
}
@ -84,9 +83,17 @@ export class Input extends View {
return this.nativeChannel(context, 'setSelection')({
start,
end,
}) as Promise<string>
}) as Promise<any>
}
getSelection(context: BridgeContext) {
return this.nativeChannel(context, 'getSelection')() as Promise<{
start: number,
end: number,
}>
}
requestFocus(context: BridgeContext) {
return this.nativeChannel(context, 'requestFocus')()
}

View File

@ -3729,6 +3729,9 @@ class Input extends View {
end,
});
}
getSelection(context) {
return this.nativeChannel(context, 'getSelection')();
}
requestFocus(context) {
return this.nativeChannel(context, 'requestFocus')();
}

File diff suppressed because one or more lines are too long