From 2c50ba1779d0d0b6f980a9b83c4a4ac5c34b1c4c Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Thu, 10 Jul 2014 00:13:30 +0200 Subject: moved hint box to the bottom --- res/drawable/snackbar.xml | 6 ++ res/layout/fragment_conversation.xml | 107 +++++++++++++++++++---------------- 2 files changed, 63 insertions(+), 50 deletions(-) create mode 100644 res/drawable/snackbar.xml diff --git a/res/drawable/snackbar.xml b/res/drawable/snackbar.xml new file mode 100644 index 00000000..5f5dc430 --- /dev/null +++ b/res/drawable/snackbar.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/res/layout/fragment_conversation.xml b/res/layout/fragment_conversation.xml index 4605889d..b712c304 100644 --- a/res/layout/fragment_conversation.xml +++ b/res/layout/fragment_conversation.xml @@ -5,13 +5,31 @@ android:layout_height="match_parent" android:background="@color/secondarybackground" > - + android:layout_alignParentTop="true" + android:background="@color/secondarybackground" + android:divider="@null" + android:dividerHeight="0dp" + android:listSelector="@android:color/transparent" + android:stackFromBottom="true" + android:transcriptMode="normal" + tools:listitem="@layout/message_sent" > + + + - - + - + - - - + + \ No newline at end of file -- cgit v1.2.3 From 9260ed404750d7e718e12535030104ff4debda68 Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Mon, 30 Jun 2014 20:39:15 +0200 Subject: inital activity --- src/eu/siacs/conversations/ui/StartConversation.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/eu/siacs/conversations/ui/StartConversation.java diff --git a/src/eu/siacs/conversations/ui/StartConversation.java b/src/eu/siacs/conversations/ui/StartConversation.java new file mode 100644 index 00000000..f2dde78e --- /dev/null +++ b/src/eu/siacs/conversations/ui/StartConversation.java @@ -0,0 +1,11 @@ +package eu.siacs.conversations.ui; + +public class StartConversation extends XmppActivity { + + @Override + void onBackendConnected() { + // TODO Auto-generated method stub + + } + +} -- cgit v1.2.3 From 502a1bdb9c3f6ddb8cdcf9be8c20862f4d55feaf Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Wed, 2 Jul 2014 16:13:25 +0200 Subject: changed support lib to v13. added tabs and fragments to start conversation activity --- AndroidManifest.xml | 6 ++ libs/android-support-v13.jar | Bin 0 -> 665270 bytes libs/android-support-v4.jar | Bin 621451 -> 0 bytes res/layout/activity_start_conversation.xml | 7 ++ res/values/strings.xml | 4 +- .../conversations/ui/ConversationActivity.java | 2 +- .../siacs/conversations/ui/StartConversation.java | 80 +++++++++++++++++++++ 7 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 libs/android-support-v13.jar delete mode 100644 libs/android-support-v4.jar create mode 100644 res/layout/activity_start_conversation.xml diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4feb3a3d..e242c3e3 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -48,6 +48,12 @@ + + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 80bd2052..78961a56 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -21,6 +21,7 @@ Contact Details Conversations Share with Conversation + Start Conversation just now 1 min ago %d mins ago @@ -254,4 +255,5 @@ OTR fingerprint Verify Decrypt - \ No newline at end of file + Conferences + diff --git a/src/eu/siacs/conversations/ui/ConversationActivity.java b/src/eu/siacs/conversations/ui/ConversationActivity.java index c11e1d65..c29529ec 100644 --- a/src/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/eu/siacs/conversations/ui/ConversationActivity.java @@ -488,7 +488,7 @@ public class ConversationActivity extends XmppActivity { attachFilePopup.show(); break; case R.id.action_add: - startActivity(new Intent(this, ContactsActivity.class)); + startActivity(new Intent(this, StartConversation.class)); break; case R.id.action_archive: this.endConversation(getSelectedConversation()); diff --git a/src/eu/siacs/conversations/ui/StartConversation.java b/src/eu/siacs/conversations/ui/StartConversation.java index f2dde78e..9dccb411 100644 --- a/src/eu/siacs/conversations/ui/StartConversation.java +++ b/src/eu/siacs/conversations/ui/StartConversation.java @@ -1,7 +1,87 @@ package eu.siacs.conversations.ui; +import android.app.ActionBar; +import android.app.ActionBar.Tab; +import android.app.ActionBar.TabListener; +import android.app.Fragment; +import android.app.FragmentTransaction; +import android.app.ListFragment; +import android.os.Bundle; +import android.support.v13.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import eu.siacs.conversations.R; + public class StartConversation extends XmppActivity { + private Tab mContactsTab; + private Tab mConferencesTab; + private ViewPager mViewPager; + private ListFragment mContactsListFragment = new ListFragment(); + private ListFragment mConferenceListFragment = new ListFragment(); + + private TabListener mTabListener = new TabListener() { + + @Override + public void onTabUnselected(Tab tab, FragmentTransaction ft) { + // TODO Auto-generated method stub + + } + + @Override + public void onTabSelected(Tab tab, FragmentTransaction ft) { + mViewPager.setCurrentItem(tab.getPosition()); + } + + @Override + public void onTabReselected(Tab tab, FragmentTransaction ft) { + // TODO Auto-generated method stub + + } + }; + + private ViewPager.SimpleOnPageChangeListener mOnPageChangeListener = new ViewPager.SimpleOnPageChangeListener() { + @Override + public void onPageSelected(int position) { + getActionBar().setSelectedNavigationItem(position); + } + }; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_start_conversation); + mViewPager = (ViewPager) findViewById(R.id.start_conversation_view_pager); + ActionBar actionBar = getActionBar(); + actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); + + mContactsTab = actionBar.newTab().setText(R.string.contacts) + .setTabListener(mTabListener); + mConferencesTab = actionBar.newTab().setText(R.string.conferences) + .setTabListener(mTabListener); + actionBar.addTab(mContactsTab); + actionBar.addTab(mConferencesTab); + + + mViewPager.setOnPageChangeListener(mOnPageChangeListener); + mViewPager.setAdapter(new FragmentPagerAdapter(getFragmentManager()) { + + @Override + public int getCount() { + return 2; + } + + @Override + public Fragment getItem(int position) { + if (position==0) { + return mContactsListFragment; + } else { + return mConferenceListFragment; + } + } + }); + + } + @Override void onBackendConnected() { // TODO Auto-generated method stub -- cgit v1.2.3 From c1ee9e682a2f825e72260deb3f1c8579e21ed8de Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Fri, 4 Jul 2014 11:36:02 +0200 Subject: added action bar menu to start conversation --- res/menu/start_conversation.xml | 27 ++++++++++++++++++++++ res/values/strings.xml | 2 ++ .../siacs/conversations/ui/StartConversation.java | 21 +++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 res/menu/start_conversation.xml diff --git a/res/menu/start_conversation.xml b/res/menu/start_conversation.xml new file mode 100644 index 00000000..4c59f482 --- /dev/null +++ b/res/menu/start_conversation.xml @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 78961a56..9662ee49 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -256,4 +256,6 @@ Verify Decrypt Conferences + Search + Create Contact diff --git a/src/eu/siacs/conversations/ui/StartConversation.java b/src/eu/siacs/conversations/ui/StartConversation.java index 9dccb411..16161e36 100644 --- a/src/eu/siacs/conversations/ui/StartConversation.java +++ b/src/eu/siacs/conversations/ui/StartConversation.java @@ -9,6 +9,12 @@ import android.app.ListFragment; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.PopupMenu; +import android.widget.PopupMenu.OnMenuItemClickListener; import eu.siacs.conversations.R; public class StartConversation extends XmppActivity { @@ -81,6 +87,21 @@ public class StartConversation extends XmppActivity { }); } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.start_conversation, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + default: + break; + } + return super.onOptionsItemSelected(item); + } @Override void onBackendConnected() { -- cgit v1.2.3 From 7c3f3b2a3e878b1b1cfdcca102a38efe033dc6b7 Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Fri, 4 Jul 2014 14:22:17 +0200 Subject: added group add button --- res/menu/start_conversation.xml | 34 ++++++++++++---------- res/values/strings.xml | 3 +- .../siacs/conversations/ui/StartConversation.java | 13 ++++++--- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/res/menu/start_conversation.xml b/res/menu/start_conversation.xml index 4c59f482..89ba675a 100644 --- a/res/menu/start_conversation.xml +++ b/res/menu/start_conversation.xml @@ -1,27 +1,31 @@ - - - + + + + - + android:title="@string/action_accounts"/> - + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 9662ee49..a2d04e96 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -258,4 +258,5 @@ Conferences Search Create Contact - + Create Conference + \ No newline at end of file diff --git a/src/eu/siacs/conversations/ui/StartConversation.java b/src/eu/siacs/conversations/ui/StartConversation.java index 16161e36..ba603819 100644 --- a/src/eu/siacs/conversations/ui/StartConversation.java +++ b/src/eu/siacs/conversations/ui/StartConversation.java @@ -9,12 +9,8 @@ import android.app.ListFragment; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; -import android.view.View; -import android.widget.PopupMenu; -import android.widget.PopupMenu.OnMenuItemClickListener; import eu.siacs.conversations.R; public class StartConversation extends XmppActivity { @@ -36,6 +32,7 @@ public class StartConversation extends XmppActivity { @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { mViewPager.setCurrentItem(tab.getPosition()); + invalidateOptionsMenu(); } @Override @@ -49,6 +46,7 @@ public class StartConversation extends XmppActivity { @Override public void onPageSelected(int position) { getActionBar().setSelectedNavigationItem(position); + invalidateOptionsMenu(); } }; @@ -91,6 +89,13 @@ public class StartConversation extends XmppActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.start_conversation, menu); + MenuItem menuCreateContact = (MenuItem) menu.findItem(R.id.action_create_contact); + MenuItem menuCreateConference = (MenuItem) menu.findItem(R.id.action_create_conference); + if (getActionBar().getSelectedNavigationIndex() == 0) { + menuCreateConference.setVisible(false); + } else { + menuCreateContact.setVisible(false); + } return true; } -- cgit v1.2.3 From 3bdf84b6a0170264a20795e7956a68421f312fa3 Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Mon, 7 Jul 2014 09:32:10 +0200 Subject: filter contacts and starting confercenes --- res/menu/start_conversation.xml | 12 +- src/eu/siacs/conversations/entities/Contact.java | 21 ++- src/eu/siacs/conversations/entities/ListItem.java | 7 + .../siacs/conversations/ui/StartConversation.java | 171 +++++++++++++++++++-- src/eu/siacs/conversations/utils/UIHelper.java | 4 +- 5 files changed, 185 insertions(+), 30 deletions(-) create mode 100644 src/eu/siacs/conversations/entities/ListItem.java diff --git a/res/menu/start_conversation.xml b/res/menu/start_conversation.xml index 89ba675a..3daff29a 100644 --- a/res/menu/start_conversation.xml +++ b/res/menu/start_conversation.xml @@ -1,12 +1,6 @@ - + { + public String getDisplayName(); + public String getJid(); + public String getProfilePhoto(); +} diff --git a/src/eu/siacs/conversations/ui/StartConversation.java b/src/eu/siacs/conversations/ui/StartConversation.java index ba603819..3cf09a97 100644 --- a/src/eu/siacs/conversations/ui/StartConversation.java +++ b/src/eu/siacs/conversations/ui/StartConversation.java @@ -1,44 +1,71 @@ package eu.siacs.conversations.ui; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.Fragment; import android.app.FragmentTransaction; import android.app.ListFragment; +import android.content.Context; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; +import android.view.MenuItem.OnActionExpandListener; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.SearchView; +import android.widget.SearchView.OnQueryTextListener; +import android.widget.TextView; import eu.siacs.conversations.R; +import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.entities.Contact; +import eu.siacs.conversations.entities.Conversation; +import eu.siacs.conversations.entities.ListItem; +import eu.siacs.conversations.utils.UIHelper; public class StartConversation extends XmppActivity { private Tab mContactsTab; private Tab mConferencesTab; private ViewPager mViewPager; - private ListFragment mContactsListFragment = new ListFragment(); - private ListFragment mConferenceListFragment = new ListFragment(); + private SearchView mSearchView; + + private MyListFragment mContactsListFragment = new MyListFragment(); + private List contacts = new ArrayList(); + private ArrayAdapter mContactsAdapter; + + private MyListFragment mConferenceListFragment = new MyListFragment(); + private List conferences = new ArrayList(); + private ArrayAdapter mConferenceAdapter; private TabListener mTabListener = new TabListener() { @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { - // TODO Auto-generated method stub - + return; } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { mViewPager.setCurrentItem(tab.getPosition()); - invalidateOptionsMenu(); + onTabChanged(); } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { - // TODO Auto-generated method stub - + return; } }; @@ -46,7 +73,33 @@ public class StartConversation extends XmppActivity { @Override public void onPageSelected(int position) { getActionBar().setSelectedNavigationItem(position); + onTabChanged(); + } + }; + private OnQueryTextListener mOnQueryTextListener = new OnQueryTextListener() { + + @Override + public boolean onQueryTextSubmit(String query) { + return true; + } + + @Override + public boolean onQueryTextChange(String newText) { + filterContacts(newText); + return true; + } + }; + private OnActionExpandListener mOnSearchActionExpandListener = new OnActionExpandListener() { + + @Override + public boolean onMenuItemActionExpand(MenuItem item) { + return true; + } + + @Override + public boolean onMenuItemActionCollapse(MenuItem item) { invalidateOptionsMenu(); + return true; } }; @@ -65,18 +118,17 @@ public class StartConversation extends XmppActivity { actionBar.addTab(mContactsTab); actionBar.addTab(mConferencesTab); - mViewPager.setOnPageChangeListener(mOnPageChangeListener); mViewPager.setAdapter(new FragmentPagerAdapter(getFragmentManager()) { - + @Override public int getCount() { return 2; } - + @Override public Fragment getItem(int position) { - if (position==0) { + if (position == 0) { return mContactsListFragment; } else { return mConferenceListFragment; @@ -84,18 +136,44 @@ public class StartConversation extends XmppActivity { } }); + mConferenceAdapter = new ListItemAdapter(conferences); + mConferenceListFragment.setListAdapter(mConferenceAdapter); + + mContactsAdapter = new ListItemAdapter(contacts); + mContactsListFragment.setListAdapter(mContactsAdapter); + mContactsListFragment + .setOnListItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, + int position, long arg3) { + Contact contact = (Contact) contacts.get(position); + Conversation conversation = xmppConnectionService + .findOrCreateConversation(contact.getAccount(), + contact.getJid(), false); + switchToConversation(conversation, null, false); + } + }); + } - + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.start_conversation, menu); - MenuItem menuCreateContact = (MenuItem) menu.findItem(R.id.action_create_contact); - MenuItem menuCreateConference = (MenuItem) menu.findItem(R.id.action_create_conference); + MenuItem menuCreateContact = (MenuItem) menu + .findItem(R.id.action_create_contact); + MenuItem menuCreateConference = (MenuItem) menu + .findItem(R.id.action_create_conference); + MenuItem menuSearch = (MenuItem) menu.findItem(R.id.action_search); if (getActionBar().getSelectedNavigationIndex() == 0) { menuCreateConference.setVisible(false); } else { menuCreateContact.setVisible(false); } + mSearchView = (SearchView) menuSearch.getActionView(); + mSearchView.setOnQueryTextListener(this.mOnQueryTextListener); + menuSearch + .setOnActionExpandListener(this.mOnSearchActionExpandListener); return true; } @@ -110,8 +188,71 @@ public class StartConversation extends XmppActivity { @Override void onBackendConnected() { - // TODO Auto-generated method stub + filterContacts(null); + } + + protected void filterContacts(String needle) { + this.contacts.clear(); + for (Account account : xmppConnectionService.getAccounts()) { + if (account.getStatus() != Account.STATUS_DISABLED) { + for (Contact contact : account.getRoster().getContacts()) { + if (contact.showInRoster() && contact.match(needle)) { + this.contacts.add(contact); + } + } + } + } + Collections.sort(this.contacts); + mContactsAdapter.notifyDataSetChanged(); + } + + private void onTabChanged() { + if (mSearchView == null || mSearchView.isIconified()) { + invalidateOptionsMenu(); + } + } + + private class ListItemAdapter extends ArrayAdapter { + + public ListItemAdapter(List objects) { + super(getApplicationContext(), 0, objects); + } + @Override + public View getView(int position, View view, ViewGroup parent) { + LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + ListItem item = getItem(position); + if (view == null) { + view = (View) inflater.inflate(R.layout.contact, null); + } + TextView name = (TextView) view + .findViewById(R.id.contact_display_name); + TextView jid = (TextView) view.findViewById(R.id.contact_jid); + ImageView picture = (ImageView) view + .findViewById(R.id.contact_photo); + + jid.setText(item.getJid()); + name.setText(item.getDisplayName()); + picture.setImageBitmap(UIHelper.getContactPicture(item, 48, + this.getContext(), false)); + return view; + } + + } + + public static class MyListFragment extends ListFragment { + private AdapterView.OnItemClickListener mOnItemClickListener; + + @Override + public void onListItemClick(ListView l, View v, int position, long id) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(l, v, position, id); + } + } + + public void setOnListItemClickListener(AdapterView.OnItemClickListener l) { + this.mOnItemClickListener = l; + } } } diff --git a/src/eu/siacs/conversations/utils/UIHelper.java b/src/eu/siacs/conversations/utils/UIHelper.java index 7f24943f..059d9fad 100644 --- a/src/eu/siacs/conversations/utils/UIHelper.java +++ b/src/eu/siacs/conversations/utils/UIHelper.java @@ -13,11 +13,11 @@ import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Contact; import eu.siacs.conversations.entities.Conversation; +import eu.siacs.conversations.entities.ListItem; import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.entities.MucOptions.User; import eu.siacs.conversations.ui.ConversationActivity; import eu.siacs.conversations.ui.ManageAccountActivity; - import android.app.Activity; import android.app.AlertDialog; import android.app.Notification; @@ -239,7 +239,7 @@ public class UIHelper { } } - public static Bitmap getContactPicture(Contact contact, int dpSize, + public static Bitmap getContactPicture(ListItem contact, int dpSize, Context context, boolean notification) { String uri = contact.getProfilePhoto(); if (uri == null) { -- cgit v1.2.3 From 7b8ed5ffbcf04937be8ad87d2d43e1484e631bab Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Mon, 7 Jul 2014 12:38:11 +0200 Subject: theming for tabs in start conversation --- res/drawable-hdpi/tab_selected_conversations.9.png | Bin 0 -> 99 bytes .../tab_selected_focused_conversations.9.png | Bin 0 -> 99 bytes .../tab_selected_pressed_conversations.9.png | Bin 0 -> 105 bytes .../tab_unselected_conversations.9.png | Bin 0 -> 101 bytes .../tab_unselected_focused_conversations.9.png | Bin 0 -> 93 bytes .../tab_unselected_pressed_conversations.9.png | Bin 0 -> 100 bytes res/drawable-mdpi/tab_selected_conversations.9.png | Bin 0 -> 96 bytes .../tab_selected_focused_conversations.9.png | Bin 0 -> 96 bytes .../tab_selected_pressed_conversations.9.png | Bin 0 -> 102 bytes .../tab_unselected_conversations.9.png | Bin 0 -> 105 bytes .../tab_unselected_focused_conversations.9.png | Bin 0 -> 90 bytes .../tab_unselected_pressed_conversations.9.png | Bin 0 -> 97 bytes .../tab_selected_conversations.9.png | Bin 0 -> 104 bytes .../tab_selected_focused_conversations.9.png | Bin 0 -> 103 bytes .../tab_selected_pressed_conversations.9.png | Bin 0 -> 110 bytes .../tab_unselected_conversations.9.png | Bin 0 -> 112 bytes .../tab_unselected_focused_conversations.9.png | Bin 0 -> 93 bytes .../tab_unselected_pressed_conversations.9.png | Bin 0 -> 101 bytes .../tab_selected_conversations.9.png | Bin 0 -> 108 bytes .../tab_selected_focused_conversations.9.png | Bin 0 -> 108 bytes .../tab_selected_pressed_conversations.9.png | Bin 0 -> 114 bytes .../tab_unselected_conversations.9.png | Bin 0 -> 109 bytes .../tab_unselected_focused_conversations.9.png | Bin 0 -> 95 bytes .../tab_unselected_pressed_conversations.9.png | Bin 0 -> 102 bytes res/drawable/actionbar_tab_indicator.xml | 19 +++++++++++++++ res/values/themes.xml | 27 ++++++++++++--------- 26 files changed, 34 insertions(+), 12 deletions(-) create mode 100644 res/drawable-hdpi/tab_selected_conversations.9.png create mode 100644 res/drawable-hdpi/tab_selected_focused_conversations.9.png create mode 100644 res/drawable-hdpi/tab_selected_pressed_conversations.9.png create mode 100644 res/drawable-hdpi/tab_unselected_conversations.9.png create mode 100644 res/drawable-hdpi/tab_unselected_focused_conversations.9.png create mode 100644 res/drawable-hdpi/tab_unselected_pressed_conversations.9.png create mode 100644 res/drawable-mdpi/tab_selected_conversations.9.png create mode 100644 res/drawable-mdpi/tab_selected_focused_conversations.9.png create mode 100644 res/drawable-mdpi/tab_selected_pressed_conversations.9.png create mode 100644 res/drawable-mdpi/tab_unselected_conversations.9.png create mode 100644 res/drawable-mdpi/tab_unselected_focused_conversations.9.png create mode 100644 res/drawable-mdpi/tab_unselected_pressed_conversations.9.png create mode 100644 res/drawable-xhdpi/tab_selected_conversations.9.png create mode 100644 res/drawable-xhdpi/tab_selected_focused_conversations.9.png create mode 100644 res/drawable-xhdpi/tab_selected_pressed_conversations.9.png create mode 100644 res/drawable-xhdpi/tab_unselected_conversations.9.png create mode 100644 res/drawable-xhdpi/tab_unselected_focused_conversations.9.png create mode 100644 res/drawable-xhdpi/tab_unselected_pressed_conversations.9.png create mode 100644 res/drawable-xxhdpi/tab_selected_conversations.9.png create mode 100644 res/drawable-xxhdpi/tab_selected_focused_conversations.9.png create mode 100644 res/drawable-xxhdpi/tab_selected_pressed_conversations.9.png create mode 100644 res/drawable-xxhdpi/tab_unselected_conversations.9.png create mode 100644 res/drawable-xxhdpi/tab_unselected_focused_conversations.9.png create mode 100644 res/drawable-xxhdpi/tab_unselected_pressed_conversations.9.png create mode 100644 res/drawable/actionbar_tab_indicator.xml diff --git a/res/drawable-hdpi/tab_selected_conversations.9.png b/res/drawable-hdpi/tab_selected_conversations.9.png new file mode 100644 index 00000000..b8f44c21 Binary files /dev/null and b/res/drawable-hdpi/tab_selected_conversations.9.png differ diff --git a/res/drawable-hdpi/tab_selected_focused_conversations.9.png b/res/drawable-hdpi/tab_selected_focused_conversations.9.png new file mode 100644 index 00000000..5512dbd3 Binary files /dev/null and b/res/drawable-hdpi/tab_selected_focused_conversations.9.png differ diff --git a/res/drawable-hdpi/tab_selected_pressed_conversations.9.png b/res/drawable-hdpi/tab_selected_pressed_conversations.9.png new file mode 100644 index 00000000..e5f1df22 Binary files /dev/null and b/res/drawable-hdpi/tab_selected_pressed_conversations.9.png differ diff --git a/res/drawable-hdpi/tab_unselected_conversations.9.png b/res/drawable-hdpi/tab_unselected_conversations.9.png new file mode 100644 index 00000000..7cd46d63 Binary files /dev/null and b/res/drawable-hdpi/tab_unselected_conversations.9.png differ diff --git a/res/drawable-hdpi/tab_unselected_focused_conversations.9.png b/res/drawable-hdpi/tab_unselected_focused_conversations.9.png new file mode 100644 index 00000000..438ecdd8 Binary files /dev/null and b/res/drawable-hdpi/tab_unselected_focused_conversations.9.png differ diff --git a/res/drawable-hdpi/tab_unselected_pressed_conversations.9.png b/res/drawable-hdpi/tab_unselected_pressed_conversations.9.png new file mode 100644 index 00000000..4f18a95a Binary files /dev/null and b/res/drawable-hdpi/tab_unselected_pressed_conversations.9.png differ diff --git a/res/drawable-mdpi/tab_selected_conversations.9.png b/res/drawable-mdpi/tab_selected_conversations.9.png new file mode 100644 index 00000000..09d42dc8 Binary files /dev/null and b/res/drawable-mdpi/tab_selected_conversations.9.png differ diff --git a/res/drawable-mdpi/tab_selected_focused_conversations.9.png b/res/drawable-mdpi/tab_selected_focused_conversations.9.png new file mode 100644 index 00000000..20af01de Binary files /dev/null and b/res/drawable-mdpi/tab_selected_focused_conversations.9.png differ diff --git a/res/drawable-mdpi/tab_selected_pressed_conversations.9.png b/res/drawable-mdpi/tab_selected_pressed_conversations.9.png new file mode 100644 index 00000000..13a878be Binary files /dev/null and b/res/drawable-mdpi/tab_selected_pressed_conversations.9.png differ diff --git a/res/drawable-mdpi/tab_unselected_conversations.9.png b/res/drawable-mdpi/tab_unselected_conversations.9.png new file mode 100644 index 00000000..ad2dbae9 Binary files /dev/null and b/res/drawable-mdpi/tab_unselected_conversations.9.png differ diff --git a/res/drawable-mdpi/tab_unselected_focused_conversations.9.png b/res/drawable-mdpi/tab_unselected_focused_conversations.9.png new file mode 100644 index 00000000..dfff5ac8 Binary files /dev/null and b/res/drawable-mdpi/tab_unselected_focused_conversations.9.png differ diff --git a/res/drawable-mdpi/tab_unselected_pressed_conversations.9.png b/res/drawable-mdpi/tab_unselected_pressed_conversations.9.png new file mode 100644 index 00000000..4365d178 Binary files /dev/null and b/res/drawable-mdpi/tab_unselected_pressed_conversations.9.png differ diff --git a/res/drawable-xhdpi/tab_selected_conversations.9.png b/res/drawable-xhdpi/tab_selected_conversations.9.png new file mode 100644 index 00000000..34eb4ec0 Binary files /dev/null and b/res/drawable-xhdpi/tab_selected_conversations.9.png differ diff --git a/res/drawable-xhdpi/tab_selected_focused_conversations.9.png b/res/drawable-xhdpi/tab_selected_focused_conversations.9.png new file mode 100644 index 00000000..3155ef69 Binary files /dev/null and b/res/drawable-xhdpi/tab_selected_focused_conversations.9.png differ diff --git a/res/drawable-xhdpi/tab_selected_pressed_conversations.9.png b/res/drawable-xhdpi/tab_selected_pressed_conversations.9.png new file mode 100644 index 00000000..5c2440e4 Binary files /dev/null and b/res/drawable-xhdpi/tab_selected_pressed_conversations.9.png differ diff --git a/res/drawable-xhdpi/tab_unselected_conversations.9.png b/res/drawable-xhdpi/tab_unselected_conversations.9.png new file mode 100644 index 00000000..e9ab742e Binary files /dev/null and b/res/drawable-xhdpi/tab_unselected_conversations.9.png differ diff --git a/res/drawable-xhdpi/tab_unselected_focused_conversations.9.png b/res/drawable-xhdpi/tab_unselected_focused_conversations.9.png new file mode 100644 index 00000000..42a2191e Binary files /dev/null and b/res/drawable-xhdpi/tab_unselected_focused_conversations.9.png differ diff --git a/res/drawable-xhdpi/tab_unselected_pressed_conversations.9.png b/res/drawable-xhdpi/tab_unselected_pressed_conversations.9.png new file mode 100644 index 00000000..a5a2c25e Binary files /dev/null and b/res/drawable-xhdpi/tab_unselected_pressed_conversations.9.png differ diff --git a/res/drawable-xxhdpi/tab_selected_conversations.9.png b/res/drawable-xxhdpi/tab_selected_conversations.9.png new file mode 100644 index 00000000..e4439e7c Binary files /dev/null and b/res/drawable-xxhdpi/tab_selected_conversations.9.png differ diff --git a/res/drawable-xxhdpi/tab_selected_focused_conversations.9.png b/res/drawable-xxhdpi/tab_selected_focused_conversations.9.png new file mode 100644 index 00000000..dd2ded89 Binary files /dev/null and b/res/drawable-xxhdpi/tab_selected_focused_conversations.9.png differ diff --git a/res/drawable-xxhdpi/tab_selected_pressed_conversations.9.png b/res/drawable-xxhdpi/tab_selected_pressed_conversations.9.png new file mode 100644 index 00000000..58c8a576 Binary files /dev/null and b/res/drawable-xxhdpi/tab_selected_pressed_conversations.9.png differ diff --git a/res/drawable-xxhdpi/tab_unselected_conversations.9.png b/res/drawable-xxhdpi/tab_unselected_conversations.9.png new file mode 100644 index 00000000..566062f0 Binary files /dev/null and b/res/drawable-xxhdpi/tab_unselected_conversations.9.png differ diff --git a/res/drawable-xxhdpi/tab_unselected_focused_conversations.9.png b/res/drawable-xxhdpi/tab_unselected_focused_conversations.9.png new file mode 100644 index 00000000..432e68c4 Binary files /dev/null and b/res/drawable-xxhdpi/tab_unselected_focused_conversations.9.png differ diff --git a/res/drawable-xxhdpi/tab_unselected_pressed_conversations.9.png b/res/drawable-xxhdpi/tab_unselected_pressed_conversations.9.png new file mode 100644 index 00000000..8dd01d5c Binary files /dev/null and b/res/drawable-xxhdpi/tab_unselected_pressed_conversations.9.png differ diff --git a/res/drawable/actionbar_tab_indicator.xml b/res/drawable/actionbar_tab_indicator.xml new file mode 100644 index 00000000..102b75d8 --- /dev/null +++ b/res/drawable/actionbar_tab_indicator.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/values/themes.xml b/res/values/themes.xml index 0191d302..0c4ddc39 100644 --- a/res/values/themes.xml +++ b/res/values/themes.xml @@ -1,23 +1,26 @@ - - + + - - - + + \ No newline at end of file -- cgit v1.2.3 From 203c85e11429c21d9c57e35b04692f2a6e61b10c Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Mon, 7 Jul 2014 14:23:13 +0200 Subject: made searchview text color white --- src/eu/siacs/conversations/ui/StartConversation.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/eu/siacs/conversations/ui/StartConversation.java b/src/eu/siacs/conversations/ui/StartConversation.java index 3cf09a97..ad129ea0 100644 --- a/src/eu/siacs/conversations/ui/StartConversation.java +++ b/src/eu/siacs/conversations/ui/StartConversation.java @@ -11,6 +11,7 @@ import android.app.Fragment; import android.app.FragmentTransaction; import android.app.ListFragment; import android.content.Context; +import android.graphics.Color; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; @@ -171,6 +172,9 @@ public class StartConversation extends XmppActivity { menuCreateContact.setVisible(false); } mSearchView = (SearchView) menuSearch.getActionView(); + int id = mSearchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); + TextView textView = (TextView) mSearchView.findViewById(id); + textView.setTextColor(Color.WHITE); mSearchView.setOnQueryTextListener(this.mOnQueryTextListener); menuSearch .setOnActionExpandListener(this.mOnSearchActionExpandListener); -- cgit v1.2.3 From 2684ecda1ec085621d3b0b19f7ff7dd0c3193221 Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Wed, 9 Jul 2014 23:13:23 +0200 Subject: small changes --- res/layout/activity_start_conversation.xml | 3 ++- res/menu/start_conversation.xml | 18 ++++++++++-------- src/eu/siacs/conversations/ui/StartConversation.java | 20 +------------------- 3 files changed, 13 insertions(+), 28 deletions(-) diff --git a/res/layout/activity_start_conversation.xml b/res/layout/activity_start_conversation.xml index 54341816..9c757540 100644 --- a/res/layout/activity_start_conversation.xml +++ b/res/layout/activity_start_conversation.xml @@ -2,6 +2,7 @@ + android:layout_height="match_parent" + android:background="@color/primarybackground"> \ No newline at end of file diff --git a/res/menu/start_conversation.xml b/res/menu/start_conversation.xml index 3daff29a..12109d7b 100644 --- a/res/menu/start_conversation.xml +++ b/res/menu/start_conversation.xml @@ -1,22 +1,24 @@ + + - + { -- cgit v1.2.3 From f8763015eb100568c69dfc89e8e25b4aa9b454e9 Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Thu, 10 Jul 2014 01:55:19 +0200 Subject: added contextual menu for contacts --- res/menu/contact_context.xml | 14 +++++ res/values/strings.xml | 2 + .../services/XmppConnectionService.java | 3 +- .../conversations/ui/ConversationActivity.java | 7 +-- .../siacs/conversations/ui/StartConversation.java | 66 +++++++++++++++++++--- src/eu/siacs/conversations/ui/XmppActivity.java | 8 +++ 6 files changed, 85 insertions(+), 15 deletions(-) create mode 100644 res/menu/contact_context.xml diff --git a/res/menu/contact_context.xml b/res/menu/contact_context.xml new file mode 100644 index 00000000..11ac7d7c --- /dev/null +++ b/res/menu/contact_context.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index a2d04e96..8d66125e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -259,4 +259,6 @@ Search Create Contact Create Conference + Delete Contact + View contact details \ No newline at end of file diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index 3db52753..9993dd67 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -1282,6 +1282,7 @@ public class XmppConnectionService extends Service { public void deleteContactOnServer(Contact contact) { contact.resetOption(Contact.Options.DIRTY_PUSH); + contact.setOption(Contact.Options.DIRTY_DELETE); Account account = contact.getAccount(); if (account.getStatus() == Account.STATUS_ONLINE) { IqPacket iq = new IqPacket(IqPacket.TYPE_SET); @@ -1290,8 +1291,6 @@ public class XmppConnectionService extends Service { item.setAttribute("subscription", "remove"); account.getXmppConnection().sendIqPacket(iq, null); contact.resetOption(Contact.Options.DIRTY_DELETE); - } else { - contact.setOption(Contact.Options.DIRTY_DELETE); } } diff --git a/src/eu/siacs/conversations/ui/ConversationActivity.java b/src/eu/siacs/conversations/ui/ConversationActivity.java index c29529ec..1f3ab2fb 100644 --- a/src/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/eu/siacs/conversations/ui/ConversationActivity.java @@ -496,12 +496,7 @@ public class ConversationActivity extends XmppActivity { case R.id.action_contact_details: Contact contact = this.getSelectedConversation().getContact(); if (contact.showInRoster()) { - Intent intent = new Intent(this, ContactDetailsActivity.class); - intent.setAction(ContactDetailsActivity.ACTION_VIEW_CONTACT); - intent.putExtra("account", this.getSelectedConversation() - .getAccount().getJid()); - intent.putExtra("contact", contact.getJid()); - startActivity(intent); + switchToContactDetails(contact); } else { showAddToRosterDialog(getSelectedConversation()); } diff --git a/src/eu/siacs/conversations/ui/StartConversation.java b/src/eu/siacs/conversations/ui/StartConversation.java index 664e50a8..45d61491 100644 --- a/src/eu/siacs/conversations/ui/StartConversation.java +++ b/src/eu/siacs/conversations/ui/StartConversation.java @@ -15,12 +15,15 @@ import android.graphics.Color; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; +import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; +import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ImageView; @@ -134,16 +137,31 @@ public class StartConversation extends XmppActivity { @Override public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) { - Contact contact = (Contact) contacts.get(position); - Conversation conversation = xmppConnectionService - .findOrCreateConversation(contact.getAccount(), - contact.getJid(), false); - switchToConversation(conversation, null, false); + openConversationForContact(position); } }); } + protected void openConversationForContact(int position) { + Contact contact = (Contact) contacts.get(position); + Conversation conversation = xmppConnectionService + .findOrCreateConversation(contact.getAccount(), + contact.getJid(), false); + switchToConversation(conversation, null, false); + } + + protected void openDetailsForContact(int position) { + Contact contact = (Contact) contacts.get(position); + switchToContactDetails(contact); + } + + protected void deleteContact(int position) { + Contact contact = (Contact) contacts.get(position); + xmppConnectionService.deleteContactOnServer(contact); + filterContacts(null); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.start_conversation, menu); @@ -158,7 +176,8 @@ public class StartConversation extends XmppActivity { menuCreateContact.setVisible(false); } mSearchView = (SearchView) menuSearch.getActionView(); - int id = mSearchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); + int id = mSearchView.getContext().getResources() + .getIdentifier("android:id/search_src_text", null, null); TextView textView = (TextView) mSearchView.findViewById(id); textView.setTextColor(Color.WHITE); mSearchView.setOnQueryTextListener(this.mOnQueryTextListener); @@ -228,6 +247,7 @@ public class StartConversation extends XmppActivity { public static class MyListFragment extends ListFragment { private AdapterView.OnItemClickListener mOnItemClickListener; + private int mContextPosition = -1; @Override public void onListItemClick(ListView l, View v, int position, long id) { @@ -239,6 +259,38 @@ public class StartConversation extends XmppActivity { public void setOnListItemClickListener(AdapterView.OnItemClickListener l) { this.mOnItemClickListener = l; } - } + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + registerForContextMenu(getListView()); + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + getActivity().getMenuInflater().inflate(R.menu.contact_context, + menu); + AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo; + this.mContextPosition = acmi.position; + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + StartConversation activity = (StartConversation) getActivity(); + switch(item.getItemId()) { + case R.id.context_start_conversation: + activity.openConversationForContact(mContextPosition); + break; + case R.id.context_contact_details: + activity.openDetailsForContact(mContextPosition); + break; + case R.id.context_delete_contact: + activity.deleteContact(mContextPosition); + break; + } + return true; + } + } } diff --git a/src/eu/siacs/conversations/ui/XmppActivity.java b/src/eu/siacs/conversations/ui/XmppActivity.java index c95cbfec..96278a6d 100644 --- a/src/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/eu/siacs/conversations/ui/XmppActivity.java @@ -170,6 +170,14 @@ public abstract class XmppActivity extends Activity { } startActivity(viewConversationIntent); } + + public void switchToContactDetails(Contact contact) { + Intent intent = new Intent(this, ContactDetailsActivity.class); + intent.setAction(ContactDetailsActivity.ACTION_VIEW_CONTACT); + intent.putExtra("account", contact.getAccount().getJid()); + intent.putExtra("contact", contact.getJid()); + startActivity(intent); + } protected void announcePgp(Account account, final Conversation conversation) { xmppConnectionService.getPgpEngine().generateSignature(account, -- cgit v1.2.3 From e97b5244552c8da06b3311bccb831be30c9a641a Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Thu, 10 Jul 2014 13:19:42 +0200 Subject: added create contact dialog --- res/layout/create_contact_dialog.xml | 37 ++++++++++++ res/values/strings.xml | 8 ++- .../siacs/conversations/ui/StartConversation.java | 65 +++++++++++++++++++++- 3 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 res/layout/create_contact_dialog.xml diff --git a/res/layout/create_contact_dialog.xml b/res/layout/create_contact_dialog.xml new file mode 100644 index 00000000..45007ef2 --- /dev/null +++ b/res/layout/create_contact_dialog.xml @@ -0,0 +1,37 @@ + + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 8d66125e..ebfaaa17 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -201,10 +201,10 @@ Account is offline Record voice Account Settings - Jabber ID: - Password: + Jabber ID + Password username@example.com - Confirm password: + Confirm password Password Confirm password Passwords do not match @@ -261,4 +261,6 @@ Create Conference Delete Contact View contact details + Create + The contact already exists \ No newline at end of file diff --git a/src/eu/siacs/conversations/ui/StartConversation.java b/src/eu/siacs/conversations/ui/StartConversation.java index 45d61491..880b4a9b 100644 --- a/src/eu/siacs/conversations/ui/StartConversation.java +++ b/src/eu/siacs/conversations/ui/StartConversation.java @@ -7,10 +7,13 @@ import java.util.List; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; +import android.app.AlertDialog; import android.app.Fragment; import android.app.FragmentTransaction; import android.app.ListFragment; import android.content.Context; +import android.content.DialogInterface; +import android.database.DataSetObserver; import android.graphics.Color; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; @@ -26,10 +29,13 @@ import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; +import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.SearchView; +import android.widget.SpinnerAdapter; import android.widget.SearchView.OnQueryTextListener; +import android.widget.Spinner; import android.widget.TextView; import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; @@ -37,6 +43,7 @@ import eu.siacs.conversations.entities.Contact; import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.ListItem; import eu.siacs.conversations.utils.UIHelper; +import eu.siacs.conversations.utils.Validator; public class StartConversation extends XmppActivity { @@ -52,6 +59,8 @@ public class StartConversation extends XmppActivity { private MyListFragment mConferenceListFragment = new MyListFragment(); private List conferences = new ArrayList(); private ArrayAdapter mConferenceAdapter; + + private List mActivatedAccounts = new ArrayList(); private TabListener mTabListener = new TabListener() { @@ -161,6 +170,53 @@ public class StartConversation extends XmppActivity { xmppConnectionService.deleteContactOnServer(contact); filterContacts(null); } + + protected void showCreateContactDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.create_contact); + View dialogView = getLayoutInflater().inflate(R.layout.create_contact_dialog, null); + final Spinner spinner = (Spinner) dialogView.findViewById(R.id.account); + final EditText jid = (EditText) dialogView.findViewById(R.id.jid); + populateAccountSpinner(spinner); + builder.setView(dialogView); + builder.setNegativeButton(R.string.cancel, null); + builder.setPositiveButton(R.string.create, null); + final AlertDialog dialog = builder.create(); + dialog.show(); + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (Validator.isValidJid(jid.getText().toString())) { + String accountJid = (String) spinner.getSelectedItem(); + String contactJid = jid.getText().toString(); + Account account = xmppConnectionService.findAccountByJid(accountJid); + Contact contact = account.getRoster().getContact(contactJid); + if (contact.showInRoster()) { + jid.setError(getString(R.string.contact_already_exists)); + } else { + xmppConnectionService.createContact(contact); + switchToConversation(contact); + dialog.dismiss(); + } + } else { + jid.setError(getString(R.string.invalid_jid)); + } + } + }); + + } + + protected void switchToConversation(Contact contact) { + Conversation conversation = xmppConnectionService.findOrCreateConversation(contact.getAccount(), contact.getJid(), false); + switchToConversation(conversation, null, false); + } + + private void populateAccountSpinner(Spinner spinner) { + ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, mActivatedAccounts); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner.setAdapter(adapter); + } @Override public boolean onCreateOptionsMenu(Menu menu) { @@ -187,7 +243,8 @@ public class StartConversation extends XmppActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - default: + case R.id.action_create_contact: + showCreateContactDialog(); break; } return super.onOptionsItemSelected(item); @@ -196,6 +253,12 @@ public class StartConversation extends XmppActivity { @Override void onBackendConnected() { filterContacts(null); + this.mActivatedAccounts.clear(); + for (Account account : xmppConnectionService.getAccounts()) { + if (account.getStatus() != Account.STATUS_DISABLED) { + this.mActivatedAccounts.add(account.getJid()); + } + } } protected void filterContacts(String needle) { -- cgit v1.2.3