| /* |
| * 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); |
| } |
| } |