package com.closedcircles.client.activities;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import com.closedcircles.client.R;
import com.closedcircles.client.WebConnectionManager;
import com.closedcircles.client.model.*;
import com.closedcircles.client.adapters.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Map;
public class FragmentThreads extends android.support.v4.app.Fragment {
private Typeface msgTypeface = null;
private Typeface authourTypeface = null;
private AdapterThreads mThreadsAdapter = null;
ListView mViewMessages;
public static final FragmentThreads newInstance() {
FragmentThreads f = new FragmentThreads();
return f;
}
public FragmentThreads() {
super();
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment_threads, container, false);
mThreadsAdapter = new AdapterThreads(getActivity(), msgTypeface, authourTypeface);
mViewMessages = (ListView)view.findViewById(R.id.thread_list);
mViewMessages.setAdapter(mThreadsAdapter);
authourTypeface = Typeface.createFromAsset(getActivity().getAssets(), "Roboto-LightItalic.ttf");
msgTypeface = Typeface.createFromAsset(getActivity().getAssets(), "Messages.ttf");
updateList();
mViewMessages.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
CirclesActivity a = (CirclesActivity)getActivity();
Circle c = WebConnectionManager.get().account().getSelectedCircle();
if ( c != null ){
WebConnectionManager.get().account().setSelectedThreadId( mThreadsAdapter.getItem(position).thread_id );
WebConnectionManager.get().account().setSelectedMsgId( mThreadsAdapter.getItem(position).msg_id );
FragmentMessages fragmentMessages = (FragmentMessages)
a.getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + CirclesActivity.FRAGMENT_MESSAGES);
if ( fragmentMessages != null ) {
fragmentMessages.updateList(false, true);
}
mViewMessages.setItemChecked(position, true);
a.getPager().setCurrentItem(2, true);
}
}
});
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
class ThreadComparator implements Comparator<Circle.MsgThread> {
protected Map<Long, Circle.Thread> mThreads = null;
protected Circle mCircle = null;
public ThreadComparator(Map<Long, Circle.Thread> threads, Circle circle){
super();
mThreads = threads;
mCircle = circle;
}
@Override
public int compare(Circle.MsgThread a, Circle.MsgThread b) {
Circle.Thread t1 = mThreads.get(a.thread_id);
Circle.Thread t2 = mThreads.get(b.thread_id);
long id1 = mCircle.getMessage(t1.getLast()).getId();
long id2 = mCircle.getMessage(t2.getLast()).getId();
return (int)(id2-id1);
};
};
public void updateList(){
Account account = WebConnectionManager.get().account();
Circle circle = account.getSelectedCircle();
if ( mThreadsAdapter == null || circle == null ) return;
mViewMessages.clearChoices();
// fill tread array to display in the list
CirclesActivity activity = (CirclesActivity)getActivity();
ArrayList<Circle.MsgThread> items = new ArrayList<Circle.MsgThread>();
if ( circle == null ) return;
Map<Long, Circle.Thread> threads = circle.getThreads();
for (Map.Entry<Long, Circle.Thread> entry : threads.entrySet()){
Circle.Thread thread = entry.getValue();
Message msg = circle.getMessage(thread.get(0));
Circle.MsgThread m = new Circle.MsgThread();
m.msg = msg.getMessage();
m.authour = msg.getName();
m.thread_id = thread.getId();
m.msg_id = msg.getId();
m.date = circle.getMessage(thread.getLast()).getDate(); // set date of last message in the thread
if (thread.hasUnread() )
m.unreadMsg = "Unread: " + Long.toString(thread.getUnreadCount());
else
m.unreadMsg = "Messages: " + thread.size();
items.add( m );
}
Collections.sort(items, new ThreadComparator(threads, circle));
mThreadsAdapter.clear();
mThreadsAdapter.addAll(items);
for ( int i=0;i<items.size();++i )
if ( items.get(i).thread_id == account.getSelectedThreadId() ) {
mViewMessages.setItemChecked(i, true); // restore item selection
break;
}
}
}