/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.fragments;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import WriteReviewOperation.MediaRef;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.galaxy.meetup.client.android.EsCursorAdapter;
import com.galaxy.meetup.client.android.EsCursorLoader;
import com.galaxy.meetup.client.android.Intents;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.analytics.EsAnalytics;
import com.galaxy.meetup.client.android.analytics.OzActions;
import com.galaxy.meetup.client.android.analytics.OzViews;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.EsPeopleData;
import com.galaxy.meetup.client.android.content.EsProvider;
import com.galaxy.meetup.client.android.content.LocalImageRequest;
import com.galaxy.meetup.client.android.content.MediaImageRequest;
import com.galaxy.meetup.client.android.content.cache.ImageRequest;
import com.galaxy.meetup.client.android.realtimechat.Data;
import com.galaxy.meetup.client.android.realtimechat.RealTimeChatService;
import com.galaxy.meetup.client.android.realtimechat.RealTimeChatServiceListener;
import com.galaxy.meetup.client.android.realtimechat.RealTimeChatServiceResult;
import com.galaxy.meetup.client.android.ui.activity.BaseActivity;
import com.galaxy.meetup.client.android.ui.fragments.AlertFragmentDialog.AlertDialogListener;
import com.galaxy.meetup.client.android.ui.view.HangoutTileEventMessageListItemView;
import com.galaxy.meetup.client.android.ui.view.MessageClickListener;
import com.galaxy.meetup.client.android.ui.view.MessageListItemView;
import com.galaxy.meetup.client.android.ui.view.MessageListItemViewImage;
import com.galaxy.meetup.client.android.ui.view.SystemMessageListItemView;
import com.galaxy.meetup.client.util.Dates;
import com.galaxy.meetup.client.util.EsLog;
import com.galaxy.meetup.client.util.ImageUtils;
/**
*
* @author sihai
*
*/
public class MessageListFragment extends EsListFragment implements
LoaderCallbacks, AlertDialogListener, MessageClickListener {
private static long COLLAPSE_POSTS_THRESHOLD = 60000L;
private android.widget.RelativeLayout.LayoutParams defaultListViewLayoutParams;
private EsAccount mAccount;
private Runnable mAnimateTypingVisibilityRunnable;
private Runnable mCheckExpiredTypingRunnable;
private String mConversationId;
private Long mConversationRowId;
private long mEarliestEventTimestamp;
private long mFirstEventTimestamp;
private Handler mHandler;
private View mHeaderView;
private boolean mInitialLoadFinished;
private boolean mIsGroup;
private boolean mIsTypingVisible;
private LeaveConversationListener mLeaveConversationListener;
private boolean mLoadingOlderEvents;
private Uri mMessagesUri;
private HashMap mParticipantList;
private final RealTimeChatServiceListener mRTCServiceListener = new RTCServiceListener();
private Integer mRequestId;
private Data.Participant mSingleParticipant;
private Animation mSlideInUpAnimation;
private Animation mSlideOutDownAnimation;
private int mTotalItemBeforeLoadingOlder;
private TranslateAnimation mTranslateListAnimation;
private HashMap mTypingParticipants;
private TextView mTypingTextView;
private View mTypingView;
private boolean mTypingVisibilityChanged;
public MessageListFragment()
{
mRequestId = null;
mTypingParticipants = new HashMap();
mIsTypingVisible = false;
mTypingVisibilityChanged = false;
mHandler = new Handler();
mAnimateTypingVisibilityRunnable = new Runnable() {
public final void run()
{
animateTypingVisibility();
}
};
mCheckExpiredTypingRunnable = new Runnable() {
public final void run()
{
long l = System.currentTimeMillis();
updateTypingVisibility();
}
};
}
private synchronized void animateTypingVisibility()
{
if(null == mTypingView || null == mListView) {
if(EsLog.isLoggable("MessageListFragment", 3))
Log.d("MessageListFragment", "Ignoring animation due to null views");
return;
}
boolean flag = true;
mTypingVisibilityChanged = false;
if(mTypingParticipants.size() <= 0) {
flag = false;
} else {
flag = true;
}
if(mIsTypingVisible == flag) {
mIsTypingVisible = flag;
return;
}
View view;
int i;
view = mTypingView;
i = 0;
Exception exception;
int j;
View view1;
Animation animation;
if(!flag)
i = 8;
view.setVisibility(i);
((ListView)mListView).setLayoutParams(defaultListViewLayoutParams);
j = mTypingView.getHeight();
if(!flag) {
mTranslateListAnimation = new TranslateAnimation(0, 0.0F, 0, 0.0F, 0, -j, 0, 0.0F);
} else {
android.widget.RelativeLayout.LayoutParams layoutparams = new android.widget.RelativeLayout.LayoutParams(defaultListViewLayoutParams);
layoutparams.addRule(2, mTypingView.getId());
((ListView)mListView).setLayoutParams(layoutparams);
mTranslateListAnimation = new TranslateAnimation(0, 0.0F, 0, 0.0F, 0, j, 0, 0.0F);
}
int k = ((View)((ListView)mListView).getParent()).getHeight();
int l = ((View)((ListView)mListView).getParent()).getWidth();
mTranslateListAnimation.initialize(((ListView)mListView).getWidth(), ((ListView)mListView).getHeight(), l, k);
mTranslateListAnimation.setDuration(mSlideInUpAnimation.getDuration());
view1 = mTypingView;
if(flag) {
animation = mSlideInUpAnimation;
} else{
animation = mSlideOutDownAnimation;
}
view1.startAnimation(animation);
((ListView)mListView).startAnimation(mTranslateListAnimation);
mIsTypingVisible = flag;
}
private synchronized boolean isTypingAnimationPlaying() {
if(mTranslateListAnimation == null || !mTranslateListAnimation.hasStarted()) {
return false;
} else {
boolean flag1 = mTranslateListAnimation.hasEnded();
if(flag1) {
return false;
} else {
return true;
}
}
}
private void recordUserAction(OzActions ozactions)
{
if(mAccount != null)
{
FragmentActivity fragmentactivity = getActivity();
EsAnalytics.recordActionEvent(fragmentactivity, mAccount, ozactions, OzViews.getViewForLogging(fragmentactivity));
}
}
private void updateHeaderVisibility()
{
if(EsLog.isLoggable("MessageListFragment", 3))
Log.d("MessageListFragment", (new StringBuilder("updateHeaderVisibility ")).append(mLoadingOlderEvents).append(" ").append(mInitialLoadFinished).toString());
if(mLoadingOlderEvents && mInitialLoadFinished)
mHeaderView.setVisibility(0);
else
mHeaderView.setVisibility(8);
}
private synchronized void updateTypingVisibility() {
TextView textview = mTypingTextView;
if(null == textview) {
return;
}
String as[];
int i;
as = new String[Math.min(3, mTypingParticipants.size())];
Iterator iterator = mTypingParticipants.values().iterator();
i = 0;
do
{
if(!iterator.hasNext())
break;
UserTypingInfo usertypinginfo = (UserTypingInfo)iterator.next();
int j1 = i + 1;
as[i] = usertypinginfo.userName;
if(j1 == 3)
break;
i = j1;
} while(true);
String s;
switch(mTypingParticipants.size()) {
case 0:
s = mTypingTextView.getText().toString();
break;
case 1:
int l = R.string.realtimechat_one_person_typing_text;
Object aobj2[] = new Object[1];
aobj2[0] = as[0];
s = getString(l, aobj2);
break;
case 2:
int k = R.string.realtimechat_two_people_typing_text;
Object aobj1[] = new Object[2];
aobj1[0] = as[0];
aobj1[1] = as[1];
s = getString(k, aobj1);
break;
case 3:
int j = R.string.realtimechat_three_people_typing_text;
Object aobj[] = new Object[3];
aobj[0] = as[0];
aobj[1] = as[1];
aobj[2] = as[2];
s = getString(j, aobj);
break;
default:
int i1 = R.string.realtimechat_more_than_three_people_typing_text;
Object aobj3[] = new Object[3];
aobj3[0] = as[0];
aobj3[1] = as[1];
aobj3[2] = Integer.valueOf(-2 + mTypingParticipants.size());
s = getString(i1, aobj3);
break;
}
mTypingTextView.setText(s);
if(!isTypingAnimationPlaying()) {
animateTypingVisibility();
return;
} else {
if(EsLog.isLoggable("MessageListFragment", 3))
Log.d("MessageListFragment", "Animation already playing. Setting typing visibility changed");
mTypingVisibilityChanged = true;
return;
}
}
public final void displayLeaveConversationDialog()
{
AlertFragmentDialog alertfragmentdialog = AlertFragmentDialog.newInstance(getString(R.string.realtimechat_leave_conversation_title), getString(R.string.realtimechat_leave_conversation_text), getString(R.string.realtimechat_conversation_leave_menu_item_text), getString(R.string.cancel));
alertfragmentdialog.setTargetFragment(this, 0);
alertfragmentdialog.show(getFragmentManager(), "leave_conversation");
}
public final void handleFatalError(int i) {
int j = R.string.realtimechat_conversation_error_dialog_general;
if(3 == i) {
j = R.string.realtimechat_conversation_error_dialog_huddle_too_big;
} else if(4 == i) {
j = R.string.realtimechat_conversation_error_dialog_some_invalid_participants;
} else {
j = R.string.realtimechat_conversation_error_dialog_general;
}
Resources resources = getResources();
AlertFragmentDialog alertfragmentdialog = AlertFragmentDialog.newInstance(resources.getString(R.string.realtimechat_conversation_error_dialog_title), resources.getString(j), getString(R.string.realtimechat_conversation_error_dialog_leave_button), null);
alertfragmentdialog.setTargetFragment(this, 0);
alertfragmentdialog.show(getFragmentManager(), "conversation_error");
return;
}
public final void messageLoadFailed()
{
if(EsLog.isLoggable("MessageListFragment", 3))
Log.d("MessageListFragment", "messageLoadFailed");
mLoadingOlderEvents = false;
updateHeaderVisibility();
Toast.makeText(getActivity(), R.string.realtimechat_failure_loading_messages, 0).show();
}
public final void messageLoadSucceeded() {
if(EsLog.isLoggable("MessageListFragment", 3))
Log.d("MessageListFragment", "messageLoadSucceeded");
(new Handler(Looper.getMainLooper())).postDelayed(new Runnable() {
public final void run()
{
mLoadingOlderEvents = false;
updateHeaderVisibility();
}
}, 500L);
}
public final void onCancelButtonClicked(long l)
{
RealTimeChatService.removeMessage(getActivity(), mAccount, l);
}
public final void onCreate(Bundle bundle) {
super.onCreate(bundle);
long l;
FragmentActivity fragmentactivity = getActivity();
if(bundle != null)
{
if(bundle.containsKey("request_id"))
mRequestId = Integer.valueOf(bundle.getInt("request_id"));
else
mRequestId = null;
mLoadingOlderEvents = bundle.getBoolean("loading_older_events", false);
mInitialLoadFinished = bundle.getBoolean("initial_load_finished", false);
} else
{
mRequestId = null;
mInitialLoadFinished = false;
mLoadingOlderEvents = false;
}
mSingleParticipant = (Data.Participant)fragmentactivity.getIntent().getSerializableExtra("participant");
mAccount = (EsAccount)getActivity().getIntent().getExtras().get("account");
mIsGroup = getActivity().getIntent().getBooleanExtra("is_group", false);
l = fragmentactivity.getIntent().getLongExtra("conversation_row_id", -1L);
if(l != -1L)
{
mConversationRowId = Long.valueOf(l);
mMessagesUri = EsProvider.buildMessagesUri(mAccount, mConversationRowId.longValue());
getLoaderManager().initLoader(1, null, this);
} else
{
mConversationRowId = null;
}
mSlideOutDownAnimation = AnimationUtils.loadAnimation(fragmentactivity, R.anim.slide_out_down_self);
mSlideOutDownAnimation.setAnimationListener(new android.view.animation.Animation.AnimationListener() {
public final void onAnimationEnd(Animation animation)
{
if(mTypingVisibilityChanged)
mHandler.post(mAnimateTypingVisibilityRunnable);
}
public final void onAnimationRepeat(Animation animation)
{
}
public final void onAnimationStart(Animation animation)
{
}
});
mSlideOutDownAnimation.setDuration(350L);
mSlideInUpAnimation = AnimationUtils.loadAnimation(fragmentactivity, R.anim.slide_in_up_self);
mSlideInUpAnimation.setAnimationListener(new android.view.animation.Animation.AnimationListener() {
public final void onAnimationEnd(Animation animation)
{
if(mTypingVisibilityChanged)
mHandler.post(mAnimateTypingVisibilityRunnable);
}
public final void onAnimationRepeat(Animation animation)
{
}
public final void onAnimationStart(Animation animation)
{
}
});
mSlideInUpAnimation.setDuration(350L);
}
public final Loader onCreateLoader(int i, Bundle bundle)
{
EsCursorLoader escursorloader;
if(i == 1)
escursorloader = new EsCursorLoader(getActivity(), mMessagesUri, MessagesQuery.PROJECTION, null, null, "timestamp");
else
escursorloader = null;
return escursorloader;
}
public final View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle)
{
View view = layoutinflater.inflate(R.layout.message_list_fragment, viewgroup, false);
mListView = (ListView)view.findViewById(0x102000a);
defaultListViewLayoutParams = (android.widget.RelativeLayout.LayoutParams)((ListView)mListView).getLayoutParams();
mTypingView = view.findViewById(R.id.typing_text);
mTypingTextView = (TextView)mTypingView.findViewById(R.id.typing_text_view);
View view1 = layoutinflater.inflate(R.layout.message_list_item_loading_older, viewgroup);
((ListView)mListView).addHeaderView(view1);
mHeaderView = view1.findViewById(R.id.message_list_item_loading_content);
mAdapter = new MessageCursorAdapter(this, mListView, null);
((ListView)mListView).setAdapter(mAdapter);
if(android.os.Build.VERSION.SDK_INT >= 11)
((ListView)mListView).setChoiceMode(0);
((ListView)mListView).setOnItemLongClickListener(new android.widget.AdapterView.OnItemLongClickListener() {
public final boolean onItemLongClick(AdapterView adapterview, View view3, int j, long l) {
CharSequence charsequence = null;
if(!(view3 instanceof MessageListItemView)) {
boolean flag = view3 instanceof SystemMessageListItemView;
charsequence = null;
if(flag)
charsequence = ((SystemMessageListItemView)view3).getText();
} else {
charsequence = ((MessageListItemView)view3).getMessage();
}
if(charsequence != null && android.os.Build.VERSION.SDK_INT >= 11)
{
ClipboardManager clipboardmanager = (ClipboardManager)getActivity().getSystemService("clipboard");
if(clipboardmanager != null)
{
clipboardmanager.setText(charsequence);
Toast.makeText(getActivity(), R.string.copied_to_clipboard, 0).show();
}
}
return true;
}
});
((ListView)mListView).setOnScrollListener(new android.widget.AbsListView.OnScrollListener() {
public final void onScroll(AbsListView abslistview, int j, int k, int l)
{
if(mInitialLoadFinished && !mLoadingOlderEvents && j == 0 && mConversationRowId != null && (mEarliestEventTimestamp > mFirstEventTimestamp || mFirstEventTimestamp == 0L || mEarliestEventTimestamp == 0L) && mConversationId != null && !mConversationId.startsWith("c:"))
{
mLoadingOlderEvents = true;
mHeaderView.setVisibility(0);
mTotalItemBeforeLoadingOlder = ((MessageCursorAdapter)mAdapter).getCount();
mRequestId = Integer.valueOf(RealTimeChatService.requestMoreEvents(getActivity(), mAccount, mConversationRowId.longValue()));
updateHeaderVisibility();
}
}
public final void onScrollStateChanged(AbsListView abslistview, int j)
{
}
});
if(mSingleParticipant != null)
{
View view2 = view.findViewById(R.id.empty_conversation_view);
TextView textview = (TextView)view.findViewById(R.id.empty_conversation_text);
FragmentActivity fragmentactivity = getActivity();
int i = R.string.new_conversation_description;
Object aobj[] = new Object[1];
aobj[0] = mSingleParticipant.getFullName();
textview.setText(fragmentactivity.getString(i, aobj));
view2.setVisibility(0);
}
return view;
}
public final View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle, int i)
{
return super.onCreateView(layoutinflater, viewgroup, bundle, i);
}
public final void onDestroyView()
{
super.onDestroyView();
}
public final void onDialogCanceled(String s)
{
if(s.equals("conversation_error"))
{
RealTimeChatService.leaveConversation(getActivity(), mAccount, mConversationRowId.longValue());
mLeaveConversationListener.leaveConversation();
getActivity().finish();
}
}
public final void onDialogListClick(int i, Bundle bundle)
{
}
public final void onDialogNegativeClick(String s)
{
}
public final void onDialogPositiveClick(Bundle bundle, String s)
{
if(!s.equals("leave_conversation")) {
if(s.equals("conversation_error"))
{
RealTimeChatService.leaveConversation(getActivity(), mAccount, mConversationRowId.longValue());
mLeaveConversationListener.leaveConversation();
getActivity().finish();
} else
if(EsLog.isLoggable("MessageListFragment", 6))
Log.e("MessageListFragment", (new StringBuilder("invalidate dialog ")).append(s).toString());
} else {
recordUserAction(OzActions.GROUP_CONVERSATION_LEAVE);
RealTimeChatService.leaveConversation(getActivity(), mAccount, mConversationRowId.longValue());
mLeaveConversationListener.leaveConversation();
getActivity().finish();
}
}
public final void onLoadFinished(Loader loader, Object obj)
{
Cursor cursor = (Cursor)obj;
if(EsLog.isLoggable("MessageListFragment", 3))
Log.d("MessageListFragment", (new StringBuilder("onLoadFinished ")).append(mLoadingOlderEvents).toString());
if(loader.getId() == 1)
{
((MessageCursorAdapter)mAdapter).swapCursor(cursor);
restoreScrollPosition();
if(cursor.getCount() > 0)
showContent(getView());
else
showEmptyView(getView());
if(mLoadingOlderEvents)
{
int i = cursor.getCount() - mTotalItemBeforeLoadingOlder;
int j;
if(i < 0)
j = 0;
else
if(i >= cursor.getCount())
j = -1 + cursor.getCount();
else
j = i;
((ListView)mListView).setSelection(j);
}
mInitialLoadFinished = true;
updateHeaderVisibility();
FragmentActivity fragmentactivity = getActivity();
if(fragmentactivity instanceof BaseActivity)
((BaseActivity)fragmentactivity).onAsyncData();
}
}
public final void onLoaderReset(Loader loader)
{
((MessageCursorAdapter)mAdapter).swapCursor(null);
}
public final void onMediaImageClick(String s, String s1)
{
Intents.PhotoViewIntentBuilder photoviewintentbuilder = Intents.newPhotoViewActivityIntentBuilder(getActivity());
photoviewintentbuilder.setAccount(mAccount).setPhotoOnly(Boolean.valueOf(true)).setPhotoUrl(s).setGaiaId(s1).setAlbumName(getString(R.string.photo_view_messenger_title));
startActivity(photoviewintentbuilder.build());
}
public final void onPause()
{
super.onPause();
RealTimeChatService.unregisterListener(mRTCServiceListener);
mHandler.removeCallbacks(mAnimateTypingVisibilityRunnable);
mHandler.removeCallbacks(mCheckExpiredTypingRunnable);
}
public final void onResume()
{
super.onResume();
if(!getActivity().isFinishing())
{
mIsTypingVisible = false;
mTypingVisibilityChanged = false;
mTypingParticipants.clear();
RealTimeChatService.registerListener(mRTCServiceListener);
if(mConversationRowId != null && ((MessageCursorAdapter)mAdapter).getCursor() == null)
showEmptyViewProgress(getView());
if(mRequestId != null && !RealTimeChatService.isRequestPending(mRequestId.intValue()))
{
RealTimeChatServiceResult realtimechatserviceresult = RealTimeChatService.removeResult(mRequestId.intValue());
if(realtimechatserviceresult != null)
if(realtimechatserviceresult.getErrorCode() == 1)
messageLoadSucceeded();
else
messageLoadFailed();
mRequestId = null;
}
((MessageCursorAdapter)mAdapter).onResume();
}
}
public final void onRetryButtonClicked(long l)
{
recordUserAction(OzActions.CONVERSATION_RETRY_SEND);
RealTimeChatService.retrySendMessage(getActivity(), mAccount, l);
}
public final void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
if(mRequestId != null)
bundle.putInt("request_id", mRequestId.intValue());
bundle.putBoolean("loading_older_events", mLoadingOlderEvents);
bundle.putBoolean("initial_load_finished", mInitialLoadFinished);
}
public void onScroll(AbsListView abslistview, int i, int j, int k)
{
super.onScroll(abslistview, i, j, k);
}
public void onScrollStateChanged(AbsListView abslistview, int i)
{
super.onScrollStateChanged(abslistview, i);
}
public final void onUserImageClicked(String s)
{
if(s != null)
{
Intent intent = Intents.getProfileActivityByGaiaIdIntent(getActivity(), mAccount, String.valueOf(s), null);
getActivity().startActivity(intent);
}
}
public final void reinitialize()
{
mInitialLoadFinished = false;
mAccount = (EsAccount)getActivity().getIntent().getExtras().get("account");
mIsGroup = getActivity().getIntent().getBooleanExtra("is_group", false);
long l = getActivity().getIntent().getLongExtra("conversation_row_id", -1L);
if(l != -1L)
{
mConversationRowId = Long.valueOf(l);
mMessagesUri = EsProvider.buildMessagesUri(mAccount, mConversationRowId.longValue());
getLoaderManager().restartLoader(1, null, this);
} else
{
mConversationRowId = null;
}
mSingleParticipant = (Data.Participant)getActivity().getIntent().getSerializableExtra("participant");
if(getView() != null)
{
View view = getView().findViewById(R.id.empty_conversation_view);
if(mSingleParticipant != null)
{
TextView textview = (TextView)getView().findViewById(R.id.empty_conversation_text);
FragmentActivity fragmentactivity = getActivity();
int i = R.string.new_conversation_description;
Object aobj[] = new Object[1];
aobj[0] = mSingleParticipant.getFullName();
textview.setText(fragmentactivity.getString(i, aobj));
view.setVisibility(0);
} else
{
view.setVisibility(8);
}
}
mTypingParticipants.clear();
animateTypingVisibility();
}
public final void setConversationInfo(String s, long l, long l1)
{
if(EsLog.isLoggable("MessageListFragment", 3))
Log.d("MessageListFragment", (new StringBuilder("setConversationInfo first ")).append(l).append(" earliest local ").append(l1).toString());
mConversationId = s;
mFirstEventTimestamp = l;
mEarliestEventTimestamp = l1;
}
public final void setLeaveConversationListener(LeaveConversationListener leaveconversationlistener)
{
mLeaveConversationListener = leaveconversationlistener;
}
public final void setParticipantList(HashMap hashmap)
{
mParticipantList = hashmap;
}
//==================================================================================================================
// Inner class
//==================================================================================================================
private class UserTypingInfo {
public long typingStartTimeMs;
public String userName;
public UserTypingInfo(String s)
{
super();
userName = s;
typingStartTimeMs = System.currentTimeMillis();
}
}
public static interface LeaveConversationListener
{
public abstract void leaveConversation();
}
static final class MessageCursorAdapter extends EsCursorAdapter implements MessageListItemViewImage.OnMeasuredListener {
final MessageListFragment mFragment;
final List mViews = new ArrayList();
public MessageCursorAdapter(MessageListFragment messagelistfragment, AbsListView abslistview, Cursor cursor)
{
super(messagelistfragment.getActivity(), null);
mFragment = messagelistfragment;
abslistview.setRecyclerListener(new AbsListView.RecyclerListener() {
public final void onMovedToScrapHeap(View view) {
if(!(view instanceof MessageListItemView)) {
if(view instanceof MessageListItemViewImage)
((MessageListItemViewImage)view).clear();
} else {
((MessageListItemView)view).clear();
}
mViews.remove(view);
}
});
}
public final View getView(int i, View view, ViewGroup viewgroup)
{
if(!mDataValid)
throw new IllegalStateException("this should only be called when the cursor is valid");
if(!mCursor.moveToPosition(i))
throw new IllegalStateException((new StringBuilder("couldn't move cursor to position ")).append(i).toString());
LayoutInflater layoutinflater = (LayoutInflater)mContext.getSystemService("layout_inflater");
int j = mCursor.getInt(7);
boolean flag6;
boolean flag7;
boolean flag9;
long l3;
Context context;
Context context1;
Context context2;
String s;
long l;
CharSequence charsequence;
boolean flag;
boolean flag1;
boolean flag2;
boolean flag3;
boolean flag4;
long l1;
boolean flag5;
int k;
long i1;
boolean flag8;
boolean flag10;
String s3;
Object obj1;
Object obj;
Context context3;
String s1;
long l2;
CharSequence charsequence1;
String s2;
if(j == 1)
{
if(mCursor.getString(11) != null)
{
if(view != null && (view instanceof MessageListItemViewImage))
{
obj = (MessageListItemViewImage)view;
} else
{
obj = (MessageListItemViewImage)layoutinflater.inflate(R.layout.message_list_item_view_image, null);
((MessageListItemViewImage) (obj)).setMessageClickListener(mFragment);
}
context3 = mContext;
if(!mViews.contains(obj))
mViews.add(obj);
((MessageListItemViewImage) (obj)).clear();
s1 = mCursor.getString(3);
l2 = mCursor.getLong(5) / 1000L;
charsequence1 = Dates.getShortRelativeTimeSpanString(context3, l2);
((MessageListItemViewImage) (obj)).setMessageRowId(mCursor.getLong(0));
((MessageListItemViewImage) (obj)).setAuthorName(mCursor.getString(9));
s2 = mCursor.getString(11);
if(s2.length() > 0)
{
if(s2.startsWith("//"))
s3 = (new StringBuilder("http:")).append(s2).toString();
else
s3 = s2;
if(((MessageListItemViewImage) (obj)).getImageWidth() != null)
{
int j1 = ((MessageListItemViewImage) (obj)).getImageWidth().intValue();
int k1 = ((MessageListItemViewImage) (obj)).getImageHeight().intValue();
if(EsLog.isLoggable("MessageListFragment", 4))
Log.i("MessageListFragment", (new StringBuilder("BindUserImageMessageView image width ")).append(j1).append(" height ").append(k1).toString());
if(s3.startsWith("content://"))
obj1 = new LocalImageRequest(new MediaRef(null, 0L, null, Uri.parse(s3), MediaRef.MediaType.IMAGE), j1, k1);
else
obj1 = new MediaImageRequest(ImageUtils.getCenterCroppedAndResizedUrl(j1, k1, s2), 3, j1, k1, false);
} else
{
((MessageListItemViewImage) (obj)).setOnMeasureListener(this);
obj1 = null;
}
((MessageListItemViewImage) (obj)).setImage(s2, ((ImageRequest) (obj1)));
}
flag6 = mCursor.isFirst();
flag7 = false;
if(!flag6)
{
flag9 = mCursor.moveToPrevious();
flag7 = false;
if(flag9)
{
l3 = mCursor.getLong(5) / 1000L;
if(s1.equals(mCursor.getString(3)) && mCursor.getInt(7) == 1 && l2 - l3 <= MessageListFragment.COLLAPSE_POSTS_THRESHOLD)
flag10 = true;
else
flag10 = false;
mCursor.moveToNext();
flag7 = flag10;
}
}
if(s1 != null && s1.equals(mFragment.mAccount.getRealTimeChatParticipantId()) && !mFragment.mIsGroup)
flag8 = true;
else
flag8 = false;
((MessageListItemViewImage) (obj)).setMessageStatus(mCursor.getInt(6), flag8);
((MessageListItemViewImage) (obj)).setTimeSince(charsequence1);
((MessageListItemViewImage) (obj)).setGaiaId(EsPeopleData.extractGaiaId(s1));
if(flag7)
((MessageListItemViewImage) (obj)).hideAuthor();
else
((MessageListItemViewImage) (obj)).showAuthor();
((MessageListItemViewImage) (obj)).updateContentDescription();
} else
{
if(view != null && (view instanceof MessageListItemView))
{
obj = (MessageListItemView)view;
} else
{
obj = (MessageListItemView)layoutinflater.inflate(R.layout.message_list_item_view, null);
((MessageListItemView) (obj)).setMessageClickListener(mFragment);
}
context2 = mContext;
if(!mViews.contains(obj))
mViews.add(obj);
((MessageListItemView) (obj)).clear();
s = mCursor.getString(3);
l = mCursor.getLong(5) / 1000L;
charsequence = Dates.getShortRelativeTimeSpanString(context2, l);
((MessageListItemView) (obj)).setMessageRowId(mCursor.getLong(0));
((MessageListItemView) (obj)).setAuthorName(mCursor.getString(9));
((MessageListItemView) (obj)).setMessage(mCursor.getString(4));
flag = mCursor.isFirst();
flag1 = false;
if(!flag)
{
flag4 = mCursor.moveToPrevious();
flag1 = false;
if(flag4)
{
l1 = mCursor.getLong(5) / 1000L;
flag5 = s.equals(mCursor.getString(3));
flag1 = false;
if(flag5)
{
k = mCursor.getInt(7);
flag1 = false;
if(k == 1)
{
i1 = l - l1 - MessageListFragment.COLLAPSE_POSTS_THRESHOLD;
flag1 = false;
if(i1 <= 0)
flag1 = true;
}
}
mCursor.moveToNext();
}
}
flag2 = flag1;
if(s != null && s.equals(mFragment.mAccount.getRealTimeChatParticipantId()) && !mFragment.mIsGroup)
flag3 = true;
else
flag3 = false;
((MessageListItemView) (obj)).setMessageStatus(mCursor.getInt(6), flag3);
((MessageListItemView) (obj)).setTimeSince(charsequence);
((MessageListItemView) (obj)).setGaiaId(EsPeopleData.extractGaiaId(s));
if(flag2)
((MessageListItemView) (obj)).hideAuthor();
else
((MessageListItemView) (obj)).showAuthor();
((MessageListItemView) (obj)).updateContentDescription();
}
} else
if(j == 6)
{
if(view != null && (view instanceof HangoutTileEventMessageListItemView))
obj = (HangoutTileEventMessageListItemView)view;
else
obj = (HangoutTileEventMessageListItemView)layoutinflater.inflate(R.layout.hangout_tile_event_message_list_item_view, null);
context1 = mContext;
((HangoutTileEventMessageListItemView) (obj)).setType(mCursor.getInt(7));
((HangoutTileEventMessageListItemView) (obj)).setText(mCursor.getString(4));
((HangoutTileEventMessageListItemView) (obj)).setTimeSince(Dates.getShortRelativeTimeSpanString(context1, mCursor.getLong(5) / 1000L));
((HangoutTileEventMessageListItemView) (obj)).updateContentDescription();
} else
{
if(view != null && (view instanceof SystemMessageListItemView))
obj = (SystemMessageListItemView)view;
else
obj = (SystemMessageListItemView)layoutinflater.inflate(R.layout.system_message_list_item_view, null);
context = mContext;
((SystemMessageListItemView) (obj)).setType(mCursor.getInt(7));
((SystemMessageListItemView) (obj)).setText(mCursor.getString(4));
((SystemMessageListItemView) (obj)).setTimeSince(Dates.getShortRelativeTimeSpanString(context, mCursor.getLong(5) / 1000L));
((SystemMessageListItemView) (obj)).updateContentDescription();
}
return ((View) (obj));
}
public final void onMeasured(View view)
{
if(view instanceof MessageListItemViewImage)
{
MessageListItemViewImage messagelistitemviewimage = (MessageListItemViewImage)view;
messagelistitemviewimage.setOnMeasureListener(null);
int i = messagelistitemviewimage.getImageWidth().intValue();
int j = messagelistitemviewimage.getImageHeight().intValue();
if(EsLog.isLoggable("MessageListFragment", 4))
Log.i("MessageListFragment", (new StringBuilder("onMeasured image width ")).append(i).append(" height ").append(j).toString());
String s = messagelistitemviewimage.getFullResUrl();
Object obj;
if(s.startsWith("content://"))
obj = new LocalImageRequest(new MediaRef(null, 0L, null, Uri.parse(s), MediaRef.MediaType.IMAGE), i, j);
else
obj = new MediaImageRequest(ImageUtils.getCenterCroppedAndResizedUrl(i, j, s), 3, i, j, false);
messagelistitemviewimage.setImage(s, ((ImageRequest) (obj)));
}
}
public final void onResume()
{
mViews.clear();
}
}
public static interface MessagesQuery
{
public static final String PROJECTION[] = {
"_id", "message_id", "conversation_id", "author_id", "text", "timestamp", "status", "type", "author_full_name", "author_first_name",
"author_type", "image_url"
};
}
private final class RTCServiceListener extends RealTimeChatServiceListener
{
public final void onResponseReceived(int i, RealTimeChatServiceResult realtimechatserviceresult)
{
if(mRequestId == null || mRequestId.intValue() != i) {
return;
}
if(realtimechatserviceresult.getErrorCode() != 1) {
messageLoadFailed();
if(EsLog.isLoggable("MessageListFragment", 4))
Log.i("MessageListFragment", (new StringBuilder("message load failed ")).append(realtimechatserviceresult.getErrorCode()).toString());
} else {
messageLoadSucceeded();
}
}
public final void onResponseTimeout(int i)
{
if(mRequestId != null && mRequestId.intValue() == i)
{
messageLoadFailed();
if(EsLog.isLoggable("MessageListFragment", 4))
Log.i("MessageListFragment", "message load timeout");
}
}
public final void onUserTypingStatusChanged(long l, String s, String s1, boolean flag)
{
if(mConversationRowId == null || mConversationRowId.longValue() != l) {
return;
}
Data.Participant participant;
HashMap hashmap = mParticipantList;
participant = null;
if(hashmap != null)
participant = (Data.Participant)mParticipantList.get(s1);
if(participant == null) {
if(EsLog.isLoggable("MessageListFragment", 6))
Log.e("MessageListFragment", (new StringBuilder("Typing status for non existing participant ")).append(s1).append(" conversation ").append(s).toString());
} else {
if(flag)
mTypingParticipants.put(s1, new UserTypingInfo(participant.getFullName()));
else
mTypingParticipants.remove(s1);
if(EsLog.isLoggable("MessageListFragment", 3))
Log.d("MessageListFragment", (new StringBuilder("Typing status for ")).append(participant.getFullName()).append(" changed to ").append(flag).toString());
mHandler.removeCallbacks(mCheckExpiredTypingRunnable);
mHandler.post(mCheckExpiredTypingRunnable);
mHandler.postDelayed(mCheckExpiredTypingRunnable, 31000L);
}
}
}
}