diff --git a/src/android/org/linphone/chat/ChatEventsAdapter.java b/src/android/org/linphone/chat/ChatEventsAdapter.java index 2e98eaf15..614ce0aba 100644 --- a/src/android/org/linphone/chat/ChatEventsAdapter.java +++ b/src/android/org/linphone/chat/ChatEventsAdapter.java @@ -80,7 +80,21 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene private List mParticipants; private LayoutInflater mLayoutInflater; private Bitmap mDefaultBitmap; + private boolean mIsEditionEnabled; + private List mSelectedItems; + private CompoundButton.OnCheckedChangeListener mDeleteCheckboxListener = new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + Integer position = (Integer)compoundButton.getTag(); + if (checked) { + mSelectedItems.add(position); + } else { + mSelectedItems.remove(position); + } + mFragment.updateSelectionButtons(mSelectedItems.size() == 0, mSelectedItems.size() == mHistory.size()); + } + }; public ChatEventsAdapter(Context context, GroupChatFragment fragment, LayoutInflater inflater, EventLog[] history, ArrayList participants) { mContext = context; @@ -89,6 +103,7 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene mHistory = new ArrayList<>(Arrays.asList(history)); mParticipants = participants; mIsEditionEnabled = false; + mSelectedItems = new ArrayList<>(); } public void addToHistory(EventLog log) { @@ -100,11 +115,44 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene mParticipants = participants; } + /** + * List edition + */ + public void enableEdition(boolean enable) { mIsEditionEnabled = enable; notifyDataSetInvalidated(); + mSelectedItems.clear(); } + public EventLog[] getSelectedItems() { + EventLog logs[] = new EventLog[mSelectedItems.size()]; + int index = 0; + for (Integer i : mSelectedItems) { + logs[index] = (EventLog)getItem(i); + index++; + } + return logs; + } + + public void selectAll() { + for (Integer i = 0; i < mHistory.size(); i++) { + mSelectedItems.add(i); + } + mFragment.updateSelectionButtons(false, true); + notifyDataSetInvalidated(); + } + + public void deselectAll() { + mSelectedItems.clear(); + mFragment.updateSelectionButtons(true, false); + notifyDataSetInvalidated(); + } + + /** + * Adapter's methods + */ + @Override public int getCount() { return mHistory.size(); @@ -146,12 +194,10 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene holder.imdmLayout.setVisibility(View.INVISIBLE); if (mIsEditionEnabled) { - holder.delete.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - //TODO - } - }); + holder.delete.setOnCheckedChangeListener(null); + holder.delete.setChecked(mSelectedItems.contains(i)); + holder.delete.setTag(i); + holder.delete.setOnCheckedChangeListener(mDeleteCheckboxListener); } EventLog event = (EventLog)getItem(i); diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index 772ccee48..41d606b88 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -177,9 +177,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con mSelectAllButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - mSelectAllButton.setVisibility(View.GONE); - mDeselectAllButton.setVisibility(View.VISIBLE); - mDeleteSelectionButton.setEnabled(true); + mEventsAdapter.selectAll(); } }); @@ -187,9 +185,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con mDeselectAllButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - mSelectAllButton.setVisibility(View.VISIBLE); - mDeselectAllButton.setVisibility(View.GONE); - mDeleteSelectionButton.setEnabled(false); + mEventsAdapter.deselectAll(); } }); @@ -345,9 +341,26 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con */ private void deleteSelectedEvents() { + EventLog logs[] = mEventsAdapter.getSelectedItems(); //TODO } + public void updateSelectionButtons(boolean isSelectionEmpty, boolean isSelectionFull) { + if (isSelectionEmpty) { + mDeleteSelectionButton.setEnabled(false); + } else { + mDeleteSelectionButton.setEnabled(true); + } + + if (isSelectionFull) { + mSelectAllButton.setVisibility(View.GONE); + mDeselectAllButton.setVisibility(View.VISIBLE); + } else { + mSelectAllButton.setVisibility(View.VISIBLE); + mDeselectAllButton.setVisibility(View.GONE); + } + } + private void quitEditionMode() { mEventsAdapter.enableEdition(false); mTopBar.setVisibility(View.VISIBLE);