|
|
@ -230,6 +230,7 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
|
|
|
|
|
|
|
|
private ViewGroup view;
|
|
|
|
private ViewGroup view;
|
|
|
|
private View vwAnchorMenu;
|
|
|
|
private View vwAnchorMenu;
|
|
|
|
|
|
|
|
private ScrollView scroll;
|
|
|
|
private Spinner spIdentity;
|
|
|
|
private Spinner spIdentity;
|
|
|
|
private EditText etExtra;
|
|
|
|
private EditText etExtra;
|
|
|
|
private TextView tvDomain;
|
|
|
|
private TextView tvDomain;
|
|
|
@ -379,6 +380,7 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
|
|
|
|
|
|
|
|
// Get controls
|
|
|
|
// Get controls
|
|
|
|
vwAnchorMenu = view.findViewById(R.id.vwAnchorMenu);
|
|
|
|
vwAnchorMenu = view.findViewById(R.id.vwAnchorMenu);
|
|
|
|
|
|
|
|
scroll = view.findViewById(R.id.scroll);
|
|
|
|
spIdentity = view.findViewById(R.id.spIdentity);
|
|
|
|
spIdentity = view.findViewById(R.id.spIdentity);
|
|
|
|
etExtra = view.findViewById(R.id.etExtra);
|
|
|
|
etExtra = view.findViewById(R.id.etExtra);
|
|
|
|
tvDomain = view.findViewById(R.id.tvDomain);
|
|
|
|
tvDomain = view.findViewById(R.id.tvDomain);
|
|
|
@ -660,6 +662,7 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
etBody.addTextChangedListener(new TextWatcher() {
|
|
|
|
etBody.addTextChangedListener(new TextWatcher() {
|
|
|
|
private boolean save = false;
|
|
|
|
private boolean save = false;
|
|
|
|
private Integer added = null;
|
|
|
|
private Integer added = null;
|
|
|
|
|
|
|
|
private boolean inserted = false;
|
|
|
|
private Pair<Integer, Integer> lt = null;
|
|
|
|
private Pair<Integer, Integer> lt = null;
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -689,6 +692,13 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
added = index;
|
|
|
|
added = index;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (count - before > 1)
|
|
|
|
|
|
|
|
inserted = true;
|
|
|
|
|
|
|
|
else if (count - before == 1) {
|
|
|
|
|
|
|
|
char c = text.charAt(start + count - 1);
|
|
|
|
|
|
|
|
inserted = Character.isWhitespace(c);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -728,6 +738,34 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
} finally {
|
|
|
|
} finally {
|
|
|
|
lt = null;
|
|
|
|
lt = null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Auto scroll is broken on Android 14 beta
|
|
|
|
|
|
|
|
if (inserted)
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
// Auto scroll is broken on Android 14 beta
|
|
|
|
|
|
|
|
view.post(new RunnableEx("autoscroll") {
|
|
|
|
|
|
|
|
private Rect rect = new Rect();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
protected void delegate() {
|
|
|
|
|
|
|
|
int pos = etBody.getSelectionEnd();
|
|
|
|
|
|
|
|
if (pos < 0)
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Layout layout = etBody.getLayout();
|
|
|
|
|
|
|
|
int line = layout.getLineForOffset(pos);
|
|
|
|
|
|
|
|
int y = layout.getLineTop(line + 1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
etBody.getLocalVisibleRect(rect);
|
|
|
|
|
|
|
|
if (y > rect.bottom)
|
|
|
|
|
|
|
|
scroll.scrollBy(0, y - rect.bottom);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
} catch (Throwable ex) {
|
|
|
|
|
|
|
|
Log.e(ex);
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
|
|
inserted = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|