diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
index 54f17282b..48a133462 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java
@@ -49,8 +49,11 @@ import org.briarproject.bramble.util.StringUtils;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
+import org.briarproject.briar.android.blog.BlogActivity;
import org.briarproject.briar.android.contact.ConversationAdapter.ConversationListener;
+import org.briarproject.briar.android.forum.ForumActivity;
import org.briarproject.briar.android.introduction.IntroductionActivity;
+import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
import org.briarproject.briar.android.view.BriarRecyclerView;
import org.briarproject.briar.android.view.TextInputView;
import org.briarproject.briar.android.view.TextInputView.TextInputListener;
@@ -850,6 +853,28 @@ public class ConversationActivity extends BriarActivity
});
}
+ @UiThread
+ @Override
+ public void open(ConversationRequestItem item) {
+ if (item.getRequestedGroupId() == null) return;
+ Intent i;
+ switch (item.getRequestType()) {
+ case FORUM:
+ i = new Intent(this, ForumActivity.class);
+ break;
+ case BLOG:
+ i = new Intent(this, BlogActivity.class);
+ break;
+ case GROUP:
+ i = new Intent(this, GroupActivity.class);
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown Request Type");
+ }
+ i.putExtra(GROUP_ID, item.getRequestedGroupId().getBytes());
+ startActivity(i);
+ }
+
@DatabaseExecutor
private void respondToIntroductionRequest(SessionId sessionId,
boolean accept, long time) throws DbException, FormatException {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java
index b8f1bb78a..b748a358c 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java
@@ -139,6 +139,9 @@ class ConversationAdapter
void onItemVisible(ConversationItem item);
void respondToRequest(ConversationRequestItem item, boolean accept);
+
+ void open(ConversationRequestItem item);
+
}
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java
index faf43cf5e..56fdfa058 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java
@@ -101,9 +101,6 @@ abstract class ConversationItem {
text = ctx.getString(
R.string.introduction_request_answered_received,
contactName, ir.getName());
- return new ConversationNoticeInItem(ir.getMessageId(),
- ir.getGroupId(), text, ir.getMessage(), ir.getTimestamp(),
- ir.isRead());
} else if (ir.contactExists()){
text = ctx.getString(
R.string.introduction_request_exists_received,
@@ -114,7 +111,7 @@ abstract class ConversationItem {
}
return new ConversationRequestItem(ir.getMessageId(),
ir.getGroupId(), INTRODUCTION, ir.getSessionId(), text,
- ir.getMessage(), ir.getTimestamp(), ir.isRead(),
+ ir.getMessage(), ir.getTimestamp(), ir.isRead(), null,
ir.wasAnswered());
}
}
@@ -203,14 +200,10 @@ abstract class ConversationItem {
} else {
throw new IllegalArgumentException("Unknown InvitationRequest");
}
- if (!ir.isAvailable()) {
- return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(),
- text, ir.getMessage(), ir.getTimestamp(), ir.isRead());
- }
return new ConversationRequestItem(ir.getId(),
ir.getGroupId(), type, ir.getSessionId(), text,
ir.getMessage(), ir.getTimestamp(), ir.isRead(),
- !ir.isAvailable());
+ ir.getInvitedGroupId(), !ir.isAvailable());
}
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java
index 3dd8dd721..54203056f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java
@@ -17,6 +17,8 @@ class ConversationRequestItem extends ConversationNoticeInItem {
enum RequestType { INTRODUCTION, FORUM, BLOG, GROUP }
+ @Nullable
+ private final GroupId requestedGroupId;
private final RequestType requestType;
private final SessionId sessionId;
private boolean answered;
@@ -24,10 +26,11 @@ class ConversationRequestItem extends ConversationNoticeInItem {
ConversationRequestItem(MessageId id, GroupId groupId,
RequestType requestType, SessionId sessionId, String text,
@Nullable String msgText, long time, boolean read,
- boolean answered) {
+ @Nullable GroupId requestedGroupId, boolean answered) {
super(id, groupId, text, msgText, time, read);
this.requestType = requestType;
this.sessionId = sessionId;
+ this.requestedGroupId = requestedGroupId;
this.answered = answered;
}
@@ -39,6 +42,11 @@ class ConversationRequestItem extends ConversationNoticeInItem {
return sessionId;
}
+ @Nullable
+ public GroupId getRequestedGroupId() {
+ return requestedGroupId;
+ }
+
boolean wasAnswered() {
return answered;
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java
index 663e0394d..e60ad04e9 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java
@@ -11,6 +11,7 @@ import org.briarproject.briar.android.contact.ConversationAdapter.ConversationLi
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
+import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.INTRODUCTION;
@UiThread
@NotNullByDefault
@@ -32,11 +33,23 @@ class ConversationRequestViewHolder extends ConversationNoticeInViewHolder {
final ConversationRequestItem item =
(ConversationRequestItem) conversationItem;
- if (item.wasAnswered()) {
+ if (item.getRequestType() == INTRODUCTION && item.wasAnswered()) {
acceptButton.setVisibility(GONE);
declineButton.setVisibility(GONE);
+ } else if (item.wasAnswered()) {
+ acceptButton.setVisibility(VISIBLE);
+ acceptButton.setText(R.string.open);
+ acceptButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ item.setAnswered(true);
+ listener.open(item);
+ }
+ });
+ declineButton.setVisibility(GONE);
} else {
acceptButton.setVisibility(VISIBLE);
+ acceptButton.setText(R.string.accept);
acceptButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
diff --git a/briar-android/src/main/res/layout/list_item_conversation_request.xml b/briar-android/src/main/res/layout/list_item_conversation_request.xml
index 3932e82e5..3d6388a1c 100644
--- a/briar-android/src/main/res/layout/list_item_conversation_request.xml
+++ b/briar-android/src/main/res/layout/list_item_conversation_request.xml
@@ -43,7 +43,7 @@
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/text"
android:layout_alignRight="@+id/text"
- android:layout_below="@+id/declineButton"
+ android:layout_below="@+id/acceptButton"
android:layout_marginTop="@dimen/message_bubble_timestamp_margin"
android:textColor="@color/private_message_date"
android:textSize="@dimen/text_size_tiny"
@@ -57,6 +57,7 @@
android:layout_alignEnd="@+id/text"
android:layout_alignRight="@+id/text"
android:layout_below="@+id/text"
+ android:layout_marginBottom="-10dp"
android:text="@string/accept"/>
diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml
index f9fad4a27..a23ec94b1 100644
--- a/briar-android/src/main/res/values/strings.xml
+++ b/briar-android/src/main/res/values/strings.xml
@@ -77,6 +77,7 @@
Offline
Send
Allow
+ Open
No data
…
The entered text is too long
@@ -182,8 +183,8 @@
Group Invitations
- You have invited %1$s to join the group "%2$s".
- %1$s has invited you to join the group "%2$s".
+ You have invited %1$s to join the group \"%2$s\".
+ %1$s has invited you to join the group \"%2$s\".
Joined group
Group invitation declined
diff --git a/briar-android/src/main/res/values/styles.xml b/briar-android/src/main/res/values/styles.xml
index 6dfcf55af..99105713d 100644
--- a/briar-android/src/main/res/values/styles.xml
+++ b/briar-android/src/main/res/values/styles.xml
@@ -37,13 +37,11 @@