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);
}
});