diff --git a/app/src/main/java/org/linphone/LinphoneActivity.java b/app/src/main/java/org/linphone/LinphoneActivity.java index 0a39933dc..2f6051616 100644 --- a/app/src/main/java/org/linphone/LinphoneActivity.java +++ b/app/src/main/java/org/linphone/LinphoneActivity.java @@ -66,6 +66,8 @@ import org.linphone.LinphoneManager.AddressType; import org.linphone.chat.ChatMessagesFragment; import org.linphone.chat.ChatRoomCreationFragment; import org.linphone.chat.ChatRoomsFragment; +import org.linphone.chat.ImdnFragment; +import org.linphone.chat.ImdnOldFragment; import org.linphone.settings.LinphonePreferences; import org.linphone.assistant.AssistantActivity; import org.linphone.assistant.RemoteProvisioningLoginActivity; @@ -74,7 +76,6 @@ import org.linphone.call.CallIncomingActivity; import org.linphone.call.CallOutgoingActivity; import org.linphone.chat.DevicesFragment; import org.linphone.chat.GroupInfoFragment; -import org.linphone.chat.ImdnFragment; import org.linphone.compatibility.Compatibility; import org.linphone.contacts.ContactAddress; import org.linphone.contacts.ContactDetailsFragment; @@ -423,7 +424,11 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick fragment = new ChatMessagesFragment(); break; case MESSAGE_IMDN: - fragment = new ImdnFragment(); + if (getResources().getBoolean(R.bool.use_new_chat_bubbles_layout)) { + fragment = new ImdnFragment(); + } else { + fragment = new ImdnOldFragment(); + } break; case CONTACT_DEVICES: fragment = new DevicesFragment(); diff --git a/app/src/main/java/org/linphone/chat/ChatMessageOldViewHolder.java b/app/src/main/java/org/linphone/chat/ChatMessageOldViewHolder.java index af40cfc68..6e346a6a5 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessageOldViewHolder.java +++ b/app/src/main/java/org/linphone/chat/ChatMessageOldViewHolder.java @@ -1,3 +1,5 @@ +package org.linphone.chat; + /* ChatMessageViewHolder.java Copyright (C) 2017 Belledonne Communications, Grenoble, France @@ -17,10 +19,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.chat; - import android.content.Context; -import android.support.v7.widget.RecyclerView; + +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import android.widget.Button; import android.widget.CheckBox; @@ -63,9 +64,9 @@ public class ChatMessageOldViewHolder extends RecyclerView.ViewHolder implements public Button openFileButton; public CheckBox delete; - private ClickListener mListener; + private ChatMessageViewHolderClickListener mListener; - public ChatMessageOldViewHolder(Context context, View view, ClickListener listener) { + public ChatMessageOldViewHolder(Context context, View view, ChatMessageViewHolderClickListener listener) { this(view); mContext = context; mListener = listener; @@ -109,8 +110,4 @@ public class ChatMessageOldViewHolder extends RecyclerView.ViewHolder implements mListener.onItemClicked(getAdapterPosition()); } } - - public interface ClickListener { - void onItemClicked(int position); - } } \ No newline at end of file diff --git a/app/src/main/java/org/linphone/chat/ChatMessageViewHolder.java b/app/src/main/java/org/linphone/chat/ChatMessageViewHolder.java index 832c5f919..39ae861d2 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessageViewHolder.java +++ b/app/src/main/java/org/linphone/chat/ChatMessageViewHolder.java @@ -91,9 +91,9 @@ public class ChatMessageViewHolder extends RecyclerView.ViewHolder implements Vi public CheckBox deleteEvent; public CheckBox deleteMessage; - private ClickListener mListener; + private ChatMessageViewHolderClickListener mListener; - public ChatMessageViewHolder(Context context, View view, ClickListener listener) { + public ChatMessageViewHolder(Context context, View view, ChatMessageViewHolderClickListener listener) { this(view); mContext = context; mListener = listener; @@ -131,10 +131,6 @@ public class ChatMessageViewHolder extends RecyclerView.ViewHolder implements Vi } } - public interface ClickListener { - void onItemClicked(int position); - } - public void bindMessage(final ChatMessage message, LinphoneContact contact) { eventLayout.setVisibility(View.GONE); securityEventLayout.setVisibility(View.GONE); diff --git a/app/src/main/java/org/linphone/chat/ChatMessageViewHolderClickListener.java b/app/src/main/java/org/linphone/chat/ChatMessageViewHolderClickListener.java new file mode 100644 index 000000000..02403370b --- /dev/null +++ b/app/src/main/java/org/linphone/chat/ChatMessageViewHolderClickListener.java @@ -0,0 +1,24 @@ +package org.linphone.chat; + +/* +ChatMessageViewHolderClickListener.java +Copyright (C) 2018 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +public interface ChatMessageViewHolderClickListener { + void onItemClicked(int position); +} diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java b/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java index 705390a3e..7b54cf067 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java +++ b/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java @@ -1,3 +1,5 @@ +package org.linphone.chat; + /* ChatMessagesAdapter.java Copyright (C) 2017 Belledonne Communications, Grenoble, France @@ -17,8 +19,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.chat; - import android.content.Context; import androidx.annotation.NonNull; import android.view.LayoutInflater; @@ -50,9 +50,9 @@ public class ChatMessagesAdapter extends SelectableAdapter participants, ChatMessageViewHolder.ClickListener clickListener) { + public ChatMessagesAdapter(ChatMessagesFragment fragment, SelectableHelper helper, int itemResource, EventLog[] history, ArrayList participants, ChatMessageViewHolderClickListener clickListener) { super(helper); mFragment = fragment; mContext = mFragment.getActivity(); diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java b/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java index 9bdbc8226..a4d768296 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java +++ b/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java @@ -1,3 +1,5 @@ +package org.linphone.chat; + /* ChatMessagesFragment.java Copyright (C) 2017 Belledonne Communications, Grenoble, France @@ -17,8 +19,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.chat; - import android.app.Activity; import android.app.Dialog; import android.app.Fragment; @@ -48,6 +48,7 @@ import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; +import android.widget.Adapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; @@ -56,7 +57,6 @@ import android.widget.LinearLayout; import android.widget.TextView; import org.linphone.LinphoneManager; -import org.linphone.core.ChatMessageListenerStub; import org.linphone.settings.LinphonePreferences; import org.linphone.LinphoneService; import org.linphone.utils.FileUtils; @@ -93,7 +93,7 @@ import java.util.List; import static android.content.Context.INPUT_METHOD_SERVICE; import static org.linphone.fragments.FragmentsAvailable.CHAT; -public class ChatMessagesFragment extends Fragment implements ChatRoomListener, ContactsUpdatedListener, ChatMessageViewHolder.ClickListener, SelectableHelper.DeleteListener { +public class ChatMessagesFragment extends Fragment implements ChatRoomListener, ContactsUpdatedListener, ChatMessageViewHolderClickListener, SelectableHelper.DeleteListener { private static final int ADD_PHOTO = 1337; private static final int MESSAGES_PER_PAGE = 20; @@ -110,6 +110,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, private ViewTreeObserver.OnGlobalLayoutListener mKeyboardListener; private Uri mImageToUploadUri; private ChatMessagesAdapter mEventsAdapter; + private ChatMessagesOldAdapter mOldEventsAdapter; private String mRemoteSipUri; private Address mRemoteSipAddress, mRemoteParticipantAddress; private ChatRoom mChatRoom; @@ -419,8 +420,13 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); - ChatMessageViewHolder holder = (ChatMessageViewHolder) v.getTag(); - mContextMenuMessagePosition = holder.getAdapterPosition(); + if (mContext.getResources().getBoolean(R.bool.use_new_chat_bubbles_layout)) { + ChatMessageViewHolder holder = (ChatMessageViewHolder) v.getTag(); + mContextMenuMessagePosition = holder.getAdapterPosition(); + } else { + ChatMessageOldViewHolder holder = (ChatMessageOldViewHolder) v.getTag(); + mContextMenuMessagePosition = holder.getAdapterPosition(); + } EventLog event = (EventLog) mEventsAdapter.getItem(mContextMenuMessagePosition); if (event.getType() != EventLog.Type.ConferenceChatMessage) { @@ -679,11 +685,18 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, if (mChatRoom == null) return; if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) { mEventsAdapter = new ChatMessagesAdapter(this, mSelectionHelper, R.layout.chat_bubble, mChatRoom.getHistoryMessageEvents(MESSAGES_PER_PAGE), mParticipants, this); + mOldEventsAdapter = new ChatMessagesOldAdapter(this, mSelectionHelper, R.layout.chat_bubble_old, mChatRoom.getHistoryMessageEvents(MESSAGES_PER_PAGE), mParticipants, this); } else { mEventsAdapter = new ChatMessagesAdapter(this, mSelectionHelper, R.layout.chat_bubble, mChatRoom.getHistoryEvents(MESSAGES_PER_PAGE), mParticipants, this); + mOldEventsAdapter = new ChatMessagesOldAdapter(this, mSelectionHelper, R.layout.chat_bubble_old, mChatRoom.getHistoryEvents(MESSAGES_PER_PAGE), mParticipants, this); + } + if (mContext.getResources().getBoolean(R.bool.use_new_chat_bubbles_layout)) { + mSelectionHelper.setAdapter(mEventsAdapter); + mChatEventsList.setAdapter(mEventsAdapter); + } else { + mSelectionHelper.setAdapter(mOldEventsAdapter); + mChatEventsList.setAdapter(mOldEventsAdapter); } - mSelectionHelper.setAdapter(mEventsAdapter); - mChatEventsList.setAdapter(mEventsAdapter); scrollToBottom(); } diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesOldAdapter.java b/app/src/main/java/org/linphone/chat/ChatMessagesOldAdapter.java index 592478008..dd96448e9 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessagesOldAdapter.java +++ b/app/src/main/java/org/linphone/chat/ChatMessagesOldAdapter.java @@ -1,3 +1,5 @@ +package org.linphone.chat; + /* ChatMessagesAdapter.java Copyright (C) 2017 Belledonne Communications, Grenoble, France @@ -17,8 +19,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.chat; - import android.Manifest; import android.content.Context; import android.content.Intent; @@ -33,8 +33,8 @@ import android.media.ExifInterface; import android.net.Uri; import android.os.AsyncTask; import android.provider.MediaStore; -import android.support.annotation.NonNull; -import android.support.v4.content.FileProvider; +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; import android.text.Spanned; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; @@ -74,7 +74,7 @@ import java.util.List; import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION; -public class ChatMessagesOldAdapter extends SelectableAdapter { +public class ChatMessagesOldAdapter extends SelectableAdapter { private static int MARGIN_BETWEEN_MESSAGES = 10; private static int SIDE_MARGIN = 100; @@ -86,9 +86,9 @@ public class ChatMessagesOldAdapter extends SelectableAdapter participants, ChatMessageViewHolder.ClickListener clickListener) { + public ChatMessagesOldAdapter(ChatMessagesFragment fragment, SelectableHelper helper, int itemResource, EventLog[] history, ArrayList participants, ChatMessageViewHolderClickListener clickListener) { super(helper); mFragment = fragment; mContext = mFragment.getActivity(); @@ -100,7 +100,7 @@ public class ChatMessagesOldAdapter extends SelectableAdapter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +