mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-30 17:26:36 +00:00
Can add conversation members
This commit is contained in:
parent
1818db46ab
commit
703142df5b
@ -108,6 +108,26 @@ public class GetUsersHelper {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the list of missing users ID in a set of users informations
|
||||||
|
*
|
||||||
|
* @param IDs The reference IDs list
|
||||||
|
* @param usersInfo Informations about the users
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static ArrayList<Integer> get_missing_ids(@NonNull ArrayList<Integer> IDs,
|
||||||
|
@NonNull ArrayMap<Integer, UserInfo> usersInfo){
|
||||||
|
ArrayList<Integer> missingIds = new ArrayList<>();
|
||||||
|
|
||||||
|
//Process the list of IDs
|
||||||
|
for(int user_id : IDs){
|
||||||
|
if(!usersInfo.containsKey(user_id))
|
||||||
|
missingIds.add(user_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return missingIds;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get information about multiple users from the database or from the server
|
* Get information about multiple users from the database or from the server
|
||||||
*
|
*
|
||||||
|
@ -0,0 +1,100 @@
|
|||||||
|
package org.communiquons.android.comunic.client.data.UsersInfo;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
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;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
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.utils.UiUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User async infos adapter
|
||||||
|
*
|
||||||
|
* Similar to UsersBasicAdapter, but the information about users can be given after the users
|
||||||
|
* themselve
|
||||||
|
*
|
||||||
|
* @author Pierre HUBERT
|
||||||
|
* Created by pierre on 1/2/18.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class UsersAsysncInfoAdapter extends ArrayAdapter<Integer> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Informations about the members of the conversation
|
||||||
|
*/
|
||||||
|
private ArrayMap<Integer, UserInfo> usersInfos;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param context The context of the application
|
||||||
|
* @param IDs The list of IDs of users
|
||||||
|
* @param usersInfos Informations about the users (can be updated asynchronously with the list
|
||||||
|
* of users ID)
|
||||||
|
*/
|
||||||
|
public UsersAsysncInfoAdapter(Context context, @NonNull ArrayList<Integer> IDs,
|
||||||
|
@NonNull ArrayMap<Integer, UserInfo> usersInfos){
|
||||||
|
super(context, 0, IDs);
|
||||||
|
|
||||||
|
//Save user information array map
|
||||||
|
this.usersInfos = usersInfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
|
||||||
|
|
||||||
|
if(convertView == null)
|
||||||
|
convertView = LayoutInflater.from(getContext())
|
||||||
|
.inflate(R.layout.user_basic_adapter_item, parent, false);
|
||||||
|
|
||||||
|
//Get the views
|
||||||
|
ImageView account_image = convertView.findViewById(R.id.user_account_image);
|
||||||
|
TextView account_name = convertView.findViewById(R.id.user_name);
|
||||||
|
|
||||||
|
//Empty the entry
|
||||||
|
ImageLoadManager.remove(account_image);
|
||||||
|
account_image.setImageDrawable(UiUtils.getDrawable(getContext(),
|
||||||
|
R.drawable.default_account_image));
|
||||||
|
account_name.setText("");
|
||||||
|
|
||||||
|
//Get user ID
|
||||||
|
int userID = getItem(position);
|
||||||
|
|
||||||
|
//Check if we go user informations
|
||||||
|
if(usersInfos.containsKey(userID)){
|
||||||
|
|
||||||
|
UserInfo user = usersInfos.get(userID);
|
||||||
|
|
||||||
|
account_name.setText(user.getDisplayFullName());
|
||||||
|
ImageLoadManager.load(getContext(), user.getAcountImageURL(), account_image);
|
||||||
|
}
|
||||||
|
|
||||||
|
return convertView;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the ID of a position
|
||||||
|
*
|
||||||
|
* This method is overriden in order to remove the @Nullable tag
|
||||||
|
*
|
||||||
|
* @param position The position of the item
|
||||||
|
* @return The ID of the personn or -1 in case of failure
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Integer getItem(int position) {
|
||||||
|
Integer ID = super.getItem(position);
|
||||||
|
return ID == null ? -1 : ID;
|
||||||
|
}
|
||||||
|
}
|
@ -3,20 +3,29 @@ package org.communiquons.android.comunic.client.fragments;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.util.ArrayMap;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.communiquons.android.comunic.client.MainActivity;
|
import org.communiquons.android.comunic.client.MainActivity;
|
||||||
import org.communiquons.android.comunic.client.R;
|
import org.communiquons.android.comunic.client.R;
|
||||||
import org.communiquons.android.comunic.client.SearchUserActivity;
|
import org.communiquons.android.comunic.client.SearchUserActivity;
|
||||||
|
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.UsersInfo.UsersAsysncInfoAdapter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create and / or update a conversation fragment
|
* Create and / or update a conversation fragment
|
||||||
@ -62,6 +71,42 @@ public class UpdateConversationFragment extends Fragment {
|
|||||||
*/
|
*/
|
||||||
private Button submitButton;
|
private Button submitButton;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loading progress bar
|
||||||
|
*/
|
||||||
|
private ProgressBar progressBar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Users members ID list
|
||||||
|
*/
|
||||||
|
private ArrayList<Integer> membersID = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Members informations
|
||||||
|
*/
|
||||||
|
private ArrayMap<Integer, UserInfo> membersInfo = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Members list adapter
|
||||||
|
*/
|
||||||
|
private UsersAsysncInfoAdapter membersAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Users information helper
|
||||||
|
*/
|
||||||
|
private GetUsersHelper usersHelper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
//Get database helper instance
|
||||||
|
DatabaseHelper dbHelper = DatabaseHelper.getInstance(getActivity());
|
||||||
|
|
||||||
|
//Get User helper
|
||||||
|
usersHelper = new GetUsersHelper(getActivity(), dbHelper);
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
|
||||||
@ -72,7 +117,8 @@ public class UpdateConversationFragment extends Fragment {
|
|||||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
//Get the view
|
//Get the views
|
||||||
|
progressBar = view.findViewById(R.id.progress_bar);
|
||||||
nameView = view.findViewById(R.id.fragment_update_conversation_name);
|
nameView = view.findViewById(R.id.fragment_update_conversation_name);
|
||||||
followCheckbox = view.findViewById(R.id.fragment_update_conversation_follow);
|
followCheckbox = view.findViewById(R.id.fragment_update_conversation_follow);
|
||||||
membersList = view.findViewById(R.id.fragment_update_conversation_members);
|
membersList = view.findViewById(R.id.fragment_update_conversation_members);
|
||||||
@ -86,6 +132,10 @@ public class UpdateConversationFragment extends Fragment {
|
|||||||
requestAddMember();
|
requestAddMember();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Initialize the form
|
||||||
|
init_form();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -115,7 +165,108 @@ public class UpdateConversationFragment extends Fragment {
|
|||||||
|
|
||||||
//Check if it is a success
|
//Check if it is a success
|
||||||
if(resultCode == Activity.RESULT_OK){
|
if(resultCode == Activity.RESULT_OK){
|
||||||
Toast.makeText(getActivity(), "Request success", Toast.LENGTH_SHORT).show();
|
|
||||||
|
switch(requestCode){
|
||||||
|
|
||||||
|
case FIND_USER_ID_INTENT:
|
||||||
|
addMemberID(Integer.decode(data.getData().getQueryParameter("userID")));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the form
|
||||||
|
*/
|
||||||
|
private void init_form(){
|
||||||
|
|
||||||
|
//Hide progress bar
|
||||||
|
set_progressbar_visibility(false);
|
||||||
|
|
||||||
|
//Initialize the list of members
|
||||||
|
membersID = new ArrayList<>();
|
||||||
|
membersInfo = new ArrayMap<>();
|
||||||
|
membersAdapter = new UsersAsysncInfoAdapter(getActivity(), membersID, membersInfo);
|
||||||
|
membersList.setAdapter(membersAdapter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a member to the list, specified by its ID
|
||||||
|
*
|
||||||
|
* @param memberID The ID of the member to add
|
||||||
|
*/
|
||||||
|
private void addMemberID(int memberID){
|
||||||
|
|
||||||
|
//Check if the member is already on the list
|
||||||
|
if(membersID.contains(memberID)) {
|
||||||
|
Toast.makeText(getActivity(), R.string.err_add_member_double, Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Push the member into the list
|
||||||
|
membersID.add(memberID);
|
||||||
|
membersAdapter.notifyDataSetChanged();
|
||||||
|
|
||||||
|
//Refresh members information
|
||||||
|
refresh_members_information();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refresh members informations
|
||||||
|
*
|
||||||
|
* Fetch informations about the users for which we don't know anything yet
|
||||||
|
*/
|
||||||
|
private void refresh_members_information(){
|
||||||
|
|
||||||
|
//Get the list of the required IDs
|
||||||
|
final ArrayList<Integer> missingIDs = GetUsersHelper.get_missing_ids(membersID, membersInfo);
|
||||||
|
|
||||||
|
//Continue only if required
|
||||||
|
if(missingIDs.size() == 0)
|
||||||
|
return; //Do nothing
|
||||||
|
|
||||||
|
//Search informations about them
|
||||||
|
new AsyncTask<Void, Void, ArrayMap<Integer, UserInfo>>(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ArrayMap<Integer, UserInfo> doInBackground(Void... params) {
|
||||||
|
return usersHelper.getMultiple(missingIDs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(ArrayMap<Integer, UserInfo> result) {
|
||||||
|
append_new_members_info(result);
|
||||||
|
}
|
||||||
|
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Append new information about members
|
||||||
|
*
|
||||||
|
* @param usersInfo Information about the members
|
||||||
|
*/
|
||||||
|
private void append_new_members_info(@Nullable ArrayMap<Integer, UserInfo> usersInfo){
|
||||||
|
|
||||||
|
//Check for errors
|
||||||
|
if(usersInfo == null){
|
||||||
|
Toast.makeText(getActivity(), R.string.err_get_users_info, Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add the list of user information
|
||||||
|
membersInfo.putAll(usersInfo);
|
||||||
|
|
||||||
|
//Notify data set update
|
||||||
|
membersAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update progressbar visibility
|
||||||
|
*
|
||||||
|
* @param visible TRUE to make the progressbar visible
|
||||||
|
*/
|
||||||
|
private void set_progressbar_visibility(boolean visible){
|
||||||
|
progressBar.setVisibility(visible ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,13 @@
|
|||||||
android:orientation="vertical" android:layout_width="match_parent"
|
android:orientation="vertical" android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<!-- Progres bar -->
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progress_bar"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"/>
|
||||||
|
|
||||||
<!-- Conversation name -->
|
<!-- Conversation name -->
|
||||||
<android.support.design.widget.TextInputLayout
|
<android.support.design.widget.TextInputLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -22,7 +29,7 @@
|
|||||||
<!-- Conversation members -->
|
<!-- Conversation members -->
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@+id/fragment_update_conversation_members"
|
android:id="@+id/fragment_update_conversation_members"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_weight="1"/>
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
@ -82,4 +82,6 @@
|
|||||||
<string name="activity_searchuser_title">Search user</string>
|
<string name="activity_searchuser_title">Search user</string>
|
||||||
<string name="activity_searchuser_text_placeholder">User name</string>
|
<string name="activity_searchuser_text_placeholder">User name</string>
|
||||||
<string name="err_search_user">Could not search user !</string>
|
<string name="err_search_user">Could not search user !</string>
|
||||||
|
<string name="err_add_member_double">This user is already a member of the conversation!</string>
|
||||||
|
<string name="err_get_users_info">Could not get information about users !</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user