From 22aadb7ca975570fc5e1ff27179eb79ea9903684 Mon Sep 17 00:00:00 2001 From: rightnao Date: Mon, 13 Nov 2023 18:39:36 +0000 Subject: [PATCH] [Catalog] Fix issue with top app bar not lifting in catalog demo fragments PiperOrigin-RevId: 582013479 --- .../catalog/feature/AndroidManifest.xml | 30 ---- .../catalog/feature/DemoFragmentTest.java | 80 ----------- .../BottomNavigationAnimatedDemoFragment.java | 6 +- .../res/layout/cat_bottom_navs_animated.xml | 1 + .../card/res/layout/cat_card_fragment.xml | 4 +- .../cat_card_rich_media_demo_fragment.xml | 4 +- .../chip/res/layout/cat_chip_fragment.xml | 31 ++-- .../color/res/layout/cat_colors_fragment.xml | 4 +- .../cat_colors_harmonization_fragment.xml | 4 +- .../res/layout/picker_main_demo.xml | 4 +- .../dialog/res/layout/dialog_main_demo.xml | 4 +- .../res/layout/cat_divider_fragment.xml | 134 +++++++++--------- .../cat_divider_recyclerview_fragment.xml | 64 ++++----- .../res/layout/cat_elevation_fragment.xml | 4 +- .../fab/res/layout/cat_fab_fragment.xml | 4 +- .../catalog/feature/DemoFragment.java | 57 +------- .../feature/res/layout/cat_demo_fragment.xml | 35 ++--- .../layout/cat_navigation_rail_fragment.xml | 4 +- .../res/layout/cat_sidesheet_fragment.xml | 1 - .../res/layout/cat_slider_demo_scroll.xml | 4 +- .../res/layout/cat_textfield_fragment.xml | 9 +- ...ransition_container_transform_fragment.xml | 2 +- 22 files changed, 160 insertions(+), 330 deletions(-) delete mode 100644 catalog/androidTest/javatests/io/material/catalog/feature/AndroidManifest.xml delete mode 100644 catalog/androidTest/javatests/io/material/catalog/feature/DemoFragmentTest.java diff --git a/catalog/androidTest/javatests/io/material/catalog/feature/AndroidManifest.xml b/catalog/androidTest/javatests/io/material/catalog/feature/AndroidManifest.xml deleted file mode 100644 index a0ffe349c54..00000000000 --- a/catalog/androidTest/javatests/io/material/catalog/feature/AndroidManifest.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - diff --git a/catalog/androidTest/javatests/io/material/catalog/feature/DemoFragmentTest.java b/catalog/androidTest/javatests/io/material/catalog/feature/DemoFragmentTest.java deleted file mode 100644 index 2798ea2d5e3..00000000000 --- a/catalog/androidTest/javatests/io/material/catalog/feature/DemoFragmentTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.material.catalog.feature; - -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.swipeDown; -import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; -import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static org.hamcrest.Matchers.startsWith; - -import android.os.Bundle; -import androidx.fragment.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import androidx.annotation.Nullable; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.MediumTest; -import androidx.test.rule.ActivityTestRule; -import io.material.catalog.main.MainActivity; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * Tests for {@link DemoFragment} - */ -@MediumTest -@RunWith(AndroidJUnit4.class) -public class DemoFragmentTest { - - /** Empty demo fragment to test basic DemoFragment functionality */ - public static class SubjectForTest extends DemoFragment { - - @Override - public View onCreateDemoView(LayoutInflater layoutInflater, @Nullable ViewGroup viewGroup, - @Nullable Bundle bundle) { - return new LinearLayout(getContext()); - } - } - - @Rule - public final ActivityTestRule activityTestRule = - new ActivityTestRule<>(MainActivity.class); - - @Before - public void setUpAndLaunchFragment() { - Fragment fragment = new SubjectForTest(); - activityTestRule.getActivity() - .getSupportFragmentManager().beginTransaction() - .replace(R.id.container, fragment).commit(); - } - - @Test - public void showMemoryWidget_whenSwipeDownOnToolbar() { - onView(withId(R.id.toolbar)).perform(swipeDown()); - - onView(withId(R.id.memorymonitor_widget)) - .check(matches(isDisplayed())) - .check(matches(withText(startsWith("used:")))); - } -} diff --git a/catalog/java/io/material/catalog/bottomnav/BottomNavigationAnimatedDemoFragment.java b/catalog/java/io/material/catalog/bottomnav/BottomNavigationAnimatedDemoFragment.java index 553ec777406..10883fdd38b 100644 --- a/catalog/java/io/material/catalog/bottomnav/BottomNavigationAnimatedDemoFragment.java +++ b/catalog/java/io/material/catalog/bottomnav/BottomNavigationAnimatedDemoFragment.java @@ -50,10 +50,14 @@ public View onCreateView( LayoutInflater layoutInflater, @Nullable ViewGroup viewGroup, @Nullable Bundle bundle) { View view = super.onCreateView(layoutInflater, viewGroup, bundle); CoordinatorLayout coordinatorLayout = view.findViewById(R.id.cat_demo_fragment_container); + // For unknown reasons, setting this in the xml is cleared out but setting it here takes effect. + View container = coordinatorLayout.findViewById(R.id.cat_bottom_navs_animated_container); CoordinatorLayout.LayoutParams lp = - (LayoutParams) coordinatorLayout.getChildAt(0).getLayoutParams(); + (LayoutParams) container.getLayoutParams(); + lp.setBehavior(null); lp.gravity = Gravity.BOTTOM; + ViewCompat.setOnApplyWindowInsetsListener(coordinatorLayout, (v, insets) -> insets); return view; } diff --git a/catalog/java/io/material/catalog/bottomnav/res/layout/cat_bottom_navs_animated.xml b/catalog/java/io/material/catalog/bottomnav/res/layout/cat_bottom_navs_animated.xml index c5c4dbfd634..858e2a9397a 100644 --- a/catalog/java/io/material/catalog/bottomnav/res/layout/cat_bottom_navs_animated.xml +++ b/catalog/java/io/material/catalog/bottomnav/res/layout/cat_bottom_navs_animated.xml @@ -17,6 +17,7 @@ - - + diff --git a/catalog/java/io/material/catalog/card/res/layout/cat_card_rich_media_demo_fragment.xml b/catalog/java/io/material/catalog/card/res/layout/cat_card_rich_media_demo_fragment.xml index b325ec8eb82..a5bfb67bba5 100644 --- a/catalog/java/io/material/catalog/card/res/layout/cat_card_rich_media_demo_fragment.xml +++ b/catalog/java/io/material/catalog/card/res/layout/cat_card_rich_media_demo_fragment.xml @@ -15,7 +15,7 @@ limitations under the License. --> - - + diff --git a/catalog/java/io/material/catalog/chip/res/layout/cat_chip_fragment.xml b/catalog/java/io/material/catalog/chip/res/layout/cat_chip_fragment.xml index 55e8297400f..5d27c33cf71 100644 --- a/catalog/java/io/material/catalog/chip/res/layout/cat_chip_fragment.xml +++ b/catalog/java/io/material/catalog/chip/res/layout/cat_chip_fragment.xml @@ -15,22 +15,17 @@ limitations under the License. --> - + - - - - - - + + + diff --git a/catalog/java/io/material/catalog/color/res/layout/cat_colors_fragment.xml b/catalog/java/io/material/catalog/color/res/layout/cat_colors_fragment.xml index 434c8e232c2..2d65605da38 100644 --- a/catalog/java/io/material/catalog/color/res/layout/cat_colors_fragment.xml +++ b/catalog/java/io/material/catalog/color/res/layout/cat_colors_fragment.xml @@ -15,7 +15,7 @@ limitations under the License. --> - - + diff --git a/catalog/java/io/material/catalog/color/res/layout/cat_colors_harmonization_fragment.xml b/catalog/java/io/material/catalog/color/res/layout/cat_colors_harmonization_fragment.xml index 4a2db5c45f7..ca526e6e508 100644 --- a/catalog/java/io/material/catalog/color/res/layout/cat_colors_harmonization_fragment.xml +++ b/catalog/java/io/material/catalog/color/res/layout/cat_colors_harmonization_fragment.xml @@ -15,7 +15,7 @@ limitations under the License. --> - - + diff --git a/catalog/java/io/material/catalog/datepicker/res/layout/picker_main_demo.xml b/catalog/java/io/material/catalog/datepicker/res/layout/picker_main_demo.xml index fce64e171d4..48a92fb14e2 100644 --- a/catalog/java/io/material/catalog/datepicker/res/layout/picker_main_demo.xml +++ b/catalog/java/io/material/catalog/datepicker/res/layout/picker_main_demo.xml @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - - + diff --git a/catalog/java/io/material/catalog/dialog/res/layout/dialog_main_demo.xml b/catalog/java/io/material/catalog/dialog/res/layout/dialog_main_demo.xml index 532ce7e3787..e030e7f916c 100644 --- a/catalog/java/io/material/catalog/dialog/res/layout/dialog_main_demo.xml +++ b/catalog/java/io/material/catalog/dialog/res/layout/dialog_main_demo.xml @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - - + diff --git a/catalog/java/io/material/catalog/divider/res/layout/cat_divider_fragment.xml b/catalog/java/io/material/catalog/divider/res/layout/cat_divider_fragment.xml index 03c60bfbce9..f6d8b8c8e1d 100644 --- a/catalog/java/io/material/catalog/divider/res/layout/cat_divider_fragment.xml +++ b/catalog/java/io/material/catalog/divider/res/layout/cat_divider_fragment.xml @@ -15,97 +15,93 @@ limitations under the License. --> - - - - - - - - - - - - - + - - + - + - + + android:layout_height="wrap_content"/> - - + - + - + + android:layout_height="wrap_content" + app:dividerInsetStart="32dp"/> + + + + + + + + + + - - - + + diff --git a/catalog/java/io/material/catalog/divider/res/layout/cat_divider_recyclerview_fragment.xml b/catalog/java/io/material/catalog/divider/res/layout/cat_divider_recyclerview_fragment.xml index be7817f23bf..76a078bba7a 100644 --- a/catalog/java/io/material/catalog/divider/res/layout/cat_divider_recyclerview_fragment.xml +++ b/catalog/java/io/material/catalog/divider/res/layout/cat_divider_recyclerview_fragment.xml @@ -15,40 +15,36 @@ limitations under the License. --> - - + android:layout_height="match_parent" + android:layout_margin="16dp" + android:orientation="vertical"> - - - + + + - - - - - + + + + diff --git a/catalog/java/io/material/catalog/elevation/res/layout/cat_elevation_fragment.xml b/catalog/java/io/material/catalog/elevation/res/layout/cat_elevation_fragment.xml index b94a56d7440..285e916de4c 100644 --- a/catalog/java/io/material/catalog/elevation/res/layout/cat_elevation_fragment.xml +++ b/catalog/java/io/material/catalog/elevation/res/layout/cat_elevation_fragment.xml @@ -54,7 +54,7 @@ android:gravity="center" /> - - + diff --git a/catalog/java/io/material/catalog/fab/res/layout/cat_fab_fragment.xml b/catalog/java/io/material/catalog/fab/res/layout/cat_fab_fragment.xml index a14de909f1f..9e5c4f3f22c 100644 --- a/catalog/java/io/material/catalog/fab/res/layout/cat_fab_fragment.xml +++ b/catalog/java/io/material/catalog/fab/res/layout/cat_fab_fragment.xml @@ -23,7 +23,7 @@ android:gravity="center_horizontal" android:orientation="vertical"> - @@ -35,7 +35,7 @@ android:columnCount="3" android:rowCount="12"> - + diff --git a/catalog/java/io/material/catalog/feature/DemoFragment.java b/catalog/java/io/material/catalog/feature/DemoFragment.java index 9dfda008d65..a5aa323760d 100644 --- a/catalog/java/io/material/catalog/feature/DemoFragment.java +++ b/catalog/java/io/material/catalog/feature/DemoFragment.java @@ -20,24 +20,22 @@ import android.annotation.SuppressLint; import android.content.Context; -import android.os.Build; import android.os.Bundle; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; -import android.view.GestureDetector; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.view.ViewCompat; +import com.google.android.material.appbar.AppBarLayout.ScrollingViewBehavior; import dagger.android.AndroidInjector; import dagger.android.DispatchingAndroidInjector; import dagger.android.HasAndroidInjector; @@ -52,19 +50,12 @@ public abstract class DemoFragment extends Fragment public static final String ARG_DEMO_TITLE = "demo_title"; - private static final int MEMORY_POLLING_INTERVAL_MS = 1500; - private static final float SWIPE_MIN_DISTANCE_PX = 50; - private static final float SWIPE_MIN_VELOCITY = 50; - private Toolbar toolbar; private ViewGroup demoContainer; @Inject DispatchingAndroidInjector childFragmentInjector; @Nullable private CatalogPreferencesHelper catalogPreferencesHelper; - @Nullable private GestureDetector gestureDetector; - @Nullable private MemoryView memoryWidget; - @Nullable private ViewScheduler viewScheduler; @Override public void onAttach(Context context) { @@ -94,17 +85,14 @@ public View onCreateView( } toolbar = view.findViewById(R.id.toolbar); - // show a memory widget on Kitkat - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { - gestureDetector = new GestureDetector(getContext(), new GestureListener()); - memoryWidget = view.findViewById(R.id.memorymonitor_widget); - toolbar.setOnTouchListener((v, event) -> gestureDetector.onTouchEvent(event)); - viewScheduler = new ViewScheduler(); - } demoContainer = view.findViewById(R.id.cat_demo_fragment_container); initDemoActionBar(); - demoContainer.addView(onCreateDemoView(layoutInflater, viewGroup, bundle)); + View demoView = onCreateDemoView(layoutInflater, viewGroup, bundle); + demoContainer.addView(demoView); + + ((CoordinatorLayout.LayoutParams) demoView.getLayoutParams()) + .setBehavior(new ScrollingViewBehavior()); ViewGroup children = (ViewGroup) demoContainer.getChildAt(0); DemoUtils.addBottomSpaceInsetsIfNeeded(children, demoContainer); @@ -114,9 +102,6 @@ public View onCreateView( @Override public void onStop() { super.onStop(); - if (viewScheduler != null) { - viewScheduler.cancel(); - } } /** @@ -183,32 +168,4 @@ public boolean onOptionsItemSelected(MenuItem menuItem) { public abstract View onCreateDemoView( LayoutInflater layoutInflater, @Nullable ViewGroup viewGroup, @Nullable Bundle bundle); - private final class GestureListener extends GestureDetector.SimpleOnGestureListener { - - private final FragmentActivity activity = getActivity(); - - private final Runnable listener = - () -> - activity.runOnUiThread( - () -> { - memoryWidget.refreshMemStats(Runtime.getRuntime()); - }); - - private boolean memoryWidgetShown; - - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - if (e2.getY() - e1.getY() < SWIPE_MIN_DISTANCE_PX - || Math.abs(velocityY) < SWIPE_MIN_VELOCITY - || memoryWidgetShown) { - return false; - } - - memoryWidgetShown = true; - viewScheduler.start(listener, MEMORY_POLLING_INTERVAL_MS); - memoryWidget.setVisibility(View.VISIBLE); - - return true; - } - } } diff --git a/catalog/java/io/material/catalog/feature/res/layout/cat_demo_fragment.xml b/catalog/java/io/material/catalog/feature/res/layout/cat_demo_fragment.xml index 08883161da3..3745e241c6b 100644 --- a/catalog/java/io/material/catalog/feature/res/layout/cat_demo_fragment.xml +++ b/catalog/java/io/material/catalog/feature/res/layout/cat_demo_fragment.xml @@ -16,37 +16,28 @@ --> + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:animateLayoutChanges="true" + android:orientation="vertical"> - - - + - - - - + + diff --git a/catalog/java/io/material/catalog/navigationrail/res/layout/cat_navigation_rail_fragment.xml b/catalog/java/io/material/catalog/navigationrail/res/layout/cat_navigation_rail_fragment.xml index 29a0760b05f..7a6b93b9e07 100644 --- a/catalog/java/io/material/catalog/navigationrail/res/layout/cat_navigation_rail_fragment.xml +++ b/catalog/java/io/material/catalog/navigationrail/res/layout/cat_navigation_rail_fragment.xml @@ -29,7 +29,7 @@ app:menu="@menu/navigation_rail_menu" android:fitsSystemWindows="false"/> - - + diff --git a/catalog/java/io/material/catalog/sidesheet/res/layout/cat_sidesheet_fragment.xml b/catalog/java/io/material/catalog/sidesheet/res/layout/cat_sidesheet_fragment.xml index 6fd8a0f1a0d..cd64542ec46 100644 --- a/catalog/java/io/material/catalog/sidesheet/res/layout/cat_sidesheet_fragment.xml +++ b/catalog/java/io/material/catalog/sidesheet/res/layout/cat_sidesheet_fragment.xml @@ -26,7 +26,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" - app:liftOnScroll="false" android:stateListAnimator="@null"> - @@ -29,4 +29,4 @@ - + diff --git a/catalog/java/io/material/catalog/textfield/res/layout/cat_textfield_fragment.xml b/catalog/java/io/material/catalog/textfield/res/layout/cat_textfield_fragment.xml index 4abc0c02772..2bf86201469 100644 --- a/catalog/java/io/material/catalog/textfield/res/layout/cat_textfield_fragment.xml +++ b/catalog/java/io/material/catalog/textfield/res/layout/cat_textfield_fragment.xml @@ -14,9 +14,10 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - + - + diff --git a/catalog/java/io/material/catalog/transition/res/layout/cat_transition_container_transform_fragment.xml b/catalog/java/io/material/catalog/transition/res/layout/cat_transition_container_transform_fragment.xml index 9878a68e3bb..b428febe943 100644 --- a/catalog/java/io/material/catalog/transition/res/layout/cat_transition_container_transform_fragment.xml +++ b/catalog/java/io/material/catalog/transition/res/layout/cat_transition_container_transform_fragment.xml @@ -15,7 +15,7 @@ ~ limitations under the License. --> -