diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/LinkExchangeFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/LinkExchangeFragment.java
index 27e8eda6d..02b0e466b 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/LinkExchangeFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/LinkExchangeFragment.java
@@ -1,5 +1,6 @@
package org.briarproject.briar.android.contact.add.remote;
+import android.animation.ObjectAnimator;
import android.arch.lifecycle.ViewModelProvider;
import android.arch.lifecycle.ViewModelProviders;
import android.content.ClipData;
@@ -11,7 +12,9 @@ import android.support.v4.app.ShareCompat.IntentBuilder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.Button;
+import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
@@ -34,7 +37,8 @@ import static org.briarproject.briar.android.util.UiUtils.observeOnce;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
-public class LinkExchangeFragment extends BaseFragment {
+public class LinkExchangeFragment extends BaseFragment
+ implements OnGlobalLayoutListener {
private static final String TAG = LinkExchangeFragment.class.getName();
@@ -90,9 +94,30 @@ public class LinkExchangeFragment extends BaseFragment {
observeOnce(viewModel.getHandshakeLink(), this,
this::onHandshakeLinkLoaded);
+ if (savedInstanceState == null) {
+ ScrollView scrollView = (ScrollView) v;
+ // we need to wait for views to be laid out to get the heights
+ scrollView.getViewTreeObserver().addOnGlobalLayoutListener(this);
+ }
+
return v;
}
+ @Override
+ public void onGlobalLayout() {
+ ScrollView scrollView = (ScrollView) requireNonNull(getView());
+ View layout = scrollView.getChildAt(0);
+ int scrollBy = layout.getHeight() - scrollView.getHeight();
+ if (scrollBy > 0) {
+ // smoothScrollTo() is too fast due to the transition animation
+ ObjectAnimator animator = ObjectAnimator
+ .ofInt(scrollView, "scrollY", scrollBy);
+ animator.setDuration(1000);
+ animator.start();
+ }
+ layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+ }
+
private void onHandshakeLinkLoaded(String link) {
View v = requireNonNull(getView());
diff --git a/briar-android/src/main/res/layout/fragment_nickname.xml b/briar-android/src/main/res/layout/fragment_nickname.xml
index 5f681869d..887e4c898 100644
--- a/briar-android/src/main/res/layout/fragment_nickname.xml
+++ b/briar-android/src/main/res/layout/fragment_nickname.xml
@@ -26,7 +26,8 @@
app:layout_constraintEnd_toStartOf="@+id/guideline"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="0.0"/>
+ app:layout_constraintVertical_bias="0.0"
+ app:layout_constraintVertical_chainStyle="packed"/>
@@ -118,6 +121,7 @@
android:layout_marginTop="16dp"
app:errorEnabled="true"
app:hintEnabled="false"
+ app:layout_constraintBottom_toTopOf="@+id/space"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
@@ -133,6 +137,16 @@
+
+