diff options
3 files changed, 10 insertions, 15 deletions
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/Model.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/Model.java index bae18ab06317..68b1bcc411fc 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/Model.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/Model.java @@ -22,6 +22,7 @@ import static com.android.documentsui.State.SORT_ORDER_LAST_MODIFIED; import static com.android.documentsui.State.SORT_ORDER_SIZE; import android.database.Cursor; +import android.database.MergeCursor; import android.os.Bundle; import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; @@ -71,16 +72,6 @@ public class Model { @Nullable String error; @Nullable DocumentInfo doc; - /** - * Generates a Model ID for a cursor entry that refers to a document. The Model ID is a unique - * string that can be used to identify the document referred to by the cursor. - * - * @param c A cursor that refers to a document. - */ - static String createModelId(String authority, String docId) { - return authority + "|" + docId; - } - private void notifyUpdateListeners() { for (UpdateListener listener: mUpdateListeners) { listener.onModelUpdate(this); @@ -174,7 +165,13 @@ public class Model { // Generates a Model ID for a cursor entry that refers to a document. The Model ID is a // unique string that can be used to identify the document referred to by the cursor. - mIds[pos] = createModelId(getString(mAuthorityIndex), getString(mDocIdIndex)); + // If the cursor is a merged cursor over multiple authorities, then prefix the ids + // with the authority to avoid collisions. + if (mCursor instanceof MergeCursor) { + mIds[pos] = getString(mAuthorityIndex) + "|" + mCursor.getString(mDocIdIndex); + } else { + mIds[pos] = mCursor.getString(mDocIdIndex); + } mimeType = getString(mMimeTypeIndex); isDirs[pos] = Document.MIME_TYPE_DIR.equals(mimeType); diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelTest.java index c6ad5116d93b..3536593564af 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelTest.java @@ -284,7 +284,7 @@ public class ModelTest extends AndroidTestCase { String id = Integer.toString(i); row.add(RootCursorWrapper.COLUMN_AUTHORITY, AUTHORITY); row.add(Document.COLUMN_DOCUMENT_ID, id); - currentDownloads.add(Model.createModelId(AUTHORITY, id)); + currentDownloads.add(id); } DirectoryResult r = new DirectoryResult(); diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestModel.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestModel.java index d8c29db81a77..2d819ffcdf07 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestModel.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestModel.java @@ -62,9 +62,7 @@ public class TestModel extends Model { update(r); } - // Note that model id includes authority qualifier and is distinct - // WRT documentId because of this. String idForPosition(int p) { - return createModelId(mAuthority, Integer.toString(p)); + return Integer.toString(p); } } |