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 388746927a945358bb9e515985a37cac7807261026Martin Hibdon public PhotoPagerAdapter(Context context, android.support.v4.app.FragmentManager fm, Cursor c, float maxScale) { 39f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein super(context, fm, c); 4091dbfd25cc234de393ae22fc39a832a6335e1bc2Adam Copp mMaxScale = maxScale; 41f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein } 42f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 43f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein @Override 440c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein public Fragment getItem(Context context, Cursor cursor, int position) { 45f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein final String photoUri = cursor.getString(mContentUriIndex); 46928a39fb533255b34145285fabbd4f51961df63aAndrew Sapperstein final String thumbnailUri = cursor.getString(mThumbnailUriIndex); 47ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp boolean loading; 48ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp if(mLoadingIndex != -1) { 49ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp loading = Boolean.valueOf(cursor.getString(mLoadingIndex)); 50ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp } else { 51ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp loading = false; 52ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp } 53ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp boolean onlyShowSpinner = false; 54ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp if(photoUri == null && loading) { 55ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp onlyShowSpinner = true; 56ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp } 57f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 58f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein // create new PhotoViewFragment 59f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein final PhotoViewIntentBuilder builder = 60f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein Intents.newPhotoViewFragmentIntentBuilder(mContext); 619db663e1e820c3445f57fe11d9a12e9c8777e704Andrew Sapperstein builder 62928a39fb533255b34145285fabbd4f51961df63aAndrew Sapperstein .setResolvedPhotoUri(photoUri) 6391dbfd25cc234de393ae22fc39a832a6335e1bc2Adam Copp .setThumbnailUri(thumbnailUri) 6491dbfd25cc234de393ae22fc39a832a6335e1bc2Adam Copp .setMaxInitialScale(mMaxScale); 65f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 66ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp return new PhotoViewFragment(builder.build(), position, this, onlyShowSpinner); 67f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein } 68f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 69f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein @Override 70f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein public Cursor swapCursor(Cursor newCursor) { 71e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook if (newCursor != null) { 72e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mContentUriIndex = 73e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook newCursor.getColumnIndex(PhotoContract.PhotoViewColumns.CONTENT_URI); 74e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mThumbnailUriIndex = 75e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook newCursor.getColumnIndex(PhotoContract.PhotoViewColumns.THUMBNAIL_URI); 76ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp mLoadingIndex = 77ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp newCursor.getColumnIndex(PhotoContract.PhotoViewColumns.LOADING_INDICATOR); 78e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook } else { 79e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mContentUriIndex = -1; 80e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook mThumbnailUriIndex = -1; 81ae78bbd1c97e702147b29966903ca6e08ed3616fAdam Copp mLoadingIndex = -1; 82e6d03190d2b2ec6ea07a59daa7e687c3c383f9c3Paul Westbrook } 83f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein 84f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein return super.swapCursor(newCursor); 85f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein } 860c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein 870c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein public String getPhotoUri(Cursor cursor) { 880c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein return cursor.getString(mContentUriIndex); 890c18e5deef5209d21b527a01feb6b789715eb48eAndrew Sapperstein } 90f77a7eb196d16110c7b1087352b423913821ff61Andrew Sapperstein} 91