• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 Google Inc.
3  * Licensed to The Android Open Source Project.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package com.android.ex.photo.adapters;
19 
20 import android.content.Context;
21 import android.content.Intent;
22 import android.database.Cursor;
23 import android.support.v4.app.Fragment;
24 import android.support.v4.util.SimpleArrayMap;
25 
26 import com.android.ex.photo.Intents;
27 import com.android.ex.photo.Intents.PhotoViewIntentBuilder;
28 import com.android.ex.photo.fragments.PhotoViewFragment;
29 import com.android.ex.photo.provider.PhotoContract.PhotoViewColumns;
30 import com.android.ex.photo.provider.PhotoContract.PhotoQuery;
31 
32 /**
33  * Pager adapter for the photo view
34  */
35 public class PhotoPagerAdapter extends BaseCursorPagerAdapter {
36     protected SimpleArrayMap<String, Integer> mColumnIndices =
37             new SimpleArrayMap<String, Integer>(PhotoQuery.PROJECTION.length);
38     protected final float mMaxScale;
39     protected boolean mDisplayThumbsFullScreen;
40 
PhotoPagerAdapter( Context context, android.support.v4.app.FragmentManager fm, Cursor c, float maxScale, boolean thumbsFullScreen)41     public PhotoPagerAdapter(
42             Context context, android.support.v4.app.FragmentManager fm, Cursor c,
43             float maxScale, boolean thumbsFullScreen) {
44         super(context, fm, c);
45         mMaxScale = maxScale;
46         mDisplayThumbsFullScreen = thumbsFullScreen;
47     }
48 
49     @Override
getItem(Context context, Cursor cursor, int position)50     public Fragment getItem(Context context, Cursor cursor, int position) {
51         final String photoUri = getPhotoUri(cursor);
52         final String thumbnailUri = getThumbnailUri(cursor);
53         boolean loading = shouldShowLoadingIndicator(cursor);
54         boolean onlyShowSpinner = false;
55         if(photoUri == null && loading) {
56             onlyShowSpinner = true;
57         }
58 
59         // create new PhotoViewFragment
60         final PhotoViewIntentBuilder builder =
61                 Intents.newPhotoViewFragmentIntentBuilder(mContext, getPhotoViewFragmentClass());
62         builder
63             .setResolvedPhotoUri(photoUri)
64             .setThumbnailUri(thumbnailUri)
65             .setDisplayThumbsFullScreen(mDisplayThumbsFullScreen)
66             .setMaxInitialScale(mMaxScale);
67 
68         return createPhotoViewFragment(builder.build(), position, onlyShowSpinner);
69     }
70 
getPhotoViewFragmentClass()71     protected Class<? extends PhotoViewFragment> getPhotoViewFragmentClass() {
72         return PhotoViewFragment.class;
73     }
74 
createPhotoViewFragment( Intent intent, int position, boolean onlyShowSpinner)75     protected PhotoViewFragment createPhotoViewFragment(
76             Intent intent, int position, boolean onlyShowSpinner) {
77         return PhotoViewFragment.newInstance(intent, position, onlyShowSpinner);
78     }
79 
80     @Override
swapCursor(Cursor newCursor)81     public Cursor swapCursor(Cursor newCursor) {
82         mColumnIndices.clear();
83 
84         if (newCursor != null) {
85             for(String column : PhotoQuery.PROJECTION) {
86                 mColumnIndices.put(column, newCursor.getColumnIndexOrThrow(column));
87             }
88 
89             for(String column : PhotoQuery.OPTIONAL_COLUMNS) {
90                 int index = newCursor.getColumnIndex(column);
91                 if (index != -1) {
92                     mColumnIndices.put(column, index);
93                 }
94             }
95         }
96 
97         return super.swapCursor(newCursor);
98     }
99 
getPhotoUri(Cursor cursor)100     public String getPhotoUri(Cursor cursor) {
101         return getString(cursor, PhotoViewColumns.CONTENT_URI);
102     }
103 
getThumbnailUri(Cursor cursor)104     public String getThumbnailUri(Cursor cursor) {
105         return getString(cursor, PhotoViewColumns.THUMBNAIL_URI);
106     }
107 
getContentType(Cursor cursor)108     public String getContentType(Cursor cursor) {
109         return getString(cursor, PhotoViewColumns.CONTENT_TYPE);
110     }
111 
shouldShowLoadingIndicator(Cursor cursor)112     public boolean shouldShowLoadingIndicator(Cursor cursor) {
113         String value = getString(cursor, PhotoViewColumns.LOADING_INDICATOR);
114         if (value == null) {
115             return false;
116         } else {
117             return Boolean.valueOf(value);
118         }
119     }
120 
getString(Cursor cursor, String column)121     private String getString(Cursor cursor, String column) {
122         if (mColumnIndices.containsKey(column)) {
123             return cursor.getString(mColumnIndices.get(column));
124         } else {
125             return null;
126         }
127     }
128 }
129