Search in sources :

Example 1 with EditTextEx

use of net.osmand.plus.widgets.EditTextEx in project Osmand by osmandapp.

the class CoordinateInputDialogFragment method setupEditTextEx.

private void setupEditTextEx(@IdRes int etId, int symbols, boolean lat) {
    EditTextEx et = (EditTextEx) mainView.findViewById(etId);
    et.setMaxSymbolsCount(symbols);
    et.setHint(createString(symbols, lat ? 'x' : 'y'));
    ((LinearLayout.LayoutParams) et.getLayoutParams()).weight = symbols;
    et.requestLayout();
}
Also used : EditTextEx(net.osmand.plus.widgets.EditTextEx) LinearLayout(android.widget.LinearLayout)

Example 2 with EditTextEx

use of net.osmand.plus.widgets.EditTextEx in project Osmand by osmandapp.

the class CoordinateInputDialogFragment method registerInputs.

private void registerInputs() {
    TextWatcher textWatcher = new TextWatcher() {

        private int strLength;

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            strLength = charSequence.length();
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        @Override
        public void afterTextChanged(Editable editable) {
            View focusedView = getDialog().getCurrentFocus();
            if (focusedView != null && focusedView instanceof EditTextEx) {
                EditTextEx et = (EditTextEx) focusedView;
                int currentLength = et.getText().length();
                if (et.getId() == R.id.lon_first_input_et) {
                    String lonFirstInput = et.getText().toString();
                    if (currentLength == 2) {
                        if (lonFirstInput.charAt(0) != '1' && lonFirstInput.charAt(0) != '0') {
                            switchEditText(et.getId(), true);
                        }
                    }
                }
                if (et.getMaxSymbolsCount() > 0 && currentLength > strLength && currentLength >= et.getMaxSymbolsCount()) {
                    switchEditText(et.getId(), true);
                }
            }
        }
    };
    final GestureDetector gestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            return true;
        }
    });
    View.OnTouchListener inputEditTextOnTouchListener = new View.OnTouchListener() {

        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (isOsmandKeyboardOn()) {
                if (!isOsmandKeyboardCurrentlyVisible()) {
                    if (softKeyboardShown) {
                        if (view.getId() != R.id.point_name_et) {
                            AndroidUtils.hideSoftKeyboard(getActivity(), view);
                            shouldShowOsmandKeyboard = true;
                        } else {
                            return false;
                        }
                    } else {
                        changeOsmandKeyboardVisibility(true);
                    }
                }
                EditText editText = (EditText) view;
                int inputType = editText.getInputType();
                editText.setInputType(InputType.TYPE_NULL);
                boolean doubleTap = gestureDetector.onTouchEvent(motionEvent);
                if (!doubleTap) {
                    editText.onTouchEvent(motionEvent);
                    editText.setSelection(editText.getText().length());
                }
                editText.setInputType(inputType);
                return true;
            } else {
                if (isOsmandKeyboardCurrentlyVisible()) {
                    changeOsmandKeyboardVisibility(false);
                }
                return false;
            }
        }
    };
    View.OnLongClickListener inputEditTextOnLongClickListener = new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(final View view) {
            if (isOsmandKeyboardOn()) {
                final EditText inputEditText = (EditText) view;
                PopupMenu popupMenu = new PopupMenu(getContext(), inputEditText);
                Menu menu = popupMenu.getMenu();
                popupMenu.getMenuInflater().inflate(R.menu.copy_paste_menu, menu);
                final ClipboardManager clipboardManager = ((ClipboardManager) getContext().getSystemService(CLIPBOARD_SERVICE));
                MenuItem pasteMenuItem = menu.findItem(R.id.action_paste);
                if (clipboardManager == null || !clipboardManager.hasPrimaryClip() || !clipboardManager.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN)) {
                    pasteMenuItem.setEnabled(false);
                } else {
                    pasteMenuItem.setEnabled(true);
                }
                if (clipboardManager != null) {
                    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

                        @Override
                        public boolean onMenuItemClick(MenuItem item) {
                            int i = item.getItemId();
                            if (i == R.id.action_copy) {
                                ClipData clip = ClipData.newPlainText("", inputEditText.getText().toString());
                                clipboardManager.setPrimaryClip(clip);
                                return true;
                            } else if (i == R.id.action_paste) {
                                ClipData.Item pasteItem = clipboardManager.getPrimaryClip().getItemAt(0);
                                CharSequence pasteData = pasteItem.getText();
                                if (pasteData != null) {
                                    String str = inputEditText.getText().toString();
                                    inputEditText.setText(str + pasteData.toString());
                                    inputEditText.setSelection(inputEditText.getText().length());
                                }
                                return true;
                            }
                            return false;
                        }
                    });
                    popupMenu.show();
                }
                return true;
            } else {
                return false;
            }
        }
    };
    TextView.OnEditorActionListener inputTextViewOnEditorActionListener = new TextView.OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
            if (i == EditorInfo.IME_ACTION_NEXT) {
                switchEditText(textView.getId(), true);
            } else if (i == EditorInfo.IME_ACTION_DONE) {
                addWptPt();
                hasUnsavedChanges = true;
            }
            return false;
        }
    };
    clearInputs();
    Format format = getMyApplication().getSettings().COORDS_INPUT_FORMAT.get();
    boolean useTwoDigitsLongtitude = getMyApplication().getSettings().COORDS_INPUT_TWO_DIGITS_LONGTITUDE.get();
    setupEditTextEx(R.id.lat_first_input_et, format.getFirstPartSymbolsCount(true, useTwoDigitsLongtitude), true);
    setupEditTextEx(R.id.lon_first_input_et, format.getFirstPartSymbolsCount(false, useTwoDigitsLongtitude), false);
    String firstSeparator = format.getFirstSeparator();
    ((TextView) mainView.findViewById(R.id.lat_first_separator_tv)).setText(firstSeparator);
    ((TextView) mainView.findViewById(R.id.lon_first_separator_tv)).setText(firstSeparator);
    int secondPartSymbols = format.getSecondPartSymbolsCount();
    setupEditTextEx(R.id.lat_second_input_et, secondPartSymbols, true);
    setupEditTextEx(R.id.lon_second_input_et, secondPartSymbols, false);
    boolean containsThirdPart = format.isContainsThirdPart();
    int visibility = containsThirdPart ? View.VISIBLE : View.GONE;
    mainView.findViewById(R.id.lat_second_separator_tv).setVisibility(visibility);
    mainView.findViewById(R.id.lon_second_separator_tv).setVisibility(visibility);
    mainView.findViewById(R.id.lat_third_input_et).setVisibility(visibility);
    mainView.findViewById(R.id.lon_third_input_et).setVisibility(visibility);
    if (containsThirdPart) {
        String secondSeparator = format.getSecondSeparator();
        ((TextView) mainView.findViewById(R.id.lat_second_separator_tv)).setText(secondSeparator);
        ((TextView) mainView.findViewById(R.id.lon_second_separator_tv)).setText(secondSeparator);
        int thirdPartSymbols = format.getThirdPartSymbolsCount();
        setupEditTextEx(R.id.lat_third_input_et, thirdPartSymbols, true);
        setupEditTextEx(R.id.lon_third_input_et, thirdPartSymbols, false);
    }
    addEditTexts(R.id.lat_first_input_et, R.id.lat_second_input_et, R.id.lat_third_input_et, R.id.lon_first_input_et, R.id.lon_second_input_et, R.id.lon_third_input_et, R.id.point_name_et);
    for (EditText et : editTexts) {
        if (et.getId() == R.id.lon_first_input_et) {
            ((LinearLayout.LayoutParams) et.getLayoutParams()).weight = editTexts.get(0).getMaxSymbolsCount();
            et.requestLayout();
        }
        if (et.getId() != R.id.point_name_et) {
            et.addTextChangedListener(textWatcher);
        } else {
            et.setOnFocusChangeListener(new View.OnFocusChangeListener() {

                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    if (!hasFocus && isOsmandKeyboardOn() && (isOsmandKeyboardCurrentlyVisible() || softKeyboardShown)) {
                        AndroidUtils.hideSoftKeyboard(getActivity(), v);
                    }
                }
            });
        }
        et.setOnTouchListener(inputEditTextOnTouchListener);
        et.setOnLongClickListener(inputEditTextOnLongClickListener);
        et.setOnEditorActionListener(inputTextViewOnEditorActionListener);
    }
    changeEditTextSelections();
    editTexts.get(0).requestFocus();
}
Also used : GestureDetector(android.view.GestureDetector) KeyEvent(android.view.KeyEvent) Format(net.osmand.plus.mapmarkers.CoordinateInputFormats.Format) DecimalFormat(java.text.DecimalFormat) TextWatcher(android.text.TextWatcher) Editable(android.text.Editable) EditTextEx(net.osmand.plus.widgets.EditTextEx) TextView(android.widget.TextView) Menu(android.view.Menu) PopupMenu(androidx.appcompat.widget.PopupMenu) EditText(android.widget.EditText) ClipboardManager(android.content.ClipboardManager) MenuItem(android.view.MenuItem) ImageView(android.widget.ImageView) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) TextView(android.widget.TextView) MotionEvent(android.view.MotionEvent) ClipData(android.content.ClipData) LinearLayout(android.widget.LinearLayout) PopupMenu(androidx.appcompat.widget.PopupMenu)

Aggregations

LinearLayout (android.widget.LinearLayout)2 EditTextEx (net.osmand.plus.widgets.EditTextEx)2 ClipData (android.content.ClipData)1 ClipboardManager (android.content.ClipboardManager)1 Editable (android.text.Editable)1 TextWatcher (android.text.TextWatcher)1 GestureDetector (android.view.GestureDetector)1 KeyEvent (android.view.KeyEvent)1 Menu (android.view.Menu)1 MenuItem (android.view.MenuItem)1 MotionEvent (android.view.MotionEvent)1 View (android.view.View)1 EditText (android.widget.EditText)1 ImageView (android.widget.ImageView)1 TextView (android.widget.TextView)1 PopupMenu (androidx.appcompat.widget.PopupMenu)1 RecyclerView (androidx.recyclerview.widget.RecyclerView)1 DecimalFormat (java.text.DecimalFormat)1 Format (net.osmand.plus.mapmarkers.CoordinateInputFormats.Format)1