Skip to content
Snippets Groups Projects
Commit fe6216dc authored by akwizgran's avatar akwizgran
Browse files

Show newly created identity in AddContactActivity. Dev task #40.

parent 044c10e8
No related branches found
No related tags found
No related merge requests found
......@@ -12,9 +12,6 @@ import javax.inject.Inject;
import org.briarproject.R;
import org.briarproject.android.BriarActivity;
import org.briarproject.android.identity.LocalAuthorItem;
import org.briarproject.android.identity.LocalAuthorItemComparator;
import org.briarproject.android.identity.LocalAuthorSpinnerAdapter;
import org.briarproject.api.AuthorId;
import org.briarproject.api.LocalAuthor;
import org.briarproject.api.android.DatabaseUiExecutor;
......@@ -35,6 +32,9 @@ import android.widget.Toast;
public class AddContactActivity extends BriarActivity
implements InvitationListener {
static final int REQUEST_BLUETOOTH = 1;
static final int REQUEST_CREATE_IDENTITY = 2;
private static final Logger LOG =
Logger.getLogger(AddContactActivity.class.getName());
......@@ -169,9 +169,14 @@ implements InvitationListener {
@Override
public void onActivityResult(int request, int result, Intent data) {
// This is the result of enabling Bluetooth
if(result != RESULT_CANCELED)
reset(new InvitationCodeView(this));
if(request == REQUEST_BLUETOOTH) {
if(result != RESULT_CANCELED) reset(new InvitationCodeView(this));
} else if(request == REQUEST_CREATE_IDENTITY && result == RESULT_OK) {
byte[] b = data.getByteArrayExtra("briar.LOCAL_AUTHOR_ID");
if(b == null) throw new IllegalStateException();
localAuthorId = new AuthorId(b);
setView(new ChooseIdentityView(this));
}
}
void setView(AddContactView view) {
......@@ -193,17 +198,17 @@ implements InvitationListener {
setView(view);
}
void loadLocalAuthors(final LocalAuthorSpinnerAdapter adapter) {
void loadLocalAuthors() {
dbUiExecutor.execute(new Runnable() {
public void run() {
try {
lifecycleManager.waitForDatabase();
long now = System.currentTimeMillis();
Collection<LocalAuthor> localAuthors = db.getLocalAuthors();
Collection<LocalAuthor> authors = db.getLocalAuthors();
long duration = System.currentTimeMillis() - now;
if(LOG.isLoggable(INFO))
LOG.info("Loading authors took " + duration + " ms");
displayLocalAuthors(adapter, localAuthors);
displayLocalAuthors(authors);
} catch(DbException e) {
if(LOG.isLoggable(WARNING))
LOG.log(WARNING, e.toString(), e);
......@@ -215,16 +220,13 @@ implements InvitationListener {
});
}
private void displayLocalAuthors(final LocalAuthorSpinnerAdapter adapter,
final Collection<LocalAuthor> localAuthors) {
// FIXME: The interaction between views and the container is horrible
private void displayLocalAuthors(final Collection<LocalAuthor> authors) {
runOnUiThread(new Runnable() {
public void run() {
if(localAuthors.isEmpty()) throw new IllegalStateException();
adapter.clear();
for(LocalAuthor a : localAuthors)
adapter.add(new LocalAuthorItem(a));
adapter.sort(LocalAuthorItemComparator.INSTANCE);
adapter.notifyDataSetChanged();
AddContactView view = AddContactActivity.this.view;
if(view instanceof ChooseIdentityView)
((ChooseIdentityView) view).displayLocalAuthors(authors);
}
});
}
......
......@@ -4,13 +4,20 @@ import static android.bluetooth.BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE;
import static android.bluetooth.BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION;
import static android.view.Gravity.CENTER;
import static org.briarproject.android.identity.LocalAuthorItem.NEW;
import static org.briarproject.android.invitation.AddContactActivity.REQUEST_BLUETOOTH;
import static org.briarproject.android.invitation.AddContactActivity.REQUEST_CREATE_IDENTITY;
import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
import java.util.Collection;
import org.briarproject.R;
import org.briarproject.android.identity.CreateIdentityActivity;
import org.briarproject.android.identity.LocalAuthorItem;
import org.briarproject.android.identity.LocalAuthorItemComparator;
import org.briarproject.android.identity.LocalAuthorSpinnerAdapter;
import org.briarproject.api.AuthorId;
import org.briarproject.api.LocalAuthor;
import android.content.Context;
import android.content.Intent;
......@@ -53,7 +60,6 @@ implements OnItemSelectedListener, OnClickListener {
spinner = new Spinner(ctx);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
container.loadLocalAuthors(adapter);
innerLayout.addView(spinner);
addView(innerLayout);
......@@ -68,6 +74,28 @@ implements OnItemSelectedListener, OnClickListener {
continueButton.setText(R.string.continue_button);
continueButton.setOnClickListener(this);
addView(continueButton);
container.loadLocalAuthors();
}
// FIXME: The interaction between views and the container is horrible
void displayLocalAuthors(Collection<LocalAuthor> authors) {
adapter.clear();
for(LocalAuthor a : authors) adapter.add(new LocalAuthorItem(a));
adapter.sort(LocalAuthorItemComparator.INSTANCE);
adapter.notifyDataSetChanged();
// If a local author has been selected, select it again
AuthorId localAuthorId = container.getLocalAuthorId();
if(localAuthorId == null) return;
int count = adapter.getCount();
for(int i = 0; i < count; i++) {
LocalAuthorItem item = adapter.getItem(i);
if(item == NEW) continue;
if(item.getLocalAuthor().getId().equals(localAuthorId)) {
spinner.setSelection(i);
return;
}
}
}
public void onItemSelected(AdapterView<?> parent, View view, int position,
......@@ -76,7 +104,7 @@ implements OnItemSelectedListener, OnClickListener {
if(item == NEW) {
container.setLocalAuthorId(null);
Intent i = new Intent(container, CreateIdentityActivity.class);
container.startActivity(i);
container.startActivityForResult(i, REQUEST_CREATE_IDENTITY);
} else {
container.setLocalAuthorId(item.getLocalAuthor().getId());
}
......@@ -89,6 +117,6 @@ implements OnItemSelectedListener, OnClickListener {
public void onClick(View view) {
Intent i = new Intent(ACTION_REQUEST_DISCOVERABLE);
i.putExtra(EXTRA_DISCOVERABLE_DURATION, 120);
container.startActivityForResult(i, 0);
container.startActivityForResult(i, REQUEST_BLUETOOTH);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment