blob: c453fc77b61e95edbe9ace3ad0b587e11a6f0c0e [file] [log] [blame]
package org.wordpress.android.widgets;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.BaseInputConnection;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
/**
* Used to handle backspace in People Management username field
*/
public class MultiUsernameEditText extends WPEditText {
private OnBackspacePressedListener mOnBackspacePressedListener;
public MultiUsernameEditText(Context context) {
super(context);
}
public MultiUsernameEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MultiUsernameEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setOnBackspacePressedListener(OnBackspacePressedListener onBackspacePressedListener) {
this.mOnBackspacePressedListener = onBackspacePressedListener;
}
public interface OnBackspacePressedListener {
boolean onBackspacePressed();
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
//in this case it makes sense to not change EditText to fullscreen mode at landscape
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;
return new MultiUsernameEditTextInputConnection(this, false);
}
private class MultiUsernameEditTextInputConnection extends BaseInputConnection {
public MultiUsernameEditTextInputConnection(View targetView, boolean fullEditor) {
super(targetView, fullEditor);
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
if (mOnBackspacePressedListener != null) {
//if username was not deleted pass event to parent method and return the result
return !mOnBackspacePressedListener.onBackspacePressed() && super.sendKeyEvent(event);
}
}
return super.sendKeyEvent(event);
}
@Override
public boolean deleteSurroundingText(int beforeLength, int afterLength) {
if (beforeLength == 1 && afterLength == 0) {
return sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL))
&& sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL));
}
return super.deleteSurroundingText(beforeLength, afterLength);
}
}
}