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