It seems like on Android 8 & 9 framework's View implementation has a bug that under certain scenarios if we set a view's visibility when view.getParent() is null, it can cause NPE crash.
Fixes this by switching the order of addView and setVisibility() call.
Resolves https://github.com/material-components/material-components-android/issues/917
PiperOrigin-RevId: 413978332
During a previous refactoring, the maxWidth enforcement logic was incorrectly moved to the inner layout of snackbar. Moves the logic back to the outer layout so it can be properly applied.
PiperOrigin-RevId: 413938993
Unlike other child views of AppBarLayout, CollapsingToolbarLayout will shift its top boundary to consume the window insets as well. Therefore we need to shift the top boundary back when calculating snapping positions to have a consistent logic with other views.
This CL also simplifies the calculation so the origin of the y-coordinate used in the calculation will always be the top of the AppBarLayout.
PiperOrigin-RevId: 413750156
According to the spec the centered dialog theme overlay should have message text start-aligned and it's also the previous behavior in old MaterialComponent theme overlay.
Spec: https://m3.material.io/components/dialogs/specs
PiperOrigin-RevId: 413671708
The issue is caused by failing to correctly take the daylight saving time into account - internally we use UTC time to represent dates, however when generating month titles we try to calculate the time difference of the UTC time and the local time, which can result in off-by-one errors when the first day of the month is also the first day of the daylight saving time, e.g., April 1, 1979 in Poland.
Fixes this by always using UTC time to generate month titles. Also clears the relevant implementation for a little bit since context is actually not required when we only need to format years and months.
Resolves https://github.com/material-components/material-components-android/issues/1935
PiperOrigin-RevId: 413505587
Use canvas.clipRect() to avoid drawing strokes in cutout areas instead of painting-it-white approach we are using right now.
PiperOrigin-RevId: 413246249
In the original logic we compares interpolated text size to decide if the available width should be the collapsed one or the expanded one. This logic wouldn't work if the collapsed text size and the expanded text size are the same. Refactors the logic to make the decision by interpolating fraction directly.
Resolves https://github.com/material-components/material-components-android/issues/2459
PiperOrigin-RevId: 410901171
After letter spacing is correctly set in CollapsingTextHelper.calculateUsingTextSize(), we no longer need to set letter spacing separately for collapsed and expanded titles. Also this enhances the logic by using textPaint consistently in CollapsingTextHelper.calculateBaseOffsets(), which was not the case before the change. (We got text height from textPaint and text width from tmpPaint.)
PiperOrigin-RevId: 410888232
Now clicking on dropdown menu via switch access triggers the dropdown list. Plus, the arrow icon is set to be not important for a11y only for screen readers.
PiperOrigin-RevId: 410858001
When we try to draw cutout on text field borders, we draw the stroke on a bitmap first. However if the text field is too large, the bitmap size will be too large and cannot be drawn back to the real canvas, which causes crashes.
Adds a workaround/fallback solution to avoid the crash.
PiperOrigin-RevId: 410523013
We recreated title text layout when expanding from the collapsed state but didn't correctly set the letter spacing to the expanded one. The letter spacing being used will be a interpolated value between collapsed and expanded letter spacing (close to the collapsed one due to the implementation). This will cause the text layout incorrectly calculate the line count from the wrong letter spacing and result in a broken layout.
Correctly sets the letter spacing to fix the issue.
Resolves https://github.com/material-components/material-components-android/issues/2463
PiperOrigin-RevId: 408910555
We changes letter spacing during expanding/collapsing animations, which causes us use letter spacing during animation while calculating final expanded/collapsed offset instead of final letter spacing. This in turn causes hints be drawn at the wrong positions. Uses final letter spacing during calculating offset instead to fix the problem.
Resolves https://github.com/material-components/material-components-android/issues/2277
PiperOrigin-RevId: 408904991
In single line mode, we implement the expanded title alignment by calculating the expected x-coordinate of expanded title and translate the canvas so the title will be aligned. However, when maxLines > 1, the static layout will always occupy the full available width, therefore the text alignment need to be done by the static layout instead.
Provides text alignment other than NORMAL when it's in multi-line mode to solve the issue.
Resolves https://github.com/material-components/material-components-android/issues/1276
PiperOrigin-RevId: 408895140
If somehow scroll position is set to -1 with and position offset greater than 0.5, we will decide it's a valid scroll position which causes NPE for selected child not found.
Fixes this by checking if position is valid regardless the offset and falling back to 0 if a negative position is given.
Resolves https://github.com/material-components/material-components-android/issues/2464
PiperOrigin-RevId: 408894188