Keep scroll in chatlist when editing it + do not reload picture if not necessary

This commit is contained in:
Sylvain Berfini 2016-08-09 11:19:31 +02:00
parent 5a122150a8
commit 159cb83af8
2 changed files with 15 additions and 10 deletions

View file

@ -128,8 +128,9 @@
<ListView
android:id="@+id/chat_message_list"
android:divider="@android:color/transparent"
android:choiceMode="multipleChoice"
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
android:transcriptMode="normal"
android:dividerHeight="10dp"
android:cacheColorHint="@color/transparent"
android:layout_above="@id/remote_composing"

View file

@ -85,7 +85,6 @@ import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
@ -162,7 +161,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
contactName = (TextView) view.findViewById(R.id.contact_name);
messagesList = (ListView) view.findViewById(R.id.chat_message_list);
messagesList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
searchContactField = (EditText) view.findViewById(R.id.search_contact_field);
resultContactsSearch = (ListView) view.findViewById(R.id.result_contacts);
@ -231,7 +229,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
LinphoneService.instance().removeMessageNotification();
cr.markAsRead();
adapter.addMessage(cr.getHistory(1)[0]);
messagesList.setSelection(adapter.getCount()-1);
String externalBodyUrl = message.getExternalBodyUrl();
LinphoneContent fileTransferContent = message.getFileTransferInformation();
@ -1015,6 +1012,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
public void addMessage(LinphoneChatMessage message) {
history.add(message);
notifyDataSetChanged();
messagesList.setSelection(getCount() - 1);
}
@Override
@ -1037,6 +1035,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
final LinphoneChatMessage message = history.get(position);
View view = null;
final ViewHolder holder;
boolean sameMessage = false;
if (convertView != null) {
view = convertView;
@ -1047,8 +1046,13 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
holder = new ViewHolder(view);
view.setTag(holder);
}
view.setId(message.getStorageId());
if (holder.id == message.getStorageId()) {
sameMessage = true;
} else {
holder.id = message.getStorageId();
}
view.setId(holder.id);
registerForContextMenu(view);
LinphoneChatMessage.State status = message.getStatus();
@ -1103,7 +1107,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
if (message.isOutgoing() && appData != null) {
holder.messageImage.setVisibility(View.VISIBLE);
loadBitmap(appData, holder.messageImage);
if (!sameMessage) loadBitmap(appData, holder.messageImage);
if (LinphoneManager.getInstance().getMessageUploadPending() != null && LinphoneManager.getInstance().getMessageUploadPending().getStorageId() == message.getStorageId()) {
holder.messageSendingInProgress.setVisibility(View.GONE);
@ -1127,7 +1131,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
LinphoneManager.removeListener(holder);
holder.fileTransferLayout.setVisibility(View.GONE);
holder.messageImage.setVisibility(View.VISIBLE);
loadBitmap(appData, holder.messageImage);
if (!sameMessage) loadBitmap(appData, holder.messageImage);
}
}
}