From 9dc50c9aa8a0bb7a39caf56c16e9ba6450fe6246 Mon Sep 17 00:00:00 2001 From: Eric House Date: Sun, 3 Jul 2016 12:32:32 -0700 Subject: [PATCH] preserve unsent chats across activity reload. Use pairs table rather than creating a new one. --- .../org/eehouse/android/xw4/ChatDelegate.java | 8 +++++ .../src/org/eehouse/android/xw4/DBUtils.java | 33 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/ChatDelegate.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/ChatDelegate.java index 2ffd32f1a..e870695c8 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/ChatDelegate.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/ChatDelegate.java @@ -138,6 +138,10 @@ public class ChatDelegate extends DelegateBase { finish(); } else { s_visibleThis = this; + String curMsg = DBUtils.getCurChat( m_activity, m_rowid, m_curPlayer ); + if ( null != curMsg && 0 < curMsg.length() ) { + m_edit.setText( curMsg ); + } } } @@ -148,6 +152,10 @@ public class ChatDelegate extends DelegateBase { m_jniThreadRef.release(); } s_visibleThis = null; + + String curText = m_edit.getText().toString(); + DBUtils.setCurChat( m_activity, m_rowid, m_curPlayer, curText ); + super.onPause(); } diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/DBUtils.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/DBUtils.java index f6ff7a0ca..655fb7eb1 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/DBUtils.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/DBUtils.java @@ -1150,6 +1150,8 @@ public class DBUtils { // Delete chats too -- same sel as for invites db.delete( DBHelper.TABLE_NAME_CHAT, selInvites, null ); + + deleteCurChatsSync( db, rowid ); db.close(); } @@ -1300,6 +1302,31 @@ public class DBUtils { return result; } + private static String formatCurChatKey( long rowid ) { + return formatCurChatKey( rowid, -1 ); + } + + private static String formatCurChatKey( long rowid, int player ) { + String playerMatch = 0 <= player ? String.format( "%d", player ) : "%"; + String result = String.format("<>", rowid, playerMatch ); + return result; + } + + public static String getCurChat( Context context, long rowid, int player ) { + String key = formatCurChatKey( rowid, player ); + return getStringFor( context, key, "" ); + } + + public static void setCurChat( Context context, long rowid, int player, String text ) { + String key = formatCurChatKey( rowid, player ); + setStringFor( context, key, text ); + } + + private static void deleteCurChatsSync( SQLiteDatabase db, long rowid ) { + String like = formatCurChatKey( rowid ); + delStringsLikeSync( db, like ); + } + public static class NeedsNagInfo { public long m_rowid; public long m_nextNag; @@ -2304,6 +2331,12 @@ public class DBUtils { } } + private static void delStringsLikeSync( SQLiteDatabase db, String like ) + { + String selection = String.format( "%s LIKE '%s'", DBHelper.KEY, like ); + db.delete( DBHelper.TABLE_NAME_PAIRS, selection, null ); + } + private static String getStringForSync( SQLiteDatabase db, String key, String dflt ) { String selection = String.format( "%s = '%s'", DBHelper.KEY, key );