diff --git a/res/layout/chat.xml b/res/layout/chat.xml index f08594b00..94a2e5cc1 100644 --- a/res/layout/chat.xml +++ b/res/layout/chat.xml @@ -173,7 +173,6 @@ android:layout_height="wrap_content" android:layout_above="@id/footer"/> - - - + { +//public class GroupInfoAdapter extends BaseAdapter { + + public static class ViewHolder extends RecyclerView.ViewHolder{ + public TextView name; + public ImageView avatar; + public ImageView delete; + public LinearLayout isAdmin; + public LinearLayout isNotAdmin; + + + public ViewHolder(View view) { + super(view); + name = view.findViewById(R.id.name); + avatar = view.findViewById(R.id.contact_picture); + delete = view.findViewById(R.id.delete); + isAdmin = view.findViewById(R.id.isAdminLayout); + isNotAdmin = view.findViewById(R.id.isNotAdminLayout); + + } + + } + + + + private LayoutInflater mInflater; private List mItems; private View.OnClickListener mDeleteListener; private boolean mHideAdminFeatures; private ChatRoom mChatRoom; + public ImageView avatar; + + public GroupInfoAdapter(LayoutInflater inflater, List items, boolean hideAdminFeatures, boolean isCreation) { mInflater = inflater; mItems = items; mHideAdminFeatures = hideAdminFeatures || isCreation; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_infos_cell, parent, false); + return new ViewHolder(v); + + } + + @Override + public void onBindViewHolder(@NonNull final ViewHolder holder, int position) { + final ContactAddress ca = (ContactAddress)getItem(position); + LinphoneContact c = ca.getContact(); + this.avatar=holder.avatar; + holder.name.setText((c.getFullName() != null) ? c.getFullName() : + (ca.getDisplayName() != null) ? ca.getDisplayName() : ca.getUsername()); + if (c.hasPhoto()) { + LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), avatar, c.getThumbnailUri()); + } + + holder.delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (mDeleteListener != null) { + mDeleteListener.onClick(view); + } + } + }); + holder.delete.setTag(ca); + + holder.isAdmin.setVisibility(ca.isAdmin() ? View.VISIBLE : View.GONE); + holder.isNotAdmin.setVisibility(ca.isAdmin() ? View.GONE : View.VISIBLE); + + holder.isAdmin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + holder.isNotAdmin.setVisibility(View.VISIBLE); + holder.isAdmin.setVisibility(View.GONE); + ca.setAdmin(false); + } + }); + + holder.isNotAdmin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + holder.isNotAdmin.setVisibility(View.GONE); + holder.isAdmin.setVisibility(View.VISIBLE); + ca.setAdmin(true); + } + }); + + holder.delete.setVisibility(View.VISIBLE); + if (mHideAdminFeatures) { + holder.delete.setVisibility(View.INVISIBLE); + holder.isAdmin.setOnClickListener(null); // Do not allow not admin to remove it's rights but display admins + holder.isNotAdmin.setVisibility(View.GONE); // Hide not admin button for not admin participants + } else if (mChatRoom != null) { + boolean found = false; + for (Participant p : mChatRoom.getParticipants()) { + if (p.getAddress().weakEqual(ca.getAddress())) { + found = true; + break; + } + } + if (!found) { + holder.isNotAdmin.setVisibility(View.GONE); // Hide not admin button for participant not yet added so even if user click it it won't have any effect + } + } + } + + @Override + public int getItemCount() { + return mItems.size(); } public void setChatRoom(ChatRoom room) { mChatRoom = room; } - @Override + + public int getCount() { return mItems.size(); } - @Override public Object getItem(int i) { return mItems.get(i); } + + @Override public long getItemId(int i) { return i; } - @Override - public View getView(int i, View view, ViewGroup viewGroup) { - if (view == null) { - view = mInflater.inflate(R.layout.chat_infos_cell, null); - } - - final ContactAddress ca = (ContactAddress)getItem(i); - LinphoneContact c = ca.getContact(); - - TextView name = view.findViewById(R.id.name); - ImageView avatar = view.findViewById(R.id.contact_picture); - ImageView delete = view.findViewById(R.id.delete); - final LinearLayout isAdmin = view.findViewById(R.id.isAdminLayout); - final LinearLayout isNotAdmin = view.findViewById(R.id.isNotAdminLayout); - - name.setText((c.getFullName() != null) ? c.getFullName() : - (ca.getDisplayName() != null) ? ca.getDisplayName() : ca.getUsername()); - if (c.hasPhoto()) { - LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), avatar, c.getThumbnailUri()); - } - - delete.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (mDeleteListener != null) { - mDeleteListener.onClick(view); - } - } - }); - delete.setTag(ca); - - isAdmin.setVisibility(ca.isAdmin() ? View.VISIBLE : View.GONE); - isNotAdmin.setVisibility(ca.isAdmin() ? View.GONE : View.VISIBLE); - - isAdmin.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - isNotAdmin.setVisibility(View.VISIBLE); - isAdmin.setVisibility(View.GONE); - ca.setAdmin(false); - } - }); - - isNotAdmin.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - isNotAdmin.setVisibility(View.GONE); - isAdmin.setVisibility(View.VISIBLE); - ca.setAdmin(true); - } - }); - - delete.setVisibility(View.VISIBLE); - if (mHideAdminFeatures) { - delete.setVisibility(View.INVISIBLE); - isAdmin.setOnClickListener(null); // Do not allow not admin to remove it's rights but display admins - isNotAdmin.setVisibility(View.GONE); // Hide not admin button for not admin participants - } else if (mChatRoom != null) { - boolean found = false; - for (Participant p : mChatRoom.getParticipants()) { - if (p.getAddress().weakEqual(ca.getAddress())) { - found = true; - break; - } - } - if (!found) { - isNotAdmin.setVisibility(View.GONE); // Hide not admin button for participant not yet added so even if user click it it won't have any effect - } - } - - return view; - } - public void setOnDeleteClickListener(View.OnClickListener onClickListener) { mDeleteListener = onClickListener; } @@ -154,6 +189,6 @@ public class GroupInfoAdapter extends BaseAdapter { public void setAdminFeaturesVisible(boolean visible) { mHideAdminFeatures = !visible; - notifyDataSetInvalidated(); + notifyDataSetChanged(); } } diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/src/android/org/linphone/chat/GroupInfoFragment.java index d7906c08c..965617eb1 100644 --- a/src/android/org/linphone/chat/GroupInfoFragment.java +++ b/src/android/org/linphone/chat/GroupInfoFragment.java @@ -21,7 +21,10 @@ package org.linphone.chat; import android.app.Dialog; import android.app.Fragment; +import android.content.Context; 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; @@ -61,7 +64,9 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { private Address mGroupChatRoomAddress; private EditText mSubjectField; private LayoutInflater mInflater; - private ListView mParticipantsList; + + private RecyclerView mParticipantsList; + private LinearLayout mLeaveGroupButton; private RelativeLayout mWaitLayout; private GroupInfoAdapter mAdapter; @@ -73,6 +78,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { private Dialog mAdminStateChangedDialog; private ChatRoomListenerStub mChatRoomCreationListener; private Bundle mShareInfos; + private Context mContext; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -82,6 +88,8 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { if (getArguments() == null || getArguments().isEmpty()) { return null; } + this.mContext = getActivity().getApplicationContext(); + mParticipants = (ArrayList) getArguments().getSerializable("ContactAddress"); mGroupChatRoomAddress = null; @@ -118,6 +126,10 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { }); mParticipantsList.setAdapter(mAdapter); mAdapter.setChatRoom(mChatRoom); + mParticipantsList.setLayoutManager(new LinearLayoutManager(mContext)); + + + String fileSharedUri = getArguments().getString("fileSharedUri"); String messageDraft = getArguments().getString("messageDraft");