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; 21ca8fdcd23fcc53e0429abf8d4ef80e8d6d8fe6faMartin Hibdonimport android.content.Intent; 22f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport android.database.Cursor; 238746927a945358bb9e515985a37cac7807261026Martin Hibdonimport android.support.v4.app.Fragment; 24f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 25f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport com.android.ex.photo.Intents; 26f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport com.android.ex.photo.Intents.PhotoViewIntentBuilder; 27f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport com.android.ex.photo.fragments.PhotoViewFragment; 28f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinimport com.android.ex.photo.provider.PhotoContract; 29f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 30f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein/** 31f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein * Pager adapter for the photo view 32f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein */ 33f77a7eb196d16110c7b1087352b423913821ff61Andrew Sappersteinpublic class PhotoPagerAdapter extends BaseCursorPagerAdapter { 34934bd9e0b4b3fcf7730325fa416b8c162141f7e9Martin Hibdon protected int mContentUriIndex; 35934bd9e0b4b3fcf7730325fa416b8c162141f7e9Martin Hibdon protected int mThumbnailUriIndex; 36934bd9e0b4b3fcf7730325fa416b8c162141f7e9Martin Hibdon protected int mLoadingIndex; 37934bd9e0b4b3fcf7730325fa416b8c162141f7e9Martin Hibdon protected final float mMaxScale; 38ca8fdcd23fcc53e0429abf8d4ef80e8d6d8fe6faMartin Hibdon protected boolean mDisplayThumbsFullScreen; 39f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 4041db3eb9741a222432b367409c67d2263856a0a7Vikram Aggarwal public PhotoPagerAdapter( 41ca8fdcd23fcc53e0429abf8d4ef80e8d6d8fe6faMartin Hibdon Context context, android.support.v4.app.FragmentManager fm, Cursor c, 42ca8fdcd23fcc53e0429abf8d4ef80e8d6d8fe6faMartin Hibdon float maxScale, boolean thumbsFullScreen) { 43f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein super(context, fm, c); 4491dbfd25cc234de393ae22fc39a832a6335e1bc2Adam Copp mMaxScale = maxScale; 45ca8fdcd23fcc53e0429abf8d4ef80e8d6d8fe6faMartin Hibdon mDisplayThumbsFullScreen = thumbsFullScreen; 46f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein } 47f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 48f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein @Override 490c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein public Fragment getItem(Context context, Cursor cursor, int position) { 50f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein final String photoUri = cursor.getString(mContentUriIndex); 51928a39fb533255b34145285fabbd4f51961df63aAndrew Sapperstein final String thumbnailUri = cursor.getString(mThumbnailUriIndex); 52ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp boolean loading; 53ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp if(mLoadingIndex != -1) { 54ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp loading = Boolean.valueOf(cursor.getString(mLoadingIndex)); 55ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp } else { 56ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp loading = false; 57ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp } 58ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp boolean onlyShowSpinner = false; 59ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp if(photoUri == null && loading) { 60ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp onlyShowSpinner = true; 61ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp } 62f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 63f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein // create new PhotoViewFragment 64f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein final PhotoViewIntentBuilder builder = 65f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein Intents.newPhotoViewFragmentIntentBuilder(mContext); 669db663e1e820c3445f57fe11d9a12e9c8777e704Andrew Sapperstein builder 67928a39fb533255b34145285fabbd4f51961df63aAndrew Sapperstein .setResolvedPhotoUri(photoUri) 6891dbfd25cc234de393ae22fc39a832a6335e1bc2Adam Copp .setThumbnailUri(thumbnailUri) 69ca8fdcd23fcc53e0429abf8d4ef80e8d6d8fe6faMartin Hibdon .setDisplayThumbsFullScreen(mDisplayThumbsFullScreen) 7091dbfd25cc234de393ae22fc39a832a6335e1bc2Adam Copp .setMaxInitialScale(mMaxScale); 71f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 7241db3eb9741a222432b367409c67d2263856a0a7Vikram Aggarwal return PhotoViewFragment.newInstance(builder.build(), position, onlyShowSpinner); 73f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein } 74f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 75f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein @Override 76f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein public Cursor swapCursor(Cursor newCursor) { 77e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook if (newCursor != null) { 78e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mContentUriIndex = 79e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook newCursor.getColumnIndex(PhotoContract.PhotoViewColumns.CONTENT_URI); 80e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mThumbnailUriIndex = 81e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook newCursor.getColumnIndex(PhotoContract.PhotoViewColumns.THUMBNAIL_URI); 82ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp mLoadingIndex = 83ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp newCursor.getColumnIndex(PhotoContract.PhotoViewColumns.LOADING_INDICATOR); 84e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook } else { 85e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mContentUriIndex = -1; 86e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mThumbnailUriIndex = -1; 87ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp mLoadingIndex = -1; 88e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook } 89f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 90f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein return super.swapCursor(newCursor); 91f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein } 920c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein 930c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein public String getPhotoUri(Cursor cursor) { 940c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein return cursor.getString(mContentUriIndex); 950c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein } 96ea8c4b44178e7593870472743bde05d0d079b9eeMark Wei 97ea8c4b44178e7593870472743bde05d0d079b9eeMark Wei public String getThumbnailUri(Cursor cursor) { 98ea8c4b44178e7593870472743bde05d0d079b9eeMark Wei return cursor.getString(mThumbnailUriIndex); 99ea8c4b44178e7593870472743bde05d0d079b9eeMark Wei } 100f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein} 101