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.telephony.SubscriptionManager; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.action.ActionService; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.action.BackgroundWorker; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.action.FixupMessageStatusOnStartupAction; 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.action.ProcessPendingMessagesAction; 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.sms.MmsConfig; 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.Assert; 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.Assert.DoesNotRunOnMainThread; 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.ConnectivityUtil; 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.LogUtil; 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.OsUtil; 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.PhoneUtils; 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class DataModelImpl extends DataModel { 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final Context mContext; 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final ActionService mActionService; 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final BackgroundWorker mDataModelWorker; 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final DatabaseHelper mDatabaseHelper; 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final ConnectivityUtil mConnectivityUtil; 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final SyncManager mSyncManager; 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public DataModelImpl(final Context context) { 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super(); 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mContext = context; 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mActionService = new ActionService(); 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDataModelWorker = new BackgroundWorker(); 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDatabaseHelper = DatabaseHelper.getInstance(context); 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mConnectivityUtil = new ConnectivityUtil(context); 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mSyncManager = new SyncManager(); 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public ConversationListData createConversationListData(final Context context, 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ConversationListDataListener listener, final boolean archivedMode) { 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new ConversationListData(context, listener, archivedMode); 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public ConversationData createConversationData(final Context context, 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ConversationDataListener listener, final String conversationId) { 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new ConversationData(context, listener, conversationId); 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public ContactListItemData createContactListItemData() { 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new ContactListItemData(); 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public ContactPickerData createContactPickerData(final Context context, 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ContactPickerDataListener listener) { 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new ContactPickerData(context, listener); 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public BlockedParticipantsData createBlockedParticipantsData( 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Context context, final BlockedParticipantsDataListener listener) { 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new BlockedParticipantsData(context, listener); 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public MediaPickerData createMediaPickerData(final Context context) { 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new MediaPickerData(context); 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public GalleryGridItemData createGalleryGridItemData() { 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new GalleryGridItemData(); 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public LaunchConversationData createLaunchConversationData( 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final LaunchConversationDataListener listener) { 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new LaunchConversationData(listener); 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public PeopleOptionsItemData createPeopleOptionsItemData(final Context context) { 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new PeopleOptionsItemData(context); 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public PeopleAndOptionsData createPeopleAndOptionsData(final String conversationId, 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Context context, final PeopleAndOptionsDataListener listener) { 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new PeopleAndOptionsData(conversationId, context, listener); 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public VCardContactItemData createVCardContactItemData(final Context context, 136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final MessagePartData data) { 137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new VCardContactItemData(context, data); 138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public VCardContactItemData createVCardContactItemData(final Context context, 142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Uri vCardUri) { 143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new VCardContactItemData(context, vCardUri); 144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public ParticipantListItemData createParticipantListItemData( 148d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ParticipantData participant) { 149d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new ParticipantListItemData(participant); 150d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 151d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 152d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 153d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public SubscriptionListData createSubscriptonListData(Context context) { 154d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new SubscriptionListData(context); 155d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 156d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 157d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 158d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public SettingsData createSettingsData(Context context, SettingsDataListener listener) { 159d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new SettingsData(context, listener); 160d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 161d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 162d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 163d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public DraftMessageData createDraftMessageData(String conversationId) { 164d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new DraftMessageData(conversationId); 165d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 166d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 167d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 168d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public ActionService getActionService() { 169d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // We need to allow access to this on the UI thread since it's used to start actions. 170d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mActionService; 171d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 172d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 173d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 174d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public BackgroundWorker getBackgroundWorkerForActionService() { 175d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDataModelWorker; 176d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 177d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 178d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 179d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @DoesNotRunOnMainThread 180d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public DatabaseWrapper getDatabase() { 181d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // We prevent the main UI thread from accessing the database since we have to allow 182d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // public access to this class to enable sub-packages to access data. 183d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Assert.isNotMainThread(); 184d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDatabaseHelper.getDatabase(); 185d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 186d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 187d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 188d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public ConnectivityUtil getConnectivityUtil() { 189d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mConnectivityUtil; 190d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 191d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 192d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 193d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public SyncManager getSyncManager() { 194d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mSyncManager; 195d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 196d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 197d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 198d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd void onCreateTables(final SQLiteDatabase db) { 199d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd LogUtil.w(LogUtil.BUGLE_TAG, "Rebuilt databases: reseting related state"); 200d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Clear other things that implicitly reference the DB 201d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd SyncManager.resetLastSyncTimestamps(); 202d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 203d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 204d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 205d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void onActivityResume() { 206d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Perform an incremental sync and register for changes if necessary 207d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mSyncManager.updateSyncObserver(mContext); 208d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 209d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Trigger a participant refresh if needed, we should only need to refresh if there is 210d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // contact change while the activity was paused. 211d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ParticipantRefresh.refreshParticipantsIfNeeded(); 212d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 213d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 214d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 215d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void onApplicationCreated() { 216d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd FixupMessageStatusOnStartupAction.fixupMessageStatus(); 217d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ProcessPendingMessagesAction.processFirstPendingMessage(); 218d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd SyncManager.immediateSync(); 219d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 220d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (OsUtil.isAtLeastL_MR1()) { 221d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Start listening for subscription change events for refreshing self participants. 222d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd PhoneUtils.getDefault().toLMr1().registerOnSubscriptionsChangedListener( 223d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new SubscriptionManager.OnSubscriptionsChangedListener() { 224d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 225d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void onSubscriptionsChanged() { 226d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // TODO: This dynamically changes the mms config that app is 227d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // currently using. It may cause inconsistency in some cases. We need 228d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // to check the usage of mms config and handle the dynamic change 229d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // gracefully 230d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd MmsConfig.loadAsync(); 231d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ParticipantRefresh.refreshSelfParticipants(); 232d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 233d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }); 234d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 235d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 236d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 237