diff options
Diffstat (limited to '')
-rw-r--r-- | src/de/gultsch/chat/ConversationList.java | 5 | ||||
-rw-r--r-- | src/de/gultsch/chat/ui/ConversationActivity.java | 140 | ||||
-rw-r--r-- | src/de/gultsch/chat/ui/ConversationFragment.java | 4 | ||||
-rw-r--r-- | src/de/gultsch/chat/ui/NewConversationActivity.java | 1 |
4 files changed, 100 insertions, 50 deletions
diff --git a/src/de/gultsch/chat/ConversationList.java b/src/de/gultsch/chat/ConversationList.java index b043f61a7..205d3549f 100644 --- a/src/de/gultsch/chat/ConversationList.java +++ b/src/de/gultsch/chat/ConversationList.java @@ -38,4 +38,9 @@ public class ConversationList extends ArrayList<Conversation> { this.selectedConversationPosition = this.indexOf(selectedConversation); } + + public synchronized int addAndReturnPosition(Conversation conversation) { + this.add(conversation); + return size() - 1; + } } diff --git a/src/de/gultsch/chat/ui/ConversationActivity.java b/src/de/gultsch/chat/ui/ConversationActivity.java index 446a0c976..0abfb3e63 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); + } + } diff --git a/src/de/gultsch/chat/ui/ConversationFragment.java b/src/de/gultsch/chat/ui/ConversationFragment.java index 0f6191768..5b8acd98b 100644 --- a/src/de/gultsch/chat/ui/ConversationFragment.java +++ b/src/de/gultsch/chat/ui/ConversationFragment.java @@ -3,16 +3,14 @@ package de.gultsch.chat.ui; import de.gultsch.chat.R; import android.app.Fragment; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.EditText; public class ConversationFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.frament_conversation, container, false); + return inflater.inflate(R.layout.fragment_conversation, container, false); } } diff --git a/src/de/gultsch/chat/ui/NewConversationActivity.java b/src/de/gultsch/chat/ui/NewConversationActivity.java index 261f0ebf7..47bdd0ba8 100644 --- a/src/de/gultsch/chat/ui/NewConversationActivity.java +++ b/src/de/gultsch/chat/ui/NewConversationActivity.java @@ -82,6 +82,7 @@ public class NewConversationActivity extends Activity { startConversationIntent.setAction(Intent.ACTION_VIEW); startConversationIntent.putExtra(ConversationActivity.CONVERSATION_CONTACT, clickedContact); startConversationIntent.setType(ConversationActivity.START_CONVERSATION); + startConversationIntent.setFlags(startConversationIntent.getFlags() | Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(startConversationIntent); } }); |