diff options
-rw-r--r-- | AndroidManifest.xml | 3 | ||||
-rw-r--r-- | gen/de/gultsch/chat/R.java | 58 | ||||
-rw-r--r-- | res/layout/activity_new_conversation.xml | 82 | ||||
-rw-r--r-- | res/layout/fragment_conversation.xml | 64 | ||||
-rw-r--r-- | res/layout/fragment_conversations_overview.xml | 29 | ||||
-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 |
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); } }); |