From e630f353222509474c8aa739e00bacfc3d906663 Mon Sep 17 00:00:00 2001 From: fionaxu Date: Tue, 31 May 2016 14:47:14 -0700 Subject: [PATCH] trim and strip html tags for load safe label name Bug: 28557603 Change-Id: I30b6c1d32e97c1fb71ba83c2845c310fe3b7f579 --- core/java/android/content/pm/PackageItemInfo.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java index edd888b33b1e6..30da03cc773b4 100644 --- a/core/java/android/content/pm/PackageItemInfo.java +++ b/core/java/android/content/pm/PackageItemInfo.java @@ -25,6 +25,7 @@ import android.os.Bundle; import android.os.Parcel; import android.os.UserHandle; import android.text.BidiFormatter; +import android.text.Html; import android.text.TextPaint; import android.text.TextUtils; import android.util.Printer; @@ -164,12 +165,13 @@ public class PackageItemInfo { @SystemApi public @NonNull CharSequence loadSafeLabel(@NonNull PackageManager pm) { // loadLabel() always returns non-null - CharSequence label = loadLabel(pm); + String label = loadLabel(pm).toString(); + // strip HTML tags to avoid
and other tags overwriting original message + String labelStr = Html.fromHtml(label).toString(); // If the label contains new line characters it may push the UI // down to hide a part of it. Labels shouldn't have new line // characters, so just truncate at the first time one is seen. - String labelStr = label.toString(); final int labelLength = labelStr.length(); int offset = 0; while (offset < labelLength) { @@ -181,13 +183,18 @@ public class PackageItemInfo { labelStr = labelStr.substring(0, offset); break; } + // replace all non-break space to " " in order to be trimmed + if (type == Character.SPACE_SEPARATOR) { + labelStr = labelStr.substring(0, offset) + " " + labelStr.substring(offset + + Character.charCount(codePoint)); + } offset += Character.charCount(codePoint); } + labelStr = labelStr.trim(); if (labelStr.isEmpty()) { - return labelStr; + return packageName; } - TextPaint paint = new TextPaint(); paint.setTextSize(42);