Fixed a bug into getContact from ChatRoomAdapter.java, could cause a crash with create a new chatroom. Finished ChatCreationFragment part converting. TODO: GroupInfoFragment part to convert into RecyclerView.
This commit is contained in:
parent
dcfba09cf5
commit
d595653b12
5 changed files with 207 additions and 89 deletions
|
@ -144,7 +144,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:id="@+id/relativeLayout">
|
||||
|
||||
<ListView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/contactsList"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
|
|
@ -21,6 +21,8 @@ package org.linphone.chat;
|
|||
|
||||
import android.app.Fragment;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.LayoutInflater;
|
||||
|
@ -60,9 +62,9 @@ import java.util.List;
|
|||
|
||||
import static android.content.Context.INPUT_METHOD_SERVICE;
|
||||
|
||||
public class ChatCreationFragment extends Fragment implements View.OnClickListener, AdapterView.OnItemClickListener, ContactsUpdatedListener {
|
||||
public class ChatCreationFragment extends Fragment implements View.OnClickListener ,SearchContactsListAdapter.ViewHolder.ClickListener, ContactsUpdatedListener {
|
||||
private LayoutInflater mInflater;
|
||||
private ListView mContactsList;
|
||||
private RecyclerView mContactsList;
|
||||
private LinearLayout mContactsSelectedLayout;
|
||||
private HorizontalScrollView mContactsSelectLayout;
|
||||
private ArrayList<ContactAddress> mContactsSelected;
|
||||
|
@ -80,6 +82,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mInflater = inflater;
|
||||
View view = inflater.inflate(R.layout.chat_create, container, false);
|
||||
|
||||
|
@ -124,7 +127,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
mContactsFetchInProgress = view.findViewById(R.id.contactsFetchInProgress);
|
||||
mContactsFetchInProgress.setVisibility(View.VISIBLE);
|
||||
|
||||
mSearchAdapter = new SearchContactsListAdapter(null, mInflater, mContactsFetchInProgress);
|
||||
mSearchAdapter = new SearchContactsListAdapter(null, mInflater, mContactsFetchInProgress, this);
|
||||
|
||||
mSearchField = view.findViewById(R.id.searchField);
|
||||
mSearchField.addTextChangedListener(new TextWatcher() {
|
||||
|
@ -145,9 +148,11 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
mSearchAdapter.searchContacts(mSearchField.getText().toString(), mContactsList);
|
||||
}
|
||||
});
|
||||
|
||||
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
|
||||
mContactsList.setAdapter(mSearchAdapter);
|
||||
mContactsList.setOnItemClickListener(this);
|
||||
|
||||
mContactsList.setLayoutManager(layoutManager);
|
||||
// mContactsList.setOnItemClickListener(this);
|
||||
if (savedInstanceState != null && savedInstanceState.getStringArrayList("mContactsSelected") != null) {
|
||||
mContactsSelectedLayout.removeAllViews();
|
||||
// We need to get all contacts not only sip
|
||||
|
@ -329,7 +334,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
|
||||
private void removeContactFromSelection(ContactAddress ca) {
|
||||
updateContactsClick(ca, mSearchAdapter.getContactsSelectedList());
|
||||
mSearchAdapter.notifyDataSetInvalidated();
|
||||
mSearchAdapter.notifyDataSetChanged();
|
||||
updateListSelected();
|
||||
}
|
||||
|
||||
|
@ -412,8 +417,9 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
||||
ContactAddress ca = mSearchAdapter.getContacts().get(i);
|
||||
public void onItemClicked(int position) {
|
||||
// public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
||||
ContactAddress ca = mSearchAdapter.getContacts().get(position);
|
||||
Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||
ProxyConfig lpc = lc.getDefaultProxyConfig();
|
||||
if (lpc == null || lpc.getConferenceFactoryUri() == null) {
|
||||
|
|
|
@ -134,7 +134,7 @@ public class ChatEventsAdapter extends SelectableAdapter<ChatBubbleViewHolder> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ChatBubbleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
public ChatBubbleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View v = LayoutInflater.from(parent.getContext())
|
||||
.inflate(this.itemResource, parent, false);
|
||||
ChatBubbleViewHolder VH = new ChatBubbleViewHolder(this.mContext,v, clickListener);
|
||||
|
@ -144,7 +144,7 @@ public class ChatEventsAdapter extends SelectableAdapter<ChatBubbleViewHolder> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ChatBubbleViewHolder holder, int position) {
|
||||
public void onBindViewHolder(@NonNull ChatBubbleViewHolder holder, int position) {
|
||||
final EventLog event = this.mHistory.get(position);
|
||||
holder.eventLayout.setVisibility(View.GONE);
|
||||
holder.bubbleLayout.setVisibility(View.GONE);
|
||||
|
|
|
@ -35,8 +35,10 @@ import org.linphone.R;
|
|||
import org.linphone.activities.LinphoneActivity;
|
||||
import org.linphone.contacts.ContactsManager;
|
||||
import org.linphone.contacts.LinphoneContact;
|
||||
import org.linphone.core.Address;
|
||||
import org.linphone.core.ChatMessage;
|
||||
import org.linphone.core.ChatRoom;
|
||||
import org.linphone.core.ChatRoomCapabilities;
|
||||
import org.linphone.core.ChatRoomListenerStub;
|
||||
import org.linphone.core.Core;
|
||||
import org.linphone.core.EventLog;
|
||||
|
@ -125,14 +127,31 @@ public class ChatRoomsAdapter extends SelectableAdapter<ChatRoomsAdapter.ChatRoo
|
|||
}
|
||||
|
||||
public String getContact(ChatRoom mRoom) {
|
||||
LinphoneContact contact;
|
||||
contact = ContactsManager.getInstance().findContactFromAddress(mRoom.getLastMessageInHistory().getFromAddress());
|
||||
if (contact != null) {
|
||||
|
||||
return (contact.getFullName());
|
||||
Address contactAddress = mRoom.getPeerAddress();
|
||||
if (mRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()) && mRoom.getParticipants().length > 0) {
|
||||
contactAddress = mRoom.getParticipants()[0].getAddress();
|
||||
}
|
||||
|
||||
if (mRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) {
|
||||
LinphoneContact contact;
|
||||
if (mRoom.getParticipants().length > 0) {
|
||||
contact = ContactsManager.getInstance().findContactFromAddress(mRoom.getParticipants()[0].getAddress());
|
||||
if (contact != null) {
|
||||
return (contact.getFullName());
|
||||
} else {
|
||||
return (LinphoneUtils.getAddressDisplayName(mRoom.getParticipants()[0].getAddress()));
|
||||
}
|
||||
} else {
|
||||
contact = ContactsManager.getInstance().findContactFromAddress(contactAddress);
|
||||
if (contact != null) {
|
||||
return (contact.getFullName());
|
||||
} else {
|
||||
return (LinphoneUtils.getAddressDisplayName(contactAddress));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return (LinphoneUtils.getAddressDisplayName(mRoom.getLastMessageInHistory().getFromAddress()));
|
||||
return (mRoom.getSubject());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|||
|
||||
package org.linphone.contacts;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -32,6 +34,7 @@ import org.linphone.LinphoneManager;
|
|||
import org.linphone.LinphoneUtils;
|
||||
import org.linphone.R;
|
||||
import org.linphone.activities.LinphoneActivity;
|
||||
import org.linphone.chat.ChatBubbleViewHolder;
|
||||
import org.linphone.core.Address;
|
||||
import org.linphone.core.Factory;
|
||||
import org.linphone.core.ProxyConfig;
|
||||
|
@ -40,22 +43,42 @@ import org.linphone.core.SearchResult;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SearchContactsListAdapter extends BaseAdapter {
|
||||
public class SearchContactsListAdapter extends RecyclerView.Adapter<SearchContactsListAdapter.ViewHolder> {
|
||||
//public class SearchContactsListAdapter extends BaseAdapter {
|
||||
@SuppressWarnings("unused")
|
||||
private static final String TAG = SearchContactsListAdapter.class.getSimpleName();
|
||||
|
||||
private class ViewHolder {
|
||||
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
public TextView name;
|
||||
public TextView address;
|
||||
public ImageView linphoneContact;
|
||||
public ImageView isSelect;
|
||||
public ImageView avatar;
|
||||
|
||||
public ViewHolder(View view) {
|
||||
private ClickListener listener;
|
||||
|
||||
public ViewHolder(View view, ClickListener listener) {
|
||||
super(view);
|
||||
name = view.findViewById(R.id.contact_name);
|
||||
address = view.findViewById(R.id.contact_address);
|
||||
linphoneContact = view.findViewById(R.id.contact_linphone);
|
||||
isSelect = view.findViewById(R.id.contact_is_select);
|
||||
avatar = view.findViewById(R.id.contact_picture);
|
||||
this.listener=listener;
|
||||
view.setOnClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (listener != null) {
|
||||
listener.onItemClicked(getAdapterPosition());
|
||||
}
|
||||
|
||||
}
|
||||
public interface ClickListener {
|
||||
public void onItemClicked(int position);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private List<ContactAddress> contacts;
|
||||
|
@ -63,7 +86,8 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
|||
private LayoutInflater mInflater;
|
||||
private ProgressBar progressBar;
|
||||
private boolean mOnlySipContact = false;
|
||||
private View.OnClickListener listener;
|
||||
private ViewHolder.ClickListener listener;
|
||||
// private View.OnClickListener listener;
|
||||
|
||||
public List<ContactAddress> getContacts() {
|
||||
return contacts;
|
||||
|
@ -73,17 +97,82 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
|||
mOnlySipContact = enable;
|
||||
}
|
||||
|
||||
public void setListener(View.OnClickListener listener) {
|
||||
public void setListener(ViewHolder.ClickListener listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public SearchContactsListAdapter(List<ContactAddress> contactsList, LayoutInflater inflater, ProgressBar pB) {
|
||||
public SearchContactsListAdapter(List<ContactAddress> contactsList, LayoutInflater inflater, ProgressBar pB, ViewHolder.ClickListener clickListener) {
|
||||
this.listener=clickListener;
|
||||
mInflater = inflater;
|
||||
progressBar = pB;
|
||||
setContactsSelectedList(null);
|
||||
setContactsList(contactsList);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_contact_cell, parent, false);
|
||||
return new ViewHolder(v, listener);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
||||
ContactAddress contact = getItem(position);
|
||||
final String a = (contact.getAddressAsDisplayableString().isEmpty()) ? contact.getPhoneNumber() : contact.getAddressAsDisplayableString();
|
||||
LinphoneContact c = contact.getContact();
|
||||
|
||||
holder.avatar.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
|
||||
if (c != null && c.hasPhoto()) {
|
||||
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.avatar, c.getThumbnailUri());
|
||||
}
|
||||
|
||||
String address = contact.getAddressAsDisplayableString();
|
||||
if (c != null && c.getFullName() != null) {
|
||||
if (address == null)
|
||||
address = c.getPresenceModelForUriOrTel(a);
|
||||
holder.name.setVisibility(View.VISIBLE);
|
||||
holder.name.setText(c.getFullName());
|
||||
} else if (contact.getAddress() != null) {
|
||||
if (contact.getAddress().getUsername() != null) {
|
||||
holder.name.setVisibility(View.VISIBLE);
|
||||
holder.name.setText(contact.getAddress().getUsername());
|
||||
} else if (contact.getAddress().getDisplayName() != null) {
|
||||
holder.name.setVisibility(View.VISIBLE);
|
||||
holder.name.setText(contact.getAddress().getDisplayName());
|
||||
}
|
||||
} else if (address != null) {
|
||||
Address tmpAddr = Factory.instance().createAddress(address);
|
||||
holder.name.setVisibility(View.VISIBLE);
|
||||
holder.name.setText((tmpAddr.getDisplayName() != null) ? tmpAddr.getDisplayName() : tmpAddr.getUsername()) ;
|
||||
} else {
|
||||
holder.name.setVisibility(View.GONE);
|
||||
}
|
||||
holder.address.setText(a);
|
||||
if (holder.linphoneContact != null) {
|
||||
if (contact.isLinphoneContact() && c != null && c.isInFriendList() && address != null) {
|
||||
holder.linphoneContact.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
holder.linphoneContact.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
if (holder.isSelect != null) {
|
||||
if (contactIsSelected(contact)) {
|
||||
holder.isSelect.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
holder.isSelect.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
// view.setTag(R.id.contact_search_name, address != null ? address : a);
|
||||
// if (listener != null)
|
||||
// view.setOnClickListener(listener);
|
||||
}
|
||||
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
private boolean contactIsSelected(ContactAddress ca) {
|
||||
for (ContactAddress c : contactsSelected) {
|
||||
Address addr = c.getAddress();
|
||||
|
@ -160,11 +249,15 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
|||
return contacts.get(position);
|
||||
}
|
||||
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return contacts.size();
|
||||
}
|
||||
|
||||
public void searchContacts(String search, ListView resultContactsSearch) {
|
||||
public void searchContacts(String search, RecyclerView resultContactsSearch) {
|
||||
// public void searchContacts(String search, ListView resultContactsSearch) {
|
||||
List<ContactAddress> result = new ArrayList<>();
|
||||
|
||||
String domain = "";
|
||||
|
@ -206,69 +299,69 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
|||
this.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
View view;
|
||||
ViewHolder holder;
|
||||
|
||||
if (convertView != null) {
|
||||
view = convertView;
|
||||
holder = (ViewHolder) view.getTag();
|
||||
} else {
|
||||
view = mInflater.inflate(R.layout.search_contact_cell, parent, false);
|
||||
holder = new ViewHolder(view);
|
||||
view.setTag(holder);
|
||||
}
|
||||
|
||||
ContactAddress contact = getItem(position);
|
||||
final String a = (contact.getAddressAsDisplayableString().isEmpty()) ? contact.getPhoneNumber() : contact.getAddressAsDisplayableString();
|
||||
LinphoneContact c = contact.getContact();
|
||||
|
||||
holder.avatar.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
|
||||
if (c != null && c.hasPhoto()) {
|
||||
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.avatar, c.getThumbnailUri());
|
||||
}
|
||||
|
||||
String address = contact.getAddressAsDisplayableString();
|
||||
if (c != null && c.getFullName() != null) {
|
||||
if (address == null)
|
||||
address = c.getPresenceModelForUriOrTel(a);
|
||||
holder.name.setVisibility(View.VISIBLE);
|
||||
holder.name.setText(c.getFullName());
|
||||
} else if (contact.getAddress() != null) {
|
||||
if (contact.getAddress().getUsername() != null) {
|
||||
holder.name.setVisibility(View.VISIBLE);
|
||||
holder.name.setText(contact.getAddress().getUsername());
|
||||
} else if (contact.getAddress().getDisplayName() != null) {
|
||||
holder.name.setVisibility(View.VISIBLE);
|
||||
holder.name.setText(contact.getAddress().getDisplayName());
|
||||
}
|
||||
} else if (address != null) {
|
||||
Address tmpAddr = Factory.instance().createAddress(address);
|
||||
holder.name.setVisibility(View.VISIBLE);
|
||||
holder.name.setText((tmpAddr.getDisplayName() != null) ? tmpAddr.getDisplayName() : tmpAddr.getUsername()) ;
|
||||
} else {
|
||||
holder.name.setVisibility(View.GONE);
|
||||
}
|
||||
holder.address.setText(a);
|
||||
if (holder.linphoneContact != null) {
|
||||
if (contact.isLinphoneContact() && c != null && c.isInFriendList() && address != null) {
|
||||
holder.linphoneContact.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
holder.linphoneContact.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
if (holder.isSelect != null) {
|
||||
if (contactIsSelected(contact)) {
|
||||
holder.isSelect.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
holder.isSelect.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
view.setTag(R.id.contact_search_name, address != null ? address : a);
|
||||
if (listener != null)
|
||||
view.setOnClickListener(listener);
|
||||
return view;
|
||||
}
|
||||
// @Override
|
||||
// public View getView(int position, View convertView, ViewGroup parent) {
|
||||
// View view;
|
||||
// ViewHolder holder;
|
||||
//
|
||||
// if (convertView != null) {
|
||||
// view = convertView;
|
||||
// holder = (ViewHolder) view.getTag();
|
||||
// } else {
|
||||
// view = mInflater.inflate(R.layout.search_contact_cell, parent, false);
|
||||
// holder = new ViewHolder(view);
|
||||
// view.setTag(holder);
|
||||
// }
|
||||
//
|
||||
// ContactAddress contact = getItem(position);
|
||||
// final String a = (contact.getAddressAsDisplayableString().isEmpty()) ? contact.getPhoneNumber() : contact.getAddressAsDisplayableString();
|
||||
// LinphoneContact c = contact.getContact();
|
||||
//
|
||||
// holder.avatar.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
|
||||
// if (c != null && c.hasPhoto()) {
|
||||
// LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.avatar, c.getThumbnailUri());
|
||||
// }
|
||||
//
|
||||
// String address = contact.getAddressAsDisplayableString();
|
||||
// if (c != null && c.getFullName() != null) {
|
||||
// if (address == null)
|
||||
// address = c.getPresenceModelForUriOrTel(a);
|
||||
// holder.name.setVisibility(View.VISIBLE);
|
||||
// holder.name.setText(c.getFullName());
|
||||
// } else if (contact.getAddress() != null) {
|
||||
// if (contact.getAddress().getUsername() != null) {
|
||||
// holder.name.setVisibility(View.VISIBLE);
|
||||
// holder.name.setText(contact.getAddress().getUsername());
|
||||
// } else if (contact.getAddress().getDisplayName() != null) {
|
||||
// holder.name.setVisibility(View.VISIBLE);
|
||||
// holder.name.setText(contact.getAddress().getDisplayName());
|
||||
// }
|
||||
// } else if (address != null) {
|
||||
// Address tmpAddr = Factory.instance().createAddress(address);
|
||||
// holder.name.setVisibility(View.VISIBLE);
|
||||
// holder.name.setText((tmpAddr.getDisplayName() != null) ? tmpAddr.getDisplayName() : tmpAddr.getUsername()) ;
|
||||
// } else {
|
||||
// holder.name.setVisibility(View.GONE);
|
||||
// }
|
||||
// holder.address.setText(a);
|
||||
// if (holder.linphoneContact != null) {
|
||||
// if (contact.isLinphoneContact() && c != null && c.isInFriendList() && address != null) {
|
||||
// holder.linphoneContact.setVisibility(View.VISIBLE);
|
||||
// } else {
|
||||
// holder.linphoneContact.setVisibility(View.GONE);
|
||||
// }
|
||||
// }
|
||||
// if (holder.isSelect != null) {
|
||||
// if (contactIsSelected(contact)) {
|
||||
// holder.isSelect.setVisibility(View.VISIBLE);
|
||||
// } else {
|
||||
// holder.isSelect.setVisibility(View.INVISIBLE);
|
||||
// }
|
||||
// }
|
||||
// view.setTag(R.id.contact_search_name, address != null ? address : a);
|
||||
// if (listener != null)
|
||||
// view.setOnClickListener(listener);
|
||||
// return view;
|
||||
// }
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue