13915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro/* 23915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * Copyright (C) 2011 The Android Open Source Project 33915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * 43915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * Licensed under the Apache License, Version 2.0 (the "License"); 53915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * you may not use this file except in compliance with the License. 63915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * You may obtain a copy of the License at 73915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * 83915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * http://www.apache.org/licenses/LICENSE-2.0 93915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * 103915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * Unless required by applicable law or agreed to in writing, software 113915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * distributed under the License is distributed on an "AS IS" BASIS, 123915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * See the License for the specific language governing permissions and 143915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * limitations under the License. 153915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro */ 163915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 173915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoropackage com.android.contacts.util; 183915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 193915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoroimport android.database.Cursor; 203915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoroimport android.provider.ContactsContract.PhotoFiles; 213915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoroimport android.provider.ContactsContract.StreamItemPhotos; 223915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 233915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro/** 243915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * Data object for a photo associated with a social stream item. These are comparable; 253915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * entries with a lower sort index will be displayed on top (with the ID used as a 263915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro * tie-breaker). 273915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro */ 283915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoropublic class StreamItemPhotoEntry implements Comparable<StreamItemPhotoEntry> { 293915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro private final long mId; 303915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro private final int mSortIndex; 313915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro private final long mPhotoFileId; 323915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro private final String mPhotoUri; 333915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro private final int mHeight; 343915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro private final int mWidth; 353915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro private final int mFileSize; 363915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 373915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro public StreamItemPhotoEntry(long id, int sortIndex, long photoFileId, String photoUri, 38d78ee90c0d4d93b82ad440396e87ae4f47f53e93Daniel Lehmann int height, int width, int fileSize) { 393915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mId = id; 403915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mSortIndex = sortIndex; 413915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mPhotoFileId = photoFileId; 423915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mPhotoUri = photoUri; 433915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mHeight = height; 443915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mWidth = width; 453915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mFileSize = fileSize; 463915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 473915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 483915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro public StreamItemPhotoEntry(Cursor cursor) { 493915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro // This is expected to be populated via a cursor containing a join of all 503915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro // StreamItemPhotos columns and all PhotoFiles columns (except for ID). 513915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mId = getLong(cursor, StreamItemPhotos._ID); 523915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mSortIndex = getInt(cursor, StreamItemPhotos.SORT_INDEX, -1); 533915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mPhotoFileId = getLong(cursor, StreamItemPhotos.PHOTO_FILE_ID); 543915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mPhotoUri = getString(cursor, StreamItemPhotos.PHOTO_URI); 553915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mHeight = getInt(cursor, PhotoFiles.HEIGHT, -1); 563915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mWidth = getInt(cursor, PhotoFiles.WIDTH, -1); 573915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro mFileSize = getInt(cursor, PhotoFiles.FILESIZE, -1); 583915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 593915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 603915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro public long getId() { 613915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return mId; 623915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 633915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 643915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro public int getSortIndex() { 653915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return mSortIndex; 663915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 673915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 683915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro public long getPhotoFileId() { 693915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return mPhotoFileId; 703915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 713915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 723915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro public String getPhotoUri() { 733915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return mPhotoUri; 743915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 753915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 763915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro public int getHeight() { 773915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return mHeight; 783915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 793915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 803915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro public int getWidth() { 813915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return mWidth; 823915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 833915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 843915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro public int getFileSize() { 853915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return mFileSize; 863915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 873915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 883915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro @Override 893915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro public int compareTo(StreamItemPhotoEntry streamItemPhotoEntry) { 903915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro // Sort index is used to compare, falling back to ID if neither entry has a 913915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro // sort index specified (entries without a sort index are sorted after entries 923915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro // that have one). 933915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro if (mSortIndex == streamItemPhotoEntry.mSortIndex) { 943915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro if (mSortIndex == -1) { 953915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return mId == streamItemPhotoEntry.mId ? 0 963915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro : mId < streamItemPhotoEntry.mId ? -1 : 1; 973915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } else { 983915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return 0; 993915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 1003915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } else { 1013915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro if (mSortIndex == -1) { 1023915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return 1; 1033915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 1043915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro if (streamItemPhotoEntry.mSortIndex == -1) { 1053915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return -1; 1063915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 1073915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return mSortIndex == streamItemPhotoEntry.mSortIndex ? 0 1083915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro : mSortIndex < streamItemPhotoEntry.mSortIndex ? -1 : 1; 1093915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 1103915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 1113915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 1123915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro private static String getString(Cursor cursor, String columnName) { 1133915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return cursor.getString(cursor.getColumnIndex(columnName)); 1143915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 1153915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 1163915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro private static int getInt(Cursor cursor, String columnName, int missingValue) { 1173915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro final int columnIndex = cursor.getColumnIndex(columnName); 1183915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return cursor.isNull(columnIndex) ? missingValue : cursor.getInt(columnIndex); 1193915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 1203915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro 1213915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro private static long getLong(Cursor cursor, String columnName) { 1223915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro final int columnIndex = cursor.getColumnIndex(columnName); 1233915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro return cursor.getLong(columnIndex); 1243915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro } 1253915600d2b0ff499e0129e951dfd39bff46b2f42Dave Santoro} 126