Skip to content

Commit

Permalink
Ensure alert dialog title wraps to two lines, uses default style (#47095
Browse files Browse the repository at this point in the history
)

Summary:
Pull Request resolved: #47095

The [internal `DialogTitle` implementation from Android](https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/core/java/com/android/internal/widget/DialogTitle.java;l=63?q=DialogTitle) makes additional checks to see if the title should wrap to two lines before applying ellipsis, so this change recreates those same checks. This change also removes the text appearance and size changes made to the layout.

Reverts some of the changes made to #45395.

**Changelog:**
[Android][Fixed] - Fixed styling on alert dialog titles to wrap two lines and retain bold appearance

Reviewed By: cortinico

Differential Revision: D64543105

fbshipit-source-id: 30d1f9091aa7216eb5d00e4f8f14cbc719c803ea
  • Loading branch information
Abbondanzo authored and facebook-github-bot committed Oct 17, 2024
1 parent dc737a7 commit c54b23f
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

package com.facebook.react.modules.dialog

import android.content.Context
import android.util.AttributeSet
import android.widget.TextView

/**
* Reimplementation of Android's internal DialogTitle. This class will attempt to render titles on
* two lines if they are too long, applying ellipsis as necessary.
*
* @see
* https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/core/java/com/android/internal/widget/DialogTitle.java
*/
internal class DialogTitle : TextView {

constructor(
context: Context,
attrs: AttributeSet,
defStyleAttr: Int,
defStyleRes: Int,
) : super(context, attrs, defStyleAttr, defStyleRes)

constructor(
context: Context,
attrs: AttributeSet,
defStyleAttr: Int,
) : super(context, attrs, defStyleAttr)

constructor(context: Context, attrs: AttributeSet) : super(context, attrs)

constructor(context: Context) : super(context)

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
val layout = layout
if (layout != null) {
val lineCount = layout.lineCount
if (lineCount > 0) {
val ellipsisCount = layout.getEllipsisCount(lineCount - 1)
if (ellipsisCount > 0) {
setSingleLine(false)
setMaxLines(2)
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@
android:orientation="horizontal"
android:paddingStart="?android:attr/dialogPreferredPadding"
android:paddingTop="18dp"
android:paddingEnd="?android:attr/dialogPreferredPadding">
android:paddingEnd="?android:attr/dialogPreferredPadding"
>

<TextView
<com.facebook.react.modules.dialog.DialogTitle
android:id="@+id/alert_title"
style="?android:attr/windowTitleStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textAlignment="viewStart"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="18sp" />
/>

</LinearLayout>

0 comments on commit c54b23f

Please sign in to comment.