[go: nahoru, domu]

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
18package com.android.ex.photo.adapters;
19
20import android.content.Context;
21import android.content.Intent;
22import android.database.Cursor;
23import android.support.v4.app.Fragment;
24import android.support.v4.util.SimpleArrayMap;
25
26import com.android.ex.photo.Intents;
27import com.android.ex.photo.Intents.PhotoViewIntentBuilder;
28import com.android.ex.photo.fragments.PhotoViewFragment;
29import com.android.ex.photo.provider.PhotoContract.PhotoViewColumns;
30import com.android.ex.photo.provider.PhotoContract.PhotoQuery;
31
32/**
33 * Pager adapter for the photo view
34 */
35public 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
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
50    public Fragment getItem(Context context, Cursor cursor, int position) {
51        final String photoUri = getPhotoUri(cursor);
52        final String thumbnailUri = getThumbnailUri(cursor);
53        final String contentDescription = getPhotoName(cursor);
54        boolean loading = shouldShowLoadingIndicator(cursor);
55        boolean onlyShowSpinner = false;
56        if(photoUri == null && loading) {
57            onlyShowSpinner = true;
58        }
59
60        // create new PhotoViewFragment
61        final PhotoViewIntentBuilder builder =
62                Intents.newPhotoViewFragmentIntentBuilder(mContext, getPhotoViewFragmentClass());
63        builder
64            .setResolvedPhotoUri(photoUri)
65            .setThumbnailUri(thumbnailUri)
66            .setContentDescription(contentDescription)
67            .setDisplayThumbsFullScreen(mDisplayThumbsFullScreen)
68            .setMaxInitialScale(mMaxScale);
69
70        return createPhotoViewFragment(builder.build(), position, onlyShowSpinner);
71    }
72
73    protected Class<? extends PhotoViewFragment> getPhotoViewFragmentClass() {
74        return PhotoViewFragment.class;
75    }
76
77    protected PhotoViewFragment createPhotoViewFragment(
78            Intent intent, int position, boolean onlyShowSpinner) {
79        return PhotoViewFragment.newInstance(intent, position, onlyShowSpinner);
80    }
81
82    @Override
83    public Cursor swapCursor(Cursor newCursor) {
84        mColumnIndices.clear();
85
86        if (newCursor != null) {
87            for(String column : PhotoQuery.PROJECTION) {
88                mColumnIndices.put(column, newCursor.getColumnIndexOrThrow(column));
89            }
90
91            for(String column : PhotoQuery.OPTIONAL_COLUMNS) {
92                int index = newCursor.getColumnIndex(column);
93                if (index != -1) {
94                    mColumnIndices.put(column, index);
95                }
96            }
97        }
98
99        return super.swapCursor(newCursor);
100    }
101
102    public String getPhotoUri(Cursor cursor) {
103        return getString(cursor, PhotoViewColumns.CONTENT_URI);
104    }
105
106    public String getThumbnailUri(Cursor cursor) {
107        return getString(cursor, PhotoViewColumns.THUMBNAIL_URI);
108    }
109
110    public String getContentType(Cursor cursor) {
111        return getString(cursor, PhotoViewColumns.CONTENT_TYPE);
112    }
113
114    public String getPhotoName(Cursor cursor) {
115        return getString(cursor, PhotoViewColumns.NAME);
116    }
117
118    public boolean shouldShowLoadingIndicator(Cursor cursor) {
119        String value = getString(cursor, PhotoViewColumns.LOADING_INDICATOR);
120        if (value == null) {
121            return false;
122        } else {
123            return Boolean.valueOf(value);
124        }
125    }
126
127    private String getString(Cursor cursor, String column) {
128        if (mColumnIndices.containsKey(column)) {
129            return cursor.getString(mColumnIndices.get(column));
130        } else {
131            return null;
132        }
133    }
134}
135