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 
17 package com.android.messaging.datamodel;
18 
19 import android.provider.BaseColumns;
20 
21 import com.android.ex.photo.provider.PhotoContract.PhotoViewColumns;
22 
23 import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
24 import com.android.messaging.datamodel.DatabaseHelper.PartColumns;
25 import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
26 import 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  */
34 public 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 
getViewName()113     static final String getViewName() {
114         return VIEW_NAME;
115     }
116 
getCreateSql()117     static final String getCreateSql() {
118         return CREATE_SQL;
119     }
120 }
121