diff options
author | Vasu Nori <vnori@google.com> | 2010-12-02 11:09:39 -0800 |
---|---|---|
committer | Vasu Nori <vnori@google.com> | 2010-12-02 12:36:44 -0800 |
commit | 1dc416983a4638a250b67b11564466088cfa41f6 (patch) | |
tree | c627e8d3c551e1eaaf544ad92d380eb567db1e61 /src/com/android/providers/downloads/DownloadInfo.java | |
parent | d36e803bd9f455f1b80e920f00d479d73b911179 (diff) | |
download | android_packages_providers_DownloadProvider-1dc416983a4638a250b67b11564466088cfa41f6.tar.gz android_packages_providers_DownloadProvider-1dc416983a4638a250b67b11564466088cfa41f6.tar.bz2 android_packages_providers_DownloadProvider-1dc416983a4638a250b67b11564466088cfa41f6.zip |
bug:3144642 fix is to treat empty strings as nulls
in the database, sometimes _data column in downloads is set to null
and sometimes to empty string. this is inconsistent
and causes bugs such as bug:3144642
aThis bug is caused by line# 793 in DownloadThread.
state.mFileName is null sometimes and empty string sometimes - because
the correspodning field is set inconsistentlt in downloads.db
_data column.
Change-Id: Ifea1544737023008eff44aef9acd976902a0c143
Diffstat (limited to 'src/com/android/providers/downloads/DownloadInfo.java')
-rw-r--r-- | src/com/android/providers/downloads/DownloadInfo.java | 64 |
1 files changed, 18 insertions, 46 deletions
diff --git a/src/com/android/providers/downloads/DownloadInfo.java b/src/com/android/providers/downloads/DownloadInfo.java index 49d42732..363b68cd 100644 --- a/src/com/android/providers/downloads/DownloadInfo.java +++ b/src/com/android/providers/downloads/DownloadInfo.java @@ -45,8 +45,6 @@ public class DownloadInfo { public static class Reader { private ContentResolver mResolver; private Cursor mCursor; - private CharArrayBuffer mOldChars; - private CharArrayBuffer mNewChars; public Reader(ContentResolver resolver, Cursor cursor) { mResolver = resolver; @@ -62,11 +60,11 @@ public class DownloadInfo { public void updateFromDatabase(DownloadInfo info) { info.mId = getLong(Downloads.Impl._ID); - info.mUri = getString(info.mUri, Downloads.Impl.COLUMN_URI); + info.mUri = getString(Downloads.Impl.COLUMN_URI); info.mNoIntegrity = getInt(Downloads.Impl.COLUMN_NO_INTEGRITY) == 1; - info.mHint = getString(info.mHint, Downloads.Impl.COLUMN_FILE_NAME_HINT); - info.mFileName = getString(info.mFileName, Downloads.Impl._DATA); - info.mMimeType = getString(info.mMimeType, Downloads.Impl.COLUMN_MIME_TYPE); + info.mHint = getString(Downloads.Impl.COLUMN_FILE_NAME_HINT); + info.mFileName = getString(Downloads.Impl._DATA); + info.mMimeType = getString(Downloads.Impl.COLUMN_MIME_TYPE); info.mDestination = getInt(Downloads.Impl.COLUMN_DESTINATION); info.mVisibility = getInt(Downloads.Impl.COLUMN_VISIBILITY); info.mStatus = getInt(Downloads.Impl.COLUMN_STATUS); @@ -75,24 +73,23 @@ public class DownloadInfo { info.mRetryAfter = retryRedirect & 0xfffffff; info.mRedirectCount = retryRedirect >> 28; info.mLastMod = getLong(Downloads.Impl.COLUMN_LAST_MODIFICATION); - info.mPackage = getString(info.mPackage, Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE); - info.mClass = getString(info.mClass, Downloads.Impl.COLUMN_NOTIFICATION_CLASS); - info.mExtras = getString(info.mExtras, Downloads.Impl.COLUMN_NOTIFICATION_EXTRAS); - info.mCookies = getString(info.mCookies, Downloads.Impl.COLUMN_COOKIE_DATA); - info.mUserAgent = getString(info.mUserAgent, Downloads.Impl.COLUMN_USER_AGENT); - info.mReferer = getString(info.mReferer, Downloads.Impl.COLUMN_REFERER); + info.mPackage = getString(Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE); + info.mClass = getString(Downloads.Impl.COLUMN_NOTIFICATION_CLASS); + info.mExtras = getString(Downloads.Impl.COLUMN_NOTIFICATION_EXTRAS); + info.mCookies = getString(Downloads.Impl.COLUMN_COOKIE_DATA); + info.mUserAgent = getString(Downloads.Impl.COLUMN_USER_AGENT); + info.mReferer = getString(Downloads.Impl.COLUMN_REFERER); info.mTotalBytes = getLong(Downloads.Impl.COLUMN_TOTAL_BYTES); info.mCurrentBytes = getLong(Downloads.Impl.COLUMN_CURRENT_BYTES); - info.mETag = getString(info.mETag, Constants.ETAG); - info.mMediaScanned = getInt(Constants.MEDIA_SCANNED) > 0; + info.mETag = getString(Constants.ETAG); + info.mMediaScanned = getInt(Constants.MEDIA_SCANNED) == 1; info.mDeleted = getInt(Downloads.Impl.COLUMN_DELETED) == 1; - info.mMediaProviderUri = getString(info.mMediaProviderUri, - Downloads.Impl.COLUMN_MEDIAPROVIDER_URI); + info.mMediaProviderUri = getString(Downloads.Impl.COLUMN_MEDIAPROVIDER_URI); info.mIsPublicApi = getInt(Downloads.Impl.COLUMN_IS_PUBLIC_API) != 0; info.mAllowedNetworkTypes = getInt(Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES); info.mAllowRoaming = getInt(Downloads.Impl.COLUMN_ALLOW_ROAMING) != 0; - info.mTitle = getString(info.mTitle, Downloads.Impl.COLUMN_TITLE); - info.mDescription = getString(info.mDescription, Downloads.Impl.COLUMN_DESCRIPTION); + info.mTitle = getString(Downloads.Impl.COLUMN_TITLE); + info.mDescription = getString(Downloads.Impl.COLUMN_DESCRIPTION); info.mBypassRecommendedSizeLimit = getInt(Downloads.Impl.COLUMN_BYPASS_RECOMMENDED_SIZE_LIMIT); @@ -130,35 +127,10 @@ public class DownloadInfo { info.mRequestHeaders.add(Pair.create(header, value)); } - /** - * Returns a String that holds the current value of the column, optimizing for the case - * where the value hasn't changed. - */ - private String getString(String old, String column) { + private String getString(String column) { int index = mCursor.getColumnIndexOrThrow(column); - if (old == null) { - return mCursor.getString(index); - } - if (mNewChars == null) { - mNewChars = new CharArrayBuffer(128); - } - mCursor.copyStringToBuffer(index, mNewChars); - int length = mNewChars.sizeCopied; - if (length != old.length()) { - return new String(mNewChars.data, 0, length); - } - if (mOldChars == null || mOldChars.sizeCopied < length) { - mOldChars = new CharArrayBuffer(length); - } - char[] oldArray = mOldChars.data; - char[] newArray = mNewChars.data; - old.getChars(0, length, oldArray, 0); - for (int i = length - 1; i >= 0; --i) { - if (oldArray[i] != newArray[i]) { - return new String(newArray, 0, length); - } - } - return old; + String s = mCursor.getString(index); + return (TextUtils.isEmpty(s)) ? null : s; } private Integer getInt(String column) { |