mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-23 22:09:30 +00:00
Added user account image on conversations
This commit is contained in:
parent
c0545c5db5
commit
0f2f28ec36
@ -1,11 +1,9 @@
|
||||
package org.communiquons.android.comunic.client.data.conversations;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.util.ArrayMap;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@ -14,6 +12,8 @@ import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.communiquons.android.comunic.client.R;
|
||||
import org.communiquons.android.comunic.client.data.ImageLoad.ImageLoadManager;
|
||||
import org.communiquons.android.comunic.client.data.UsersInfo.UserInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -36,6 +36,11 @@ public class ConversationMessageAdapter extends ArrayAdapter<ConversationMessage
|
||||
*/
|
||||
private int userID;
|
||||
|
||||
/**
|
||||
* Information about users
|
||||
*/
|
||||
private ArrayMap<Integer, UserInfo> usersInfo;
|
||||
|
||||
/**
|
||||
* Public class constructor
|
||||
*
|
||||
@ -44,12 +49,15 @@ public class ConversationMessageAdapter extends ArrayAdapter<ConversationMessage
|
||||
* @param userID The ID of the current user
|
||||
*/
|
||||
public ConversationMessageAdapter(Context context, ArrayList<ConversationMessage> list,
|
||||
int userID){
|
||||
int userID, ArrayMap<Integer, UserInfo> usersInfo){
|
||||
super(context, 0, list);
|
||||
|
||||
//Set user ID
|
||||
this.userID = userID;
|
||||
|
||||
//Set user information list
|
||||
this.usersInfo = usersInfo;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -99,6 +107,14 @@ public class ConversationMessageAdapter extends ArrayAdapter<ConversationMessage
|
||||
findViewById(R.id.fragment_conversation_message_item_accountimage);
|
||||
}
|
||||
|
||||
/*
|
||||
Check for user information
|
||||
*/
|
||||
UserInfo user = null;
|
||||
if(usersInfo.containsKey(message.getUser_id())){
|
||||
user = usersInfo.get(message.getUser_id());
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Update message content
|
||||
@ -110,7 +126,17 @@ public class ConversationMessageAdapter extends ArrayAdapter<ConversationMessage
|
||||
/*
|
||||
Update account image
|
||||
*/
|
||||
//Cancel any load pending operation
|
||||
ImageLoadManager.remove(accountImage);
|
||||
|
||||
//Set the default image
|
||||
accountImage.setImageResource(R.drawable.default_account_image);
|
||||
|
||||
//Check if we can load a specific image
|
||||
if(user != null) {
|
||||
String imageURL = user.getAcountImageURL();
|
||||
ImageLoadManager.load(getContext(), imageURL, accountImage);
|
||||
}
|
||||
|
||||
|
||||
return convertView;
|
||||
|
@ -1,9 +1,11 @@
|
||||
package org.communiquons.android.comunic.client.fragments;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.ArrayMap;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@ -13,11 +15,14 @@ import android.widget.Toast;
|
||||
import org.communiquons.android.comunic.client.R;
|
||||
import org.communiquons.android.comunic.client.data.Account.AccountUtils;
|
||||
import org.communiquons.android.comunic.client.data.DatabaseHelper;
|
||||
import org.communiquons.android.comunic.client.data.UsersInfo.GetUsersHelper;
|
||||
import org.communiquons.android.comunic.client.data.UsersInfo.UserInfo;
|
||||
import org.communiquons.android.comunic.client.data.conversations.ConversationMessage;
|
||||
import org.communiquons.android.comunic.client.data.conversations.ConversationMessageAdapter;
|
||||
import org.communiquons.android.comunic.client.data.conversations.ConversationMessagesHelper;
|
||||
import org.communiquons.android.comunic.client.data.conversations.ConversationRefreshRunnable;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
@ -57,6 +62,11 @@ public class ConversationFragment extends Fragment
|
||||
*/
|
||||
private ArrayList<ConversationMessage> messagesList = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Informations about the users of the conversation
|
||||
*/
|
||||
private ArrayMap<Integer, UserInfo> users = new ArrayMap<>();
|
||||
|
||||
/**
|
||||
* Conversation refresh runnable
|
||||
*/
|
||||
@ -72,6 +82,11 @@ public class ConversationFragment extends Fragment
|
||||
*/
|
||||
private ConversationMessageAdapter convMessAdapter;
|
||||
|
||||
/**
|
||||
* Get user helper
|
||||
*/
|
||||
private GetUsersHelper getUsersHelper;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@ -85,6 +100,9 @@ public class ConversationFragment extends Fragment
|
||||
//Get the conversation ID
|
||||
conversation_id = getArguments().getInt(ARG_CONVERSATION_ID);
|
||||
|
||||
//Get user helper
|
||||
getUsersHelper = new GetUsersHelper(getActivity(), dbHelper);
|
||||
|
||||
if(conversation_id < 1){
|
||||
throw new RuntimeException(TAG + " requires a valid conversation ID when created !");
|
||||
}
|
||||
@ -105,8 +123,14 @@ public class ConversationFragment extends Fragment
|
||||
//Conversation messages listView
|
||||
ListView convMessListView = view.findViewById(R.id.fragment_conversation_messageslist);
|
||||
|
||||
//Need user ID
|
||||
int userID = new AccountUtils(getActivity()).get_current_user_id();
|
||||
convMessAdapter = new ConversationMessageAdapter(getActivity(), messagesList, userID);
|
||||
|
||||
//Create the adapter
|
||||
convMessAdapter = new ConversationMessageAdapter(getActivity(),
|
||||
messagesList, userID, users);
|
||||
|
||||
//Apply adapter
|
||||
convMessListView.setAdapter(convMessAdapter);
|
||||
|
||||
}
|
||||
@ -137,14 +161,34 @@ public class ConversationFragment extends Fragment
|
||||
@Override
|
||||
public void onAddMessage(int lastID, @NonNull ArrayList<ConversationMessage> newMessages) {
|
||||
|
||||
final ArrayList<Integer> usersToFetch = new ArrayList<>();
|
||||
|
||||
//Add the messages to the the main list of messages
|
||||
for(ConversationMessage message : newMessages){
|
||||
messagesList.add(message);
|
||||
|
||||
if(!users.containsKey(message.getUser_id()))
|
||||
usersToFetch.add(message.getUser_id());
|
||||
}
|
||||
|
||||
convMessAdapter.notifyDataSetChanged();
|
||||
|
||||
last_message_id = lastID;
|
||||
|
||||
//Fetch user information if required
|
||||
if(usersToFetch.size() > 0){
|
||||
new AsyncTask<Void, Void, ArrayMap<Integer, UserInfo>>(){
|
||||
@Override
|
||||
protected ArrayMap<Integer, UserInfo> doInBackground(Void... params) {
|
||||
//Get the users list
|
||||
return getUsersHelper.getMultiple(usersToFetch);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(ArrayMap<Integer, UserInfo> usersInfo) {
|
||||
onGotUserInfo(usersInfo);
|
||||
}
|
||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -153,4 +197,28 @@ public class ConversationFragment extends Fragment
|
||||
Toast.makeText(getActivity(), R.string.fragment_conversation_err_load_message,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called when we get informations about users
|
||||
*
|
||||
* @param info Informations about the user
|
||||
*/
|
||||
public void onGotUserInfo(@Nullable ArrayMap<Integer, UserInfo> info ){
|
||||
|
||||
//Check for errors
|
||||
if(info == null){
|
||||
//This is a failure
|
||||
return;
|
||||
}
|
||||
|
||||
//Process the list of users
|
||||
for(UserInfo user : info.values()){
|
||||
if(user != null){
|
||||
users.put(user.getId(), user);
|
||||
}
|
||||
}
|
||||
|
||||
//Inform about dataset update
|
||||
convMessAdapter.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="5dp"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingEnd="5dp"
|
||||
android:paddingStart="5dp"
|
||||
android:paddingEnd="5dp">
|
||||
android:paddingTop="5dp">
|
||||
|
||||
<LinearLayout
|
||||
<!-- Messages on the left -->
|
||||
<RelativeLayout
|
||||
android:id="@+id/fragment_conversation_message_left"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@ -17,8 +18,8 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/fragment_conversation_message_item_accountimage"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_width="26dp"
|
||||
android:layout_height="26dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginEnd="5dp"
|
||||
android:src="@drawable/default_account_image" />
|
||||
@ -27,46 +28,47 @@
|
||||
android:id="@+id/fragment_conversation_message_item_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_toEndOf="@id/fragment_conversation_message_item_accountimage"
|
||||
android:background="@color/conversation_otheruser_messages_background"
|
||||
android:padding="5dp"
|
||||
android:paddingStart="15dp"
|
||||
android:paddingEnd="15dp"
|
||||
tools:text="A message"
|
||||
android:layout_gravity="center"
|
||||
android:textColor="@color/conversation_otheruser_messages_textColor"/>
|
||||
android:paddingStart="15dp"
|
||||
android:textColor="@color/conversation_otheruser_messages_textColor"
|
||||
tools:text="A message"/>
|
||||
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
<LinearLayout
|
||||
<!-- Messages on the right -->
|
||||
<RelativeLayout
|
||||
android:id="@+id/fragment_conversation_message_right"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="right"
|
||||
android:padding="1dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/fragment_conversation_message_item_accountimage_right"
|
||||
android:layout_width="26dp"
|
||||
android:layout_height="26dp"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_gravity="end"
|
||||
android:layout_marginStart="5dp"
|
||||
android:src="@drawable/default_account_image" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/fragment_conversation_message_item_content_right"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_toStartOf="@id/fragment_conversation_message_item_accountimage_right"
|
||||
android:background="@color/conversation_user_messages_background"
|
||||
android:padding="5dp"
|
||||
android:paddingStart="15dp"
|
||||
android:paddingEnd="15dp"
|
||||
tools:text="A message"
|
||||
android:layout_gravity="center"
|
||||
android:textColor="@color/conversation_user_messages_textColor"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/fragment_conversation_message_item_accountimage_right"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_gravity="center"
|
||||
|
||||
android:layout_marginStart="5dp"
|
||||
android:src="@drawable/default_account_image" />
|
||||
|
||||
</LinearLayout>
|
||||
android:paddingStart="15dp"
|
||||
android:textColor="@color/conversation_user_messages_textColor"
|
||||
tools:text="A message"/>
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</LinearLayout>
|
Loading…
Reference in New Issue
Block a user