diff options
| -rw-r--r-- | packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java index 20316fff31b4..85164572d795 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java @@ -44,6 +44,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; +import android.os.Parcel; import android.os.Parcelable; import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; @@ -224,7 +225,8 @@ public class DirectoryFragment extends Fragment mStateKey = buildStateKey(mRoot, mDocument); mQuery = args.getString(Shared.EXTRA_QUERY); mType = args.getInt(Shared.EXTRA_TYPE); - mSelection = args.getParcelable(Shared.EXTRA_SELECTION); + final Selection selection = args.getParcelable(Shared.EXTRA_SELECTION); + mSelection = selection != null ? selection : new Selection(); mSearchMode = args.getBoolean(Shared.EXTRA_SEARCH_MODE); mIconHelper = new IconHelper(context, MODE_GRID); @@ -288,14 +290,25 @@ public class DirectoryFragment extends Fragment outState.putParcelable(Shared.EXTRA_ROOT, mRoot); outState.putParcelable(Shared.EXTRA_DOC, mDocument); outState.putString(Shared.EXTRA_QUERY, mQuery); - outState.putParcelable(Shared.EXTRA_SELECTION, mSelection); - outState.putBoolean(Shared.EXTRA_SEARCH_MODE, mSearchMode); + // Workaround. To avoid crash, write only up to 512 KB of selection. + // If more files are selected, then the selection will be lost. + final Parcel parcel = Parcel.obtain(); + try { + mSelection.writeToParcel(parcel, 0); + if (parcel.dataSize() <= 512 * 1024) { + outState.putParcelable(Shared.EXTRA_SELECTION, mSelection); + } + } finally { + parcel.recycle(); + } + + outState.putBoolean(Shared.EXTRA_SEARCH_MODE, mSearchMode); } @Override public void onActivityResult(@RequestCode int requestCode, int resultCode, Intent data) { - switch(requestCode) { + switch (requestCode) { case REQUEST_COPY_DESTINATION: handleCopyResult(resultCode, data); break; |