diff --git a/briar-android/artwork/ic_nearby.svg b/briar-android/artwork/ic_nearby.svg
index 4acef5fdb..b25e40dee 100644
--- a/briar-android/artwork/ic_nearby.svg
+++ b/briar-android/artwork/ic_nearby.svg
@@ -7,20 +7,29 @@
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- x="0px"
- y="0px"
- viewBox="0 0 24 24"
- xml:space="preserve"
- id="svg22"
- sodipodi:docname="ic_nearby.svg"
width="24"
height="24"
- inkscape:version="0.92.3 (2405546, 2018-03-11)">image/svg+xml
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
\ No newline at end of file
+ inkscape:current-layer="svg12" />
+
+
diff --git a/briar-android/artwork/nickname.svg b/briar-android/artwork/nickname.svg
new file mode 100644
index 000000000..7daecca04
--- /dev/null
+++ b/briar-android/artwork/nickname.svg
@@ -0,0 +1,176 @@
+
+
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 0af3d5b9a..5a9a1ad3d 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.ContactLinkExchangeActivity;
import org.briarproject.briar.android.contact.ContactLinkExchangeFragment;
import org.briarproject.briar.android.contact.ContactListFragment;
import org.briarproject.briar.android.contact.ContactModule;
+import org.briarproject.briar.android.contact.ContactNicknameFragment;
import org.briarproject.briar.android.contact.ContactQrCodeInputFragment;
import org.briarproject.briar.android.contact.ContactQrCodeOutputFragment;
import org.briarproject.briar.android.contact.PendingRequestsActivity;
@@ -229,6 +230,8 @@ public interface ActivityComponent {
void inject(ContactLinkExchangeFragment fragment);
+ void inject(ContactNicknameFragment fragment);
+
void inject(ContactQrCodeOutputFragment fragment);
void inject(ContactQrCodeInputFragment fragment);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactLinkExchangeFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactLinkExchangeFragment.java
index 3e29914db..d5003c297 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactLinkExchangeFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactLinkExchangeFragment.java
@@ -2,13 +2,13 @@ package org.briarproject.briar.android.contact;
import android.content.ClipData;
import android.content.ClipboardManager;
-import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputEditText;
import android.support.design.widget.TextInputLayout;
import android.support.v4.app.ShareCompat.IntentBuilder;
+import android.support.v7.widget.AppCompatImageButton;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -47,9 +47,8 @@ public class ContactLinkExchangeFragment extends BaseFragment {
}
private ClipboardManager clipboard;
- private TextInputLayout linkInputLayout, contactNameLayout;
- private TextInputEditText linkInput, contactNameInput;
- private Button addButton;
+ private TextInputLayout linkInputLayout;
+ private TextInputEditText linkInput;
@Override
public String getUniqueTag() {
@@ -68,7 +67,7 @@ public class ContactLinkExchangeFragment extends BaseFragment {
@Nullable Bundle savedInstanceState) {
if (getActivity() == null || getContext() == null) return null;
- getActivity().setTitle(R.string.add_contact_title);
+ getActivity().setTitle(R.string.add_contact_remotely_title_case);
View v = inflater.inflate(R.layout.fragment_contact_link_exchange,
container, false);
@@ -79,16 +78,8 @@ public class ContactLinkExchangeFragment extends BaseFragment {
int color =
resolveColorAttribute(getContext(), R.attr.colorControlNormal);
- addButton = v.findViewById(R.id.addButton);
- addButton.setOnClickListener(view -> onAddButtonClicked());
-
- contactNameLayout = v.findViewById(R.id.contactNameLayout);
- contactNameInput = v.findViewById(R.id.contactNameInput);
- if (SDK_INT < 23) {
- Drawable drawable = wrap(contactNameInput.getCompoundDrawables()[0]);
- setTint(drawable, color);
- contactNameInput.setCompoundDrawables(drawable, null, null, null);
- }
+ Button continueButton = v.findViewById(R.id.addButton);
+ continueButton.setOnClickListener(view -> onContinueButtonClicked());
linkInputLayout = v.findViewById(R.id.linkInputLayout);
linkInput = v.findViewById(R.id.linkInput);
@@ -100,7 +91,7 @@ public class ContactLinkExchangeFragment extends BaseFragment {
if (getArguments() != null)
linkInput.setText(getArguments().getString("link"));
- Button pasteButton = v.findViewById(R.id.pasteButton);
+ AppCompatImageButton pasteButton = v.findViewById(R.id.pasteButton);
pasteButton.setOnClickListener(view -> {
ClipData clip = clipboard.getPrimaryClip();
if (clip != null)
@@ -162,13 +153,6 @@ public class ContactLinkExchangeFragment extends BaseFragment {
linkInput.requestFocus();
return true;
} else linkInputLayout.setError(null);
- boolean validContactName = contactNameInput.getText() != null &&
- contactNameInput.getText().length() > 0;
- if (!validContactName) {
- contactNameLayout.setError(getString(R.string.nickname_missing));
- contactNameInput.requestFocus();
- return true;
- } else contactNameLayout.setError(null);
return false;
}
@@ -186,17 +170,15 @@ public class ContactLinkExchangeFragment extends BaseFragment {
return null;
}
- private void onAddButtonClicked() {
+ private void onContinueButtonClicked() {
ContactLinkExchangeActivity activity = getCastActivity();
if (activity == null || isInputError()) return;
String linkText = getLink();
if (linkText == null) throw new AssertionError();
- activity.addFakeRequest(contactNameInput.getText().toString(),
- linkText);
- Intent intent = new Intent(activity, PendingRequestsActivity.class);
- startActivity(intent);
- finish();
+ BaseFragment f = ContactNicknameFragment.newInstance(linkText);
+ activity.showNextFragment(f);
}
+
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactNicknameFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactNicknameFragment.java
new file mode 100644
index 000000000..4a142508d
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactNicknameFragment.java
@@ -0,0 +1,120 @@
+package org.briarproject.briar.android.contact;
+
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.annotation.MainThread;
+import android.support.annotation.NonNull;
+import android.support.annotation.UiThread;
+import android.support.design.widget.TextInputEditText;
+import android.support.design.widget.TextInputLayout;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.fragment.BaseFragment;
+
+import javax.annotation.Nullable;
+
+import static android.os.Build.VERSION.SDK_INT;
+import static android.support.v4.graphics.drawable.DrawableCompat.setTint;
+import static android.support.v4.graphics.drawable.DrawableCompat.wrap;
+import static java.util.Objects.requireNonNull;
+import static org.briarproject.briar.android.util.UiUtils.resolveColorAttribute;
+
+public class ContactNicknameFragment extends BaseFragment {
+
+ static final String TAG = ContactNicknameFragment.class.getName();
+
+ static BaseFragment newInstance(@Nullable String link) {
+ BaseFragment f = new ContactNicknameFragment();
+ Bundle bundle = new Bundle();
+ bundle.putString("link", link);
+ f.setArguments(bundle);
+ return f;
+ }
+
+ private TextInputLayout contactNameLayout;
+ private TextInputEditText contactNameInput;
+
+ @Nullable
+ private String link;
+
+ @Override
+ public String getUniqueTag() {
+ return TAG;
+ }
+
+ @Override
+ public void injectFragment(ActivityComponent component) {
+ component.inject(this);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater,
+ @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ if (getActivity() == null || getContext() == null) return null;
+
+ getActivity().setTitle(R.string.add_contact_remotely_title_case);
+
+ link = requireNonNull(getArguments()).getString("link");
+ Log.e(TAG, link);
+
+ View v = inflater.inflate(R.layout.fragment_contact_choose_nickname,
+ container, false);
+
+ int color =
+ resolveColorAttribute(getContext(), R.attr.colorControlNormal);
+
+ Button addButton = v.findViewById(R.id.addButton);
+ addButton.setOnClickListener(view -> onAddButtonClicked());
+
+ contactNameLayout = v.findViewById(R.id.contactNameLayout);
+ contactNameInput = v.findViewById(R.id.contactNameInput);
+ if (SDK_INT < 23) {
+ Drawable drawable = wrap(contactNameInput.getCompoundDrawables()[0]);
+ setTint(drawable, color);
+ contactNameInput.setCompoundDrawables(drawable, null, null, null);
+ }
+
+ return v;
+ }
+
+ private ContactLinkExchangeActivity getCastActivity() {
+ return (ContactLinkExchangeActivity) getActivity();
+ }
+
+ @MainThread
+ @UiThread
+ private boolean isInputError() {
+ boolean validContactName = contactNameInput.getText() != null &&
+ contactNameInput.getText().toString().trim().length() > 0;
+ if (!validContactName) {
+ contactNameLayout.setError(getString(R.string.nickname_missing));
+ contactNameInput.requestFocus();
+ return true;
+ } else contactNameLayout.setError(null);
+ return false;
+ }
+
+ private void onAddButtonClicked() {
+ ContactLinkExchangeActivity activity = getCastActivity();
+ if (activity == null || isInputError()) return;
+
+ String name = requireNonNull(contactNameInput.getText()).toString();
+ if (link == null) throw new AssertionError();
+
+ activity.addFakeRequest(name, link);
+
+ Intent intent = new Intent(activity, PendingRequestsActivity.class);
+ startActivity(intent);
+ finish();
+ }
+
+}
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
index 29cd66a6f..0df247012 100644
--- 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
@@ -1,5 +1,6 @@
package org.briarproject.briar.android.contact;
+import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.util.Log;
import android.view.View;
@@ -37,13 +38,18 @@ public class PendingRequestsViewHolder extends ViewHolder {
time.setText(formatDate(time.getContext(), item.getTimestamp()));
long diff = item.getAddAt() - System.currentTimeMillis();
Log.e("TEST", "diff: " + diff);
+ int color = ContextCompat
+ .getColor(status.getContext(), R.color.briar_green);
if (diff < SECONDS.toMillis(10)) {
status.setText(R.string.adding_contact);
} else if (diff < SECONDS.toMillis(20)) {
status.setText(R.string.connecting);
} else if (diff < SECONDS.toMillis(30)) {
status.setText(R.string.waiting_for_contact_to_come_online);
+ color = ContextCompat
+ .getColor(status.getContext(), R.color.briar_yellow);
}
+ status.setTextColor(color);
}
}
diff --git a/briar-android/src/main/res/drawable/bubble_accent.xml b/briar-android/src/main/res/drawable/bubble_accent.xml
new file mode 100644
index 000000000..959efaa82
--- /dev/null
+++ b/briar-android/src/main/res/drawable/bubble_accent.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/briar-android/src/main/res/drawable/ic_call_made.xml b/briar-android/src/main/res/drawable/ic_call_made.xml
new file mode 100644
index 000000000..1c2334060
--- /dev/null
+++ b/briar-android/src/main/res/drawable/ic_call_made.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/briar-android/src/main/res/drawable/ic_call_received.xml b/briar-android/src/main/res/drawable/ic_call_received.xml
new file mode 100644
index 000000000..7528c847b
--- /dev/null
+++ b/briar-android/src/main/res/drawable/ic_call_received.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/briar-android/src/main/res/drawable/ic_nearby.xml b/briar-android/src/main/res/drawable/ic_nearby.xml
index 3ca6c177b..9e16444a3 100644
--- a/briar-android/src/main/res/drawable/ic_nearby.xml
+++ b/briar-android/src/main/res/drawable/ic_nearby.xml
@@ -4,6 +4,6 @@
android:viewportHeight="24"
android:viewportWidth="24">
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M11.1731,2.4031C9.9686,2.4471 8.7753,2.713 7.6641,3.2033 8.187,3.7263 8.3967,4.1446 8.6059,4.563 11.6391,3.4125 15.0914,4.0394 17.4971,6.445c0.7322,0.7321 1.3593,1.5692 1.6731,2.5105 0.4184,-0.2092 0.9412,-0.3134 1.4642,-0.3134h0.1045C20.2158,7.387 19.483,6.3401 18.5416,5.2942 16.5283,3.2808 13.823,2.3062 11.1731,2.4031ZM5.1695,3.2316A2.7194,2.7194 0,0 0,2.4501 5.951,2.7194 2.7194,0 0,0 5.1695,8.6704 2.7194,2.7194 0,0 0,7.8889 5.951,2.7194 2.7194,0 0,0 5.1695,3.2316ZM2.5404,8.5359C0.9715,12.1966 1.7027,16.4848 4.6313,19.4134c1.8827,1.9872 4.4972,2.9301 7.0074,2.9301 2.5102,0 5.1264,-0.9428 7.0092,-2.9301 0.9413,-0.9414 1.6724,-2.091 2.1953,-3.3461h-0.1045c-0.5229,0 -1.0458,-0.1042 -1.4642,-0.3134 -0.4184,0.9414 -0.9409,1.7783 -1.6731,2.5105 -3.2423,3.2424 -8.5771,3.2424 -11.8194,0C3.2719,15.8588 2.6451,12.4064 3.7957,9.3733 3.3773,9.1641 2.9588,8.9542 2.5404,8.5359ZM11.5944,9.3804a2.9913,2.9913 0,0 0,-2.9903 2.9903,2.9913 2.9913,0 0,0 2.9903,2.992 2.9913,2.9913 0,0 0,2.992 -2.992,2.9913 2.9913,0 0,0 -2.992,-2.9903zM20.7334,9.8035a2.7194,2.7194 0,0 0,-2.7194 2.7194,2.7194 2.7194,0 0,0 2.7194,2.7194 2.7194,2.7194 0,0 0,2.7194 -2.7194,2.7194 2.7194,0 0,0 -2.7194,-2.7194z"/>
diff --git a/briar-android/src/main/res/drawable/ic_nickname.xml b/briar-android/src/main/res/drawable/ic_nickname.xml
new file mode 100644
index 000000000..f7e69d377
--- /dev/null
+++ b/briar-android/src/main/res/drawable/ic_nickname.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/briar-android/src/main/res/layout/fragment_contact_choose_nickname.xml b/briar-android/src/main/res/layout/fragment_contact_choose_nickname.xml
new file mode 100644
index 000000000..cd21c2a3d
--- /dev/null
+++ b/briar-android/src/main/res/layout/fragment_contact_choose_nickname.xml
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/briar-android/src/main/res/layout/fragment_contact_link_exchange.xml b/briar-android/src/main/res/layout/fragment_contact_link_exchange.xml
index b2c8daa94..8aa729a4d 100644
--- a/briar-android/src/main/res/layout/fragment_contact_link_exchange.xml
+++ b/briar-android/src/main/res/layout/fragment_contact_link_exchange.xml
@@ -4,124 +4,39 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:fillViewport="true">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:tint="@color/briar_white"/>
+ app:layout_constraintStart_toEndOf="@+id/yourLinkIcon"
+ app:layout_constraintTop_toTopOf="@+id/yourLinkIcon"/>
-
-
+
+
+ tools:visibility="gone"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/stepOneText"/>
-
\ No newline at end of file
diff --git a/briar-android/src/main/res/values/color.xml b/briar-android/src/main/res/values/color.xml
index 870fdae52..e14e4e0be 100644
--- a/briar-android/src/main/res/values/color.xml
+++ b/briar-android/src/main/res/values/color.xml
@@ -8,6 +8,7 @@
#3C80A9
#2A93C6
#EBEFF2
+ #9e9d24
#5C940D
#95D220
#ff0000
diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml
index 263da98cc..426b0a799 100644
--- a/briar-android/src/main/res/values/strings.xml
+++ b/briar-android/src/main/res/values/strings.xml
@@ -166,18 +166,23 @@
+ Add Contact Remotely
Add contact nearby
Add contact remotely
Give contact a nickname
- Enter contact\'s link
+ Enter the link from your contact here
+ Contact\'s link
Paste
QR Code
Add contact
Copy
Share
QR Code
- Exchange links with your contact
- Your link:
+ Exchange links
+ Choose Nickname
+ Choose a nickname
+ Give your contact a nickname! Only you can see it.
+ Give this link to the contact you want to add
Briar link
Link copied
"There are pending contact requests"