blob: ad69e5ce4de2f278046b09e1aece471d00b1b27a [file] [log] [blame]
/*
* Copyright (C) 2011 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.contacts.util;
import android.database.Cursor;
import android.provider.ContactsContract.PhotoFiles;
import android.provider.ContactsContract.StreamItemPhotos;
/**
* Data object for a photo associated with a social stream item. These are comparable;
* entries with a lower sort index will be displayed on top (with the ID used as a
* tie-breaker).
*/
public class StreamItemPhotoEntry implements Comparable<StreamItemPhotoEntry> {
private final long mId;
private final int mSortIndex;
private final long mPhotoFileId;
private final String mPhotoUri;
private final int mHeight;
private final int mWidth;
private final int mFileSize;
public StreamItemPhotoEntry(long id, int sortIndex, long photoFileId, String photoUri,
int height, int width, int fileSize) {
mId = id;
mSortIndex = sortIndex;
mPhotoFileId = photoFileId;
mPhotoUri = photoUri;
mHeight = height;
mWidth = width;
mFileSize = fileSize;
}
public StreamItemPhotoEntry(Cursor cursor) {
// This is expected to be populated via a cursor containing a join of all
// StreamItemPhotos columns and all PhotoFiles columns (except for ID).
mId = getLong(cursor, StreamItemPhotos._ID);
mSortIndex = getInt(cursor, StreamItemPhotos.SORT_INDEX, -1);
mPhotoFileId = getLong(cursor, StreamItemPhotos.PHOTO_FILE_ID);
mPhotoUri = getString(cursor, StreamItemPhotos.PHOTO_URI);
mHeight = getInt(cursor, PhotoFiles.HEIGHT, -1);
mWidth = getInt(cursor, PhotoFiles.WIDTH, -1);
mFileSize = getInt(cursor, PhotoFiles.FILESIZE, -1);
}
public long getId() {
return mId;
}
public int getSortIndex() {
return mSortIndex;
}
public long getPhotoFileId() {
return mPhotoFileId;
}
public String getPhotoUri() {
return mPhotoUri;
}
public int getHeight() {
return mHeight;
}
public int getWidth() {
return mWidth;
}
public int getFileSize() {
return mFileSize;
}
@Override
public int compareTo(StreamItemPhotoEntry streamItemPhotoEntry) {
// Sort index is used to compare, falling back to ID if neither entry has a
// sort index specified (entries without a sort index are sorted after entries
// that have one).
if (mSortIndex == streamItemPhotoEntry.mSortIndex) {
if (mSortIndex == -1) {
return mId == streamItemPhotoEntry.mId ? 0
: mId < streamItemPhotoEntry.mId ? -1 : 1;
} else {
return 0;
}
} else {
if (mSortIndex == -1) {
return 1;
}
if (streamItemPhotoEntry.mSortIndex == -1) {
return -1;
}
return mSortIndex == streamItemPhotoEntry.mSortIndex ? 0
: mSortIndex < streamItemPhotoEntry.mSortIndex ? -1 : 1;
}
}
private static String getString(Cursor cursor, String columnName) {
return cursor.getString(cursor.getColumnIndex(columnName));
}
private static int getInt(Cursor cursor, String columnName, int missingValue) {
final int columnIndex = cursor.getColumnIndex(columnName);
return cursor.isNull(columnIndex) ? missingValue : cursor.getInt(columnIndex);
}
private static long getLong(Cursor cursor, String columnName) {
final int columnIndex = cursor.getColumnIndex(columnName);
return cursor.getLong(columnIndex);
}
}