aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml3
-rw-r--r--gen/de/gultsch/chat/R.java58
-rw-r--r--res/layout/activity_new_conversation.xml82
-rw-r--r--res/layout/fragment_conversation.xml64
-rw-r--r--res/layout/fragment_conversations_overview.xml29
-rw-r--r--src/de/gultsch/chat/ConversationList.java5
-rw-r--r--src/de/gultsch/chat/ui/ConversationActivity.java140
-rw-r--r--src/de/gultsch/chat/ui/ConversationFragment.java4
-rw-r--r--src/de/gultsch/chat/ui/NewConversationActivity.java1
9 files changed, 224 insertions, 162 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a2716651..5ca5295f 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">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.gultsch.chat.ui.ConversationActivity" />
diff --git a/gen/de/gultsch/chat/R.java b/gen/de/gultsch/chat/R.java
index d9f298ff..c4a924be 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 68836761..00000000
--- a/res/layout/activity_new_conversation.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#f9f9f9">
-
- <EditText
- android:id="@+id/new_conversation_search"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
- android:layout_alignParentTop="true"
- android:ems="10"
- android:inputType="textEmailAddress"
- android:hint="Search or enter Jabber ID"
- android:background="#ffffff"
- android:layout_marginTop="12dp"
- android:layout_marginBottom="12dp"
- android:layout_marginLeft="8dp"
- android:layout_marginRight="8dp"/>
-
- <ScrollView
- android:id="@+id/scrollView1"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
- android:layout_below="@+id/new_conversation_search"
- android:background="#e5e5e5" >
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="380dp"
- android:orientation="vertical"
- android:padding="8dp" >
-
- <TextView
- android:id="@+id/phone_contacts_header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Phone Contacts"
- style="@style/sectionHeader"/>
- <LinearLayout
- android:id="@+id/phone_contacts"
- android:layout_height="fill_parent"
- android:layout_width="fill_parent"
- android:orientation="vertical">
-
- </LinearLayout>
- <TextView
- android:id="@+id/jabber_contacts_header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Jabber Contacts"
- style="@style/sectionHeader"/>
- <LinearLayout
- android:id="@+id/jabber_contacts"
- android:layout_height="fill_parent"
- android:layout_width="fill_parent"
- android:orientation="vertical">
-
- </LinearLayout>
- <TextView
- android:id="@+id/new_contact_header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="create new contact"
- style="@style/sectionHeader"
- android:visibility="gone"/>
- <LinearLayout
- android:id="@+id/create_new_contact"
- android:layout_height="fill_parent"
- android:layout_width="fill_parent"
- android:orientation="vertical"
- android:visibility="gone">
-
- </LinearLayout>
- </LinearLayout>
- </ScrollView>
-</RelativeLayout> \ 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 00000000..02fe1f90
--- /dev/null
+++ b/res/layout/fragment_conversation.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="#f9f9f9">
+
+ <RelativeLayout
+ android:id="@+id/textsend"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentLeft="true" >
+
+ <EditText
+ android:id="@+id/editText1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_toLeftOf="@+id/imageButton1"
+ android:ems="10"
+ android:inputType="textMultiLine"
+ android:minLines="1"
+ android:background="#ffffff"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="12dp"
+ android:layout_marginLeft="8dp"
+ android:layout_marginRight="8dp">
+ </EditText>
+
+ <ImageButton
+ android:id="@+id/imageButton1"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:background="?android:selectableItemBackground"
+ android:src="@drawable/ic_action_send_now" />
+
+ </RelativeLayout>
+
+ <ScrollView
+ android:id="@+id/scrollView1"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:layout_above="@+id/textsend"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true"
+ android:background="#e5e5e5" >
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="#e5e5e5"
+ android:orientation="vertical" >
+
+ <TextView
+ android:id="@+id/textView1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="TextView" />
+ </LinearLayout>
+ </ScrollView>
+
+</RelativeLayout>
diff --git a/res/layout/fragment_conversations_overview.xml b/res/layout/fragment_conversations_overview.xml
new file mode 100644
index 00000000..ae60de40
--- /dev/null
+++ b/res/layout/fragment_conversations_overview.xml
@@ -0,0 +1,29 @@
+<android.support.v4.widget.SlidingPaneLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/slidingpanelayout">
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="336dp"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <ListView
+ android:id="@+id/list"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:divider="#b5b5b5"
+ android:dividerHeight="1dp"
+ android:background="#f9f9f9"
+ />
+
+</LinearLayout>
+<LinearLayout
+ android:id="@+id/selected_conversation"
+ android:layout_width="400dp"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="#e5e5e5"
+ android:orientation="vertical">
+</LinearLayout>
+</android.support.v4.widget.SlidingPaneLayout> \ No newline at end of file
diff --git a/src/de/gultsch/chat/ConversationList.java b/src/de/gultsch/chat/ConversationList.java
index b043f61a..205d3549 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 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);
+ }
+
}
diff --git a/src/de/gultsch/chat/ui/ConversationFragment.java b/src/de/gultsch/chat/ui/ConversationFragment.java
index 0f619176..5b8acd98 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 261f0ebf..47bdd0ba 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);
}
});