ConversationActivity.java

  1package de.gultsch.chat.ui;
  2
  3import java.util.ArrayList;
  4import java.util.List;
  5
  6import de.gultsch.chat.R;
  7import de.gultsch.chat.R.id;
  8import de.gultsch.chat.entities.Account;
  9import de.gultsch.chat.entities.Contact;
 10import de.gultsch.chat.entities.Conversation;
 11import de.gultsch.chat.persistance.DatabaseBackend;
 12import android.os.Bundle;
 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.KeyEvent;
 20import android.view.LayoutInflater;
 21import android.view.Menu;
 22import android.view.MenuItem;
 23import android.view.View;
 24import android.view.ViewGroup;
 25import android.view.inputmethod.InputMethodManager;
 26import android.widget.AdapterView;
 27import android.widget.AdapterView.OnItemClickListener;
 28import android.widget.ArrayAdapter;
 29import android.widget.ListView;
 30import android.widget.TextView;
 31import android.widget.ImageView;
 32
 33public class ConversationActivity extends XmppActivity {
 34
 35	public static final String VIEW_CONVERSATION = "viewConversation";
 36	private static final String LOGTAG = "secureconversation";
 37	protected static final String CONVERSATION = "conversationUuid";
 38
 39	protected SlidingPaneLayout spl;
 40
 41	final List<Conversation> conversationList = new ArrayList<Conversation>();
 42
 43	@Override
 44	protected void onCreate(Bundle savedInstanceState) {
 45
 46		super.onCreate(savedInstanceState);
 47
 48		setContentView(R.layout.fragment_conversations_overview);
 49
 50		final ListView listView = (ListView) findViewById(R.id.list);
 51
 52		listView.setAdapter(new ArrayAdapter<Conversation>(this,
 53				R.layout.conversation_list_row, conversationList) {
 54			@Override
 55			public View getView(int position, View view, ViewGroup parent) {
 56				if (view == null) {
 57					LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 58					view = (View) inflater.inflate(
 59							R.layout.conversation_list_row, null);
 60				}
 61				((TextView) view.findViewById(R.id.conversation_name))
 62						.setText(getItem(position).getName());
 63				((ImageView) view.findViewById(R.id.conversation_image))
 64						.setImageURI(getItem(position).getProfilePhotoUri());
 65				return view;
 66			}
 67
 68		});
 69
 70		listView.setOnItemClickListener(new OnItemClickListener() {
 71
 72			@Override
 73			public void onItemClick(AdapterView<?> arg0, View clickedView,
 74					int position, long arg3) {
 75				Log.d(LOGTAG, "List view was klicked on position " + position);
 76				swapConversationFragment(conversationList.get(position));
 77				getActionBar().setTitle(
 78						conversationList.get(position).getName());
 79				spl.closePane();
 80			}
 81		});
 82		spl = (SlidingPaneLayout) findViewById(id.slidingpanelayout);
 83		spl.setParallaxDistance(150);
 84		spl.openPane();
 85		spl.setShadowResource(R.drawable.es_slidingpane_shadow);
 86		spl.setSliderFadeColor(0);
 87		spl.setPanelSlideListener(new PanelSlideListener() {
 88
 89			@Override
 90			public void onPanelOpened(View arg0) {
 91				getActionBar().setDisplayHomeAsUpEnabled(false);
 92				getActionBar().setTitle(R.string.app_name);
 93				invalidateOptionsMenu();
 94
 95				InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
 96
 97				View focus = getCurrentFocus();
 98
 99				if (focus != null) {
100
101					inputManager.hideSoftInputFromWindow(
102							focus.getWindowToken(),
103							InputMethodManager.HIDE_NOT_ALWAYS);
104				}
105				listView.requestFocus();
106			}
107
108			@Override
109			public void onPanelClosed(View arg0) {
110				if (conversationList.size() > 0) {
111					getActionBar().setDisplayHomeAsUpEnabled(true);
112					ConversationFragment convFrag = (ConversationFragment) getFragmentManager()
113							.findFragmentById(R.id.selected_conversation);
114					if (convFrag == null) {
115						Log.d(LOGTAG, "conversation fragment was not found.");
116						return; // just do nothing. at least dont crash
117					}
118					getActionBar().setTitle(
119							convFrag.getConversation().getName());
120					invalidateOptionsMenu();
121				}
122			}
123
124			@Override
125			public void onPanelSlide(View arg0, float arg1) {
126				// TODO Auto-generated method stub
127
128			}
129		});
130	}
131
132	@Override
133	public boolean onCreateOptionsMenu(Menu menu) {
134		// Inflate the menu; this adds items to the action bar if it is present.
135		getMenuInflater().inflate(R.menu.conversations, menu);
136
137		if (spl.isOpen()) {
138			((MenuItem) menu.findItem(R.id.action_archive)).setVisible(false);
139			((MenuItem) menu.findItem(R.id.action_details)).setVisible(false);
140			((MenuItem) menu.findItem(R.id.action_security)).setVisible(false);
141		} else {
142			((MenuItem) menu.findItem(R.id.action_add)).setVisible(false);
143		}
144		return true;
145	}
146
147	@Override
148	public boolean onOptionsItemSelected(MenuItem item) {
149		switch (item.getItemId()) {
150		case android.R.id.home:
151			spl.openPane();
152			break;
153		case R.id.action_settings:
154			startActivity(new Intent(this, SettingsActivity.class));
155			break;
156		case R.id.action_accounts:
157			startActivity(new Intent(this, ManageAccountActivity.class));
158			break;
159		case R.id.action_add:
160			startActivity(new Intent(this, NewConversationActivity.class));
161		case R.id.action_archive:
162
163			break;
164		default:
165			break;
166		}
167		return super.onOptionsItemSelected(item);
168	}
169
170	protected void swapConversationFragment(Conversation conv) {
171		Log.d(LOGTAG, "swap conversation fragment to " + conv.getName());
172		ConversationFragment selectedFragment = new ConversationFragment();
173		selectedFragment.setConversation(conv);
174		FragmentTransaction transaction = getFragmentManager()
175				.beginTransaction();
176		transaction.replace(R.id.selected_conversation, selectedFragment);
177		transaction.commit();
178	}
179
180	@Override
181	public boolean onKeyDown(int keyCode, KeyEvent event) {
182		if (keyCode == KeyEvent.KEYCODE_BACK) {
183			if (!spl.isOpen()) {
184				spl.openPane();
185				return false;
186			}
187		}
188		return super.onKeyDown(keyCode, event);
189	}
190
191	@Override
192	public void onStart() {
193		super.onStart();
194		if (xmppConnectionServiceBound) {
195			conversationList.clear();
196			conversationList.addAll(xmppConnectionService
197					.getConversations(Conversation.STATUS_AVAILABLE));
198		}
199	}
200
201	@Override
202	void servConnected() {
203		conversationList.clear();
204		conversationList.addAll(xmppConnectionService
205				.getConversations(Conversation.STATUS_AVAILABLE));
206
207		//spl.openPane();
208
209		if ((getIntent().getAction().equals(Intent.ACTION_VIEW) && (!handledViewIntent))) {
210			if (getIntent().getType().equals(
211					ConversationActivity.VIEW_CONVERSATION)) {
212				handledViewIntent = true;
213
214				swapConversationFragment(conversationList.get(0));
215				spl.closePane();
216
217				// why do i even need this
218				getActionBar().setDisplayHomeAsUpEnabled(true);
219				getActionBar().setTitle(conversationList.get(0).getName());
220
221			}
222		} else {
223			if (conversationList.size() <= 0) {
224				//add no history
225				startActivity(new Intent(this, NewConversationActivity.class));
226				finish();
227			} else {
228				swapConversationFragment(conversationList.get(0));
229			}
230		}
231	}
232}