summaryrefslogtreecommitdiffstats
path: root/src/com/android/messaging/datamodel/DataModelImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/messaging/datamodel/DataModelImpl.java')
-rw-r--r--src/com/android/messaging/datamodel/DataModelImpl.java236
1 files changed, 236 insertions, 0 deletions
diff --git a/src/com/android/messaging/datamodel/DataModelImpl.java b/src/com/android/messaging/datamodel/DataModelImpl.java
new file mode 100644
index 0000000..6ab3f00
--- /dev/null
+++ b/src/com/android/messaging/datamodel/DataModelImpl.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.net.Uri;
+import android.telephony.SubscriptionManager;
+
+import com.android.messaging.datamodel.action.ActionService;
+import com.android.messaging.datamodel.action.BackgroundWorker;
+import com.android.messaging.datamodel.action.FixupMessageStatusOnStartupAction;
+import com.android.messaging.datamodel.action.ProcessPendingMessagesAction;
+import com.android.messaging.datamodel.data.BlockedParticipantsData;
+import com.android.messaging.datamodel.data.BlockedParticipantsData.BlockedParticipantsDataListener;
+import com.android.messaging.datamodel.data.ContactListItemData;
+import com.android.messaging.datamodel.data.ContactPickerData;
+import com.android.messaging.datamodel.data.ContactPickerData.ContactPickerDataListener;
+import com.android.messaging.datamodel.data.ConversationData;
+import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
+import com.android.messaging.datamodel.data.ConversationListData;
+import com.android.messaging.datamodel.data.ConversationListData.ConversationListDataListener;
+import com.android.messaging.datamodel.data.DraftMessageData;
+import com.android.messaging.datamodel.data.GalleryGridItemData;
+import com.android.messaging.datamodel.data.LaunchConversationData;
+import com.android.messaging.datamodel.data.LaunchConversationData.LaunchConversationDataListener;
+import com.android.messaging.datamodel.data.MediaPickerData;
+import com.android.messaging.datamodel.data.MessagePartData;
+import com.android.messaging.datamodel.data.ParticipantData;
+import com.android.messaging.datamodel.data.ParticipantListItemData;
+import com.android.messaging.datamodel.data.PeopleAndOptionsData;
+import com.android.messaging.datamodel.data.PeopleAndOptionsData.PeopleAndOptionsDataListener;
+import com.android.messaging.datamodel.data.PeopleOptionsItemData;
+import com.android.messaging.datamodel.data.SettingsData;
+import com.android.messaging.datamodel.data.SettingsData.SettingsDataListener;
+import com.android.messaging.datamodel.data.SubscriptionListData;
+import com.android.messaging.datamodel.data.VCardContactItemData;
+import com.android.messaging.sms.MmsConfig;
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
+import com.android.messaging.util.ConnectivityUtil;
+import com.android.messaging.util.LogUtil;
+import com.android.messaging.util.OsUtil;
+import com.android.messaging.util.PhoneUtils;
+
+public class DataModelImpl extends DataModel {
+ private final Context mContext;
+ private final ActionService mActionService;
+ private final BackgroundWorker mDataModelWorker;
+ private final DatabaseHelper mDatabaseHelper;
+ private final ConnectivityUtil mConnectivityUtil;
+ private final SyncManager mSyncManager;
+
+ public DataModelImpl(final Context context) {
+ super();
+ mContext = context;
+ mActionService = new ActionService();
+ mDataModelWorker = new BackgroundWorker();
+ mDatabaseHelper = DatabaseHelper.getInstance(context);
+ mConnectivityUtil = new ConnectivityUtil(context);
+ mSyncManager = new SyncManager();
+ }
+
+ @Override
+ public ConversationListData createConversationListData(final Context context,
+ final ConversationListDataListener listener, final boolean archivedMode) {
+ return new ConversationListData(context, listener, archivedMode);
+ }
+
+ @Override
+ public ConversationData createConversationData(final Context context,
+ final ConversationDataListener listener, final String conversationId) {
+ return new ConversationData(context, listener, conversationId);
+ }
+
+ @Override
+ public ContactListItemData createContactListItemData() {
+ return new ContactListItemData();
+ }
+
+ @Override
+ public ContactPickerData createContactPickerData(final Context context,
+ final ContactPickerDataListener listener) {
+ return new ContactPickerData(context, listener);
+ }
+
+ @Override
+ public BlockedParticipantsData createBlockedParticipantsData(
+ final Context context, final BlockedParticipantsDataListener listener) {
+ return new BlockedParticipantsData(context, listener);
+ }
+
+ @Override
+ public MediaPickerData createMediaPickerData(final Context context) {
+ return new MediaPickerData(context);
+ }
+
+ @Override
+ public GalleryGridItemData createGalleryGridItemData() {
+ return new GalleryGridItemData();
+ }
+
+ @Override
+ public LaunchConversationData createLaunchConversationData(
+ final LaunchConversationDataListener listener) {
+ return new LaunchConversationData(listener);
+ }
+
+ @Override
+ public PeopleOptionsItemData createPeopleOptionsItemData(final Context context) {
+ return new PeopleOptionsItemData(context);
+ }
+
+ @Override
+ public PeopleAndOptionsData createPeopleAndOptionsData(final String conversationId,
+ final Context context, final PeopleAndOptionsDataListener listener) {
+ return new PeopleAndOptionsData(conversationId, context, listener);
+ }
+
+ @Override
+ public VCardContactItemData createVCardContactItemData(final Context context,
+ final MessagePartData data) {
+ return new VCardContactItemData(context, data);
+ }
+
+ @Override
+ public VCardContactItemData createVCardContactItemData(final Context context,
+ final Uri vCardUri) {
+ return new VCardContactItemData(context, vCardUri);
+ }
+
+ @Override
+ public ParticipantListItemData createParticipantListItemData(
+ final ParticipantData participant) {
+ return new ParticipantListItemData(participant);
+ }
+
+ @Override
+ public SubscriptionListData createSubscriptonListData(Context context) {
+ return new SubscriptionListData(context);
+ }
+
+ @Override
+ public SettingsData createSettingsData(Context context, SettingsDataListener listener) {
+ return new SettingsData(context, listener);
+ }
+
+ @Override
+ public DraftMessageData createDraftMessageData(String conversationId) {
+ return new DraftMessageData(conversationId);
+ }
+
+ @Override
+ public ActionService getActionService() {
+ // We need to allow access to this on the UI thread since it's used to start actions.
+ return mActionService;
+ }
+
+ @Override
+ public BackgroundWorker getBackgroundWorkerForActionService() {
+ return mDataModelWorker;
+ }
+
+ @Override
+ @DoesNotRunOnMainThread
+ public DatabaseWrapper getDatabase() {
+ // We prevent the main UI thread from accessing the database since we have to allow
+ // public access to this class to enable sub-packages to access data.
+ Assert.isNotMainThread();
+ return mDatabaseHelper.getDatabase();
+ }
+
+ @Override
+ public ConnectivityUtil getConnectivityUtil() {
+ return mConnectivityUtil;
+ }
+
+ @Override
+ public SyncManager getSyncManager() {
+ return mSyncManager;
+ }
+
+ @Override
+ void onCreateTables(final SQLiteDatabase db) {
+ LogUtil.w(LogUtil.BUGLE_TAG, "Rebuilt databases: reseting related state");
+ // Clear other things that implicitly reference the DB
+ SyncManager.resetLastSyncTimestamps();
+ }
+
+ @Override
+ public void onActivityResume() {
+ // Perform an incremental sync and register for changes if necessary
+ mSyncManager.updateSyncObserver(mContext);
+
+ // Trigger a participant refresh if needed, we should only need to refresh if there is
+ // contact change while the activity was paused.
+ ParticipantRefresh.refreshParticipantsIfNeeded();
+ }
+
+ @Override
+ public void onApplicationCreated() {
+ FixupMessageStatusOnStartupAction.fixupMessageStatus();
+ ProcessPendingMessagesAction.processFirstPendingMessage();
+ SyncManager.immediateSync();
+
+ if (OsUtil.isAtLeastL_MR1()) {
+ // Start listening for subscription change events for refreshing self participants.
+ PhoneUtils.getDefault().toLMr1().registerOnSubscriptionsChangedListener(
+ new SubscriptionManager.OnSubscriptionsChangedListener() {
+ @Override
+ public void onSubscriptionsChanged() {
+ // TODO: This dynamically changes the mms config that app is
+ // currently using. It may cause inconsistency in some cases. We need
+ // to check the usage of mms config and handle the dynamic change
+ // gracefully
+ MmsConfig.loadAsync();
+ ParticipantRefresh.refreshSelfParticipants();
+ }
+ });
+ }
+ }
+}