diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java index 692a46a28..a0fecd904 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java @@ -138,6 +138,7 @@ import static org.briarproject.briar.android.util.UiUtils.observeOnce; import static org.briarproject.briar.android.view.AuthorView.setAvatar; import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_ATTACHMENTS_PER_MESSAGE; import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH; +import static org.briarproject.briar.api.messaging.PrivateMessageFormat.TEXT_IMAGES_AUTO_DELETE; import static org.briarproject.briar.api.messaging.PrivateMessageFormat.TEXT_ONLY; @MethodsNotNullByDefault @@ -366,6 +367,11 @@ public class ConversationActivity extends BriarActivity // enable alias action if available observeOnce(viewModel.getContactItem(), this, contact -> menu.findItem(R.id.action_set_alias).setEnabled(true)); + // show auto-delete timer setting only, if contacts supports it + observeOnce(viewModel.getPrivateMessageFormat(), this, format -> { + boolean visible = format == TEXT_IMAGES_AUTO_DELETE; + menu.findItem(R.id.action_auto_delete).setVisible(visible); + }); return super.onCreateOptionsMenu(menu); } @@ -387,6 +393,11 @@ public class ConversationActivity extends BriarActivity AliasDialogFragment.newInstance().show( getSupportFragmentManager(), AliasDialogFragment.TAG); return true; + case R.id.action_auto_delete: + boolean enabled = !item.isChecked(); + viewModel.setAutoDeleteTimerEnabled(enabled); + item.setChecked(enabled); + return true; case R.id.action_delete_all_messages: askToDeleteAllMessages(); return true; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java index 66884d6c1..57e48aa88 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java @@ -59,6 +59,7 @@ import androidx.lifecycle.MutableLiveData; import static androidx.lifecycle.Transformations.map; import static java.util.Objects.requireNonNull; +import static java.util.concurrent.TimeUnit.DAYS; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.util.LogUtils.logDuration; @@ -66,6 +67,7 @@ import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.LogUtils.now; import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE; import static org.briarproject.briar.android.util.UiUtils.observeForeverOnce; +import static org.briarproject.briar.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER; import static org.briarproject.briar.api.messaging.PrivateMessageFormat.TEXT_IMAGES; import static org.briarproject.briar.api.messaging.PrivateMessageFormat.TEXT_ONLY; @@ -367,6 +369,20 @@ public class ConversationViewModel extends DbViewModel }); } + void setAutoDeleteTimerEnabled(boolean enabled) { + final long timer = enabled ? DAYS.toMillis(7) : NO_AUTO_DELETE_TIMER; + // ContactId is set before menu gets inflated and UI interaction + final ContactId c = requireNonNull(contactId); + runOnDbThread(() -> { + try { + db.transaction(false, txn -> + autoDeleteManager.setAutoDeleteTimer(txn, c, timer)); + } catch (DbException e) { + logException(LOG, WARNING, e); + } + }); + } + AttachmentRetriever getAttachmentRetriever() { return attachmentRetriever; } diff --git a/briar-android/src/main/res/menu/conversation_actions.xml b/briar-android/src/main/res/menu/conversation_actions.xml index 8447178c7..8695171fa 100644 --- a/briar-android/src/main/res/menu/conversation_actions.xml +++ b/briar-android/src/main/res/menu/conversation_actions.xml @@ -1,30 +1,38 @@ - + + app:showAsAction="never" /> + android:title="@string/set_contact_alias" + app:showAsAction="never" /> + + + app:showAsAction="never" /> + app:showAsAction="never" /> - \ No newline at end of file + diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 480335017..6d74a8044 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -165,6 +165,7 @@ Image format unsupported: %s Change contact name Contact name + Disappearing messages Delete all messages Confirm Message Deletion Are you sure that you want to delete all messages?