ConversationActivity.java

  1package de.gultsch.chat.ui;
  2
  3import java.util.HashMap;
  4
  5import de.gultsch.chat.Contact;
  6import de.gultsch.chat.Conversation;
  7import de.gultsch.chat.ConversationCursor;
  8import de.gultsch.chat.ConversationList;
  9import de.gultsch.chat.R;
 10import de.gultsch.chat.R.id;
 11import android.os.Bundle;
 12import android.app.Activity;
 13import android.app.FragmentTransaction;
 14import android.content.Context;
 15import android.content.Intent;
 16import android.support.v4.widget.SlidingPaneLayout;
 17import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
 18import android.util.Log;
 19import android.view.Menu;
 20import android.view.MenuItem;
 21import android.view.View;
 22import android.view.inputmethod.InputMethodManager;
 23import android.widget.AdapterView;
 24import android.widget.AdapterView.OnItemClickListener;
 25import android.widget.ListView;
 26import android.widget.SimpleCursorAdapter;
 27
 28public class ConversationActivity extends Activity {
 29	
 30	public static final String START_CONVERSATION = "startconversation";
 31	public static final String CONVERSATION_CONTACT = "conversationcontact";
 32
 33	protected SlidingPaneLayout spl;
 34	
 35	protected HashMap<Conversation, ConversationFragment> conversationFragments = new HashMap<Conversation, ConversationFragment>();
 36	
 37	@Override
 38	protected void onCreate(Bundle savedInstanceState) {
 39		super.onCreate(savedInstanceState);
 40		setContentView(R.layout.activity_conversations);
 41		
 42		final ConversationList conversationList = new ConversationList();
 43		
 44		if (getIntent().getAction().equals(Intent.ACTION_VIEW)) {
 45			if (getIntent().getType().equals(ConversationActivity.START_CONVERSATION)) {
 46				Contact contact = (Contact) getIntent().getExtras().get(ConversationActivity.CONVERSATION_CONTACT);
 47				Log.d("gultsch","start conversation with "+contact.getDisplayName());
 48				conversationList.add(new Conversation(contact.getDisplayName()));
 49			}
 50		}
 51		String[] fromColumns = {ConversationCursor.NAME,
 52                ConversationCursor.LAST_MSG};
 53		int[] toViews = {R.id.conversation_name, R.id.conversation_lastmsg};
 54		
 55		final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.conversation_list_row, conversationList.getCursor(), fromColumns, toViews,0);
 56		final ListView listView = (ListView) findViewById(R.id.list);
 57		listView.setAdapter(adapter);
 58		
 59		listView.setOnItemClickListener(new OnItemClickListener() {
 60
 61			@Override
 62			public void onItemClick(AdapterView<?> arg0, View clickedView, int position,
 63					long arg3) {
 64				conversationList.setSelectedConversationPosition(position);
 65				swapConversationFragment(conversationList);
 66				getActionBar().setTitle(conversationList.getSelectedConversation().getName());
 67				spl.closePane();
 68			}
 69		});
 70		spl = (SlidingPaneLayout) findViewById(id.slidingpanelayout);
 71		spl.setParallaxDistance(150);
 72		spl.openPane();
 73		spl.setShadowResource(R.drawable.es_slidingpane_shadow);
 74		spl.setSliderFadeColor(0);
 75		spl.setPanelSlideListener(new PanelSlideListener() {
 76			@Override
 77			public void onPanelOpened(View arg0) {
 78				getActionBar().setDisplayHomeAsUpEnabled(false);
 79				getActionBar().setTitle(R.string.app_name);
 80				invalidateOptionsMenu();
 81				
 82				InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
 83				
 84				inputManager.hideSoftInputFromWindow(
 85				        getCurrentFocus().getWindowToken(),
 86				        InputMethodManager.HIDE_NOT_ALWAYS);
 87				listView.requestFocus();
 88			}
 89			
 90			@Override
 91			public void onPanelClosed(View arg0) {
 92				getActionBar().setDisplayHomeAsUpEnabled(true);
 93				getActionBar().setTitle(conversationList.getSelectedConversation().getName());
 94				invalidateOptionsMenu();
 95				
 96			}
 97
 98			@Override
 99			public void onPanelSlide(View arg0, float arg1) {
100				// TODO Auto-generated method stub
101				
102			}
103		});
104		if (conversationList.size() >= 1) {
105			conversationList.setSelectedConversationPosition(0);
106			swapConversationFragment(conversationList);
107		} else {
108			//start new conversation activity
109		}
110	}
111	
112	@Override
113	public boolean onCreateOptionsMenu(Menu menu) {
114		// Inflate the menu; this adds items to the action bar if it is present.
115		getMenuInflater().inflate(R.menu.conversations, menu);
116		
117		if (spl.isOpen()) {
118			((MenuItem) menu.findItem(R.id.action_archive)).setVisible(false);
119			((MenuItem) menu.findItem(R.id.action_details)).setVisible(false);
120			((MenuItem) menu.findItem(R.id.action_security)).setVisible(false);
121		} else {
122			((MenuItem) menu.findItem(R.id.action_add)).setVisible(false);
123		}
124		return true;
125	}
126	
127	@Override
128	public boolean onOptionsItemSelected(MenuItem item) {
129		switch(item.getItemId()) {
130		case android.R.id.home:
131			spl.openPane();
132			break;
133		case R.id.action_settings:
134			startActivity(new Intent(this, SettingsActivity.class));
135			break;
136		case R.id.action_accounts:
137			startActivity(new Intent(this, ManageAccountActivity.class));
138			break;
139		case R.id.action_add:
140			startActivity(new Intent(this, NewConversationActivity.class));
141		default:
142			break;
143		}
144	    return super.onOptionsItemSelected(item);
145	}
146
147	protected void swapConversationFragment(
148			final ConversationList conversationList) {
149		ConversationFragment selectedFragment;
150		if (conversationFragments.containsKey(conversationList.getSelectedConversation())) {
151			selectedFragment = conversationFragments.get(conversationList.getSelectedConversation());
152		} else {
153			selectedFragment = new ConversationFragment();
154			conversationFragments.put(conversationList.getSelectedConversation(), selectedFragment);
155		}
156		FragmentTransaction transaction = getFragmentManager().beginTransaction();
157		transaction.replace(R.id.selected_conversation, selectedFragment);
158		transaction.commit();
159	}
160
161}