summaryrefslogtreecommitdiffstats
path: root/photoviewer/sample/src/com/example/photoviewersample/SampleProvider.java
blob: 86ae82b5bb521469c9597e1754389d51c2a1ea8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package com.example.photoviewersample;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

public class SampleProvider extends ContentProvider {
    private static final int PHOTOS = 1;
    private static final int PHOTO_INDIVIDUAL_1 = 2;
    private static final int PHOTO_INDIVIDUAL_2 = 3;
    private static final int PHOTO_INDIVIDUAL_3 = 4;
    private static final int PHOTO_INDIVIDUAL_4 = 5;

    private static final String PROVIDER_URI = "com.example.photoviewersample.SampleProvider";

 // Creates a UriMatcher object.
    private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

    static
    {
        sUriMatcher.addURI(PROVIDER_URI, "photos", PHOTOS);
        sUriMatcher.addURI(PROVIDER_URI, "photos/1", PHOTO_INDIVIDUAL_1);
        sUriMatcher.addURI(PROVIDER_URI, "photos/2", PHOTO_INDIVIDUAL_2);
        sUriMatcher.addURI(PROVIDER_URI, "photos/3", PHOTO_INDIVIDUAL_3);
        sUriMatcher.addURI(PROVIDER_URI, "photos/4", PHOTO_INDIVIDUAL_4);
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public String getType(Uri uri) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean onCreate() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
            String sortOrder) {
        MatrixCursor matrix = new MatrixCursor(projection);

        /*
         * Choose the table to query and a sort order based on the code returned for the incoming
         * URI. Here, too, only the statements for table 3 are shown.
         */
        switch (sUriMatcher.match(uri)) {
            // If the incoming URI was for all of the photos table
            case PHOTOS:
                addRow(matrix, PHOTO_INDIVIDUAL_1);
                addRow(matrix, PHOTO_INDIVIDUAL_2);
                addRow(matrix, PHOTO_INDIVIDUAL_3);
                addRow(matrix, PHOTO_INDIVIDUAL_4);
                break;

            // If the incoming URI was for a single row
            case PHOTO_INDIVIDUAL_1:
                addRow(matrix, PHOTO_INDIVIDUAL_1);
                break;
            case PHOTO_INDIVIDUAL_2:
                addRow(matrix, PHOTO_INDIVIDUAL_2);
                break;
            case PHOTO_INDIVIDUAL_3:
                addRow(matrix, PHOTO_INDIVIDUAL_3);
                break;
            case PHOTO_INDIVIDUAL_4:
                addRow(matrix, PHOTO_INDIVIDUAL_4);
                break;

            default:
                // If the URI is not recognized, you should do some error handling here.
        }
        // call the code to actually do the query

        return matrix;
    }

    /**
     * Adds a single row to the Cursor. A real implementation should
     * check the projection to properly match the columns.
     */
    private void addRow(MatrixCursor matrix, int match_id) {
        switch (match_id) {
            case PHOTO_INDIVIDUAL_1:
                matrix.newRow()
                .add("content://" + PROVIDER_URI + "/photos/1")                 // uri
                .add("blah.png")                                                // displayName
                .add("content://" + PROVIDER_URI + "/photos/1/contentUri")      // contentUri
                .add("content://" + PROVIDER_URI + "/photos/1/thumbnailUri")    // thumbnailUri
                .add("image/png");                                              // contentType
                break;
            case PHOTO_INDIVIDUAL_2:
                matrix.newRow()
                .add("content://" + PROVIDER_URI + "/photos/2")                 // uri
                .add("johannson.png")                                           // displayName
                .add("content://" + PROVIDER_URI + "/photos/2/contentUri")      // contentUri
                .add("content://" + PROVIDER_URI + "/photos/2/thumbnailUri")    // thumbnailUri
                .add("image/png");                                              // contentType
                break;
            case PHOTO_INDIVIDUAL_3:
                matrix.newRow()
                .add("content://" + PROVIDER_URI + "/photos/3")                 // uri
                .add("planets.png")                                             // displayName
                .add("content://" + PROVIDER_URI + "/photos/3/contentUri")      // contentUri
                .add("content://" + PROVIDER_URI + "/photos/3/thumbnailUri")    // thumbnailUri
                .add("image/png");                                              // contentType
                break;
            case PHOTO_INDIVIDUAL_4:
                matrix.newRow()
                .add("content://" + PROVIDER_URI + "/photos/4")                 // uri
                .add("galaxy.png")                                              // displayName
                .add("content://" + PROVIDER_URI + "/photos/4/contentUri")      // contentUri
                .add("content://" + PROVIDER_URI + "/photos/4/thumbnailUri")    // thumbnailUri
                .add("image/png");                                              // contentType
                break;

            default:
                // If the URI is not recognized, you should do some error handling here.
        }
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
        List<String> pathSegments = uri.getPathSegments();
        final int id = Integer.parseInt(pathSegments.get(1));
        String fileName;
        switch (id) {
            case 1:
                fileName = "blah.png";
                break;
            case 2:
                fileName = "johannson.png";
                break;
            case 3:
                fileName = "planets.png";
                break;
            case 4:
                fileName = "galaxy.png";
                break;
            default:
                fileName = null;
                break;
        }
        try {
            return getContext().getAssets().openFd(fileName);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}