TestModel.java revision ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4
1ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay/*
2ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay * Copyright (C) 2015 The Android Open Source Project
3ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay *
4ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay * Licensed under the Apache License, Version 2.0 (the "License");
5ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay * you may not use this file except in compliance with the License.
6ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay * You may obtain a copy of the License at
7ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay *
8ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay *      http://www.apache.org/licenses/LICENSE-2.0
9ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay *
10ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay * Unless required by applicable law or agreed to in writing, software
11ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay * distributed under the License is distributed on an "AS IS" BASIS,
12ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay * See the License for the specific language governing permissions and
14ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay * limitations under the License.
15ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay */
16ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
17ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKaypackage com.android.documentsui.dirlist;
18ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
19ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKayimport android.content.Context;
20ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKayimport android.database.MatrixCursor;
21ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKayimport android.provider.DocumentsContract.Document;
22ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
23ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKayimport com.android.documentsui.DirectoryResult;
24ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKayimport com.android.documentsui.RootCursorWrapper;
25ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKayimport com.android.documentsui.dirlist.MultiSelectManager.Selection;
26ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
27ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKayimport java.util.Random;
28ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKayimport java.util.Set;
29ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
30ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKaypublic class TestModel extends Model {
31ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
32ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    private static final String[] COLUMNS = new String[]{
33ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        RootCursorWrapper.COLUMN_AUTHORITY,
34ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        Document.COLUMN_DOCUMENT_ID,
35ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        Document.COLUMN_FLAGS,
36ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        Document.COLUMN_DISPLAY_NAME,
37ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        Document.COLUMN_SIZE,
38ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        Document.COLUMN_MIME_TYPE
39ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    };
40ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
41ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    private final String mAuthority;
42ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    private Set<String> mDeleted;
43ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
44ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    /**
45ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay     * Creates a new context. context must be configured with provider for authority.
46ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay     * @see TestContext#createStorageTestContext(Context, String).
47ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay     */
48ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    public TestModel(Context context, String authority) {
49ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        super(context);
50ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        mAuthority = authority;
51ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    }
52ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
53ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    void update(String... names) {
54ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        Random rand = new Random();
55ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
56ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        MatrixCursor c = new MatrixCursor(COLUMNS);
57ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        for (int i = 0; i < names.length; i++) {
58ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay            MatrixCursor.RowBuilder row = c.newRow();
59ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay            row.add(RootCursorWrapper.COLUMN_AUTHORITY, mAuthority);
60ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay            row.add(Document.COLUMN_DOCUMENT_ID, Integer.toString(i));
61ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay            row.add(Document.COLUMN_FLAGS, Document.FLAG_SUPPORTS_DELETE);
62ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay            // Generate random document names and sizes. This forces the model's internal sort code
63ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay            // to actually do something.
64ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay            row.add(Document.COLUMN_DISPLAY_NAME, names[i]);
65ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay            row.add(Document.COLUMN_SIZE, rand.nextInt());
66ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        }
67ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
68ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        DirectoryResult r = new DirectoryResult();
69ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        r.cursor = c;
70ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        update(r);
71ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    }
72ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay
73ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    @Override
74ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    public void delete(Selection selected, DeletionListener listener) {
75ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        for (String id : selected.getAll()) {
76ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay            mDeleted.add(id);
77ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        }
78ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay        listener.onCompletion();
79ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay    }
80ef16f5f41106eaa89e5fdf0958e408a6faf7a5f4Steve McKay}
81