1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.datamodel; 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.Context; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.database.sqlite.SQLiteDatabase; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.net.Uri; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.text.TextUtils; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.Factory; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.action.Action; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.action.ActionService; 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.action.BackgroundWorker; 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.BlockedParticipantsData; 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.BlockedParticipantsData.BlockedParticipantsDataListener; 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ContactListItemData; 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ContactPickerData; 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ContactPickerData.ContactPickerDataListener; 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ConversationData; 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ConversationData.ConversationDataListener; 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ConversationListData; 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ConversationListData.ConversationListDataListener; 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.DraftMessageData; 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.GalleryGridItemData; 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.LaunchConversationData; 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.LaunchConversationData.LaunchConversationDataListener; 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.MediaPickerData; 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.MessagePartData; 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ParticipantData; 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ParticipantListItemData; 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.PeopleAndOptionsData; 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.PeopleAndOptionsData.PeopleAndOptionsDataListener; 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.PeopleOptionsItemData; 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.SettingsData; 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.SettingsData.SettingsDataListener; 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.SubscriptionListData; 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.VCardContactItemData; 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.Assert.DoesNotRunOnMainThread; 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.ConnectivityUtil; 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic abstract class DataModel { 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mFocusedConversation; 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mConversationListScrolledToNewestConversation; 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static DataModel get() { 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return Factory.get().getDataModel(); 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final void startActionService(final Action action) { 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd get().getActionService().startAction(action); 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final void scheduleAction(final Action action, 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final int code, final long delayMs) { 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd get().getActionService().scheduleAction(action, code, delayMs); 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract ConversationListData createConversationListData(final Context context, 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ConversationListDataListener listener, final boolean archivedMode); 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract ConversationData createConversationData(final Context context, 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ConversationDataListener listener, final String conversationId); 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract ContactListItemData createContactListItemData(); 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract ContactPickerData createContactPickerData(final Context context, 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ContactPickerDataListener listener); 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract MediaPickerData createMediaPickerData(final Context context); 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract GalleryGridItemData createGalleryGridItemData(); 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract LaunchConversationData createLaunchConversationData( 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd LaunchConversationDataListener listener); 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract PeopleOptionsItemData createPeopleOptionsItemData(final Context context); 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract PeopleAndOptionsData createPeopleAndOptionsData(final String conversationId, 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Context context, final PeopleAndOptionsDataListener listener); 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract VCardContactItemData createVCardContactItemData(final Context context, 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final MessagePartData data); 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract VCardContactItemData createVCardContactItemData(final Context context, 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Uri vCardUri); 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract ParticipantListItemData createParticipantListItemData( 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ParticipantData participant); 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract BlockedParticipantsData createBlockedParticipantsData(Context context, 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd BlockedParticipantsDataListener listener); 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract SubscriptionListData createSubscriptonListData(Context context); 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract SettingsData createSettingsData(Context context, SettingsDataListener listener); 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract DraftMessageData createDraftMessageData(String conversationId); 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract ActionService getActionService(); 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract BackgroundWorker getBackgroundWorkerForActionService(); 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @DoesNotRunOnMainThread 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract DatabaseWrapper getDatabase(); 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Allow DataModel to coordinate with activity lifetime events. 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract void onActivityResume(); 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd abstract void onCreateTables(final SQLiteDatabase db); 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setFocusedConversation(final String conversationId) { 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mFocusedConversation = conversationId; 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean isFocusedConversation(final String conversationId) { 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return !TextUtils.isEmpty(mFocusedConversation) 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd && TextUtils.equals(mFocusedConversation, conversationId); 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setConversationListScrolledToNewestConversation( 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final boolean scrolledToNewestConversation) { 136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mConversationListScrolledToNewestConversation = scrolledToNewestConversation; 137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean isConversationListScrolledToNewestConversation() { 140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mConversationListScrolledToNewestConversation; 141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * If a new message is received in the specified conversation, will the user be able to 145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * observe it in some UI within the app? 146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param conversationId conversation with the new incoming message 147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 148d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean isNewMessageObservable(final String conversationId) { 149d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return isConversationListScrolledToNewestConversation() 150d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd || isFocusedConversation(conversationId); 151d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 152d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 153d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract void onApplicationCreated(); 154d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 155d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract ConnectivityUtil getConnectivityUtil(); 156d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 157d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public abstract SyncManager getSyncManager(); 158d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 159