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