diff options
author | Andrew Sapperstein <asapperstein@google.com> | 2012-08-10 17:44:38 -0700 |
---|---|---|
committer | Andrew Sapperstein <asapperstein@google.com> | 2012-08-10 17:52:12 -0700 |
commit | 7d13b0b858f6d2bce1a1f0088ab6739033087d19 (patch) | |
tree | 4481ba19cbeb5b2eeef6a9dfda7964fbe3c44dad /sample/src | |
parent | 62dd23137c25e7a32d22ce2a7a6e5e57a465b349 (diff) | |
download | photoviewer-7d13b0b858f6d2bce1a1f0088ab6739033087d19.tar.gz |
Created a sample photo viewer implementation.
Change-Id: Ida5ab5c3247a52c5fbbd495d6e127c18493356ce
Diffstat (limited to 'sample/src')
-rw-r--r-- | sample/src/com/example/photoviewersample/MainActivity.java | 30 | ||||
-rw-r--r-- | sample/src/com/example/photoviewersample/SampleProvider.java | 179 |
2 files changed, 209 insertions, 0 deletions
diff --git a/sample/src/com/example/photoviewersample/MainActivity.java b/sample/src/com/example/photoviewersample/MainActivity.java new file mode 100644 index 0000000..efc2064 --- /dev/null +++ b/sample/src/com/example/photoviewersample/MainActivity.java @@ -0,0 +1,30 @@ +package com.example.photoviewersample; + +import android.app.Activity; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; + +import com.android.ex.photo.Intents; +import com.android.ex.photo.Intents.PhotoViewIntentBuilder; + +public class MainActivity extends Activity implements OnClickListener { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + View b = findViewById(R.id.button); + b.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + final PhotoViewIntentBuilder builder = + Intents.newPhotoViewActivityIntentBuilder(this); + builder + .setPhotosUri("content://com.example.photoviewersample.SampleProvider/photos"); + + startActivity(builder.build()); + } +} diff --git a/sample/src/com/example/photoviewersample/SampleProvider.java b/sample/src/com/example/photoviewersample/SampleProvider.java new file mode 100644 index 0000000..86ae82b --- /dev/null +++ b/sample/src/com/example/photoviewersample/SampleProvider.java @@ -0,0 +1,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; + } + } +} |