PhotoPagerAdapter.java revision 41db3eb9741a222432b367409c67d2263856a0a7
1f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein/* 2f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * Copyright (C) 2011 Google Inc. 3f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * Licensed to The Android Open Source Project. 4f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * 5f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * Licensed under the Apache License, Version 2.0 (the "License"); 6f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * you may not use this file except in compliance with the License. 7f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * You may obtain a copy of the License at 8f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * 9f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * http://www.apache.org/licenses/LICENSE-2.0 10f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * 11f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * Unless required by applicable law or agreed to in writing, software 12f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * distributed under the License is distributed on an "AS IS" BASIS, 13f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * See the License for the specific language governing permissions and 15f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * limitations under the License. 16f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein */ 17f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 18f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinpackage com.android.ex.photo.adapters; 19f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 20f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport android.content.Context; 21f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport android.database.Cursor; 228746927a945358bb9e515985a37cac7807261026Martin Hibdonimport android.support.v4.app.Fragment; 23f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 24f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport com.android.ex.photo.Intents; 25f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport com.android.ex.photo.Intents.PhotoViewIntentBuilder; 26f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport com.android.ex.photo.fragments.PhotoViewFragment; 27f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport com.android.ex.photo.provider.PhotoContract; 28f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 29f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein/** 30f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * Pager adapter for the photo view 31f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein */ 32f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinpublic class PhotoPagerAdapter extends BaseCursorPagerAdapter { 33934bd9e0b4b3fcf7730325fa416b8c162141f7e9Martin Hibdon protected int mContentUriIndex; 34934bd9e0b4b3fcf7730325fa416b8c162141f7e9Martin Hibdon protected int mThumbnailUriIndex; 35934bd9e0b4b3fcf7730325fa416b8c162141f7e9Martin Hibdon protected int mLoadingIndex; 36934bd9e0b4b3fcf7730325fa416b8c162141f7e9Martin Hibdon protected final float mMaxScale; 37f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 3841db3eb9741a222432b367409c67d2263856a0a7Vikram Aggarwal public PhotoPagerAdapter( 3941db3eb9741a222432b367409c67d2263856a0a7Vikram Aggarwal Context context, android.support.v4.app.FragmentManager fm, Cursor c, float maxScale) { 40f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein super(context, fm, c); 4191dbfd25cc234de393ae22fc39a832a6335e1bc2Adam Copp mMaxScale = maxScale; 42f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein } 43f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 44f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein @Override 450c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein public Fragment getItem(Context context, Cursor cursor, int position) { 46f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein final String photoUri = cursor.getString(mContentUriIndex); 47928a39fb533255b34145285fabbd4f51961df63aAndrew Sapperstein final String thumbnailUri = cursor.getString(mThumbnailUriIndex); 48ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp boolean loading; 49ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp if(mLoadingIndex != -1) { 50ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp loading = Boolean.valueOf(cursor.getString(mLoadingIndex)); 51ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp } else { 52ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp loading = false; 53ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp } 54ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp boolean onlyShowSpinner = false; 55ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp if(photoUri == null && loading) { 56ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp onlyShowSpinner = true; 57ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp } 58f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 59f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein // create new PhotoViewFragment 60f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein final PhotoViewIntentBuilder builder = 61f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein Intents.newPhotoViewFragmentIntentBuilder(mContext); 629db663e1e820c3445f57fe11d9a12e9c8777e704Andrew Sapperstein builder 63928a39fb533255b34145285fabbd4f51961df63aAndrew Sapperstein .setResolvedPhotoUri(photoUri) 6491dbfd25cc234de393ae22fc39a832a6335e1bc2Adam Copp .setThumbnailUri(thumbnailUri) 6591dbfd25cc234de393ae22fc39a832a6335e1bc2Adam Copp .setMaxInitialScale(mMaxScale); 66f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 6741db3eb9741a222432b367409c67d2263856a0a7Vikram Aggarwal return PhotoViewFragment.newInstance(builder.build(), position, onlyShowSpinner); 68f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein } 69f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 70f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein @Override 71f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein public Cursor swapCursor(Cursor newCursor) { 72e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook if (newCursor != null) { 73e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mContentUriIndex = 74e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook newCursor.getColumnIndex(PhotoContract.PhotoViewColumns.CONTENT_URI); 75e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mThumbnailUriIndex = 76e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook newCursor.getColumnIndex(PhotoContract.PhotoViewColumns.THUMBNAIL_URI); 77ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp mLoadingIndex = 78ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp newCursor.getColumnIndex(PhotoContract.PhotoViewColumns.LOADING_INDICATOR); 79e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook } else { 80e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mContentUriIndex = -1; 81e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mThumbnailUriIndex = -1; 82ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp mLoadingIndex = -1; 83e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook } 84f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 85f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein return super.swapCursor(newCursor); 86f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein } 870c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein 880c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein public String getPhotoUri(Cursor cursor) { 890c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein return cursor.getString(mContentUriIndex); 900c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein } 91f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein} 92