mirror of
https://github.com/deltachat/deltachat-android.git
synced 2025-10-04 02:09:39 +02:00
move up when tapping webxdc info messages (#2194)
* add DcMsg.getParent() api * factor out scrollSmoothToMsgId() and use that for both, quotes and webxdc-info-messages
This commit is contained in:
parent
56cce4b977
commit
a9a99047da
3 changed files with 37 additions and 18 deletions
|
@ -1694,6 +1694,12 @@ JNIEXPORT jlong Java_com_b44t_messenger_DcMsg_getQuotedMsgCPtr(JNIEnv *env, jobj
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
JNIEXPORT jlong Java_com_b44t_messenger_DcMsg_getParentCPtr(JNIEnv *env, jobject obj)
|
||||||
|
{
|
||||||
|
return (jlong)dc_msg_get_parent(get_dc_msg(env, obj));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getError(JNIEnv *env, jobject obj)
|
JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getError(JNIEnv *env, jobject obj)
|
||||||
{
|
{
|
||||||
char* temp = dc_msg_get_error(get_dc_msg(env, obj));
|
char* temp = dc_msg_get_error(get_dc_msg(env, obj));
|
||||||
|
|
|
@ -156,6 +156,11 @@ public class DcMsg {
|
||||||
return cPtr != 0 ? new DcMsg(cPtr) : null;
|
return cPtr != 0 ? new DcMsg(cPtr) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DcMsg getParent() {
|
||||||
|
long cPtr = getParentCPtr();
|
||||||
|
return cPtr != 0 ? new DcMsg(cPtr) : null;
|
||||||
|
}
|
||||||
|
|
||||||
public File getFileAsFile() {
|
public File getFileAsFile() {
|
||||||
if(getFile()==null)
|
if(getFile()==null)
|
||||||
throw new AssertionError("expected a file to be present.");
|
throw new AssertionError("expected a file to be present.");
|
||||||
|
@ -220,5 +225,6 @@ public class DcMsg {
|
||||||
private native long getSummaryCPtr (long chatCPtr);
|
private native long getSummaryCPtr (long chatCPtr);
|
||||||
private native void setQuoteCPtr (long quoteCPtr);
|
private native void setQuoteCPtr (long quoteCPtr);
|
||||||
private native long getQuotedMsgCPtr ();
|
private native long getQuotedMsgCPtr ();
|
||||||
|
private native long getParentCPtr ();
|
||||||
private native String getWebxdcInfoJson ();
|
private native String getWebxdcInfoJson ();
|
||||||
};
|
};
|
||||||
|
|
|
@ -557,6 +557,27 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void scrollMaybeSmoothToMsgId(final int msgId) {
|
||||||
|
LinearLayoutManager layout = ((LinearLayoutManager) list.getLayoutManager());
|
||||||
|
boolean smooth = false;
|
||||||
|
ConversationAdapter adapter = (ConversationAdapter) list.getAdapter();
|
||||||
|
if (adapter == null) return;
|
||||||
|
int position = adapter.msgIdToPosition(msgId);
|
||||||
|
if (layout != null) {
|
||||||
|
int distance1 = Math.abs(position - layout.findFirstVisibleItemPosition());
|
||||||
|
int distance2 = Math.abs(position - layout.findLastVisibleItemPosition());
|
||||||
|
int distance = Math.min(distance1, distance2);
|
||||||
|
smooth = distance < 15;
|
||||||
|
Log.i(TAG, "Scrolling to destMsg, smoth: " + smooth + ", distance: " + distance);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (position != -1) {
|
||||||
|
scrollAndHighlight(position, smooth);
|
||||||
|
} else {
|
||||||
|
Log.e(TAG, "msgId not found for scrolling: " + msgId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public interface ConversationFragmentListener {
|
public interface ConversationFragmentListener {
|
||||||
void handleReplyMessage(DcMsg messageRecord);
|
void handleReplyMessage(DcMsg messageRecord);
|
||||||
}
|
}
|
||||||
|
@ -758,6 +779,9 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||||
else if(DozeReminder.isDozeReminderMsg(getContext(), messageRecord)) {
|
else if(DozeReminder.isDozeReminderMsg(getContext(), messageRecord)) {
|
||||||
DozeReminder.dozeReminderTapped(getContext());
|
DozeReminder.dozeReminderTapped(getContext());
|
||||||
}
|
}
|
||||||
|
else if(messageRecord.isInfo() && messageRecord.getParent() != null) {
|
||||||
|
scrollMaybeSmoothToMsgId(messageRecord.getParent().getId());
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
String self_mail = dcContext.getConfig("configured_mail_user");
|
String self_mail = dcContext.getConfig("configured_mail_user");
|
||||||
if (self_mail != null && !self_mail.isEmpty()
|
if (self_mail != null && !self_mail.isEmpty()
|
||||||
|
@ -802,24 +826,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||||
Log.e(TAG, "Activity was null");
|
Log.e(TAG, "Activity was null");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LinearLayoutManager layout = ((LinearLayoutManager) list.getLayoutManager());
|
scrollMaybeSmoothToMsgId(quoted.getId());
|
||||||
boolean smooth = false;
|
|
||||||
ConversationAdapter adapter = (ConversationAdapter) list.getAdapter();
|
|
||||||
if (adapter == null) return;
|
|
||||||
int position = adapter.msgIdToPosition(quoted.getId());
|
|
||||||
if (layout != null) {
|
|
||||||
int distance1 = Math.abs(position - layout.findFirstVisibleItemPosition());
|
|
||||||
int distance2 = Math.abs(position - layout.findLastVisibleItemPosition());
|
|
||||||
int distance = Math.min(distance1, distance2);
|
|
||||||
smooth = distance < 15;
|
|
||||||
Log.i(TAG, "Scrolling to quote, smoth: " + smooth + ", distance: " + distance);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (position != -1) {
|
|
||||||
scrollAndHighlight(position, smooth);
|
|
||||||
} else {
|
|
||||||
Log.e(TAG, "msgId not found for scrolling: " + quoted.getId());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue