1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.messaging.datamodel;
18
19import android.provider.BaseColumns;
20
21import com.android.ex.photo.provider.PhotoContract.PhotoViewColumns;
22
23import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
24import com.android.messaging.datamodel.DatabaseHelper.PartColumns;
25import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
26import com.android.messaging.util.ContentType;
27
28/**
29 * View for the image parts for the conversation. It is used to provide the photoviewer with a
30 * a data source for all the photos in a conversation, so that the photoviewer can support paging
31 * through all the photos of the conversation. The columns of the view are a superset of
32 * {@link com.android.ex.photo.provider.PhotoContract.PhotoViewColumns}.
33 */
34public class ConversationImagePartsView {
35    private static final String VIEW_NAME = "conversation_image_parts_view";
36
37    private static final String CREATE_SQL = "CREATE VIEW " +
38            VIEW_NAME + " AS SELECT "
39            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.CONVERSATION_ID
40            + " as " + Columns.CONVERSATION_ID + ", "
41            + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.CONTENT_URI
42            + " as " + Columns.URI + ", "
43            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.FULL_NAME
44            + " as " + Columns.SENDER_FULL_NAME + ", "
45            + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.CONTENT_URI
46            + " as " + Columns.CONTENT_URI + ", "
47            // Use NULL as the thumbnail uri
48            + " NULL as " + Columns.THUMBNAIL_URI + ", "
49            + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.CONTENT_TYPE
50            + " as " + Columns.CONTENT_TYPE + ", "
51            //
52            // Columns in addition to those specified by PhotoContract
53            //
54            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.DISPLAY_DESTINATION
55            + " as " + Columns.DISPLAY_DESTINATION + ", "
56            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RECEIVED_TIMESTAMP
57            + " as " + Columns.RECEIVED_TIMESTAMP + ", "
58            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.STATUS
59            + " as " + Columns.STATUS + " "
60
61            + " FROM " + DatabaseHelper.MESSAGES_TABLE + " LEFT JOIN " + DatabaseHelper.PARTS_TABLE
62            + " ON (" + DatabaseHelper.MESSAGES_TABLE + "." + MessageColumns._ID
63            + "=" + DatabaseHelper.PARTS_TABLE + "." + PartColumns.MESSAGE_ID + ") "
64            + " LEFT JOIN " + DatabaseHelper.PARTICIPANTS_TABLE + " ON ("
65            + DatabaseHelper.MESSAGES_TABLE + '.' +  MessageColumns.SENDER_PARTICIPANT_ID
66            + '=' + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns._ID + ")"
67
68            // "content_type like 'image/%'"
69            + " WHERE " + DatabaseHelper.PARTS_TABLE + "." + PartColumns.CONTENT_TYPE
70            + " like '" + ContentType.IMAGE_PREFIX + "%'"
71
72            + " ORDER BY "
73            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RECEIVED_TIMESTAMP + " ASC, "
74            + DatabaseHelper.PARTS_TABLE + '.' + PartColumns._ID + " ASC";
75
76    static class Columns implements BaseColumns {
77        static final String CONVERSATION_ID = MessageColumns.CONVERSATION_ID;
78        static final String URI = PhotoViewColumns.URI;
79        static final String SENDER_FULL_NAME = PhotoViewColumns.NAME;
80        static final String CONTENT_URI = PhotoViewColumns.CONTENT_URI;
81        static final String THUMBNAIL_URI = PhotoViewColumns.THUMBNAIL_URI;
82        static final String CONTENT_TYPE = PhotoViewColumns.CONTENT_TYPE;
83        // Columns in addition to those specified by PhotoContract
84        static final String DISPLAY_DESTINATION = ParticipantColumns.DISPLAY_DESTINATION;
85        static final String RECEIVED_TIMESTAMP = MessageColumns.RECEIVED_TIMESTAMP;
86        static final String STATUS = MessageColumns.STATUS;
87    }
88
89    public interface PhotoViewQuery {
90        public final String[] PROJECTION = {
91            PhotoViewColumns.URI,
92            PhotoViewColumns.NAME,
93            PhotoViewColumns.CONTENT_URI,
94            PhotoViewColumns.THUMBNAIL_URI,
95            PhotoViewColumns.CONTENT_TYPE,
96            // Columns in addition to those specified by PhotoContract
97            Columns.DISPLAY_DESTINATION,
98            Columns.RECEIVED_TIMESTAMP,
99            Columns.STATUS,
100        };
101
102        public final int INDEX_URI = 0;
103        public final int INDEX_SENDER_FULL_NAME = 1;
104        public final int INDEX_CONTENT_URI = 2;
105        public final int INDEX_THUMBNAIL_URI = 3;
106        public final int INDEX_CONTENT_TYPE = 4;
107        // Columns in addition to those specified by PhotoContract
108        public final int INDEX_DISPLAY_DESTINATION = 5;
109        public final int INDEX_RECEIVED_TIMESTAMP = 6;
110        public final int INDEX_STATUS = 7;
111    }
112
113    static final String getViewName() {
114        return VIEW_NAME;
115    }
116
117    static final String getCreateSql() {
118        return CREATE_SQL;
119    }
120}
121