Allow setting a self-destruct timer

This is a rough prototype of #1837 meant to make testing the UI easier.
This commit is contained in:
Torsten Grote
2020-12-04 13:52:27 -03:00
committed by akwizgran
parent 9f9d5642c2
commit 4a73daa214
4 changed files with 46 additions and 10 deletions

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -1,30 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/action_introduction"
android:enabled="false"
android:icon="@drawable/introduction_white"
android:title="@string/introduction_menu_item"
android:enabled="false"
app:showAsAction="never"/>
app:showAsAction="never" />
<item
android:id="@+id/action_set_alias"
android:title="@string/set_contact_alias"
android:enabled="false"
app:showAsAction="never"/>
android:title="@string/set_contact_alias"
app:showAsAction="never" />
<item
android:id="@+id/action_auto_delete"
android:checkable="true"
android:title="@string/menu_item_auto_delete"
android:visible="false"
app:showAsAction="never"
tools:visible="true" />
<item
android:id="@+id/action_delete_all_messages"
android:title="@string/delete_all_messages"
app:showAsAction="never"/>
app:showAsAction="never" />
<item
android:id="@+id/action_social_remove_person"
android:icon="@drawable/action_delete_white"
android:title="@string/delete_contact"
app:showAsAction="never"/>
app:showAsAction="never" />
</menu>
</menu>

View File

@@ -165,6 +165,7 @@
<string name="image_attach_error_invalid_mime_type">Image format unsupported: %s</string>
<string name="set_contact_alias">Change contact name</string>
<string name="set_contact_alias_hint">Contact name</string>
<string name="menu_item_auto_delete">Disappearing messages</string>
<string name="delete_all_messages">Delete all messages</string>
<string name="dialog_title_delete_all_messages">Confirm Message Deletion</string>
<string name="dialog_message_delete_all_messages">Are you sure that you want to delete all messages?</string>