From 59eb69192c47ba53cf2ea412a5fba160f2a7892d Mon Sep 17 00:00:00 2001 From: Steve Kondik Date: Mon, 7 Sep 2009 22:53:34 -0400 Subject: [PATCH 1/5] Fix an NPE in InputMethodService when mExtractAction is null. This happens with certain third-party IMEs. Fixes: http://code.google.com/p/cyanogenmod/issues/detail?id=231 Change-Id: Idf4349ee9c7c8f73c255745bc65b49ba9b593874 --- .../inputmethodservice/InputMethodService.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 5499bbafb0ff9..f4fbaadb7db30 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -1981,15 +1981,19 @@ public class InputMethodService extends AbstractInputMethodService { ei.inputType != InputType.TYPE_NULL); if (hasAction) { mExtractAccessories.setVisibility(View.VISIBLE); - if (ei.actionLabel != null) { - mExtractAction.setText(ei.actionLabel); - } else { - mExtractAction.setText(getTextForImeAction(ei.imeOptions)); + if (mExtractAction != null) { + if (ei.actionLabel != null) { + mExtractAction.setText(ei.actionLabel); + } else { + mExtractAction.setText(getTextForImeAction(ei.imeOptions)); + } + mExtractAction.setOnClickListener(mActionClickListener); } - mExtractAction.setOnClickListener(mActionClickListener); } else { mExtractAccessories.setVisibility(View.GONE); - mExtractAction.setOnClickListener(null); + if (mExtractAction != null) { + mExtractAction.setOnClickListener(null); + } } } From 2eebf5cacd1ae50038812bedbbfb083c54661ed4 Mon Sep 17 00:00:00 2001 From: Jey Date: Wed, 18 Nov 2009 18:37:31 -0800 Subject: [PATCH 2/5] 'uses-library' was not working for persistent applications. Fix by generating the applicationInfo, when asked for info. Change-Id: I44686d5a306562c6649148dce8f709e682adcdf4 --- services/java/com/android/server/PackageManagerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 86504a095daf9..cc78300467d2e 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -1861,7 +1861,7 @@ class PackageManagerService extends IPackageManager.Stub { && (p.applicationInfo.flags&ApplicationInfo.FLAG_PERSISTENT) != 0 && (!mSafeMode || (p.applicationInfo.flags &ApplicationInfo.FLAG_SYSTEM) != 0)) { - finalList.add(p.applicationInfo); + finalList.add(PackageParser.generateApplicationInfo(p, flags)); } } } From 334dc0b2709826d3b913de655b4b0125b143ecb3 Mon Sep 17 00:00:00 2001 From: takuo Date: Fri, 30 Apr 2010 05:12:19 +0900 Subject: [PATCH 3/5] Parse "multipart/vnd.wap.multipart.alternative" which is a part of multipart body (nested multipart). And take the first part of parsed as a parent part data. Change-Id: I2752654f41d642524061802772e2a7eaa10a4e2d --- .../com/google/android/mms/ContentType.java | 1 + .../com/google/android/mms/pdu/PduParser.java | 42 +++++++++++-------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/core/java/com/google/android/mms/ContentType.java b/core/java/com/google/android/mms/ContentType.java index 94bc9fdcd4bf7..b066fadae2f13 100644 --- a/core/java/com/google/android/mms/ContentType.java +++ b/core/java/com/google/android/mms/ContentType.java @@ -26,6 +26,7 @@ public class ContentType { public static final String MMS_GENERIC = "application/vnd.wap.mms-generic"; public static final String MULTIPART_MIXED = "application/vnd.wap.multipart.mixed"; public static final String MULTIPART_RELATED = "application/vnd.wap.multipart.related"; + public static final String MULTIPART_ALTERNATIVE = "application/vnd.wap.multipart.alternative"; public static final String TEXT_PLAIN = "text/plain"; public static final String TEXT_HTML = "text/html"; diff --git a/core/java/com/google/android/mms/pdu/PduParser.java b/core/java/com/google/android/mms/pdu/PduParser.java index d465c5aafb3b9..60b35cf9d4c55 100644 --- a/core/java/com/google/android/mms/pdu/PduParser.java +++ b/core/java/com/google/android/mms/pdu/PduParser.java @@ -778,26 +778,34 @@ public class PduParser { /* get part's data */ if (dataLength > 0) { byte[] partData = new byte[dataLength]; + String partContentType = new String(part.getContentType()); pduDataStream.read(partData, 0, dataLength); - // Check Content-Transfer-Encoding. - byte[] partDataEncoding = part.getContentTransferEncoding(); - if (null != partDataEncoding) { - String encoding = new String(partDataEncoding); - if (encoding.equalsIgnoreCase(PduPart.P_BASE64)) { - // Decode "base64" into "binary". - partData = Base64.decodeBase64(partData); - } else if (encoding.equalsIgnoreCase(PduPart.P_QUOTED_PRINTABLE)) { - // Decode "quoted-printable" into "binary". - partData = QuotedPrintable.decodeQuotedPrintable(partData); - } else { - // "binary" is the default encoding. + if (partContentType.equalsIgnoreCase(ContentType.MULTIPART_ALTERNATIVE)) { + // parse "multipart/vnd.wap.multipart.alternative". + PduBody childBody = parseParts(new ByteArrayInputStream(partData)); + // take the first part of children. + part = childBody.getPart(0); + } else { + // Check Content-Transfer-Encoding. + byte[] partDataEncoding = part.getContentTransferEncoding(); + if (null != partDataEncoding) { + String encoding = new String(partDataEncoding); + if (encoding.equalsIgnoreCase(PduPart.P_BASE64)) { + // Decode "base64" into "binary". + partData = Base64.decodeBase64(partData); + } else if (encoding.equalsIgnoreCase(PduPart.P_QUOTED_PRINTABLE)) { + // Decode "quoted-printable" into "binary". + partData = QuotedPrintable.decodeQuotedPrintable(partData); + } else { + // "binary" is the default encoding. + } } + if (null == partData) { + log("Decode part data error!"); + return null; + } + part.setData(partData); } - if (null == partData) { - log("Decode part data error!"); - return null; - } - part.setData(partData); } /* add this part to body */ From 42b21c3333f97877648daf90a9daaa86334a8d79 Mon Sep 17 00:00:00 2001 From: takuo Date: Fri, 30 Apr 2010 07:11:53 +0900 Subject: [PATCH 4/5] Parse custom text header and ignore it. Some MMS carrier append own custom header as text into PduData. We should parse it and ignore it at the moment. Change-Id: I4d6cf20f5cf99172ebbe310ab18101316eb04c77 --- core/java/com/google/android/mms/pdu/PduParser.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/java/com/google/android/mms/pdu/PduParser.java b/core/java/com/google/android/mms/pdu/PduParser.java index 60b35cf9d4c55..1cd118b56ac62 100644 --- a/core/java/com/google/android/mms/pdu/PduParser.java +++ b/core/java/com/google/android/mms/pdu/PduParser.java @@ -200,7 +200,18 @@ public class PduParser { PduHeaders headers = new PduHeaders(); while (keepParsing && (pduDataStream.available() > 0)) { + pduDataStream.mark(1); int headerField = extractByteValue(pduDataStream); + /* parse custom text header */ + if ((headerField >= TEXT_MIN) && (headerField <= TEXT_MAX)) { + pduDataStream.reset(); + byte [] bVal = parseWapString(pduDataStream, TYPE_TEXT_STRING); + if (LOCAL_LOGV) { + Log.v(LOG_TAG, "TextHeader: " + new String(bVal)); + } + /* we should ignore it at the moment */ + continue; + } switch (headerField) { case PduHeaders.MESSAGE_TYPE: { From 0c388fd29cf685a722ca862fe1af472b1c7e2a1f Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Queru Date: Mon, 3 May 2010 09:50:38 -0700 Subject: [PATCH 5/5] Adapt to new location of libcore Change-Id: Ie4fb163fb9f04a96f8412a996d43321accb28cc8 --- Android.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Android.mk b/Android.mk index 55748862bc26a..ebc868cbd9a6d 100644 --- a/Android.mk +++ b/Android.mk @@ -272,7 +272,7 @@ fwbase_dirs_to_document := \ # as "final" in the official SDK APIs. fwbase_dirs_to_document += core/config/sdk -# These are relative to dalvik/libcore +# These are relative to libcore # Intentionally not included from libcore: # icu openssl suncompat support libcore_to_document := \ @@ -312,7 +312,7 @@ non_base_dirs := \ dirs_to_document := \ $(fwbase_dirs_to_document) \ $(non_base_dirs) \ - $(addprefix ../../dalvik/libcore/, $(libcore_to_document)) + $(addprefix ../../libcore/, $(libcore_to_document)) html_dirs := \ $(FRAMEWORKS_BASE_SUBDIRS) \