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"/>