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