aboutsummaryrefslogtreecommitdiffstats
path: root/src/de/gultsch/chat/ui/ConversationActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/gultsch/chat/ui/ConversationActivity.java')
-rw-r--r--src/de/gultsch/chat/ui/ConversationActivity.java140
1 files changed, 93 insertions, 47 deletions
diff --git a/src/de/gultsch/chat/ui/ConversationActivity.java b/src/de/gultsch/chat/ui/ConversationActivity.java
index 446a0c97..0abfb3e6 100644
--- a/src/de/gultsch/chat/ui/ConversationActivity.java
+++ b/src/de/gultsch/chat/ui/ConversationActivity.java
@@ -16,6 +16,7 @@ import android.content.Intent;
import android.support.v4.widget.SlidingPaneLayout;
import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
import android.util.Log;
+import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -26,44 +27,41 @@ import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class ConversationActivity extends Activity {
-
+
public static final String START_CONVERSATION = "startconversation";
public static final String CONVERSATION_CONTACT = "conversationcontact";
protected SlidingPaneLayout spl;
-
+
protected HashMap<Conversation, ConversationFragment> conversationFragments = new HashMap<Conversation, ConversationFragment>();
-
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_conversations);
-
+
+ setContentView(R.layout.fragment_conversations_overview);
+
final ConversationList conversationList = new ConversationList();
-
- if (getIntent().getAction().equals(Intent.ACTION_VIEW)) {
- if (getIntent().getType().equals(ConversationActivity.START_CONVERSATION)) {
- Contact contact = (Contact) getIntent().getExtras().get(ConversationActivity.CONVERSATION_CONTACT);
- Log.d("gultsch","start conversation with "+contact.getDisplayName());
- conversationList.add(new Conversation(contact.getDisplayName()));
- }
- }
- String[] fromColumns = {ConversationCursor.NAME,
- ConversationCursor.LAST_MSG};
- int[] toViews = {R.id.conversation_name, R.id.conversation_lastmsg};
-
- final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.conversation_list_row, conversationList.getCursor(), fromColumns, toViews,0);
+
+ String[] fromColumns = { ConversationCursor.NAME,
+ ConversationCursor.LAST_MSG };
+ int[] toViews = { R.id.conversation_name, R.id.conversation_lastmsg };
+
+ final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
+ R.layout.conversation_list_row, conversationList.getCursor(),
+ fromColumns, toViews, 0);
final ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
-
+
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
- public void onItemClick(AdapterView<?> arg0, View clickedView, int position,
- long arg3) {
+ public void onItemClick(AdapterView<?> arg0, View clickedView,
+ int position, long arg3) {
conversationList.setSelectedConversationPosition(position);
swapConversationFragment(conversationList);
- getActionBar().setTitle(conversationList.getSelectedConversation().getName());
+ getActionBar().setTitle(
+ conversationList.getSelectedConversation().getName());
spl.closePane();
}
});
@@ -73,47 +71,79 @@ public class ConversationActivity extends Activity {
spl.setShadowResource(R.drawable.es_slidingpane_shadow);
spl.setSliderFadeColor(0);
spl.setPanelSlideListener(new PanelSlideListener() {
+
@Override
public void onPanelOpened(View arg0) {
getActionBar().setDisplayHomeAsUpEnabled(false);
getActionBar().setTitle(R.string.app_name);
invalidateOptionsMenu();
-
- InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
-
- inputManager.hideSoftInputFromWindow(
- getCurrentFocus().getWindowToken(),
- InputMethodManager.HIDE_NOT_ALWAYS);
+
+ InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+
+ View focus = getCurrentFocus();
+
+ if (focus != null) {
+
+ inputManager.hideSoftInputFromWindow(
+ focus.getWindowToken(),
+ InputMethodManager.HIDE_NOT_ALWAYS);
+ }
listView.requestFocus();
}
-
+
@Override
public void onPanelClosed(View arg0) {
- getActionBar().setDisplayHomeAsUpEnabled(true);
- getActionBar().setTitle(conversationList.getSelectedConversation().getName());
- invalidateOptionsMenu();
-
+ if (conversationList.size() > 0) {
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setTitle(
+ conversationList.getSelectedConversation()
+ .getName());
+ invalidateOptionsMenu();
+ }
}
@Override
public void onPanelSlide(View arg0, float arg1) {
// TODO Auto-generated method stub
-
+
}
});
- if (conversationList.size() >= 1) {
- conversationList.setSelectedConversationPosition(0);
- swapConversationFragment(conversationList);
+
+ if (getIntent().getAction().equals(Intent.ACTION_VIEW)) {
+ if (getIntent().getType().equals(
+ ConversationActivity.START_CONVERSATION)) {
+ Contact contact = (Contact) getIntent().getExtras().get(
+ ConversationActivity.CONVERSATION_CONTACT);
+ Log.d("gultsch",
+ "start conversation with " + contact.getDisplayName());
+ int pos = conversationList
+ .addAndReturnPosition(new Conversation(contact
+ .getDisplayName()));
+ conversationList.setSelectedConversationPosition(pos);
+ swapConversationFragment(conversationList);
+ spl.closePane();
+
+ // why do i even need this
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setTitle(
+ conversationList.getSelectedConversation().getName());
+ }
} else {
- //start new conversation activity
+ // normal startup
+ if (conversationList.size() >= 1) {
+ conversationList.setSelectedConversationPosition(0);
+ swapConversationFragment(conversationList);
+ } else {
+ startActivity(new Intent(this, NewConversationActivity.class));
+ }
}
}
-
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.conversations, menu);
-
+
if (spl.isOpen()) {
((MenuItem) menu.findItem(R.id.action_archive)).setVisible(false);
((MenuItem) menu.findItem(R.id.action_details)).setVisible(false);
@@ -123,10 +153,10 @@ public class ConversationActivity extends Activity {
}
return true;
}
-
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- switch(item.getItemId()) {
+ switch (item.getItemId()) {
case android.R.id.home:
spl.openPane();
break;
@@ -141,21 +171,37 @@ public class ConversationActivity extends Activity {
default:
break;
}
- return super.onOptionsItemSelected(item);
+ return super.onOptionsItemSelected(item);
}
protected void swapConversationFragment(
final ConversationList conversationList) {
ConversationFragment selectedFragment;
- if (conversationFragments.containsKey(conversationList.getSelectedConversation())) {
- selectedFragment = conversationFragments.get(conversationList.getSelectedConversation());
+ if (conversationFragments.containsKey(conversationList
+ .getSelectedConversation())) {
+ selectedFragment = conversationFragments.get(conversationList
+ .getSelectedConversation());
} else {
selectedFragment = new ConversationFragment();
- conversationFragments.put(conversationList.getSelectedConversation(), selectedFragment);
+ conversationFragments.put(
+ conversationList.getSelectedConversation(),
+ selectedFragment);
}
- FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ FragmentTransaction transaction = getFragmentManager()
+ .beginTransaction();
transaction.replace(R.id.selected_conversation, selectedFragment);
transaction.commit();
}
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (!spl.isOpen()) {
+ spl.openPane();
+ return false;
+ }
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
}