GitNex-Android-App/app/src/main/java/org/mian/gitnex/helpers/codeeditor/SourcePositionListener.java

50 lines
1.4 KiB
Java

package org.mian.gitnex.helpers.codeeditor;
import android.text.Layout;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
import android.widget.EditText;
import androidx.annotation.NonNull;
/**
* @author AmrDeveloper
* @author M M Arif
*/
public class SourcePositionListener {
private OnPositionChanged onPositionChanged;
public SourcePositionListener(EditText editText) {
View.AccessibilityDelegate viewAccessibility =
new View.AccessibilityDelegate() {
@Override
public void sendAccessibilityEvent(@NonNull View host, int eventType) {
super.sendAccessibilityEvent(host, eventType);
if (eventType == AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED
&& onPositionChanged != null) {
int selectionStart = editText.getSelectionStart();
Layout layout = editText.getLayout();
if (layout == null) {
return;
}
int line = editText.getLayout().getLineForOffset(selectionStart);
int column = selectionStart - editText.getLayout().getLineStart(line);
onPositionChanged.onPositionChange(line + 1, column + 1);
}
}
};
editText.setAccessibilityDelegate(viewAccessibility);
}
public void setOnPositionChanged(OnPositionChanged listener) {
onPositionChanged = listener;
}
@FunctionalInterface
public interface OnPositionChanged {
void onPositionChange(int line, int column);
}
}