Updated liblinphone + started import of previous database messages into the new one on update (pictures not included for now)

This commit is contained in:
Sylvain Berfini 2013-08-14 16:50:12 +02:00
parent ed3626790a
commit 4475002bcc
4 changed files with 53 additions and 2 deletions

View file

@ -114,4 +114,6 @@
<string name="pref_rfc2833_dtmf_key">pref_rfc2833_dtmf_key</string> <string name="pref_rfc2833_dtmf_key">pref_rfc2833_dtmf_key</string>
<string name="pref_sipinfo_dtmf_key">pref_sipinfo_dtmf_key</string> <string name="pref_sipinfo_dtmf_key">pref_sipinfo_dtmf_key</string>
<string name="pref_upnp_enable_key">pref_upnp_enable_key</string> <string name="pref_upnp_enable_key">pref_upnp_enable_key</string>
<string name="pref_first_time_linphone_chat_storage">pref_first_time_linphone_chat_storage</string>
</resources> </resources>

View file

@ -20,12 +20,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import java.util.List; import java.util.List;
import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneChatMessage;
import org.linphone.core.LinphoneChatRoom;
import org.linphone.core.LinphoneCoreException; import org.linphone.core.LinphoneCoreException;
import org.linphone.core.LinphoneCoreFactory; import org.linphone.core.LinphoneCoreFactory;
import org.linphone.mediastream.Log; import org.linphone.mediastream.Log;
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextMenu.ContextMenuInfo;
@ -113,6 +117,17 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
//Check if the is the first time we show the chat view since we use liblinphone chat storage
boolean useLinphoneStorage = getResources().getBoolean(R.bool.use_linphone_chat_storage);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(LinphoneActivity.instance());
boolean updateNeeded = prefs.getBoolean(getString(R.string.pref_first_time_linphone_chat_storage), true);
if (useLinphoneStorage && updateNeeded) {
if (importAndroidStoredMessagedIntoLibLinphoneStorage()) {
prefs.edit().putBoolean(getString(R.string.pref_first_time_linphone_chat_storage), false).commit();
LinphoneActivity.instance().getChatStorage().restartChatStorage();
}
}
if (LinphoneActivity.isInstanciated()) { if (LinphoneActivity.isInstanciated()) {
LinphoneActivity.instance().selectMenu(FragmentsAvailable.CHATLIST); LinphoneActivity.instance().selectMenu(FragmentsAvailable.CHATLIST);
LinphoneActivity.instance().updateChatListFragment(this); LinphoneActivity.instance().updateChatListFragment(this);
@ -200,6 +215,29 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
} }
} }
private boolean importAndroidStoredMessagedIntoLibLinphoneStorage() {
//TODO import pictures
Log.w("Importing previous messages into new database...");
try {
ChatStorage db = LinphoneActivity.instance().getChatStorage();
List<String> conversations = db.getChatList();
for (int j = conversations.size() - 1; j >= 0; j--) {
String correspondent = conversations.get(j);
LinphoneChatRoom room = LinphoneManager.getLc().getOrCreateChatRoom(correspondent);
for (ChatMessage message : db.getMessages(correspondent)) {
LinphoneChatMessage msg = room.createLinphoneChatMessage(message.getMessage(), message.getUrl(), message.getStatus(), Long.parseLong(message.getTimestamp()), message.isIncoming(), message.isRead());
msg.store();
}
db.removeDiscussion(correspondent);
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
class ChatListAdapter extends BaseAdapter { class ChatListAdapter extends BaseAdapter {
ChatListAdapter() { ChatListAdapter() {
} }

View file

@ -26,12 +26,14 @@ import org.linphone.core.LinphoneChatRoom;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor; import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat; import android.graphics.Bitmap.CompressFormat;
import android.preference.PreferenceManager;
/** /**
* @author Sylvain Berfini * @author Sylvain Berfini
@ -55,9 +57,18 @@ public class ChatStorage {
return instance; return instance;
} }
public void restartChatStorage() {
if (instance != null)
instance.close();
instance = new ChatStorage(LinphoneService.instance().getApplicationContext());
}
private ChatStorage(Context c) { private ChatStorage(Context c) {
context = c; context = c;
useNativeAPI = c.getResources().getBoolean(R.bool.use_linphone_chat_storage); boolean useLinphoneStorage = c.getResources().getBoolean(R.bool.use_linphone_chat_storage);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(LinphoneActivity.instance());
boolean updateNeeded = prefs.getBoolean(c.getString(R.string.pref_first_time_linphone_chat_storage), true);
useNativeAPI = useLinphoneStorage && !updateNeeded;
if (!useNativeAPI) { if (!useNativeAPI) {
ChatHelper chatHelper = new ChatHelper(context); ChatHelper chatHelper = new ChatHelper(context);

@ -1 +1 @@
Subproject commit 01d35e5b53fca8358e2b9b8dc67d47b4cca4327f Subproject commit 90b6aa36f2982cb7cce7ebd50d9dfafd20d4274e