diff --git a/res/menu/text_secure_normal.xml b/res/menu/text_secure_normal.xml index a614df98a4..4cc966d07e 100644 --- a/res/menu/text_secure_normal.xml +++ b/res/menu/text_secure_normal.xml @@ -9,6 +9,10 @@ android:id="@+id/menu_clear_passphrase" android:icon="@android:drawable/ic_menu_close_clear_cancel" /> + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 857af46074..3f89a39648 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -504,7 +504,8 @@ Import Export Clear Passphrase - + Mark All Read + Verified diff --git a/src/org/thoughtcrime/securesms/ConversationListActivity.java b/src/org/thoughtcrime/securesms/ConversationListActivity.java index 8534d102a7..a3cd168e39 100644 --- a/src/org/thoughtcrime/securesms/ConversationListActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationListActivity.java @@ -2,25 +2,27 @@ package org.thoughtcrime.securesms; import android.content.Intent; import android.database.ContentObserver; +import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.provider.ContactsContract; import android.util.Log; import android.view.WindowManager; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; import org.thoughtcrime.securesms.ApplicationExportManager.ApplicationExportListener; import org.thoughtcrime.securesms.crypto.MasterSecret; +import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.notifications.MessageNotifier; import org.thoughtcrime.securesms.recipients.RecipientFactory; import org.thoughtcrime.securesms.recipients.Recipients; import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.service.SendReceiveService; import org.thoughtcrime.securesms.util.MemoryCleaner; -import com.actionbarsherlock.view.Menu; -import com.actionbarsherlock.view.MenuInflater; -import com.actionbarsherlock.view.MenuItem; - public class ConversationListActivity extends PassphraseRequiredSherlockFragmentActivity implements ConversationListFragment.ConversationSelectedListener { @@ -76,6 +78,7 @@ public class ConversationListActivity extends PassphraseRequiredSherlockFragment case R.id.menu_export: handleExportDatabase(); return true; case R.id.menu_import: handleImportDatabase(); return true; case R.id.menu_clear_passphrase: handleClearPassphrase(); return true; + case R.id.menu_mark_all_read: handleMarkAllRead(); return true; } return false; @@ -127,6 +130,17 @@ public class ConversationListActivity extends PassphraseRequiredSherlockFragment startService(intent); } + private void handleMarkAllRead() { + new AsyncTask() { + @Override + protected Void doInBackground(Void... params) { + DatabaseFactory.getThreadDatabase(ConversationListActivity.this).setAllThreadsRead(); + MessageNotifier.updateNotification(ConversationListActivity.this, masterSecret); + return null; + } + }.execute(); + } + private void initializeContactUpdatesReceiver() { ContentObserver observer = new ContentObserver(null) { @Override diff --git a/src/org/thoughtcrime/securesms/database/MmsDatabase.java b/src/org/thoughtcrime/securesms/database/MmsDatabase.java index 19e306be4d..49940ee907 100644 --- a/src/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/src/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -273,6 +273,14 @@ public class MmsDatabase extends Database implements MmsSmsColumns { database.update(TABLE_NAME, contentValues, THREAD_ID + " = ?", new String[] {threadId+""}); } + public void setAllMessagesRead() { + SQLiteDatabase database = databaseHelper.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(READ, 1); + + database.update(TABLE_NAME, contentValues, null, null); + } + public SendReq[] getOutgoingMessages(MasterSecret masterSecret, long messageId) throws MmsException { diff --git a/src/org/thoughtcrime/securesms/database/SmsDatabase.java b/src/org/thoughtcrime/securesms/database/SmsDatabase.java index 979d6a47e0..d3d5e75535 100644 --- a/src/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/src/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -182,11 +182,17 @@ public class SmsDatabase extends Database implements MmsSmsColumns { ContentValues contentValues = new ContentValues(); contentValues.put(READ, 1); - long start = System.currentTimeMillis(); - database.update(TABLE_NAME, contentValues, THREAD_ID + " = ? AND " + READ + " = 0", new String[] {threadId+""}); - long end = System.currentTimeMillis(); + database.update(TABLE_NAME, contentValues, + THREAD_ID + " = ? AND " + READ + " = 0", + new String[] {threadId+""}); + } + + public void setAllMessagesRead() { + SQLiteDatabase database = databaseHelper.getWritableDatabase(); + ContentValues contentValues = new ContentValues(); + contentValues.put(READ, 1); - Log.w("SmsDatabase", "setMessagesRead time: " + (end - start)); + database.update(TABLE_NAME, contentValues, null, null); } protected void updateMessageBodyAndType(long messageId, String body, long maskOff, long maskOn) { diff --git a/src/org/thoughtcrime/securesms/database/ThreadDatabase.java b/src/org/thoughtcrime/securesms/database/ThreadDatabase.java index 5ef496ab2f..5ab25b90d5 100644 --- a/src/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/src/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -205,6 +205,18 @@ public class ThreadDatabase extends Database { } } + public void setAllThreadsRead() { + SQLiteDatabase db = databaseHelper.getWritableDatabase(); + ContentValues contentValues = new ContentValues(1); + contentValues.put(READ, 1); + + db.update(TABLE_NAME, contentValues, null, null); + + DatabaseFactory.getSmsDatabase(context).setAllMessagesRead(); + DatabaseFactory.getMmsDatabase(context).setAllMessagesRead(); + notifyConversationListListeners(); + } + public void setRead(long threadId) { ContentValues contentValues = new ContentValues(1); contentValues.put(READ, 1);