blob: 67651590804094ae27239e427a18241454b75268 [file] [log] [blame]
/*
* Copyright (C) 2011 Google Inc.
* Licensed to The Android Open Source Project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.ex.photo.adapters;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import androidx.fragment.app.Fragment;
import androidx.collection.SimpleArrayMap;
import com.android.ex.photo.Intents;
import com.android.ex.photo.Intents.PhotoViewIntentBuilder;
import com.android.ex.photo.fragments.PhotoViewFragment;
import com.android.ex.photo.provider.PhotoContract.PhotoViewColumns;
import com.android.ex.photo.provider.PhotoContract.PhotoQuery;
/**
* Pager adapter for the photo view
*/
public class PhotoPagerAdapter extends BaseCursorPagerAdapter {
protected SimpleArrayMap<String, Integer> mColumnIndices =
new SimpleArrayMap<String, Integer>(PhotoQuery.PROJECTION.length);
protected final float mMaxScale;
protected boolean mDisplayThumbsFullScreen;
public PhotoPagerAdapter(
Context context, androidx.fragment.app.FragmentManager fm, Cursor c,
float maxScale, boolean thumbsFullScreen) {
super(context, fm, c);
mMaxScale = maxScale;
mDisplayThumbsFullScreen = thumbsFullScreen;
}
@Override
public Fragment getItem(Context context, Cursor cursor, int position) {
final String photoUri = getPhotoUri(cursor);
final String thumbnailUri = getThumbnailUri(cursor);
final String contentDescription = getPhotoName(cursor);
boolean loading = shouldShowLoadingIndicator(cursor);
boolean onlyShowSpinner = false;
if(photoUri == null && loading) {
onlyShowSpinner = true;
}
// create new PhotoViewFragment
final PhotoViewIntentBuilder builder =
Intents.newPhotoViewFragmentIntentBuilder(mContext, getPhotoViewFragmentClass());
builder
.setResolvedPhotoUri(photoUri)
.setThumbnailUri(thumbnailUri)
.setContentDescription(contentDescription)
.setDisplayThumbsFullScreen(mDisplayThumbsFullScreen)
.setMaxInitialScale(mMaxScale);
return createPhotoViewFragment(builder.build(), position, onlyShowSpinner);
}
protected Class<? extends PhotoViewFragment> getPhotoViewFragmentClass() {
return PhotoViewFragment.class;
}
protected PhotoViewFragment createPhotoViewFragment(
Intent intent, int position, boolean onlyShowSpinner) {
return PhotoViewFragment.newInstance(intent, position, onlyShowSpinner);
}
@Override
public Cursor swapCursor(Cursor newCursor) {
mColumnIndices.clear();
if (newCursor != null) {
for(String column : PhotoQuery.PROJECTION) {
mColumnIndices.put(column, newCursor.getColumnIndexOrThrow(column));
}
for(String column : PhotoQuery.OPTIONAL_COLUMNS) {
int index = newCursor.getColumnIndex(column);
if (index != -1) {
mColumnIndices.put(column, index);
}
}
}
return super.swapCursor(newCursor);
}
public String getPhotoUri(Cursor cursor) {
return getString(cursor, PhotoViewColumns.CONTENT_URI);
}
public String getThumbnailUri(Cursor cursor) {
return getString(cursor, PhotoViewColumns.THUMBNAIL_URI);
}
public String getContentType(Cursor cursor) {
return getString(cursor, PhotoViewColumns.CONTENT_TYPE);
}
public String getPhotoName(Cursor cursor) {
return getString(cursor, PhotoViewColumns.NAME);
}
public boolean shouldShowLoadingIndicator(Cursor cursor) {
String value = getString(cursor, PhotoViewColumns.LOADING_INDICATOR);
if (value == null) {
return false;
} else {
return Boolean.parseBoolean(value);
}
}
private String getString(Cursor cursor, String column) {
if (mColumnIndices.containsKey(column)) {
return cursor.getString(mColumnIndices.get(column));
} else {
return null;
}
}
}