17d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinpackage com.example.photoviewersample;
27d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
37d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinimport android.content.ContentProvider;
47d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinimport android.content.ContentValues;
57d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinimport android.content.UriMatcher;
67d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinimport android.content.res.AssetFileDescriptor;
77d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinimport android.database.Cursor;
87d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinimport android.database.MatrixCursor;
97d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinimport android.net.Uri;
107d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
117d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinimport java.io.FileNotFoundException;
127d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinimport java.io.IOException;
137d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinimport java.util.List;
147d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
157d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sappersteinpublic class SampleProvider extends ContentProvider {
167d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    private static final int PHOTOS = 1;
177d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    private static final int PHOTO_INDIVIDUAL_1 = 2;
187d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    private static final int PHOTO_INDIVIDUAL_2 = 3;
197d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    private static final int PHOTO_INDIVIDUAL_3 = 4;
207d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    private static final int PHOTO_INDIVIDUAL_4 = 5;
217d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
227d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    private static final String PROVIDER_URI = "com.example.photoviewersample.SampleProvider";
237d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
247d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein // Creates a UriMatcher object.
257d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
267d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
277d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    static
287d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    {
297d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        sUriMatcher.addURI(PROVIDER_URI, "photos", PHOTOS);
307d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        sUriMatcher.addURI(PROVIDER_URI, "photos/1", PHOTO_INDIVIDUAL_1);
317d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        sUriMatcher.addURI(PROVIDER_URI, "photos/2", PHOTO_INDIVIDUAL_2);
327d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        sUriMatcher.addURI(PROVIDER_URI, "photos/3", PHOTO_INDIVIDUAL_3);
337d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        sUriMatcher.addURI(PROVIDER_URI, "photos/4", PHOTO_INDIVIDUAL_4);
347d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    }
357d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
367d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    @Override
377d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    public int delete(Uri uri, String selection, String[] selectionArgs) {
387d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        // TODO Auto-generated method stub
397d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        return 0;
407d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    }
417d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
427d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    @Override
437d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    public String getType(Uri uri) {
447d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        // TODO Auto-generated method stub
457d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        return null;
467d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    }
477d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
487d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    @Override
497d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    public Uri insert(Uri uri, ContentValues values) {
507d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        // TODO Auto-generated method stub
517d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        return null;
527d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    }
537d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
547d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    @Override
557d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    public boolean onCreate() {
567d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        // TODO Auto-generated method stub
577d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        return false;
587d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    }
597d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
607d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    @Override
617d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
627d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            String sortOrder) {
637d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        MatrixCursor matrix = new MatrixCursor(projection);
647d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
657d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        /*
667d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein         * Choose the table to query and a sort order based on the code returned for the incoming
677d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein         * URI. Here, too, only the statements for table 3 are shown.
687d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein         */
697d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        switch (sUriMatcher.match(uri)) {
707d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            // If the incoming URI was for all of the photos table
717d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case PHOTOS:
727d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                addRow(matrix, PHOTO_INDIVIDUAL_1);
737d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                addRow(matrix, PHOTO_INDIVIDUAL_2);
747d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                addRow(matrix, PHOTO_INDIVIDUAL_3);
757d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                addRow(matrix, PHOTO_INDIVIDUAL_4);
767d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
777d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
787d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            // If the incoming URI was for a single row
797d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case PHOTO_INDIVIDUAL_1:
807d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                addRow(matrix, PHOTO_INDIVIDUAL_1);
817d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
827d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case PHOTO_INDIVIDUAL_2:
837d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                addRow(matrix, PHOTO_INDIVIDUAL_2);
847d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
857d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case PHOTO_INDIVIDUAL_3:
867d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                addRow(matrix, PHOTO_INDIVIDUAL_3);
877d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
887d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case PHOTO_INDIVIDUAL_4:
897d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                addRow(matrix, PHOTO_INDIVIDUAL_4);
907d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
917d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
927d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            default:
937d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                // If the URI is not recognized, you should do some error handling here.
947d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        }
957d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        // call the code to actually do the query
967d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
977d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        return matrix;
987d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    }
997d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
1007d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    /**
1017d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein     * Adds a single row to the Cursor. A real implementation should
1027d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein     * check the projection to properly match the columns.
1037d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein     */
1047d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    private void addRow(MatrixCursor matrix, int match_id) {
1057d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        switch (match_id) {
1067d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case PHOTO_INDIVIDUAL_1:
1077d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                matrix.newRow()
1087d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/1")                 // uri
1097d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("blah.png")                                                // displayName
1107d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/1/contentUri")      // contentUri
1117d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/1/thumbnailUri")    // thumbnailUri
1127d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("image/png");                                              // contentType
1137d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
1147d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case PHOTO_INDIVIDUAL_2:
1157d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                matrix.newRow()
1167d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/2")                 // uri
1177d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("johannson.png")                                           // displayName
1187d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/2/contentUri")      // contentUri
1197d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/2/thumbnailUri")    // thumbnailUri
1207d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("image/png");                                              // contentType
1217d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
1227d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case PHOTO_INDIVIDUAL_3:
1237d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                matrix.newRow()
1247d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/3")                 // uri
1257d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("planets.png")                                             // displayName
1267d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/3/contentUri")      // contentUri
1277d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/3/thumbnailUri")    // thumbnailUri
1287d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("image/png");                                              // contentType
1297d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
1307d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case PHOTO_INDIVIDUAL_4:
1317d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                matrix.newRow()
1327d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/4")                 // uri
1337d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("galaxy.png")                                              // displayName
1347d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/4/contentUri")      // contentUri
1357d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("content://" + PROVIDER_URI + "/photos/4/thumbnailUri")    // thumbnailUri
1367d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                .add("image/png");                                              // contentType
1377d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
1387d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
1397d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            default:
1407d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                // If the URI is not recognized, you should do some error handling here.
1417d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        }
1427d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    }
1437d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
1447d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    @Override
1457d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
1467d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        // TODO Auto-generated method stub
1477d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        return 0;
1487d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    }
1497d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein
1507d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    @Override
1517d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
1527d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        List<String> pathSegments = uri.getPathSegments();
1537d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        final int id = Integer.parseInt(pathSegments.get(1));
1547d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        String fileName;
1557d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        switch (id) {
1567d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case 1:
1577d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                fileName = "blah.png";
1587d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
1597d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case 2:
1607d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                fileName = "johannson.png";
1617d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
1627d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case 3:
1637d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                fileName = "planets.png";
1647d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
1657d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            case 4:
1667d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                fileName = "galaxy.png";
1677d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
1687d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            default:
1697d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                fileName = null;
1707d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein                break;
1717d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        }
1727d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        try {
1737d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            return getContext().getAssets().openFd(fileName);
1747d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        } catch (IOException e) {
1757d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            e.printStackTrace();
1767d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein            return null;
1777d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein        }
1787d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein    }
1797d13b0b858f6d2bce1a1f0088ab6739033087d19Andrew Sapperstein}
180