From 92465091c68fc82f914866c27f767015bc756fb6 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 24 Jan 2014 10:50:18 +0100 Subject: [PATCH] some history fixes --- AndroidManifest.xml | 3 +- gen/de/gultsch/chat/R.java | 58 ++++---- res/layout/activity_new_conversation.xml | 82 ---------- res/layout/fragment_conversation.xml | 64 ++++++++ .../fragment_conversations_overview.xml | 29 ++++ src/de/gultsch/chat/ConversationList.java | 5 + .../gultsch/chat/ui/ConversationActivity.java | 140 ++++++++++++------ .../gultsch/chat/ui/ConversationFragment.java | 4 +- .../chat/ui/NewConversationActivity.java | 1 + 9 files changed, 224 insertions(+), 162 deletions(-) delete mode 100644 res/layout/activity_new_conversation.xml create mode 100644 res/layout/fragment_conversation.xml create mode 100644 res/layout/fragment_conversations_overview.xml diff --git a/AndroidManifest.xml b/AndroidManifest.xml index a27166513..5ca5295f1 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -38,7 +38,8 @@ android:name="de.gultsch.chat.ui.NewConversationActivity" android:label="@string/title_activity_new_conversation" android:parentActivityName="de.gultsch.chat.ui.ConversationActivity" - android:windowSoftInputMode="stateHidden"> + android:windowSoftInputMode="stateHidden" + android:noHistory="true"> diff --git a/gen/de/gultsch/chat/R.java b/gen/de/gultsch/chat/R.java index d9f298ffc..c4a924bec 100644 --- a/gen/de/gultsch/chat/R.java +++ b/gen/de/gultsch/chat/R.java @@ -41,37 +41,37 @@ public final class R { public static final int action_details=0x7f0a001a; public static final int action_security=0x7f0a0019; public static final int action_settings=0x7f0a001d; - public static final int contact_display_name=0x7f0a000c; - public static final int contact_divider=0x7f0a000e; - public static final int contact_jid=0x7f0a000d; - public static final int contact_photo=0x7f0a000b; - public static final int conversation_lastmsg=0x7f0a0012; - public static final int conversation_name=0x7f0a0011; - public static final int create_new_contact=0x7f0a000a; - public static final int duration=0x7f0a0013; - public static final int editText1=0x7f0a0015; - public static final int imageButton1=0x7f0a0016; - public static final int imageView1=0x7f0a0010; - public static final int jabber_contacts=0x7f0a0008; - public static final int jabber_contacts_header=0x7f0a0007; - public static final int list=0x7f0a0001; - public static final int new_contact_header=0x7f0a0009; - public static final int new_conversation_search=0x7f0a0003; - public static final int phone_contacts=0x7f0a0006; - public static final int phone_contacts_header=0x7f0a0005; - public static final int scrollView1=0x7f0a0004; - public static final int selected_conversation=0x7f0a0002; - public static final int slidingpanelayout=0x7f0a0000; - public static final int textView1=0x7f0a0017; - public static final int textsend=0x7f0a0014; - public static final int thumbnail=0x7f0a000f; + public static final int contact_display_name=0x7f0a0009; + public static final int contact_divider=0x7f0a000b; + public static final int contact_jid=0x7f0a000a; + public static final int contact_photo=0x7f0a0008; + public static final int conversation_lastmsg=0x7f0a000f; + public static final int conversation_name=0x7f0a000e; + public static final int create_new_contact=0x7f0a0007; + public static final int duration=0x7f0a0010; + public static final int editText1=0x7f0a0012; + public static final int imageButton1=0x7f0a0013; + public static final int imageView1=0x7f0a000d; + public static final int jabber_contacts=0x7f0a0005; + public static final int jabber_contacts_header=0x7f0a0004; + public static final int list=0x7f0a0016; + public static final int new_contact_header=0x7f0a0006; + public static final int new_conversation_search=0x7f0a0000; + public static final int phone_contacts=0x7f0a0003; + public static final int phone_contacts_header=0x7f0a0002; + public static final int scrollView1=0x7f0a0001; + public static final int selected_conversation=0x7f0a0017; + public static final int slidingpanelayout=0x7f0a0015; + public static final int textView1=0x7f0a0014; + public static final int textsend=0x7f0a0011; + public static final int thumbnail=0x7f0a000c; } public static final class layout { - public static final int activity_conversations=0x7f030000; - public static final int activity_new_conversation=0x7f030001; - public static final int contact=0x7f030002; - public static final int conversation_list_row=0x7f030003; - public static final int frament_conversation=0x7f030004; + public static final int activity_new_conversation=0x7f030000; + public static final int contact=0x7f030001; + public static final int conversation_list_row=0x7f030002; + public static final int fragment_conversation=0x7f030003; + public static final int fragment_conversations_overview=0x7f030004; } public static final class menu { public static final int conversations=0x7f090000; diff --git a/res/layout/activity_new_conversation.xml b/res/layout/activity_new_conversation.xml deleted file mode 100644 index 688367616..000000000 --- a/res/layout/activity_new_conversation.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/layout/fragment_conversation.xml b/res/layout/fragment_conversation.xml new file mode 100644 index 000000000..02fe1f903 --- /dev/null +++ b/res/layout/fragment_conversation.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/res/layout/fragment_conversations_overview.xml b/res/layout/fragment_conversations_overview.xml new file mode 100644 index 000000000..ae60de40a --- /dev/null +++ b/res/layout/fragment_conversations_overview.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file 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 { 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 conversationFragments = new HashMap(); - + @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); } });