• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.example.photoviewersample;
2 
3 import android.content.ContentProvider;
4 import android.content.ContentValues;
5 import android.content.UriMatcher;
6 import android.content.res.AssetFileDescriptor;
7 import android.database.Cursor;
8 import android.database.MatrixCursor;
9 import android.net.Uri;
10 
11 import java.io.FileNotFoundException;
12 import java.io.IOException;
13 import java.util.List;
14 
15 public class SampleProvider extends ContentProvider {
16     private static final int PHOTOS = 1;
17     private static final int PHOTO_INDIVIDUAL_1 = 2;
18     private static final int PHOTO_INDIVIDUAL_2 = 3;
19     private static final int PHOTO_INDIVIDUAL_3 = 4;
20     private static final int PHOTO_INDIVIDUAL_4 = 5;
21 
22     private static final String PROVIDER_URI = "com.example.photoviewersample.SampleProvider";
23 
24  // Creates a UriMatcher object.
25     private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
26 
27     static
28     {
sUriMatcher.addURI(PROVIDER_URI, "photos", PHOTOS)29         sUriMatcher.addURI(PROVIDER_URI, "photos", PHOTOS);
sUriMatcher.addURI(PROVIDER_URI, "photos/1", PHOTO_INDIVIDUAL_1)30         sUriMatcher.addURI(PROVIDER_URI, "photos/1", PHOTO_INDIVIDUAL_1);
sUriMatcher.addURI(PROVIDER_URI, "photos/2", PHOTO_INDIVIDUAL_2)31         sUriMatcher.addURI(PROVIDER_URI, "photos/2", PHOTO_INDIVIDUAL_2);
sUriMatcher.addURI(PROVIDER_URI, "photos/3", PHOTO_INDIVIDUAL_3)32         sUriMatcher.addURI(PROVIDER_URI, "photos/3", PHOTO_INDIVIDUAL_3);
sUriMatcher.addURI(PROVIDER_URI, "photos/4", PHOTO_INDIVIDUAL_4)33         sUriMatcher.addURI(PROVIDER_URI, "photos/4", PHOTO_INDIVIDUAL_4);
34     }
35 
36     @Override
delete(Uri uri, String selection, String[] selectionArgs)37     public int delete(Uri uri, String selection, String[] selectionArgs) {
38         // TODO Auto-generated method stub
39         return 0;
40     }
41 
42     @Override
getType(Uri uri)43     public String getType(Uri uri) {
44         // TODO Auto-generated method stub
45         return null;
46     }
47 
48     @Override
insert(Uri uri, ContentValues values)49     public Uri insert(Uri uri, ContentValues values) {
50         // TODO Auto-generated method stub
51         return null;
52     }
53 
54     @Override
onCreate()55     public boolean onCreate() {
56         // TODO Auto-generated method stub
57         return false;
58     }
59 
60     @Override
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)61     public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
62             String sortOrder) {
63         MatrixCursor matrix = new MatrixCursor(projection);
64 
65         /*
66          * Choose the table to query and a sort order based on the code returned for the incoming
67          * URI. Here, too, only the statements for table 3 are shown.
68          */
69         switch (sUriMatcher.match(uri)) {
70             // If the incoming URI was for all of the photos table
71             case PHOTOS:
72                 addRow(matrix, PHOTO_INDIVIDUAL_1);
73                 addRow(matrix, PHOTO_INDIVIDUAL_2);
74                 addRow(matrix, PHOTO_INDIVIDUAL_3);
75                 addRow(matrix, PHOTO_INDIVIDUAL_4);
76                 break;
77 
78             // If the incoming URI was for a single row
79             case PHOTO_INDIVIDUAL_1:
80                 addRow(matrix, PHOTO_INDIVIDUAL_1);
81                 break;
82             case PHOTO_INDIVIDUAL_2:
83                 addRow(matrix, PHOTO_INDIVIDUAL_2);
84                 break;
85             case PHOTO_INDIVIDUAL_3:
86                 addRow(matrix, PHOTO_INDIVIDUAL_3);
87                 break;
88             case PHOTO_INDIVIDUAL_4:
89                 addRow(matrix, PHOTO_INDIVIDUAL_4);
90                 break;
91 
92             default:
93                 // If the URI is not recognized, you should do some error handling here.
94         }
95         // call the code to actually do the query
96 
97         return matrix;
98     }
99 
100     /**
101      * Adds a single row to the Cursor. A real implementation should
102      * check the projection to properly match the columns.
103      */
addRow(MatrixCursor matrix, int match_id)104     private void addRow(MatrixCursor matrix, int match_id) {
105         switch (match_id) {
106             case PHOTO_INDIVIDUAL_1:
107                 matrix.newRow()
108                 .add("content://" + PROVIDER_URI + "/photos/1")                 // uri
109                 .add("blah.png")                                                // displayName
110                 .add("content://" + PROVIDER_URI + "/photos/1/contentUri")      // contentUri
111                 .add("content://" + PROVIDER_URI + "/photos/1/thumbnailUri")    // thumbnailUri
112                 .add("image/png");                                              // contentType
113                 break;
114             case PHOTO_INDIVIDUAL_2:
115                 matrix.newRow()
116                 .add("content://" + PROVIDER_URI + "/photos/2")                 // uri
117                 .add("johannson.png")                                           // displayName
118                 .add("content://" + PROVIDER_URI + "/photos/2/contentUri")      // contentUri
119                 .add("content://" + PROVIDER_URI + "/photos/2/thumbnailUri")    // thumbnailUri
120                 .add("image/png");                                              // contentType
121                 break;
122             case PHOTO_INDIVIDUAL_3:
123                 matrix.newRow()
124                 .add("content://" + PROVIDER_URI + "/photos/3")                 // uri
125                 .add("planets.png")                                             // displayName
126                 .add("content://" + PROVIDER_URI + "/photos/3/contentUri")      // contentUri
127                 .add("content://" + PROVIDER_URI + "/photos/3/thumbnailUri")    // thumbnailUri
128                 .add("image/png");                                              // contentType
129                 break;
130             case PHOTO_INDIVIDUAL_4:
131                 matrix.newRow()
132                 .add("content://" + PROVIDER_URI + "/photos/4")                 // uri
133                 .add("galaxy.png")                                              // displayName
134                 .add("content://" + PROVIDER_URI + "/photos/4/contentUri")      // contentUri
135                 .add("content://" + PROVIDER_URI + "/photos/4/thumbnailUri")    // thumbnailUri
136                 .add("image/png");                                              // contentType
137                 break;
138 
139             default:
140                 // If the URI is not recognized, you should do some error handling here.
141         }
142     }
143 
144     @Override
update(Uri uri, ContentValues values, String selection, String[] selectionArgs)145     public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
146         // TODO Auto-generated method stub
147         return 0;
148     }
149 
150     @Override
openAssetFile(Uri uri, String mode)151     public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
152         List<String> pathSegments = uri.getPathSegments();
153         final int id = Integer.parseInt(pathSegments.get(1));
154         String fileName;
155         switch (id) {
156             case 1:
157                 fileName = "blah.png";
158                 break;
159             case 2:
160                 fileName = "johannson.png";
161                 break;
162             case 3:
163                 fileName = "planets.png";
164                 break;
165             case 4:
166                 fileName = "galaxy.png";
167                 break;
168             default:
169                 fileName = null;
170                 break;
171         }
172         try {
173             return getContext().getAssets().openFd(fileName);
174         } catch (IOException e) {
175             e.printStackTrace();
176             return null;
177         }
178     }
179 }
180