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}