Fix bottomsheet misplacing after fullscreen change

This commit is contained in:
Sylvia van Os
2021-01-26 22:39:01 +01:00
parent 6a80c633a8
commit 58f8a6a929
4 changed files with 39 additions and 18 deletions

View File

@@ -5,6 +5,7 @@
Changes:
- Add support for scaling the barcode when moving to top to fit even more small scanners
- Fix bottom sheet jumping after switching to fullscreen
## v1.7.1 (2021-01-18)

View File

@@ -378,8 +378,6 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
maximizeButton.setVisibility(View.GONE);
barcodeImage.setVisibility(View.GONE);
}
Log.d(TAG, String.valueOf(bottomSheet.getTop()));
}
@Override
@@ -545,7 +543,6 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
cardIdFieldView.setVisibility(View.GONE);
bottomSheet.setVisibility(View.GONE);
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
Log.d(TAG, String.valueOf(bottomSheet.getTop()));
editButton.hide();
// Set Android to fullscreen mode
@@ -583,7 +580,6 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
// Show other UI elements
cardIdFieldView.setVisibility(View.VISIBLE);
makeBottomSheetVisibleIfUseful();
Log.d(TAG, String.valueOf(bottomSheet.getTop()));
editButton.show();
// Unset fullscreen mode
@@ -593,11 +589,6 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
& ~View.SYSTEM_UI_FLAG_FULLSCREEN
);
// FIXME: Figure out why the bottom sheet gets paddingTop 24px sometimes
// For some reason bottom sheet can get a 24px padding top after we enter and then leave fullscreen mode
// No clue why
// Android library bug?
// Set current state
barcodeIsFullscreen = false;
}

View File

@@ -6,8 +6,7 @@
android:id="@+id/coordinator_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fitsSystemWindows="true"
>
android:fitsSystemWindows="true">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fabEdit"
@@ -138,9 +137,10 @@
android:orientation="vertical"
android:visibility="gone"
app:behavior_hideable="false"
app:behavior_peekHeight="80dp"
app:behavior_peekHeight="104dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
tools:visibility="visible">
tools:visibility="visible"
android:fitsSystemWindows="true">
<ImageButton
android:id="@+id/bottomSheetButton"
@@ -155,7 +155,7 @@
<TextView
android:id="@+id/noteView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="80dp"
android:background="@color/inputBackground"
android:gravity="center"
android:padding="20dp"
@@ -166,7 +166,7 @@
<TextView
android:id="@+id/groupsView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="80dp"
android:background="@color/inputBackground"
android:gravity="center"
android:padding="20dp"
@@ -177,7 +177,7 @@
<TextView
android:id="@+id/expiryView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="80dp"
android:background="@color/inputBackground"
android:gravity="center"
android:padding="20dp"
@@ -203,6 +203,7 @@
android:layout_height="wrap_content"
android:minHeight="56.0dip"
android:layout_weight="1.0"
android:paddingTop="24dp"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp"
app:contentScrim="?colorPrimary"

View File

@@ -26,11 +26,14 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.core.widget.TextViewCompat;
import androidx.test.core.app.ApplicationProvider;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.textfield.MaterialAutoCompleteTextView;
import com.google.android.material.textfield.TextInputLayout;
import com.google.zxing.BarcodeFormat;
@@ -865,14 +868,24 @@ public class LoyaltyCardViewActivityTest
ImageView barcodeImage = activity.findViewById(R.id.barcode);
View collapsingToolbarLayout = activity.findViewById(R.id.collapsingToolbarLayout);
View bottomSheet = activity.findViewById(R.id.bottom_sheet);
ImageButton maximizeButton = activity.findViewById(R.id.maximizeButton);
ImageButton minimizeButton = activity.findViewById(R.id.minimizeButton);
FloatingActionButton editButton = activity.findViewById(R.id.fabEdit);
SeekBar barcodeScaler = activity.findViewById(R.id.barcodeScaler);
// Android should not be in fullscreen mode
int uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility();
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions);
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions);
// Elements should be visible
// Elements should be visible (except minimize button and scaler)
assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility());
assertEquals(View.VISIBLE, bottomSheet.getVisibility());
assertEquals(View.VISIBLE, maximizeButton.getVisibility());
assertEquals(View.GONE, minimizeButton.getVisibility());
assertEquals(View.VISIBLE, editButton.getVisibility());
assertEquals(View.GONE, barcodeScaler.getVisibility());
// Click barcode to toggle fullscreen
barcodeImage.performClick();
@@ -882,8 +895,13 @@ public class LoyaltyCardViewActivityTest
assertEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions);
assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions);
// Elements should not be visible
// Elements should not be visible (except minimize button and scaler)
assertEquals(View.GONE, collapsingToolbarLayout.getVisibility());
assertEquals(View.GONE, bottomSheet.getVisibility());
assertEquals(View.GONE, maximizeButton.getVisibility());
assertEquals(View.VISIBLE, minimizeButton.getVisibility());
assertEquals(View.GONE, editButton.getVisibility());
assertEquals(View.VISIBLE, barcodeScaler.getVisibility());
// Clicking barcode again should deactivate fullscreen mode
barcodeImage.performClick();
@@ -891,6 +909,11 @@ public class LoyaltyCardViewActivityTest
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions);
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions);
assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility());
assertEquals(View.VISIBLE, bottomSheet.getVisibility());
assertEquals(View.VISIBLE, maximizeButton.getVisibility());
assertEquals(View.GONE, minimizeButton.getVisibility());
assertEquals(View.VISIBLE, editButton.getVisibility());
assertEquals(View.GONE, barcodeScaler.getVisibility());
// Another click back to fullscreen
barcodeImage.performClick();
@@ -898,6 +921,11 @@ public class LoyaltyCardViewActivityTest
assertEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions);
assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions);
assertEquals(View.GONE, collapsingToolbarLayout.getVisibility());
assertEquals(View.GONE, bottomSheet.getVisibility());
assertEquals(View.GONE, maximizeButton.getVisibility());
assertEquals(View.VISIBLE, minimizeButton.getVisibility());
assertEquals(View.GONE, editButton.getVisibility());
assertEquals(View.VISIBLE, barcodeScaler.getVisibility());
// In full screen mode, back button should disable fullscreen
activity.onBackPressed();