diff --git a/build.gradle b/build.gradle index f35eb40de..a02701e81 100644 --- a/build.gradle +++ b/build.gradle @@ -47,7 +47,8 @@ dependencies { if (firebaseEnable()) { implementation 'com.google.firebase:firebase-messaging:12.0.1' } - implementation 'com.android.support:support-v4:26.0.1' + implementation 'com.android.support:support-v4:27.1.1' + implementation 'com.android.support:recyclerview-v7:27.1.1' } if (firebaseEnable()) { diff --git a/doc/CustomsParameters.txt b/doc/CustomsParameters.txt deleted file mode 100644 index dc39dbba5..000000000 --- a/doc/CustomsParameters.txt +++ /dev/null @@ -1,72 +0,0 @@ - ********************************** - * LINPHONE customs parameters * - ********************************** - -In res/values/non_localizable_custom.xml (filled with linphone default options): - -1. Global - - * Set the default domain used by the application: - sip.linphone.orghttps://sip3.linphone.org:444/inapp.php - - * In CreateAccount, allow username instead of phone number for creating a new account - true - - * Hide buttons in assistant menu - false - false - false - - -3. Inapp - - * Enabled inapp purchase - true - - * Days before end of trial period that launch daily notification to remind user to buy an account - 5 - - * Time between two inapp notifications in seconds - 86400 - - * Hide username field in purchase view (automatically get from default account) - true - - -In res/raw/linphonerc_factory sections: - - [in-app-purchase] - * Server xmlrpc url for inapp - server_url=https://sip3.linphone.org:444/inapp.php - - * Item ids from the google play store - purchasable_items_ids=test_account_subscription - - [app] - - * Numbers of digits to enter for validation/recover account - activation_code_length=4 - - - [assistant] - - * Set the default domain used for account creation : - domain=sip.linphone.org - - * Set the default password length (min-max) : - password_max_length=-1 - password_min_length=1 - - * Set the default username length (min-max) : - username_length=-1 - username_max_length=64 - username_min_length=1 - username_regex=^[a-z0-9_.\-]*$ - - * Server xmlrpc url for accounts - xmlrpc_url=https://sip3.linphone.org:444/inapp.php diff --git a/gradle.properties b/gradle.properties deleted file mode 100644 index 4aca4f094..000000000 --- a/gradle.properties +++ /dev/null @@ -1,8 +0,0 @@ -// Signing APK Release -RELEASE_STORE_FILE="" -RELEASE_STORE_PASSWORD= -RELEASE_KEY_ALIAS= -RELEASE_KEY_PASSWORD= - -org.gradle.jvmargs=-XX\:MaxHeapSize\=2048M -Xmx2048M -#org.gradle.jvmargs=-Xmx1536M diff --git a/liblinphone_tester/Makefile b/liblinphone_tester/Makefile deleted file mode 100644 index 7f7ce7d6a..000000000 --- a/liblinphone_tester/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -all: copy-files - ../gradlew clean - ../gradlew uninstallDebug - -run-all-tests: copy-files - ../gradlew :installDebugAndroidTest && \ - ../gradlew :installDebug && \ - ../gradlew :grantDebugPermissions -i && \ - ../gradlew :connectedAndroidTest -i \ - -copy-libs: - mkdir -p assets && \ - mkdir -p assets/config_files && \ - rm -rf libs/arm64-v8a - if test -d "../liblinphone-sdk/android-arm64"; then \ - mkdir -p libs/arm64-v8a && \ - cp -f ../liblinphone-sdk/android-arm64/lib/*.so libs/arm64-v8a && \ - cp -f ../liblinphone-sdk/android-arm64/lib/mediastreamer/plugins/*.so libs/arm64-v8a && \ - cp -f ../liblinphone-sdk/android-arm64/share/linphone/rootca.pem assets/config_files; \ - fi - if test -f "../liblinphone-sdk/android-arm64/bin/gdbserver"; then \ - cp -f ../liblinphone-sdk/android-arm64/bin/gdbserver libs/arm64-v8a && \ - cp -f ../liblinphone-sdk/android-arm64/bin/gdb.setup libs/arm64-v8a; \ - fi - rm -rf libs/armeabi-v7a - if test -d "../liblinphone-sdk/android-armv7"; then \ - mkdir -p libs/armeabi-v7a && \ - cp -f ../liblinphone-sdk/android-armv7/lib/*.so libs/armeabi-v7a && \ - cp -f ../liblinphone-sdk/android-armv7/lib/mediastreamer/plugins/*.so libs/armeabi-v7a && \ - cp -f ../liblinphone-sdk/android-armv7/share/linphone/rootca.pem assets/config_files; \ - fi - if test -f "../liblinphone-sdk/android-armv7/bin/gdbserver"; then \ - cp -f ../liblinphone-sdk/android-armv7/bin/gdbserver libs/armeabi-v7a && \ - cp -f ../liblinphone-sdk/android-armv7/bin/gdb.setup libs/armeabi-v7a; \ - fi - rm -rf libs/x86 - if test -d "../liblinphone-sdk/android-x86"; then \ - mkdir -p libs/x86 && \ - cp -f ../liblinphone-sdk/android-x86/lib/*.so libs/x86 && \ - cp -f ../liblinphone-sdk/android-x86/lib/mediastreamer/plugins/*.so libs/x86 && \ - cp -f ../liblinphone-sdk/android-x86/share/linphone/rootca.pem assets/config_files; \ - fi - if test -f "../liblinphone-sdk/android-x86/bin/gdbserver"; then \ - cp -f ../liblinphone-sdk/android-x86/bin/gdbserver libs/x86 && \ - cp -f ../liblinphone-sdk/android-x86/bin/gdb.setup libs/x86; \ - fi - -copy-files: ../submodules/linphone/tester/tester_hosts - $(MAKE) copy-libs - rm -rf assets/config_files - mkdir -p assets/config_files - for file in $^; do \ - cp -rf $$file assets/config_files/. ; \ - done - cp -rf ../submodules/linphone/tester/certificates assets/config_files - cp -rf ../submodules/linphone/tester/images assets/config_files - cp -rf ../submodules/linphone/tester/rcfiles assets/config_files - cp -rf ../submodules/linphone/tester/sounds assets/config_files - cp -rf ../submodules/linphone/tester/vcards assets/config_files diff --git a/res/layout/chatlist.xml b/res/layout/chatlist.xml index 70af2f015..82ec2e2dc 100644 --- a/res/layout/chatlist.xml +++ b/res/layout/chatlist.xml @@ -55,7 +55,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/menu/edit_list_menu.xml b/res/menu/edit_list_menu.xml new file mode 100644 index 000000000..e6e24d02f --- /dev/null +++ b/res/menu/edit_list_menu.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/raw/lpconfig.xsd b/res/raw/lpconfig.xsd deleted file mode 100644 index 49bb56180..000000000 --- a/res/raw/lpconfig.xsd +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sample/libs b/sample/libs deleted file mode 120000 index d4bda9b46..000000000 --- a/sample/libs +++ /dev/null @@ -1 +0,0 @@ -../libs \ No newline at end of file diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index f7fb2ec16..a1e668fe8 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -20,7 +20,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package org.linphone.chat; 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.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -47,12 +50,16 @@ import org.linphone.core.Core; import org.linphone.core.CoreListenerStub; import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import static org.linphone.fragments.FragmentsAvailable.CHAT_LIST; public class ChatListFragment extends Fragment implements ContactsUpdatedListener, ListSelectionHelper.DeleteListener { - private LayoutInflater mInflater; - private ListView mChatRoomsList; +//public class ChatListFragment extends Fragment { + // private LayoutInflater mInflater; + private RecyclerView mChatRoomsList; private TextView mNoChatHistory; private ImageView mNewDiscussionButton, mBackToCallButton; private ChatRoomsAdapter mChatRoomsAdapter; @@ -61,23 +68,31 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene private RelativeLayout mWaitLayout; private int mChatRoomDeletionPendingCount; private ChatRoomListenerStub mChatRoomListener; + private Context mContext; + private List mRooms; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - mInflater = inflater; +// mInflater = inflater; + super.onCreate(savedInstanceState); + mRooms = new ArrayList<>(Arrays.asList(LinphoneManager.getLc().getChatRooms())); + this.mContext = getActivity().getApplicationContext(); View view = inflater.inflate(R.layout.chatlist, container, false); - mSelectionHelper = new ListSelectionHelper(view, this); - mChatRoomsAdapter = new ChatRoomsAdapter(getActivity(), mSelectionHelper, mInflater); - mSelectionHelper.setAdapter(mChatRoomsAdapter); - mSelectionHelper.setDialogMessage(R.string.chat_room_delete_dialog); + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(mContext); + + mChatRoomsAdapter = new ChatRoomsAdapter(mContext, R.layout.chatlist_cell, mRooms); +// mSelectionHelper = new ListSelectionHelper(view, this); +// mChatRoomsAdapter = new ChatRoomsAdapter(this, mSelectionHelper, mRooms); +// mSelectionHelper.setAdapter(mChatRoomsAdapter); +// mSelectionHelper.setDialogMessage(R.string.chat_room_delete_dialog); mWaitLayout = view.findViewById(R.id.waitScreen); mWaitLayout.setVisibility(View.GONE); mChatRoomsList = view.findViewById(R.id.chatList); mChatRoomsList.setAdapter(mChatRoomsAdapter); - + mChatRoomsList.setLayoutManager(layoutManager); mNoChatHistory = view.findViewById(R.id.noChatHistory); mNoChatHistory.setVisibility(View.GONE); @@ -135,12 +150,12 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene private void refreshChatRoomsList() { mChatRoomsAdapter.refresh(); - mNoChatHistory.setVisibility(mChatRoomsAdapter.getCount() == 0 ? View.VISIBLE : View.GONE); + mNoChatHistory.setVisibility(mChatRoomsAdapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); } public void displayFirstChat() { ChatRoomsAdapter adapter = (ChatRoomsAdapter)mChatRoomsList.getAdapter(); - if (adapter != null && adapter.getCount() > 0) { + if (adapter != null && adapter.getItemCount() > 0) { ChatRoom room = (ChatRoom) adapter.getItem(0); LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); } else { @@ -210,16 +225,15 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene } } - @Override + @Override public void onContactsUpdated() { if (!LinphoneActivity.isInstanciated() || LinphoneActivity.instance().getCurrentFragment() != CHAT_LIST) return; ChatRoomsAdapter adapter = (ChatRoomsAdapter) mChatRoomsList.getAdapter(); if (adapter != null) { - adapter.notifyDataSetInvalidated(); + //adapter.notifyDataSetInvalidated(); } } } - diff --git a/src/android/org/linphone/chat/ChatRoomsAdapter.java b/src/android/org/linphone/chat/ChatRoomsAdapter.java index fe510fe95..3775c1ee5 100644 --- a/src/android/org/linphone/chat/ChatRoomsAdapter.java +++ b/src/android/org/linphone/chat/ChatRoomsAdapter.java @@ -22,14 +22,18 @@ package org.linphone.chat; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.Typeface; +import android.net.Uri; +import android.provider.MediaStore; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; +//import org.linphone.Chat; import org.linphone.LinphoneManager; import org.linphone.LinphoneUtils; import org.linphone.R; @@ -39,21 +43,19 @@ 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.EventLog; -import org.linphone.ui.ListSelectionAdapter; -import org.linphone.ui.ListSelectionHelper; +import java.io.FileNotFoundException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; -public class ChatRoomsAdapter extends ListSelectionAdapter { +public class ChatRoomsAdapter extends RecyclerView.Adapter { - private class ChatRoomViewHolder { + public class ChatRoomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public TextView lastMessageSenderView; public TextView lastMessageView; public TextView date; @@ -61,16 +63,81 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { public TextView unreadMessages; public CheckBox delete; public ImageView contactPicture; + public Context mContext; + public ChatRoom mRoom; - public ChatRoomViewHolder(View view) { - lastMessageSenderView = view.findViewById(R.id.lastMessageSender); - lastMessageView = view.findViewById(R.id.lastMessage); - date = view.findViewById(R.id.date); - displayName = view.findViewById(R.id.sipUri); - unreadMessages = view.findViewById(R.id.unreadMessages); - delete = view.findViewById(R.id.delete_chatroom); - contactPicture = view.findViewById(R.id.contact_picture); + public ChatRoomViewHolder(Context context,View itemView) { + super(itemView); + this.mContext= context; + this.lastMessageSenderView = itemView.findViewById(R.id.lastMessageSender); + this.lastMessageView = itemView.findViewById(R.id.lastMessage); + this.date = itemView.findViewById(R.id.date); + this.displayName = itemView.findViewById(R.id.sipUri); + this.unreadMessages = itemView.findViewById(R.id.unreadMessages); + this.delete = itemView.findViewById(R.id.delete_chatroom); + this.contactPicture = itemView.findViewById(R.id.contact_picture); + itemView.setOnClickListener(this); } + public void bindChatRoom(ChatRoom room) { + + // 4. Bind the data to the ViewHolder + this.mRoom = room; + this.lastMessageSenderView.setText(getSender(mRoom)); + this.lastMessageView.setText(mRoom.getLastMessageInHistory() != null ? mRoom.getLastMessageInHistory().getTextContent(): ""); + this.date.setText(mRoom.getLastMessageInHistory()!=null ? LinphoneUtils.timestampToHumanDate(this.mContext, mRoom.getLastUpdateTime(), R.string.messages_list_date_format) : ""); + this.displayName.setText(getContact(mRoom)); + this.unreadMessages.setText(String.valueOf(LinphoneManager.getInstance().getUnreadCountForChatRoom(mRoom))); + this.delete.setChecked(!this.delete.isChecked()); + getAvatar(mRoom); + + } + + @Override + public void onClick(View v) { + + // 5. Handle the onClick event for the ViewHolder + if (this.mRoom != null) { + LinphoneActivity.instance().goToChat(mRoom.getPeerAddress().asString()); + } + } + + public String getSender(ChatRoom mRoom){ + if (mRoom.getLastMessageInHistory() != null) { + LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(mRoom.getLastMessageInHistory().getFromAddress()); + if (contact != null) { + return (contact.getFullName() + mContext.getString(R.string.separator)); + } else { + return (LinphoneUtils.getAddressDisplayName(mRoom.getLastMessageInHistory().getFromAddress()) + ":"); + } + }else{ + return "" ; + } + } + + public String getContact(ChatRoom mRoom) { + LinphoneContact contact; + contact = ContactsManager.getInstance().findContactFromAddress(mRoom.getPeerAddress()); + if (contact != null) { + + return (contact.getFullName()); + + } else { + return (LinphoneUtils.getAddressDisplayName(mRoom.getPeerAddress())); + } + } + public void getAvatar(ChatRoom mRoom) { + mDefaultBitmap = ContactsManager.getInstance().getDefaultAvatarBitmap(); + LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(mRoom.getPeerAddress()); + if (contact != null) { + LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), this.contactPicture, ContactsManager.getInstance().findContactFromAddress(mRoom.getPeerAddress()).getThumbnailUri()); + } else { + this.contactPicture.setImageBitmap(mDefaultBitmap); + } + } + + + + } private Context mContext; @@ -78,22 +145,45 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { private LayoutInflater mLayoutInflater; private Bitmap mDefaultBitmap, mDefaultGroupBitmap; private ChatRoomListenerStub mListener; + private int itemResource; - public ChatRoomsAdapter(Context context, ListSelectionHelper helper, LayoutInflater inflater) { - super(helper); + public ChatRoomsAdapter(Context context, int itemResource, List mRooms) { + super(); + this.mRooms = mRooms; + this.mContext = context; + this.itemResource = itemResource; mContext = context; - mLayoutInflater = inflater; - mRooms = new ArrayList<>(); + //mLayoutInflater = inflater; mDefaultBitmap = ContactsManager.getInstance().getDefaultAvatarBitmap(); mDefaultGroupBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.chat_group_avatar); - mListener = new ChatRoomListenerStub() { - @Override - public void onSubjectChanged(ChatRoom cr, EventLog eventLog) { - ChatRoomViewHolder holder = (ChatRoomViewHolder) cr.getUserData(); - holder.displayName.setText(cr.getSubject()); - } - }; +// mListener = new ChatRoomListenerStub() { +// @Override +// public void onSubjectChanged(ChatRoom cr, EventLog eventLog) { +// ChatRoomViewHolder holder = (ChatRoomViewHolder) cr.getUserData(); +// holder.displayName.setText(cr.getSubject()); +// } +// }; + + } + + @Override + public ChatRoomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + // 3. Inflate the view and return the new ViewHolder + View view = LayoutInflater.from(parent.getContext()) + .inflate(this.itemResource, parent, false); + return new ChatRoomViewHolder(this.mContext, view); + } + + @Override + public void onBindViewHolder(ChatRoomViewHolder holder, int position) { + + // 5. Use position to access the correct Bakery object + ChatRoom room = this.mRooms.get(position); + + // 6. Bind the bakery object to the holder + holder.bindChatRoom(room); } public void refresh() { @@ -120,12 +210,19 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { * Adapter's methods */ - @Override - public int getCount() { - return mRooms.size(); - } +// @Override +// public int getCount() { +// return mRooms.size(); +// } @Override + public int getItemCount() { + + return this.mRooms.size(); + } + + + //@Override public Object getItem(int position) { return mRooms.get(position); } @@ -135,120 +232,120 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { return position; } - @Override - public View getView(final int position, View convertView, ViewGroup viewGroup) { - View view; - ChatRoomViewHolder holder; - - if (convertView != null) { - view = convertView; - holder = (ChatRoomViewHolder) view.getTag(); - } else { - view = mLayoutInflater.inflate(R.layout.chatlist_cell, viewGroup, false); - holder = new ChatRoomViewHolder(view); - view.setTag(holder); - } - - ChatRoom chatRoom = mRooms.get(position); - Address remoteAddress = chatRoom.getPeerAddress(); - Address contactAddress = remoteAddress; - - if (chatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()) && chatRoom.getParticipants().length > 0) { - contactAddress = chatRoom.getParticipants()[0].getAddress(); - } - - if (chatRoom.hasCapability(ChatRoomCapabilities.Conference.toInt()) && chatRoom.getState() == ChatRoom.State.Created) { // Only set for state Created otherwise it will conflict with removal listener - chatRoom.addListener(mListener); - chatRoom.setUserData(holder); - } - - int unreadMessagesCount = LinphoneManager.getInstance().getUnreadCountForChatRoom(chatRoom); - ChatMessage lastMessage = chatRoom.getLastMessageInHistory(); - holder.lastMessageView.setText(""); - holder.lastMessageSenderView.setText(""); - holder.date.setText(LinphoneUtils.timestampToHumanDate(mContext, chatRoom.getLastUpdateTime(), R.string.messages_list_date_format)); - - if (lastMessage != null) { - if (lastMessage.getFileTransferInformation() != null || lastMessage.getExternalBodyUrl() != null || lastMessage.getAppdata() != null) { - holder.lastMessageView.setBackgroundResource(R.drawable.chat_file_message); - } else if (lastMessage.getTextContent() != null && lastMessage.getTextContent().length() > 0) { - holder.lastMessageView.setBackgroundResource(0); - holder.lastMessageView.setText(lastMessage.getTextContent()); - } - - Address lastMessageSenderAddress = lastMessage.getFromAddress(); - LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(lastMessageSenderAddress); - if (contact != null) { - holder.lastMessageSenderView.setText(contact.getFullName() + mContext.getString(R.string.separator)); - } else { - holder.lastMessageSenderView.setText(LinphoneUtils.getAddressDisplayName(lastMessageSenderAddress) + mContext.getString(R.string.separator)); - } - } - - holder.displayName.setSelected(true); // For animation - holder.contactPicture.setImageBitmap(mDefaultBitmap); - - if (chatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) { - LinphoneContact contact; - if (chatRoom.getParticipants().length > 0) { - contact = ContactsManager.getInstance().findContactFromAddress(chatRoom.getParticipants()[0].getAddress()); - if (contact != null) { - holder.displayName.setText(contact.getFullName()); - LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, contact.getThumbnailUri()); - } else { - holder.displayName.setText(LinphoneUtils.getAddressDisplayName(chatRoom.getParticipants()[0].getAddress())); - } - } else { - contact = ContactsManager.getInstance().findContactFromAddress(contactAddress); - if (contact != null) { - holder.displayName.setText(contact.getFullName()); - LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, contact.getThumbnailUri()); - } else { - holder.displayName.setText(LinphoneUtils.getAddressDisplayName(contactAddress)); - } - } - } else { - holder.displayName.setText(chatRoom.getSubject()); - holder.contactPicture.setImageBitmap(mDefaultGroupBitmap); - } - - if (unreadMessagesCount > 0) { - holder.unreadMessages.setVisibility(View.VISIBLE); - holder.unreadMessages.setText(String.valueOf(unreadMessagesCount)); - if (unreadMessagesCount > 99) { - holder.unreadMessages.setTextSize(12); - } - holder.unreadMessages.setVisibility(View.VISIBLE); - holder.displayName.setTypeface(null, Typeface.BOLD); - } else { - holder.unreadMessages.setVisibility(View.GONE); - holder.displayName.setTypeface(null, Typeface.NORMAL); - } - - if (isEditionEnabled()) { - view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ChatRoomViewHolder holder = (ChatRoomViewHolder)v.getTag(); - holder.delete.setChecked(!holder.delete.isChecked()); - } - }); - holder.unreadMessages.setVisibility(View.GONE); - holder.delete.setOnCheckedChangeListener(null); - holder.delete.setVisibility(View.VISIBLE); - holder.delete.setChecked(getSelectedItemsPosition().contains(position)); - holder.delete.setTag(position); - holder.delete.setOnCheckedChangeListener(getDeleteListener()); - } else { - view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ChatRoom chatRoom = mRooms.get(position); - LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asString()); - } - }); - holder.delete.setVisibility(isEditionEnabled() ? View.VISIBLE : View.GONE); - } - return view; - } +// @Override +// public View getView(final int position, View convertView, ViewGroup viewGroup) { +// View view; +// ChatRoomViewHolder holder; +// +// if (convertView != null) { +// view = convertView; +// holder = (ChatRoomViewHolder) view.getTag(); +// } else { +// view = mLayoutInflater.inflate(R.layout.chatlist_cell, viewGroup, false); +// holder = new ChatRoomViewHolder(view); +// view.setTag(holder); +// } +// +// ChatRoom chatRoom = mRooms.get(position); +// Address remoteAddress = chatRoom.getPeerAddress(); +// Address contactAddress = remoteAddress; +// +// if (chatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()) && chatRoom.getParticipants().length > 0) { +// contactAddress = chatRoom.getParticipants()[0].getAddress(); +// } +// +// if (chatRoom.hasCapability(ChatRoomCapabilities.Conference.toInt()) && chatRoom.getState() == ChatRoom.State.Created) { // Only set for state Created otherwise it will conflict with removal listener +// chatRoom.addListener(mListener); +// chatRoom.setUserData(holder); +// } +// +// int unreadMessagesCount = LinphoneManager.getInstance().getUnreadCountForChatRoom(chatRoom); +// ChatMessage lastMessage = chatRoom.getLastMessageInHistory(); +// holder.lastMessageView.setText(""); +// holder.lastMessageSenderView.setText(""); +// holder.date.setText(LinphoneUtils.timestampToHumanDate(mContext, chatRoom.getLastUpdateTime(), R.string.messages_list_date_format)); +// +// if (lastMessage != null) { +// if (lastMessage.getFileTransferInformation() != null || lastMessage.getExternalBodyUrl() != null || lastMessage.getAppdata() != null) { +// holder.lastMessageView.setBackgroundResource(R.drawable.chat_file_message); +// } else if (lastMessage.getTextContent() != null && lastMessage.getTextContent().length() > 0) { +// holder.lastMessageView.setBackgroundResource(0); +// holder.lastMessageView.setText(lastMessage.getTextContent()); +// } +// +// Address lastMessageSenderAddress = lastMessage.getFromAddress(); +// LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(lastMessageSenderAddress); +// if (contact != null) { +// holder.lastMessageSenderView.setText(contact.getFullName() + mContext.getString(R.string.separator)); +// } else { +// holder.lastMessageSenderView.setText(LinphoneUtils.getAddressDisplayName(lastMessageSenderAddress) + mContext.getString(R.string.separator)); +// } +// } +// +// holder.displayName.setSelected(true); // For animation +// holder.contactPicture.setImageBitmap(mDefaultBitmap); +// +// if (chatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) { +// LinphoneContact contact; +// if (chatRoom.getParticipants().length > 0) { +// contact = ContactsManager.getInstance().findContactFromAddress(chatRoom.getParticipants()[0].getAddress()); +// if (contact != null) { +// holder.displayName.setText(contact.getFullName()); +// LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, contact.getThumbnailUri()); +// } else { +// holder.displayName.setText(LinphoneUtils.getAddressDisplayName(chatRoom.getParticipants()[0].getAddress())); +// } +// } else { +// contact = ContactsManager.getInstance().findContactFromAddress(contactAddress); +// if (contact != null) { +// holder.displayName.setText(contact.getFullName()); +// LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, contact.getThumbnailUri()); +// } else { +// holder.displayName.setText(LinphoneUtils.getAddressDisplayName(contactAddress)); +// } +// } +// } else { +// holder.displayName.setText(chatRoom.getSubject()); +// holder.contactPicture.setImageBitmap(mDefaultGroupBitmap); +// } +// +// if (unreadMessagesCount > 0) { +// holder.unreadMessages.setVisibility(View.VISIBLE); +// holder.unreadMessages.setText(String.valueOf(unreadMessagesCount)); +// if (unreadMessagesCount > 99) { +// holder.unreadMessages.setTextSize(12); +// } +// holder.unreadMessages.setVisibility(View.VISIBLE); +// holder.displayName.setTypeface(null, Typeface.BOLD); +// } else { +// holder.unreadMessages.setVisibility(View.GONE); +// holder.displayName.setTypeface(null, Typeface.NORMAL); +// } +// +// if (isEditionEnabled()) { +// view.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// ChatRoomViewHolder holder = (ChatRoomViewHolder)v.getTag(); +// holder.delete.setChecked(!holder.delete.isChecked()); +// } +// }); +// holder.unreadMessages.setVisibility(View.GONE); +// holder.delete.setOnCheckedChangeListener(null); +// holder.delete.setVisibility(View.VISIBLE); +// holder.delete.setChecked(getSelectedItemsPosition().contains(position)); +// holder.delete.setTag(position); +// holder.delete.setOnCheckedChangeListener(getDeleteListener()); +// } else { +// view.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// ChatRoom chatRoom = mRooms.get(position); +// LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asString()); +// } +// }); +// holder.delete.setVisibility(isEditionEnabled() ? View.VISIBLE : View.GONE); +// } +// return view; +// } } diff --git a/src/android/org/linphone/ui/SelectableAdapter.java b/src/android/org/linphone/ui/SelectableAdapter.java new file mode 100644 index 000000000..00d12b9fd --- /dev/null +++ b/src/android/org/linphone/ui/SelectableAdapter.java @@ -0,0 +1,4 @@ +package org.linphone.ui; + +public abstract class SelectableAdapter { +}