From 945fdb8ee47165c69d6c5adf8b5e7a14af066ba7 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 1 Jul 2019 17:56:28 +0200 Subject: [PATCH] [android] Make Remote Contact layouts work on small screens --- .../add/remote/LinkExchangeFragment.java | 27 ++++++++++++++++++- .../src/main/res/layout/fragment_nickname.xml | 20 +++++++++++--- 2 files changed, 43 insertions(+), 4 deletions(-) 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 @@ + +