package com.SalmanDev.TextBoxPlus; import android.content.Context; import android.util.Log; import android.view.View; import android.widget.EditText; import android.text.InputFilter; import android.text.InputFilter.AllCaps; import android.text.InputFilter.LengthFilter; import android.view.inputmethod.InputMethodManager; import android.text.Spanned; import android.text.Editable; import android.text.TextWatcher; import com.google.appinventor.components.annotations.*; import com.google.appinventor.components.runtime.*; import com.google.appinventor.components.runtime.AndroidViewComponent; import com.google.appinventor.components.runtime.util.ErrorMessages; import com.google.appinventor.components.common.ComponentCategory; @DesignerComponent(version = 1, description = "Created by Salman Developer", category = ComponentCategory.EXTENSION, nonVisible = true, iconName = "https://img.icons8.com/fluent/16/000000/source-code.png") @SimpleObject(external = true) public class TextBoxPlus extends AndroidNonvisibleComponent { private ComponentContainer container; private Context context; public TextBoxPlus(ComponentContainer container) { super(container.$form()); this.container = container; context = (Context) container.$context(); } @SimpleFunction(description = "") public void SetLength(AndroidViewComponent textBox, int maxLength) { EditText editText = (EditText) textBox.getView(); editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)}); } @SimpleFunction(description = "") public void ShowError(AndroidViewComponent textBox, String errorText) { EditText editText = (EditText) textBox.getView(); editText.setError(errorText); } @SimpleFunction(description = "") public void SetUppercase(AndroidViewComponent textBox) { EditText editText = (EditText) textBox.getView(); editText.setFilters(new InputFilter[] {new InputFilter.AllCaps()}); } @SimpleFunction(description = "") public void SetLowercase(AndroidViewComponent textBox) { EditText editText = (EditText) textBox.getView(); editText.setFilters(new InputFilter[] {new InputFilter.AllCaps() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { return String.valueOf(source).toLowerCase(); } } }); } @SimpleFunction(description = "") public int GetNumberOfLines(AndroidViewComponent textBox) { EditText editText = (EditText) textBox.getView(); int number = editText.getLayout().getLineCount(); return number; } @SimpleFunction(description = "") public void SetNumberOfLines(AndroidViewComponent textBox, int maxLines) { final EditText editText = (EditText) textBox.getView(); final int maxNumber = maxLines; editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { } @Override public void afterTextChanged(Editable editable) { if (null != editText.getLayout() && editText.getLayout().getLineCount() > maxNumber) { editText.getText().delete(editText.getText().length() - 1, editText.getText().length()); } } }); } @SimpleFunction(description = "") public void SetFocusable(AndroidViewComponent textBox, boolean enable) { EditText editText = (EditText) textBox.getView(); editText.setFocusable(enable); editText.setFocusableInTouchMode(enable); if (editText.isFocusableInTouchMode() || editText.isFocusable()) { editText.requestFocus(); InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); } } @SimpleFunction(description = "") public void SetOnClickListener(final AndroidViewComponent textBox) { final EditText editText = (EditText) textBox.getView(); editText.setEnabled(true); editText.setFocusable(false); editText.setFocusableInTouchMode(false); editText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OnClick(textBox); } }); } @SimpleEvent(description = "") public void OnClick(AndroidViewComponent component) { EventDispatcher.dispatchEvent(this, "OnClick", component); } }