diff --git a/res/values/non_localizable_strings.xml b/res/values/non_localizable_strings.xml index 9391b5e81..615cdf4ff 100644 --- a/res/values/non_localizable_strings.xml +++ b/res/values/non_localizable_strings.xml @@ -114,4 +114,6 @@ pref_rfc2833_dtmf_key pref_sipinfo_dtmf_key pref_upnp_enable_key + + pref_first_time_linphone_chat_storage diff --git a/src/org/linphone/ChatListFragment.java b/src/org/linphone/ChatListFragment.java index 7a31c9182..29edb62b8 100644 --- a/src/org/linphone/ChatListFragment.java +++ b/src/org/linphone/ChatListFragment.java @@ -20,12 +20,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import java.util.List; import org.linphone.core.LinphoneAddress; +import org.linphone.core.LinphoneChatMessage; +import org.linphone.core.LinphoneChatRoom; import org.linphone.core.LinphoneCoreException; import org.linphone.core.LinphoneCoreFactory; import org.linphone.mediastream.Log; +import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; +import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; @@ -113,6 +117,17 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte public void 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()) { LinphoneActivity.instance().selectMenu(FragmentsAvailable.CHATLIST); 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 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 { ChatListAdapter() { } diff --git a/src/org/linphone/ChatStorage.java b/src/org/linphone/ChatStorage.java index 3216a529a..9c5d99928 100644 --- a/src/org/linphone/ChatStorage.java +++ b/src/org/linphone/ChatStorage.java @@ -26,12 +26,14 @@ import org.linphone.core.LinphoneChatRoom; import android.content.ContentValues; import android.content.Context; +import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Bitmap.CompressFormat; +import android.preference.PreferenceManager; /** * @author Sylvain Berfini @@ -54,10 +56,19 @@ public class ChatStorage { instance = new ChatStorage(LinphoneService.instance().getApplicationContext()); return instance; } + + public void restartChatStorage() { + if (instance != null) + instance.close(); + instance = new ChatStorage(LinphoneService.instance().getApplicationContext()); + } private ChatStorage(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) { ChatHelper chatHelper = new ChatHelper(context); diff --git a/submodules/linphone b/submodules/linphone index 01d35e5b5..90b6aa36f 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 01d35e5b53fca8358e2b9b8dc67d47b4cca4327f +Subproject commit 90b6aa36f2982cb7cce7ebd50d9dfafd20d4274e