some history fixes

Daniel Gultsch created

Change summary

AndroidManifest.xml                                 |   3 
gen/de/gultsch/chat/R.java                          |  58 +++---
res/layout/activity_new_conversation.xml            |  82 --------
res/layout/fragment_conversation.xml                |  64 ++++++
res/layout/fragment_conversations_overview.xml      |  29 +++
src/de/gultsch/chat/ConversationList.java           |   5 
src/de/gultsch/chat/ui/ConversationActivity.java    | 140 +++++++++-----
src/de/gultsch/chat/ui/ConversationFragment.java    |   4 
src/de/gultsch/chat/ui/NewConversationActivity.java |   1 
9 files changed, 224 insertions(+), 162 deletions(-)

Detailed changes

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" />

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;

res/layout/activity_new_conversation.xml 🔗

@@ -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>

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>

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>

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

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

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

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