diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml
index 22858f843..283a67024 100644
--- a/briar-android/src/main/AndroidManifest.xml
+++ b/briar-android/src/main/AndroidManifest.xml
@@ -445,5 +445,10 @@
+
+
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java
index 064c8d13a..13dc94b31 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java
@@ -19,6 +19,7 @@ import org.briarproject.briar.android.contact.ContactLinkInputActivity;
import org.briarproject.briar.android.contact.ContactLinkOutputActivity;
import org.briarproject.briar.android.contact.ContactListFragment;
import org.briarproject.briar.android.contact.ContactModule;
+import org.briarproject.briar.android.contact.PendingRequestsActivity;
import org.briarproject.briar.android.conversation.AliasDialogFragment;
import org.briarproject.briar.android.conversation.ConversationActivity;
import org.briarproject.briar.android.conversation.ImageActivity;
@@ -175,6 +176,7 @@ public interface ActivityComponent {
void inject(ContactLinkOutputActivity activity);
void inject(ContactLinkInputActivity activity);
+ void inject(PendingRequestsActivity activity);
// Fragments
void inject(AuthorNameFragment fragment);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactLinkInputActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactLinkInputActivity.java
index 79c5aa5da..72d9932b7 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactLinkInputActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactLinkInputActivity.java
@@ -4,23 +4,23 @@ import android.content.ClipboardManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
+import android.support.v7.app.AlertDialog.Builder;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
-import android.widget.Toast;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
import javax.annotation.Nullable;
import static android.content.ClipDescription.MIMETYPE_TEXT_PLAIN;
import static android.content.Intent.ACTION_SEND;
import static android.content.Intent.EXTRA_TEXT;
-import static android.widget.Toast.LENGTH_SHORT;
import static java.util.Objects.requireNonNull;
public class ContactLinkInputActivity extends BriarActivity
@@ -61,9 +61,7 @@ public class ContactLinkInputActivity extends BriarActivity
contactNameInput.addTextChangedListener(this);
addButton = findViewById(R.id.addButton);
- addButton.setOnClickListener(v -> Toast.makeText(this,
- "Contact " + contactNameInput.getText() + " requested",
- LENGTH_SHORT).show());
+ addButton.setOnClickListener(v -> onAddButtonClicked());
Intent i = getIntent();
if (i != null && ACTION_SEND.equals(i.getAction())) {
@@ -122,4 +120,26 @@ public class ContactLinkInputActivity extends BriarActivity
contactNameInput.getText().length() > 0);
}
+ private void onAddButtonClicked() {
+ addFakeRequest();
+
+ Builder builder = new Builder(this, R.style.BriarDialogTheme_Neutral);
+ builder.setMessage(getString(R.string.add_contact_link_question));
+ builder.setPositiveButton(R.string.yes, (dialog, which) -> {
+ startActivity(new Intent(ContactLinkInputActivity.this,
+ NavDrawerActivity.class));
+ finish();
+ });
+ builder.setNegativeButton(R.string.no, (dialog, which) -> {
+ startActivity(new Intent(ContactLinkInputActivity.this,
+ ContactLinkOutputActivity.class));
+ finish();
+ });
+ builder.show();
+ }
+
+ private void addFakeRequest() {
+ // TODO
+ }
+
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java
index dc521ffa8..b93ade598 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java
@@ -156,12 +156,11 @@ public class ContactListFragment extends BaseFragment implements EventListener,
list.setEmptyText(getString(R.string.no_contacts));
list.setEmptyAction(getString(R.string.no_contacts_action));
- snackbar =
- Snackbar.make(contentView, "There are pending contact requests",
- LENGTH_INDEFINITE);
+ snackbar = Snackbar.make(contentView,
+ R.string.pending_contact_requests_snackbar, LENGTH_INDEFINITE);
snackbar.getView().setBackgroundResource(R.color.briar_primary);
snackbar.setAction(R.string.show, v -> startActivity(
- new Intent(getContext(), ContactLinkInputActivity.class)));
+ new Intent(getContext(), PendingRequestsActivity.class)));
snackbar.setActionTextColor(ContextCompat
.getColor(getContext(), R.color.briar_button_text_positive));
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsActivity.java
new file mode 100644
index 000000000..8c3b64850
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsActivity.java
@@ -0,0 +1,55 @@
+package org.briarproject.briar.android.contact;
+
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.widget.LinearLayoutManager;
+import android.view.MenuItem;
+
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+
+import javax.annotation.Nullable;
+
+public class PendingRequestsActivity extends BriarActivity {
+
+ private PendingRequestsAdapter adapter;
+ private BriarRecyclerView list;
+
+ @Override
+ public void injectActivity(ActivityComponent component) {
+ component.inject(this);
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle state) {
+ super.onCreate(state);
+
+ setContentView(R.layout.list);
+
+ ActionBar ab = getSupportActionBar();
+ if (ab != null) {
+ ab.setDisplayHomeAsUpEnabled(true);
+ }
+
+ adapter = new PendingRequestsAdapter(this, PendingRequestsItem.class);
+ list = findViewById(R.id.list);
+ list.setLayoutManager(new LinearLayoutManager(this));
+ list.setAdapter(adapter);
+
+ adapter.add(new PendingRequestsItem("test", System.currentTimeMillis() - 50000));
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ onBackPressed();
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsAdapter.java
new file mode 100644
index 000000000..c9ba088e6
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsAdapter.java
@@ -0,0 +1,55 @@
+package org.briarproject.briar.android.contact;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.util.BriarAdapter;
+
+@NotNullByDefault
+public class PendingRequestsAdapter extends
+ BriarAdapter {
+
+ public PendingRequestsAdapter(Context ctx, Class c) {
+ super(ctx, c);
+ }
+
+ @NonNull
+ @Override
+ public PendingRequestsViewHolder onCreateViewHolder(
+ ViewGroup viewGroup, int i) {
+ View v = LayoutInflater.from(viewGroup.getContext()).inflate(
+ R.layout.list_item_pending_contact, viewGroup, false);
+ return new PendingRequestsViewHolder(v);
+ }
+
+ @Override
+ public void onBindViewHolder(
+ PendingRequestsViewHolder pendingRequestsViewHolder, int i) {
+ pendingRequestsViewHolder.bind(items.get(i));
+ }
+
+ @Override
+ public int compare(PendingRequestsItem item1, PendingRequestsItem item2) {
+ return (int) (item1.getTimestamp() - item2.getTimestamp());
+ }
+
+ @Override
+ public boolean areContentsTheSame(PendingRequestsItem item1,
+ PendingRequestsItem item2) {
+ return item1.getName().equals(item2.getName()) &&
+ item1.getTimestamp() == item2.getTimestamp();
+ }
+
+ @Override
+ public boolean areItemsTheSame(PendingRequestsItem item1,
+ PendingRequestsItem item2) {
+ return item1.getName().equals(item2.getName()) &&
+ item1.getTimestamp() == item2.getTimestamp();
+ }
+
+}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsItem.java
new file mode 100644
index 000000000..f75b38ef9
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsItem.java
@@ -0,0 +1,27 @@
+package org.briarproject.briar.android.contact;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+
+import javax.annotation.concurrent.Immutable;
+
+@Immutable
+@NotNullByDefault
+public class PendingRequestsItem {
+
+ private final String name;
+ private final long timestamp;
+
+ public PendingRequestsItem(String name, long timestamp) {
+ this.name = name;
+ this.timestamp = timestamp;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsViewHolder.java
new file mode 100644
index 000000000..e83104181
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/PendingRequestsViewHolder.java
@@ -0,0 +1,29 @@
+package org.briarproject.briar.android.contact;
+
+import android.support.v7.widget.RecyclerView.ViewHolder;
+import android.view.View;
+import android.widget.TextView;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.briar.R;
+
+import static org.briarproject.briar.android.util.UiUtils.formatDate;
+
+@NotNullByDefault
+public class PendingRequestsViewHolder extends ViewHolder {
+
+ private final TextView name;
+ private final TextView time;
+
+ public PendingRequestsViewHolder(View v) {
+ super(v);
+ name = v.findViewById(R.id.name);
+ time = v.findViewById(R.id.time);
+ }
+
+ public void bind(PendingRequestsItem item) {
+ name.setText(item.getName());
+ time.setText(formatDate(time.getContext(), item.getTimestamp()));
+ }
+
+}
diff --git a/briar-android/src/main/res/layout/list_item_pending_contact.xml b/briar-android/src/main/res/layout/list_item_pending_contact.xml
new file mode 100644
index 000000000..76243d4c9
--- /dev/null
+++ b/briar-android/src/main/res/layout/list_item_pending_contact.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
\ 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 00e5c852d..f268d802c 100644
--- a/briar-android/src/main/res/values/strings.xml
+++ b/briar-android/src/main/res/values/strings.xml
@@ -176,6 +176,11 @@
Send this link to your contact:
Briar link
Link copied
+ "There are pending contact requests"
+ Pending contact requests
+ Did you send your link already?
+ Yes
+ No
Introduce your contacts