mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-12-26 13:38:59 +00:00
Display conversation names
This commit is contained in:
parent
2af59a19ed
commit
491e75e814
@ -83,7 +83,7 @@ public class MainActivity extends AppCompatActivity
|
||||
}
|
||||
|
||||
//Initialize DatabaseHelper
|
||||
dbHelper = new DatabaseHelper(getApplicationContext());
|
||||
dbHelper = DatabaseHelper.getInstance(this);
|
||||
|
||||
//If it is the first time the application is launched, start the user friends tab
|
||||
if(savedInstanceState == null){
|
||||
|
@ -95,10 +95,21 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
|
||||
|
||||
/**
|
||||
* Public constructor
|
||||
* Get the current database helper instance
|
||||
*
|
||||
* @param context The context
|
||||
* @return DatabaseHelper object
|
||||
*/
|
||||
public static synchronized DatabaseHelper getInstance(Context context){
|
||||
return new DatabaseHelper(context.getApplicationContext());
|
||||
}
|
||||
|
||||
/**
|
||||
* Private constructor
|
||||
*
|
||||
* @param context The context where the database is used
|
||||
*/
|
||||
public DatabaseHelper(Context context){
|
||||
private DatabaseHelper(Context context){
|
||||
super(context, DatabaseContract.DATABASE_NAME, null, DatabaseContract.DATABASE_VERSION);
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,7 @@ class UsersInfosDbHelper {
|
||||
c.close();
|
||||
|
||||
//Close the database
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return number_entries > 0;
|
||||
}
|
||||
@ -115,7 +115,7 @@ class UsersInfosDbHelper {
|
||||
long newRowId = db.insert(UsersInfoSchema.TABLE_NAME, null, newValues);
|
||||
|
||||
//Close the database
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return (int) newRowId;
|
||||
}
|
||||
@ -187,7 +187,7 @@ class UsersInfosDbHelper {
|
||||
c.close();
|
||||
|
||||
//Close the database
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -211,7 +211,7 @@ class UsersInfosDbHelper {
|
||||
int result = db.delete(UsersInfoSchema.TABLE_NAME, condition, conditionArgs);
|
||||
|
||||
//Close database
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return result > 0;
|
||||
}
|
||||
@ -243,7 +243,7 @@ class UsersInfosDbHelper {
|
||||
//Perform the request
|
||||
int result = db.update(UsersInfoSchema.TABLE_NAME, newValues, conditions, conditionArgs);
|
||||
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return result > 0;
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ class ConversationMessagesDbHelper {
|
||||
}
|
||||
|
||||
response.close();
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return message;
|
||||
}
|
||||
@ -114,7 +114,7 @@ class ConversationMessagesDbHelper {
|
||||
|
||||
}
|
||||
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return success;
|
||||
}
|
||||
@ -154,7 +154,7 @@ class ConversationMessagesDbHelper {
|
||||
|
||||
//Close objects
|
||||
cur.close();
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return list;
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package org.communiquons.android.comunic.client.data.conversations;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -91,7 +92,7 @@ public class ConversationsInfo {
|
||||
public void setName(@Nullable String name) {
|
||||
|
||||
//Check the validity of the name
|
||||
if(name == "false" || name == "null" || name == null)
|
||||
if(("false").equals(name) || ("null").equals(name) || name == null)
|
||||
this.name = null;
|
||||
else
|
||||
this.name = name;
|
||||
|
@ -1,8 +1,11 @@
|
||||
package org.communiquons.android.comunic.client.data.conversations;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.DatabaseContract.ConversationsListSchema;
|
||||
import org.communiquons.android.comunic.client.data.DatabaseHelper;
|
||||
@ -58,11 +61,55 @@ public class ConversationsListDbHelper {
|
||||
success = false;
|
||||
}
|
||||
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get information about a single conversation
|
||||
*
|
||||
* @param convID The conversation ID
|
||||
* @return Information about the conversation (if available locally) or null in case of failure
|
||||
*/
|
||||
@Nullable
|
||||
ConversationsInfo getInfos(int convID){
|
||||
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
||||
|
||||
//Prepare database request
|
||||
String table = ConversationsListSchema.TABLE_NAME;
|
||||
String[] columns = {
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_ID,
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_ID_OWNER,
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_LAST_ACTIVE,
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_NAME,
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_FOLLOWING,
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_SAW_LAST_MESSAGES,
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_MEMBERS,
|
||||
};
|
||||
String selection = ConversationsListSchema.COLUMN_NAME_CONVERSATION_ID + " = ?";
|
||||
String[] selectionArgs = {""+convID};
|
||||
|
||||
//Perform database request
|
||||
Cursor c = db.query(table, columns, selection, selectionArgs, null, null, null);
|
||||
|
||||
ConversationsInfo infos = null;
|
||||
|
||||
//Check for result
|
||||
if(c.getCount() != 0){
|
||||
c.moveToFirst();
|
||||
|
||||
//Parse result
|
||||
infos = getConvObj(c);
|
||||
}
|
||||
|
||||
c.close();
|
||||
//db.close();
|
||||
|
||||
return infos;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all the list of conversations
|
||||
*/
|
||||
@ -72,7 +119,7 @@ public class ConversationsListDbHelper {
|
||||
//Prepare the request
|
||||
db.delete(TABLE_NAME, null, null);
|
||||
|
||||
db.close();
|
||||
//db.close();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -117,4 +164,34 @@ public class ConversationsListDbHelper {
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the conversation object related to a current cursor position
|
||||
*
|
||||
* @param c The cursor
|
||||
* @return The Generated conversation information
|
||||
*/
|
||||
private ConversationsInfo getConvObj(Cursor c){
|
||||
|
||||
ConversationsInfo infos = new ConversationsInfo();
|
||||
|
||||
//Get the values
|
||||
infos.setID(c.getInt(c.getColumnIndexOrThrow(
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_ID)));
|
||||
infos.setID_owner(c.getInt(c.getColumnIndexOrThrow(
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_ID_OWNER)));
|
||||
infos.setLast_active(c.getInt(c.getColumnIndexOrThrow(
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_LAST_ACTIVE)));
|
||||
infos.setName(c.getString(c.getColumnIndexOrThrow(
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_NAME)));
|
||||
infos.setFollowing(c.getInt(c.getColumnIndexOrThrow(
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_FOLLOWING)) == 1);
|
||||
infos.setSaw_last_message(c.getInt(c.getColumnIndexOrThrow(
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_SAW_LAST_MESSAGES)) == 1);
|
||||
infos.parseMembersString(c.getString(c.getColumnIndexOrThrow(
|
||||
ConversationsListSchema.COLUMN_NAME_CONVERSATION_MEMBERS)));
|
||||
|
||||
return infos;
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -3,12 +3,15 @@ package org.communiquons.android.comunic.client.data.conversations;
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.Log;
|
||||
|
||||
import org.communiquons.android.comunic.client.api.APIRequest;
|
||||
import org.communiquons.android.comunic.client.api.APIRequestParameters;
|
||||
import org.communiquons.android.comunic.client.api.APIResponse;
|
||||
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.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
@ -36,6 +39,11 @@ public class ConversationsListHelper {
|
||||
*/
|
||||
private ConversationsListDbHelper convDBHelper;
|
||||
|
||||
/**
|
||||
* Database helper
|
||||
*/
|
||||
private DatabaseHelper dbHelper;
|
||||
|
||||
/**
|
||||
* The constructor of the class
|
||||
*
|
||||
@ -45,6 +53,7 @@ public class ConversationsListHelper {
|
||||
public ConversationsListHelper(Context context, DatabaseHelper dbHelper){
|
||||
mContext = context;
|
||||
convDBHelper = new ConversationsListDbHelper(dbHelper);
|
||||
this.dbHelper = dbHelper;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -67,6 +76,73 @@ public class ConversationsListHelper {
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get information about a conversation
|
||||
*
|
||||
* @param convID The conversation ID
|
||||
* @param allowDownload In case the conversation was not found locally, allow informations about
|
||||
* the conversation to be fetched online
|
||||
* @return Information about the conversation, or false in case of failure
|
||||
*/
|
||||
@Nullable
|
||||
public ConversationsInfo getInfosSingle(int convID, boolean allowDownload){
|
||||
|
||||
ConversationsInfo infos;
|
||||
|
||||
//Try to fetch information from the local database
|
||||
if((infos = convDBHelper.getInfos(convID)) != null)
|
||||
return infos;
|
||||
|
||||
//Check if we are not allowed to fetch informations online
|
||||
if(!allowDownload)
|
||||
return null;
|
||||
|
||||
//Get informations about the conversation online
|
||||
return downloadSingle(convID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the display name of a conversation
|
||||
*
|
||||
* @param infos Informations about a conversation
|
||||
* @return The name of the conversation
|
||||
*/
|
||||
public String getDisplayName(ConversationsInfo infos){
|
||||
|
||||
//Check if a specific name has been specified
|
||||
if(infos.hasName())
|
||||
return infos.getName();
|
||||
|
||||
//Get the list of members of the conversation
|
||||
ArrayList<Integer> members = infos.getMembers();
|
||||
|
||||
//Get information about the users
|
||||
ArrayMap<Integer, UserInfo> users =
|
||||
new GetUsersHelper(mContext, dbHelper).getMultiple(members);
|
||||
|
||||
if(users == null)
|
||||
return ""; //No name by default
|
||||
|
||||
String name = "";
|
||||
|
||||
int count = 0;
|
||||
for(Integer id : users.keySet()){
|
||||
if(users.get(id) != null){
|
||||
|
||||
if(count > 0)
|
||||
name += ", ";
|
||||
|
||||
name += users.get(id).getFullName();
|
||||
count++;
|
||||
|
||||
if(count > 3)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get online (download) the list of all the conversations
|
||||
*
|
||||
@ -104,6 +180,35 @@ public class ConversationsListHelper {
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Download informations about a single conversation online
|
||||
*
|
||||
* @param convID The ID of the conversation to fetch
|
||||
* @return Informations about the conversation in case of success / null else
|
||||
*/
|
||||
@Nullable
|
||||
private ConversationsInfo downloadSingle(int convID){
|
||||
|
||||
//Perform an API request
|
||||
APIRequestParameters params = new APIRequestParameters(mContext,
|
||||
"conversations/getInfosOne");
|
||||
params.addParameter("conversationID", ""+convID);
|
||||
|
||||
try {
|
||||
|
||||
APIResponse response = new APIRequest().exec(params);
|
||||
|
||||
JSONObject object = response.getJSONObject();
|
||||
|
||||
return parseConversationJSON(object);
|
||||
|
||||
} catch (Exception e){
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a JSONObject into a conversation info element
|
||||
*
|
||||
|
@ -97,7 +97,7 @@ public class FriendsListDbHelper {
|
||||
c.close();
|
||||
|
||||
//Close the access to the database
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return friendsList;
|
||||
}
|
||||
@ -123,7 +123,7 @@ public class FriendsListDbHelper {
|
||||
}
|
||||
|
||||
//Close the database
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return success;
|
||||
}
|
||||
@ -167,7 +167,7 @@ public class FriendsListDbHelper {
|
||||
int result = db.delete(table_name, whereClause, whereArgs);
|
||||
|
||||
//Close the database
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -190,7 +190,7 @@ public class FriendsListDbHelper {
|
||||
int result = db.delete(table_name, whereClause, whereValues);
|
||||
|
||||
//Close access to the database
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return result > 0;
|
||||
}
|
||||
@ -216,7 +216,7 @@ public class FriendsListDbHelper {
|
||||
int result = db.update(table, values, whereClause, whereArgs);
|
||||
|
||||
//Close access to the database
|
||||
db.close();
|
||||
//db.close();
|
||||
|
||||
return result > 0;
|
||||
}
|
||||
|
@ -31,6 +31,8 @@ import org.communiquons.android.comunic.client.data.conversations.ConversationMe
|
||||
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 org.communiquons.android.comunic.client.data.conversations.ConversationsInfo;
|
||||
import org.communiquons.android.comunic.client.data.conversations.ConversationsListHelper;
|
||||
import org.communiquons.android.comunic.client.data.utils.BitmapUtils;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
@ -71,6 +73,11 @@ public class ConversationFragment extends Fragment
|
||||
*/
|
||||
private int conversation_id;
|
||||
|
||||
/**
|
||||
* Information about the conversation
|
||||
*/
|
||||
private ConversationsInfo conversationInfo = null;
|
||||
|
||||
/**
|
||||
* The last available message id
|
||||
*/
|
||||
@ -101,6 +108,11 @@ public class ConversationFragment extends Fragment
|
||||
*/
|
||||
private ConversationMessagesHelper convMessHelper;
|
||||
|
||||
/**
|
||||
* Conversation list helper
|
||||
*/
|
||||
private ConversationsListHelper convListHelper;
|
||||
|
||||
/**
|
||||
* Conversation messages adapter
|
||||
*/
|
||||
@ -141,11 +153,14 @@ public class ConversationFragment extends Fragment
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
//Database helper
|
||||
DatabaseHelper dbHelper = new DatabaseHelper(getActivity());
|
||||
DatabaseHelper dbHelper = DatabaseHelper.getInstance(getActivity());
|
||||
|
||||
//Set conversation message helper
|
||||
convMessHelper = new ConversationMessagesHelper(getActivity(), dbHelper);
|
||||
|
||||
//Set conversation list helper
|
||||
convListHelper = new ConversationsListHelper(getActivity(), dbHelper);
|
||||
|
||||
//Get the conversation ID
|
||||
conversation_id = getArguments().getInt(ARG_CONVERSATION_ID);
|
||||
|
||||
@ -156,6 +171,9 @@ public class ConversationFragment extends Fragment
|
||||
throw new RuntimeException(TAG + " requires a valid conversation ID when created !");
|
||||
}
|
||||
|
||||
//Get information about the conversation
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -238,9 +256,34 @@ public class ConversationFragment extends Fragment
|
||||
//Create and start the thread
|
||||
new Thread(refreshRunnable).start();
|
||||
|
||||
//Update conversation title
|
||||
getActivity().setTitle(R.string.fragement_conversation_title);
|
||||
|
||||
//Update the bottom navigation menu
|
||||
((MainActivity) getActivity())
|
||||
.setSelectedNavigationItem(R.id.main_bottom_navigation_conversations);
|
||||
|
||||
//Check for conversation information
|
||||
if(conversationInfo == null){
|
||||
|
||||
//Query information about the conversation
|
||||
new AsyncTask<Void, Void, ConversationsInfo>(){
|
||||
@Override
|
||||
protected ConversationsInfo doInBackground(Void... params) {
|
||||
ConversationsInfo infos = convListHelper.getInfosSingle(conversation_id, true);
|
||||
if(infos != null)
|
||||
infos.setDisplayName(convListHelper.getDisplayName(infos));
|
||||
return infos;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(ConversationsInfo conversationsInfo) {
|
||||
onGotConversationInfos(conversationsInfo);
|
||||
}
|
||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
else
|
||||
onGotConversationInfos(conversationInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -319,6 +362,21 @@ public class ConversationFragment extends Fragment
|
||||
convMessAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
/**
|
||||
* What to do once we got conversation informations
|
||||
*
|
||||
* @param infos Informations about the conversation
|
||||
*/
|
||||
private void onGotConversationInfos(ConversationsInfo infos){
|
||||
|
||||
//Save conversation informations
|
||||
conversationInfo = infos;
|
||||
|
||||
//Update the name of the conversation
|
||||
getActivity().setTitle(infos.getDisplayName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called when the user request to add an image to a message
|
||||
*/
|
||||
|
@ -91,7 +91,7 @@ public class ConversationsListFragment extends Fragment implements AdapterView.O
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
//Database helper
|
||||
DatabaseHelper dbHelper = new DatabaseHelper(getActivity());
|
||||
DatabaseHelper dbHelper = DatabaseHelper.getInstance(getActivity());
|
||||
|
||||
//Instantiate the user informations helper
|
||||
userHelper = new GetUsersHelper(getActivity(), dbHelper);
|
||||
@ -240,6 +240,7 @@ public class ConversationsListFragment extends Fragment implements AdapterView.O
|
||||
if(list == null) {
|
||||
Toast.makeText(getActivity(), R.string.fragment_conversationslist_err_get_list,
|
||||
Toast.LENGTH_LONG).show();
|
||||
display_progress_bar(false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -93,7 +93,7 @@ public class FriendsListFragment extends Fragment {
|
||||
mContext = getActivity().getApplicationContext();
|
||||
|
||||
//Create database helper
|
||||
mDbHelper = new DatabaseHelper(mContext);
|
||||
mDbHelper = DatabaseHelper.getInstance(mContext);
|
||||
|
||||
//Create friendlist operation object
|
||||
flist = new FriendsList(mDbHelper, mContext);
|
||||
|
@ -57,7 +57,7 @@ public class UserInfosFragment extends Fragment {
|
||||
|
||||
//Open DBHelper if required
|
||||
if(dbHelper == null)
|
||||
dbHelper = new DatabaseHelper(mContext);
|
||||
dbHelper = DatabaseHelper.getInstance(mContext);
|
||||
|
||||
//Get required views
|
||||
final ImageView imageView = view.findViewById(R.id.fragments_userinfos_account_image);
|
||||
|
@ -65,4 +65,5 @@
|
||||
<string name="fragment_friendslist_title">Friends</string>
|
||||
<string name="fragment_conversationslist_title">Conversations</string>
|
||||
<string name="fragment_userinfos_title">About me</string>
|
||||
<string name="fragement_conversation_title">Title</string>
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user