From 094e3e21eac24258604d367e04286f6ed247257d Mon Sep 17 00:00:00 2001
From: dsn5ft <1420597+dsn5ft@users.noreply.github.com>
Date: Thu, 28 Sep 2023 21:11:21 +0000
Subject: [PATCH] [CollapsingToolbarLayout] Fix issue where expanded text gets
ellipsized too aggressively when using title fade mode and the toolbar has
menu items
PiperOrigin-RevId: 569287167
---
.../BaseTopAppBarCollapsingDemoFragment.java | 16 ++++++++++++++++
.../cat_topappbar_collapsing_large_fragment.xml | 2 +-
.../cat_topappbar_collapsing_medium_fragment.xml | 2 +-
.../catalog/topappbar/res/values/strings.xml | 6 ++++--
.../material/internal/CollapsingTextHelper.java | 4 +++-
5 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/catalog/java/io/material/catalog/topappbar/BaseTopAppBarCollapsingDemoFragment.java b/catalog/java/io/material/catalog/topappbar/BaseTopAppBarCollapsingDemoFragment.java
index d89c07a6728..df6ad9cfac3 100644
--- a/catalog/java/io/material/catalog/topappbar/BaseTopAppBarCollapsingDemoFragment.java
+++ b/catalog/java/io/material/catalog/topappbar/BaseTopAppBarCollapsingDemoFragment.java
@@ -22,6 +22,8 @@
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.LayoutRes;
@@ -32,6 +34,13 @@
/** A base fragment that displays a collapsing Top App Bar demo for the Catalog app. */
public abstract class BaseTopAppBarCollapsingDemoFragment extends DemoFragment {
+ @Override
+ public void onCreate(@Nullable Bundle bundle) {
+ super.onCreate(bundle);
+
+ setHasOptionsMenu(true);
+ }
+
@NonNull
@Override
public View onCreateDemoView(
@@ -47,6 +56,13 @@ public View onCreateDemoView(
return view;
}
+ @Override
+ public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) {
+ super.onCreateOptionsMenu(menu, menuInflater);
+
+ menuInflater.inflate(R.menu.cat_topappbar_menu, menu);
+ }
+
@Override
public boolean shouldShowDefaultDemoActionBar() {
return false;
diff --git a/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_large_fragment.xml b/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_large_fragment.xml
index 0a1b190aa4a..1ff59c1f102 100644
--- a/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_large_fragment.xml
+++ b/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_large_fragment.xml
@@ -41,7 +41,7 @@
android:layout_height="?attr/actionBarSize"
android:elevation="0dp"
app:layout_collapseMode="pin"
- app:title="@string/cat_topappbar_collapsing_demo_toolbar_title"/>
+ app:title="@string/cat_topappbar_collapsing_demo_toolbar_large_title"/>
diff --git a/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_medium_fragment.xml b/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_medium_fragment.xml
index 8101fde9173..5d80cde4495 100644
--- a/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_medium_fragment.xml
+++ b/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_medium_fragment.xml
@@ -41,7 +41,7 @@
android:layout_height="?attr/actionBarSize"
android:elevation="0dp"
app:layout_collapseMode="pin"
- app:title="@string/cat_topappbar_collapsing_demo_toolbar_title"/>
+ app:title="@string/cat_topappbar_collapsing_demo_toolbar_medium_title"/>
diff --git a/catalog/java/io/material/catalog/topappbar/res/values/strings.xml b/catalog/java/io/material/catalog/topappbar/res/values/strings.xml
index 68e1e9953db..3913a105e58 100644
--- a/catalog/java/io/material/catalog/topappbar/res/values/strings.xml
+++ b/catalog/java/io/material/catalog/topappbar/res/values/strings.xml
@@ -41,8 +41,10 @@
Regular Title
Scrolling Title
-
- Collapsing Title
+
+ Collapsing Title Medium Size
+
+ Collapsing Title Large Size
Edit
diff --git a/lib/java/com/google/android/material/internal/CollapsingTextHelper.java b/lib/java/com/google/android/material/internal/CollapsingTextHelper.java
index a9d37050669..5194ed8ec72 100644
--- a/lib/java/com/google/android/material/internal/CollapsingTextHelper.java
+++ b/lib/java/com/google/android/material/internal/CollapsingTextHelper.java
@@ -1026,9 +1026,11 @@ private void calculateUsingTextSize(final float fraction, boolean forceRecalcula
// collapsed text size
float scaledDownWidth = expandedWidth * textSizeRatio;
- if (forceRecalculate) {
+ if (forceRecalculate || fadeModeEnabled) {
// If we're forcing a recalculate during a measure pass, use the expanded width since the
// collapsed width might not be ready yet
+ // Or if the fade mode is enabled, we can also just use the expanded width because when
+ // fading out/in there is not a continuous scale transition between expanded/collapsed text
availableWidth = expandedWidth;
} else {
// If the scaled down size is larger than the actual collapsed width, we need to