mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 10:49:06 +01:00
Use a different hint in conversation when message will disappear
and keep the hint updated when the auto-delete timer changes
This commit is contained in:
@@ -136,6 +136,7 @@ import static org.briarproject.briar.android.conversation.ImageActivity.ITEM_ID;
|
||||
import static org.briarproject.briar.android.conversation.ImageActivity.NAME;
|
||||
import static org.briarproject.briar.android.util.UiUtils.observeOnce;
|
||||
import static org.briarproject.briar.android.view.AuthorView.setAvatar;
|
||||
import static org.briarproject.briar.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER;
|
||||
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;
|
||||
@@ -284,6 +285,9 @@ public class ConversationActivity extends BriarActivity
|
||||
textInputView.setMaxTextLength(MAX_PRIVATE_MESSAGE_TEXT_LENGTH);
|
||||
textInputView.setReady(false);
|
||||
textInputView.setOnKeyboardShownListener(this::scrollToBottom);
|
||||
|
||||
viewModel.getAutoDeleteTimer().observe(this, timer ->
|
||||
sendController.setAutoDeleteTimer(timer));
|
||||
}
|
||||
|
||||
private void scrollToBottom() {
|
||||
@@ -370,7 +374,10 @@ public class ConversationActivity extends BriarActivity
|
||||
// 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);
|
||||
MenuItem item = menu.findItem(R.id.action_auto_delete);
|
||||
item.setVisible(visible);
|
||||
viewModel.getAutoDeleteTimer().observe(this, timer ->
|
||||
item.setChecked(timer != NO_AUTO_DELETE_TIMER));
|
||||
});
|
||||
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.briarproject.briar.android.viewmodel.LiveEvent;
|
||||
import org.briarproject.briar.android.viewmodel.MutableLiveEvent;
|
||||
import org.briarproject.briar.api.attachment.AttachmentHeader;
|
||||
import org.briarproject.briar.api.autodelete.AutoDeleteManager;
|
||||
import org.briarproject.briar.api.autodelete.event.AutoDeleteTimerMirroredEvent;
|
||||
import org.briarproject.briar.api.avatar.event.AvatarUpdatedEvent;
|
||||
import org.briarproject.briar.api.conversation.ConversationManager;
|
||||
import org.briarproject.briar.api.identity.AuthorInfo;
|
||||
@@ -110,8 +111,10 @@ public class ConversationViewModel extends DbViewModel
|
||||
new MutableLiveEvent<>();
|
||||
private final MutableLiveData<Boolean> showIntroductionAction =
|
||||
new MutableLiveData<>();
|
||||
private final MutableLiveData<Boolean> contactDeleted =
|
||||
private final MutableLiveData<Long> autoDeleteTimer =
|
||||
new MutableLiveData<>();
|
||||
private final MutableLiveData<Boolean> contactDeleted =
|
||||
new MutableLiveData<>(false);
|
||||
private final MutableLiveEvent<PrivateMessageHeader> addedHeader =
|
||||
new MutableLiveEvent<>();
|
||||
|
||||
@@ -145,8 +148,6 @@ public class ConversationViewModel extends DbViewModel
|
||||
this.conversationManager = conversationManager;
|
||||
messagingGroupId = map(contactItem, c ->
|
||||
messagingManager.getContactGroup(c.getContact()).getId());
|
||||
contactDeleted.setValue(false);
|
||||
|
||||
eventBus.addListener(this);
|
||||
}
|
||||
|
||||
@@ -166,6 +167,11 @@ public class ConversationViewModel extends DbViewModel
|
||||
runOnDbThread(() -> attachmentRetriever
|
||||
.loadAttachmentItem(a.getMessageId()));
|
||||
}
|
||||
} else if (e instanceof AutoDeleteTimerMirroredEvent) {
|
||||
AutoDeleteTimerMirroredEvent a = (AutoDeleteTimerMirroredEvent) e;
|
||||
if (a.getContactId().equals(contactId)) {
|
||||
autoDeleteTimer.postValue(a.getNewTimer());
|
||||
}
|
||||
} else if (e instanceof AvatarUpdatedEvent) {
|
||||
AvatarUpdatedEvent a = (AvatarUpdatedEvent) e;
|
||||
if (a.getContactId().equals(contactId)) {
|
||||
@@ -215,6 +221,11 @@ public class ConversationViewModel extends DbViewModel
|
||||
contactItem.postValue(new ContactItem(c, authorInfo));
|
||||
logDuration(LOG, "Loading contact", start);
|
||||
start = now();
|
||||
long timer = db.transactionWithResult(true, txn ->
|
||||
autoDeleteManager.getAutoDeleteTimer(txn, contactId));
|
||||
autoDeleteTimer.postValue(timer);
|
||||
logDuration(LOG, "Getting auto-delete timer", start);
|
||||
start = now();
|
||||
checkFeaturesAndOnboarding(contactId);
|
||||
logDuration(LOG, "Checking for image support", start);
|
||||
} catch (NoSuchContactException e) {
|
||||
@@ -377,6 +388,7 @@ public class ConversationViewModel extends DbViewModel
|
||||
try {
|
||||
db.transaction(false, txn ->
|
||||
autoDeleteManager.setAutoDeleteTimer(txn, c, timer));
|
||||
autoDeleteTimer.postValue(timer);
|
||||
} catch (DbException e) {
|
||||
logException(LOG, WARNING, e);
|
||||
}
|
||||
@@ -411,6 +423,10 @@ public class ConversationViewModel extends DbViewModel
|
||||
return showIntroductionAction;
|
||||
}
|
||||
|
||||
LiveData<Long> getAutoDeleteTimer() {
|
||||
return autoDeleteTimer;
|
||||
}
|
||||
|
||||
LiveData<Boolean> isContactDeleted() {
|
||||
return contactDeleted;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import androidx.annotation.UiThread;
|
||||
|
||||
import static com.google.android.material.snackbar.Snackbar.LENGTH_SHORT;
|
||||
import static java.util.Collections.emptyList;
|
||||
import static org.briarproject.briar.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER;
|
||||
|
||||
@UiThread
|
||||
@NotNullByDefault
|
||||
@@ -29,6 +30,7 @@ public class TextSendController implements TextInputListener {
|
||||
protected boolean ready = true, textIsEmpty = true;
|
||||
|
||||
private final boolean allowEmptyText;
|
||||
private CharSequence defaultHint;
|
||||
|
||||
public TextSendController(TextInputView v, SendListener listener,
|
||||
boolean allowEmptyText) {
|
||||
@@ -36,6 +38,7 @@ public class TextSendController implements TextInputListener {
|
||||
this.compositeSendButton.setOnClickListener(view -> onSendEvent());
|
||||
this.listener = listener;
|
||||
this.textInput = v.getEmojiTextInputView();
|
||||
this.defaultHint = textInput.getHint();
|
||||
this.allowEmptyText = allowEmptyText;
|
||||
}
|
||||
|
||||
@@ -57,6 +60,18 @@ public class TextSendController implements TextInputListener {
|
||||
updateViewState();
|
||||
}
|
||||
|
||||
public void setAutoDeleteTimer(long timer) {
|
||||
// update hint
|
||||
if (timer == NO_AUTO_DELETE_TIMER) {
|
||||
textInput.setHint(defaultHint);
|
||||
} else {
|
||||
// this might need to be adapted when other screens
|
||||
// besides the private conversation use auto delete timers
|
||||
defaultHint = textInput.getHint();
|
||||
textInput.setHint(R.string.message_hint_auto_delete);
|
||||
}
|
||||
}
|
||||
|
||||
protected void updateViewState() {
|
||||
textInput.setEnabled(ready);
|
||||
compositeSendButton
|
||||
|
||||
@@ -157,7 +157,8 @@
|
||||
<string name="no_contacts_action">Tap the + icon to add a contact</string>
|
||||
<string name="date_no_private_messages">No messages.</string>
|
||||
<string name="no_private_messages">No messages to show</string>
|
||||
<string name="message_hint">Type message</string>
|
||||
<string name="message_hint">New message</string>
|
||||
<string name="message_hint_auto_delete">New disappearing message</string>
|
||||
<string name="image_caption_hint">Add a caption (optional)</string>
|
||||
<string name="image_attach">Attach image</string>
|
||||
<string name="image_attach_error">Could not attach image(s)</string>
|
||||
|
||||
Reference in New Issue
Block a user