diff options
Diffstat (limited to 'src/com/android/messaging/datamodel/action/GetOrCreateConversationAction.java')
-rw-r--r-- | src/com/android/messaging/datamodel/action/GetOrCreateConversationAction.java | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/src/com/android/messaging/datamodel/action/GetOrCreateConversationAction.java b/src/com/android/messaging/datamodel/action/GetOrCreateConversationAction.java deleted file mode 100644 index b262141..0000000 --- a/src/com/android/messaging/datamodel/action/GetOrCreateConversationAction.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * 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.action; - -import android.os.Parcel; -import android.os.Parcelable; -import android.text.TextUtils; - -import com.android.messaging.Factory; -import com.android.messaging.datamodel.BugleDatabaseOperations; -import com.android.messaging.datamodel.DataModel; -import com.android.messaging.datamodel.DatabaseWrapper; -import com.android.messaging.datamodel.action.ActionMonitor.ActionCompletedListener; -import com.android.messaging.datamodel.data.LaunchConversationData; -import com.android.messaging.datamodel.data.ParticipantData; -import com.android.messaging.sms.MmsUtils; -import com.android.messaging.util.Assert; -import com.android.messaging.util.Assert.RunsOnMainThread; -import com.android.messaging.util.LogUtil; - -import java.util.ArrayList; - -/** - * Action used to get or create a conversation for a list of conversation participants. - */ -public class GetOrCreateConversationAction extends Action implements Parcelable { - /** - * Interface for GetOrCreateConversationAction listeners - */ - public interface GetOrCreateConversationActionListener { - @RunsOnMainThread - abstract void onGetOrCreateConversationSucceeded(final ActionMonitor monitor, - final Object data, final String conversationId); - - @RunsOnMainThread - abstract void onGetOrCreateConversationFailed(final ActionMonitor monitor, - final Object data); - } - - public static GetOrCreateConversationActionMonitor getOrCreateConversation( - final ArrayList<ParticipantData> participants, final Object data, - final GetOrCreateConversationActionListener listener) { - final GetOrCreateConversationActionMonitor monitor = new - GetOrCreateConversationActionMonitor(data, listener); - final GetOrCreateConversationAction action = new GetOrCreateConversationAction(participants, - monitor.getActionKey()); - action.start(monitor); - return monitor; - } - - - public static GetOrCreateConversationActionMonitor getOrCreateConversation( - final String[] recipients, final Object data, final LaunchConversationData listener) { - final ArrayList<ParticipantData> participants = new ArrayList<>(); - for (String recipient : recipients) { - recipient = recipient.trim(); - if (!TextUtils.isEmpty(recipient)) { - participants.add(ParticipantData.getFromRawPhoneBySystemLocale(recipient)); - } else { - LogUtil.w(LogUtil.BUGLE_TAG, "getOrCreateConversation hit empty recipient"); - } - } - return getOrCreateConversation(participants, data, listener); - } - - private static final String KEY_PARTICIPANTS_LIST = "participants_list"; - - private GetOrCreateConversationAction(final ArrayList<ParticipantData> participants, - final String actionKey) { - super(actionKey); - actionParameters.putParcelableArrayList(KEY_PARTICIPANTS_LIST, participants); - } - - /** - * Lookup the conversation or create a new one. - */ - @Override - protected Object executeAction() { - final DatabaseWrapper db = DataModel.get().getDatabase(); - - // First find the thread id for this list of participants. - final ArrayList<ParticipantData> participants = - actionParameters.getParcelableArrayList(KEY_PARTICIPANTS_LIST); - BugleDatabaseOperations.sanitizeConversationParticipants(participants); - final ArrayList<String> recipients = - BugleDatabaseOperations.getRecipientsFromConversationParticipants(participants); - - final long threadId = MmsUtils.getOrCreateThreadId(Factory.get().getApplicationContext(), - recipients); - - if (threadId < 0) { - LogUtil.w(LogUtil.BUGLE_TAG, "Couldn't create a threadId in SMS db for numbers : " + - LogUtil.sanitizePII(recipients.toString())); - // TODO: Add a better way to indicate an error from executeAction. - return null; - } - - final String conversationId = BugleDatabaseOperations.getOrCreateConversation(db, threadId, - false, participants, false, false, null); - - return conversationId; - } - - /** - * A monitor that notifies a listener upon completion - */ - public static class GetOrCreateConversationActionMonitor extends ActionMonitor - implements ActionCompletedListener { - private final GetOrCreateConversationActionListener mListener; - - GetOrCreateConversationActionMonitor(final Object data, - final GetOrCreateConversationActionListener listener) { - super(STATE_CREATED, generateUniqueActionKey("GetOrCreateConversationAction"), data); - setCompletedListener(this); - mListener = listener; - } - - @Override - public void onActionSucceeded(final ActionMonitor monitor, - final Action action, final Object data, final Object result) { - if (result == null) { - mListener.onGetOrCreateConversationFailed(monitor, data); - } else { - mListener.onGetOrCreateConversationSucceeded(monitor, data, (String) result); - } - } - - @Override - public void onActionFailed(final ActionMonitor monitor, - final Action action, final Object data, final Object result) { - // TODO: Currently onActionFailed is only called if there is an error in - // processing requests, not for errors in the local processing. - Assert.fail("Unreachable"); - mListener.onGetOrCreateConversationFailed(monitor, data); - } - } - - private GetOrCreateConversationAction(final Parcel in) { - super(in); - } - - public static final Parcelable.Creator<GetOrCreateConversationAction> CREATOR - = new Parcelable.Creator<GetOrCreateConversationAction>() { - @Override - public GetOrCreateConversationAction createFromParcel(final Parcel in) { - return new GetOrCreateConversationAction(in); - } - - @Override - public GetOrCreateConversationAction[] newArray(final int size) { - return new GetOrCreateConversationAction[size]; - } - }; - - @Override - public void writeToParcel(final Parcel parcel, final int flags) { - writeActionToParcel(parcel, flags); - } -} |