mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-13 03:09:04 +01:00
Remove pending contact state from the database.
This commit is contained in:
@@ -18,10 +18,9 @@ import org.briarproject.bramble.api.contact.Contact;
|
||||
import org.briarproject.bramble.api.contact.ContactId;
|
||||
import org.briarproject.bramble.api.contact.ContactManager;
|
||||
import org.briarproject.bramble.api.contact.event.ContactAddedEvent;
|
||||
import org.briarproject.bramble.api.contact.event.ContactAddedRemotelyEvent;
|
||||
import org.briarproject.bramble.api.contact.event.ContactRemovedEvent;
|
||||
import org.briarproject.bramble.api.contact.event.PendingContactAddedEvent;
|
||||
import org.briarproject.bramble.api.contact.event.PendingContactRemovedEvent;
|
||||
import org.briarproject.bramble.api.contact.event.PendingContactStateChangedEvent;
|
||||
import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.db.NoSuchContactException;
|
||||
import org.briarproject.bramble.api.event.Event;
|
||||
@@ -65,7 +64,6 @@ import static android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAn
|
||||
import static android.support.v4.view.ViewCompat.getTransitionName;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
import static java.util.logging.Level.WARNING;
|
||||
import static org.briarproject.bramble.api.contact.PendingContactState.WAITING_FOR_CONNECTION;
|
||||
import static org.briarproject.bramble.util.LogUtils.logDuration;
|
||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||
import static org.briarproject.bramble.util.LogUtils.now;
|
||||
@@ -293,15 +291,8 @@ public class ContactListFragment extends BaseFragment implements EventListener,
|
||||
(ConversationMessageReceivedEvent) e;
|
||||
ConversationMessageHeader h = p.getMessageHeader();
|
||||
updateItem(p.getContactId(), h);
|
||||
} else if (e instanceof PendingContactStateChangedEvent) {
|
||||
PendingContactStateChangedEvent pe =
|
||||
(PendingContactStateChangedEvent) e;
|
||||
// only re-check pending contacts for initial state
|
||||
if (pe.getPendingContactState() == WAITING_FOR_CONNECTION) {
|
||||
checkForPendingContacts();
|
||||
}
|
||||
} else if (e instanceof PendingContactRemovedEvent ||
|
||||
e instanceof ContactAddedRemotelyEvent) {
|
||||
} else if (e instanceof PendingContactAddedEvent ||
|
||||
e instanceof PendingContactRemovedEvent) {
|
||||
checkForPendingContacts();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.app.Application;
|
||||
import android.arch.lifecycle.AndroidViewModel;
|
||||
import android.arch.lifecycle.LiveData;
|
||||
import android.arch.lifecycle.MutableLiveData;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.briarproject.bramble.api.FormatException;
|
||||
@@ -45,7 +44,7 @@ public class AddContactViewModel extends AndroidViewModel {
|
||||
private String remoteHandshakeLink;
|
||||
|
||||
@Inject
|
||||
public AddContactViewModel(@NonNull Application application,
|
||||
AddContactViewModel(Application application,
|
||||
ContactManager contactManager,
|
||||
@DatabaseExecutor Executor dbExecutor) {
|
||||
super(application);
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.briarproject.briar.android.contact.add.remote;
|
||||
|
||||
import org.briarproject.bramble.api.contact.PendingContact;
|
||||
import org.briarproject.bramble.api.contact.PendingContactState;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
|
||||
@Immutable
|
||||
@NotNullByDefault
|
||||
class PendingContactItem {
|
||||
|
||||
private final PendingContact pendingContact;
|
||||
private final PendingContactState state;
|
||||
|
||||
PendingContactItem(PendingContact pendingContact,
|
||||
PendingContactState state) {
|
||||
this.pendingContact = pendingContact;
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
PendingContact getPendingContact() {
|
||||
return pendingContact;
|
||||
}
|
||||
|
||||
PendingContactState getState() {
|
||||
return state;
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,8 @@ public class PendingContactListActivity extends BriarActivity
|
||||
viewModel.getPendingContacts()
|
||||
.observe(this, this::onPendingContactsChanged);
|
||||
|
||||
adapter = new PendingContactListAdapter(this, this, PendingContact.class);
|
||||
adapter = new PendingContactListAdapter(this, this,
|
||||
PendingContactItem.class);
|
||||
list = findViewById(R.id.list);
|
||||
list.setEmptyText(R.string.no_pending_contacts);
|
||||
list.setLayoutManager(new LinearLayoutManager(this));
|
||||
@@ -75,13 +76,11 @@ public class PendingContactListActivity extends BriarActivity
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
onBackPressed();
|
||||
return true;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
if (item.getItemId() == android.R.id.home) {
|
||||
onBackPressed();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -89,8 +88,9 @@ public class PendingContactListActivity extends BriarActivity
|
||||
viewModel.removePendingContact(pendingContact.getId());
|
||||
}
|
||||
|
||||
private void onPendingContactsChanged(Collection<PendingContact> contacts) {
|
||||
if (contacts.isEmpty()) {
|
||||
private void onPendingContactsChanged(
|
||||
Collection<PendingContactItem> items) {
|
||||
if (items.isEmpty()) {
|
||||
if (adapter.isEmpty()) {
|
||||
list.showData(); // hides progress bar, shows empty text
|
||||
} else {
|
||||
@@ -98,7 +98,7 @@ public class PendingContactListActivity extends BriarActivity
|
||||
supportFinishAfterTransition();
|
||||
}
|
||||
} else {
|
||||
adapter.setItems(contacts);
|
||||
adapter.setItems(items);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,12 +12,12 @@ import org.briarproject.briar.android.util.BriarAdapter;
|
||||
|
||||
@NotNullByDefault
|
||||
class PendingContactListAdapter extends
|
||||
BriarAdapter<PendingContact, PendingContactViewHolder> {
|
||||
BriarAdapter<PendingContactItem, PendingContactViewHolder> {
|
||||
|
||||
private final PendingContactListener listener;
|
||||
|
||||
PendingContactListAdapter(Context ctx, PendingContactListener listener,
|
||||
Class<PendingContact> c) {
|
||||
Class<PendingContactItem> c) {
|
||||
super(ctx, c);
|
||||
this.listener = listener;
|
||||
}
|
||||
@@ -37,23 +37,29 @@ class PendingContactListAdapter extends
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(PendingContact item1, PendingContact item2) {
|
||||
return (int) (item1.getTimestamp() - item2.getTimestamp());
|
||||
public int compare(PendingContactItem item1, PendingContactItem item2) {
|
||||
long timestamp1 = item1.getPendingContact().getTimestamp();
|
||||
long timestamp2 = item2.getPendingContact().getTimestamp();
|
||||
return Long.compare(timestamp1, timestamp2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areContentsTheSame(PendingContact item1,
|
||||
PendingContact item2) {
|
||||
return item1.getId().equals(item2.getId()) &&
|
||||
item1.getAlias().equals(item2.getAlias()) &&
|
||||
item1.getTimestamp() == item2.getTimestamp() &&
|
||||
public boolean areContentsTheSame(PendingContactItem item1,
|
||||
PendingContactItem item2) {
|
||||
PendingContact p1 = item1.getPendingContact();
|
||||
PendingContact p2 = item2.getPendingContact();
|
||||
return p1.getId().equals(p2.getId()) &&
|
||||
p1.getAlias().equals(p2.getAlias()) &&
|
||||
p1.getTimestamp() == p2.getTimestamp() &&
|
||||
item1.getState() == item2.getState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areItemsTheSame(PendingContact item1,
|
||||
PendingContact item2) {
|
||||
return item1.getId().equals(item2.getId());
|
||||
public boolean areItemsTheSame(PendingContactItem item1,
|
||||
PendingContactItem item2) {
|
||||
PendingContact p1 = item1.getPendingContact();
|
||||
PendingContact p2 = item2.getPendingContact();
|
||||
return p1.getId().equals(p2.getId());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,10 +5,12 @@ import android.arch.lifecycle.AndroidViewModel;
|
||||
import android.arch.lifecycle.LiveData;
|
||||
import android.arch.lifecycle.MutableLiveData;
|
||||
|
||||
import org.briarproject.bramble.api.Pair;
|
||||
import org.briarproject.bramble.api.contact.ContactManager;
|
||||
import org.briarproject.bramble.api.contact.PendingContact;
|
||||
import org.briarproject.bramble.api.contact.PendingContactId;
|
||||
import org.briarproject.bramble.api.contact.event.ContactAddedRemotelyEvent;
|
||||
import org.briarproject.bramble.api.contact.PendingContactState;
|
||||
import org.briarproject.bramble.api.contact.event.PendingContactAddedEvent;
|
||||
import org.briarproject.bramble.api.contact.event.PendingContactRemovedEvent;
|
||||
import org.briarproject.bramble.api.contact.event.PendingContactStateChangedEvent;
|
||||
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
||||
@@ -18,7 +20,9 @@ import org.briarproject.bramble.api.event.EventBus;
|
||||
import org.briarproject.bramble.api.event.EventListener;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -40,11 +44,11 @@ public class PendingContactListViewModel extends AndroidViewModel
|
||||
private final ContactManager contactManager;
|
||||
private final EventBus eventBus;
|
||||
|
||||
private final MutableLiveData<Collection<PendingContact>> pendingContacts =
|
||||
new MutableLiveData<>();
|
||||
private final MutableLiveData<Collection<PendingContactItem>>
|
||||
pendingContacts = new MutableLiveData<>();
|
||||
|
||||
@Inject
|
||||
public PendingContactListViewModel(Application application,
|
||||
PendingContactListViewModel(Application application,
|
||||
@DatabaseExecutor Executor dbExecutor,
|
||||
ContactManager contactManager, EventBus eventBus) {
|
||||
super(application);
|
||||
@@ -63,7 +67,7 @@ public class PendingContactListViewModel extends AndroidViewModel
|
||||
|
||||
@Override
|
||||
public void eventOccurred(Event e) {
|
||||
if (e instanceof ContactAddedRemotelyEvent ||
|
||||
if (e instanceof PendingContactAddedEvent ||
|
||||
e instanceof PendingContactStateChangedEvent ||
|
||||
e instanceof PendingContactRemovedEvent) {
|
||||
loadPendingContacts();
|
||||
@@ -73,14 +77,21 @@ public class PendingContactListViewModel extends AndroidViewModel
|
||||
private void loadPendingContacts() {
|
||||
dbExecutor.execute(() -> {
|
||||
try {
|
||||
pendingContacts.postValue(contactManager.getPendingContacts());
|
||||
Collection<Pair<PendingContact, PendingContactState>> pairs =
|
||||
contactManager.getPendingContacts();
|
||||
List<PendingContactItem> items = new ArrayList<>(pairs.size());
|
||||
for (Pair<PendingContact, PendingContactState> p : pairs) {
|
||||
items.add(new PendingContactItem(p.getFirst(),
|
||||
p.getSecond()));
|
||||
}
|
||||
pendingContacts.setValue(items);
|
||||
} catch (DbException e) {
|
||||
logException(LOG, WARNING, e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
LiveData<Collection<PendingContact>> getPendingContacts() {
|
||||
LiveData<Collection<PendingContactItem>> getPendingContacts() {
|
||||
return pendingContacts;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,13 +35,14 @@ class PendingContactViewHolder extends ViewHolder {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public void bind(PendingContact item) {
|
||||
avatar.setText(item.getAlias());
|
||||
avatar.setBackgroundBytes(item.getId().getBytes());
|
||||
name.setText(item.getAlias());
|
||||
time.setText(formatDate(time.getContext(), item.getTimestamp()));
|
||||
public void bind(PendingContactItem item) {
|
||||
PendingContact p = item.getPendingContact();
|
||||
avatar.setText(p.getAlias());
|
||||
avatar.setBackgroundBytes(p.getId().getBytes());
|
||||
name.setText(p.getAlias());
|
||||
time.setText(formatDate(time.getContext(), p.getTimestamp()));
|
||||
removeButton.setOnClickListener(v -> {
|
||||
listener.onFailedPendingContactRemoved(item);
|
||||
listener.onFailedPendingContactRemoved(p);
|
||||
removeButton.setEnabled(false);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user