Fix 1809590: text is truncated in a couple of "incoming call" menu items
David Brown [Fri, 24 Apr 2009 03:02:33 +0000 (20:02 -0700)]
The in-call screen has a couple of menu items with labels that are too
long for a single line.  So for those items we turn off the icon (which
leaves enough room for 2 lines) and use explicit '\n' chars in the
string resources to break the text into two lines.

Unfotunately this never actually worked :-(
The InCallMenuItemView class has always forced itself into single-line
mode, which causes the '\n' chars in the text to be ignored.

The fix: *don't* force single-line mode for menu items that don't have
an icon.  (If there's no icon, that means there *is* room for 2 lines of
text.)

TESTED: Confirmed that the multi-line menu items now look correct, and
the other in-call menu items are unchanged.

src/com/android/phone/InCallMenuItemView.java

index 5368780..ff186c1 100644 (file)
@@ -62,11 +62,6 @@ class InCallMenuItemView extends TextView {
         setFocusable(true);
         setTextAppearance(context, textAppearance);
 
-        // These three are needed for marqueeing to look pretty
-        setEllipsize(TruncateAt.MARQUEE);
-        setHorizontalFadingEdgeEnabled(true);
-        setSingleLine(true);
-
         // Set the padding like the regular menu items do
         setPadding(3, getPaddingTop(), 3, getPaddingBottom());
     }
@@ -111,6 +106,9 @@ class InCallMenuItemView extends TextView {
         if (DBG) log("setIcon(" + icon + ")...");
         mIcon = icon;
         updateCompoundDrawables();
+
+        // If there's an icon, we'll only have enough room for one line of text.
+        if (icon != null) setSingleLineMarquee();
     }
 
     /**
@@ -169,6 +167,17 @@ class InCallMenuItemView extends TextView {
         setCompoundDrawablesWithIntrinsicBounds(null, mIcon, null, mIndicatorDrawable);
     }
 
+    /**
+     * Forces this menu item into "single line" mode, with marqueeing enabled.
+     * This is only necessary when an icon is present, since otherwise
+     * there's enough room for long labels to wrap onto two lines.
+     */
+    private void setSingleLineMarquee() {
+        setEllipsize(TruncateAt.MARQUEE);
+        setHorizontalFadingEdgeEnabled(true);
+        setSingleLine(true);
+    }
+
     @Override
     public String toString() {
         return "'" + getText() + "' (" + super.toString() + ")";