/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.realtimechat;
import java.util.Iterator;
import java.util.List;
import android.content.Context;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import com.galaxy.meetup.client.android.content.AudienceData;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.EsConversationsData;
import com.galaxy.meetup.client.util.StringUtils;
/**
*
* @author sihai
*
*/
public class CreateConversationOperation extends RealTimeChatOperation {
AudienceData mAudience;
Client.ClientConversation mConversation;
Long mConversationRowId;
long mMessageRowId;
String mMessageText;
int mResultCode;
public CreateConversationOperation(Context context, EsAccount esaccount, AudienceData audiencedata, String s)
{
super(context, esaccount);
mAudience = audiencedata;
mMessageText = s;
mResultCode = 1;
}
public final void execute() {
boolean flag;
List list;
flag = true;
ConnectivityManager connectivitymanager = (ConnectivityManager)mContext.getSystemService("connectivity");
if(connectivitymanager != null && (connectivitymanager.getActiveNetworkInfo() == null || !connectivitymanager.getActiveNetworkInfo().isConnectedOrConnecting()))
flag = false;
list = ParticipantUtils.getParticipantListFromAudience(mContext, mAccount, mAudience);
if(list.size() <= 100) {
Client.ClientConversation.Builder builder = Client.ClientConversation.newBuilder();
for(Iterator iterator = list.iterator(); iterator.hasNext(); builder.addParticipant((Data.Participant)iterator.next()));
Bundle bundle;
if(list.size() > 1)
builder.setType(Data.ConversationType.GROUP);
else
builder.setType(Data.ConversationType.ONE_TO_ONE);
builder.setId((new StringBuilder("c:")).append(StringUtils.randomString(32)).toString());
mConversation = builder.build();
bundle = EsConversationsData.createConversationLocally(mContext, mAccount, mConversation, mMessageText, flag, mOperationState);
mConversationRowId = Long.valueOf(bundle.getLong("conversation_row_id"));
mMessageRowId = bundle.getLong("message_row_id");
if(flag)
{
CheckIfFailedRunnable checkiffailedrunnable = new CheckIfFailedRunnable();
(new Handler(Looper.getMainLooper())).postDelayed(checkiffailedrunnable, 10000L);
}
} else {
mResultCode = 4;
}
return;
}
public final int getResultCode()
{
return mResultCode;
}
public final Object getResultValue()
{
return new ConversationResult(mConversationRowId, mConversation);
}
//================================================================================
//
//================================================================================
private final class CheckIfFailedRunnable implements Runnable {
public final void run()
{
RealTimeChatService.checkMessageSent(mContext, mAccount, mMessageRowId, 0);
}
}
public final class ConversationResult {
public Client.ClientConversation mConversation;
public Long mConversationRowId;
ConversationResult(Long long1, Client.ClientConversation clientconversation)
{
super();
mConversationRowId = long1;
mConversation = clientconversation;
}
}
}