diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2014-03-05 15:41:14 +0100 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2014-03-05 15:41:14 +0100 |
commit | 78312d71dd1f281f494a2a1c04e4a80f34898d2c (patch) | |
tree | 595d3f78836691fc8eb204a3102b8781c4e3bd14 | |
parent | 79ec8b2e8128a1dc1d7d0962ce99e91fdaff8b98 (diff) |
reworked contact details
22 files changed, 529 insertions, 398 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8a1a4028c..0e59383c0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -46,9 +46,13 @@ android:parentActivityName="eu.siacs.conversations.ui.ConversationActivity" > </activity> <activity - android:name="eu.siacs.conversations.ui.MucOptionsActivity" + android:name="eu.siacs.conversations.ui.MucDetailsActivity" android:label="Conference Details" - android:parentActivityName="eu.siacs.conversations.ui.ConversationActivity" + android:windowSoftInputMode="stateHidden"> + </activity> + <activity + android:name="eu.siacs.conversations.ui.ContactDetailsActivity" + android:label="Contact Details" android:windowSoftInputMode="stateHidden"> </activity> <activity diff --git a/gen/eu/siacs/conversations/R.java b/gen/eu/siacs/conversations/R.java index f432a8b11..a25ec346c 100644 --- a/gen/eu/siacs/conversations/R.java +++ b/gen/eu/siacs/conversations/R.java @@ -36,116 +36,123 @@ public final class R { public static final int ic_action_cancel_launchersize=0x7f020007; public static final int ic_action_cancel_launchersize_light=0x7f020008; public static final int ic_action_delete=0x7f020009; - public static final int ic_action_edit=0x7f02000a; - public static final int ic_action_group=0x7f02000b; - public static final int ic_action_person=0x7f02000c; - public static final int ic_action_refresh=0x7f02000d; - public static final int ic_action_secure=0x7f02000e; - public static final int ic_action_send=0x7f02000f; - public static final int ic_action_send_now=0x7f020010; - public static final int ic_action_unsecure=0x7f020011; - public static final int ic_launcher=0x7f020012; - public static final int ic_profile=0x7f020013; - public static final int message_border=0x7f020014; - public static final int notification=0x7f020015; - public static final int red=0x7f020016; - public static final int redbackground=0x7f020017; - public static final int section_header=0x7f020018; + public static final int ic_action_discard=0x7f02000a; + public static final int ic_action_edit=0x7f02000b; + public static final int ic_action_group=0x7f02000c; + public static final int ic_action_person=0x7f02000d; + public static final int ic_action_refresh=0x7f02000e; + public static final int ic_action_secure=0x7f02000f; + public static final int ic_action_send=0x7f020010; + public static final int ic_action_send_now=0x7f020011; + public static final int ic_action_unsecure=0x7f020012; + public static final int ic_launcher=0x7f020013; + public static final int ic_profile=0x7f020014; + public static final int message_border=0x7f020015; + public static final int notification=0x7f020016; + public static final int red=0x7f020017; + public static final int redbackground=0x7f020018; + public static final int section_header=0x7f020019; } public static final class id { - public static final int account_confirm_password_desc=0x7f0a001c; - public static final int account_delete=0x7f0a0041; - public static final int account_disable=0x7f0a0042; - public static final int account_enable=0x7f0a0043; + public static final int account_confirm_password_desc=0x7f0a0023; + public static final int account_delete=0x7f0a0044; + public static final int account_disable=0x7f0a0045; + public static final int account_enable=0x7f0a0046; public static final int account_jid=0x7f0a0000; - public static final int account_list=0x7f0a002b; - public static final int account_password=0x7f0a0019; - public static final int account_password_confirm2=0x7f0a001d; + public static final int account_list=0x7f0a0033; + public static final int account_password=0x7f0a0020; + public static final int account_password_confirm2=0x7f0a0024; public static final int account_status=0x7f0a0002; - public static final int account_usetls=0x7f0a001a; - public static final int action_accounts=0x7f0a003b; - public static final int action_add=0x7f0a0036; - public static final int action_add_account=0x7f0a0040; - public static final int action_archive=0x7f0a003a; - public static final int action_contact_details=0x7f0a0038; - public static final int action_muc_details=0x7f0a0039; - public static final int action_refresh_contacts=0x7f0a0045; - public static final int action_security=0x7f0a0037; - public static final int action_settings=0x7f0a003c; - public static final int announce_pgp=0x7f0a0044; - public static final int contactList=0x7f0a0006; - public static final int contact_display_name=0x7f0a0008; - public static final int contact_jid=0x7f0a0009; - public static final int contact_photo=0x7f0a0007; - public static final int contacts_header=0x7f0a0005; - public static final int conversation_image=0x7f0a000a; - public static final int conversation_lastmsg=0x7f0a000c; - public static final int conversation_lastupdate=0x7f0a000d; - public static final int conversation_name=0x7f0a000b; - public static final int details_account=0x7f0a0012; - public static final int details_contact_badge=0x7f0a000e; - public static final int details_contactjid=0x7f0a0010; - public static final int details_contactstatus=0x7f0a0011; - public static final int details_jidbox=0x7f0a000f; - public static final int details_receive_presence=0x7f0a0014; - public static final int details_send_presence=0x7f0a0013; - public static final int edit_account_register_new=0x7f0a001b; - public static final int encryption_choice_none=0x7f0a003d; - public static final int encryption_choice_otr=0x7f0a003e; - public static final int encryption_choice_pgp=0x7f0a003f; - public static final int info_box=0x7f0a0022; - public static final int list=0x7f0a0029; - public static final int message_body=0x7f0a002d; - public static final int message_photo=0x7f0a002c; - public static final int message_time=0x7f0a002e; - public static final int messages_view=0x7f0a0021; - public static final int muc_edit_nick=0x7f0a0030; - public static final int muc_error=0x7f0a0023; - public static final int muc_error_msg=0x7f0a0024; - public static final int muc_jabberid=0x7f0a0031; - public static final int muc_members=0x7f0a0035; - public static final int muc_more_details=0x7f0a0032; - public static final int muc_participants_header=0x7f0a0034; - public static final int muc_role=0x7f0a0033; - public static final int muc_your_nick=0x7f0a002f; - public static final int new_conversation_search=0x7f0a0004; - public static final int new_fingerprint=0x7f0a0025; - public static final int otr_fingerprint=0x7f0a0026; - public static final int pgp_keyentry=0x7f0a0027; - public static final int progressBar1=0x7f0a0003; - public static final int selected_conversation=0x7f0a002a; - public static final int slidingpanelayout=0x7f0a0028; - public static final int textSendButton=0x7f0a0020; - public static final int textView1=0x7f0a0018; + public static final int account_usetls=0x7f0a0021; + public static final int action_accounts=0x7f0a0039; + public static final int action_add=0x7f0a003b; + public static final int action_add_account=0x7f0a0043; + public static final int action_archive=0x7f0a003f; + public static final int action_contact_details=0x7f0a003d; + public static final int action_delete_contact=0x7f0a0038; + public static final int action_edit_contact=0x7f0a0037; + public static final int action_muc_details=0x7f0a003e; + public static final int action_refresh_contacts=0x7f0a0048; + public static final int action_security=0x7f0a003c; + public static final int action_settings=0x7f0a003a; + public static final int announce_pgp=0x7f0a0047; + public static final int contactList=0x7f0a0014; + public static final int contact_display_name=0x7f0a0016; + public static final int contact_jid=0x7f0a0017; + public static final int contact_photo=0x7f0a0015; + public static final int contacts_header=0x7f0a0013; + public static final int conversation_image=0x7f0a0018; + public static final int conversation_lastmsg=0x7f0a001a; + public static final int conversation_lastupdate=0x7f0a001b; + public static final int conversation_name=0x7f0a0019; + public static final int details_account=0x7f0a0007; + public static final int details_contact_badge=0x7f0a0003; + public static final int details_contactjid=0x7f0a0005; + public static final int details_contactstatus=0x7f0a0006; + public static final int details_jidbox=0x7f0a0004; + public static final int details_receive_presence=0x7f0a0009; + public static final int details_send_presence=0x7f0a0008; + public static final int editText1=0x7f0a0025; + public static final int edit_account_register_new=0x7f0a0022; + public static final int encryption_choice_none=0x7f0a0040; + public static final int encryption_choice_otr=0x7f0a0041; + public static final int encryption_choice_pgp=0x7f0a0042; + public static final int info_box=0x7f0a002a; + public static final int list=0x7f0a0031; + public static final int message_body=0x7f0a0035; + public static final int message_photo=0x7f0a0034; + public static final int message_time=0x7f0a0036; + public static final int messages_view=0x7f0a0029; + public static final int muc_edit_nick=0x7f0a000b; + public static final int muc_error=0x7f0a002b; + public static final int muc_error_msg=0x7f0a002c; + public static final int muc_jabberid=0x7f0a000c; + public static final int muc_members=0x7f0a0010; + public static final int muc_more_details=0x7f0a000d; + public static final int muc_participants_header=0x7f0a000f; + public static final int muc_role=0x7f0a000e; + public static final int muc_your_nick=0x7f0a000a; + public static final int new_conversation_search=0x7f0a0012; + public static final int new_fingerprint=0x7f0a002d; + public static final int otr_fingerprint=0x7f0a002e; + public static final int pgp_keyentry=0x7f0a002f; + public static final int progressBar1=0x7f0a0011; + public static final int selected_conversation=0x7f0a0032; + public static final int slidingpanelayout=0x7f0a0030; + public static final int textSendButton=0x7f0a0028; + public static final int textView1=0x7f0a001f; public static final int textView2=0x7f0a0001; - public static final int textinput=0x7f0a001f; - public static final int textsend=0x7f0a001e; - public static final int verify_otr_fingerprint=0x7f0a0016; - public static final int verify_otr_jid=0x7f0a0015; - public static final int verify_otr_yourprint=0x7f0a0017; + public static final int textinput=0x7f0a0027; + public static final int textsend=0x7f0a0026; + public static final int verify_otr_fingerprint=0x7f0a001d; + public static final int verify_otr_jid=0x7f0a001c; + public static final int verify_otr_yourprint=0x7f0a001e; } public static final class layout { public static final int account_row=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 dialog_contact_details=0x7f030004; - public static final int dialog_verify_otr=0x7f030005; - public static final int edit_account_dialog=0x7f030006; - public static final int fragment_conversation=0x7f030007; - public static final int fragment_conversations_overview=0x7f030008; - public static final int manage_accounts=0x7f030009; - public static final int message_error=0x7f03000a; - public static final int message_recieved=0x7f03000b; - public static final int message_sent=0x7f03000c; - public static final int muc_options=0x7f03000d; + public static final int activity_contact_details=0x7f030001; + public static final int activity_muc_details=0x7f030002; + public static final int activity_new_conversation=0x7f030003; + public static final int contact=0x7f030004; + public static final int conversation_list_row=0x7f030005; + public static final int dialog_verify_otr=0x7f030006; + public static final int edit_account_dialog=0x7f030007; + public static final int edit_contact_name=0x7f030008; + public static final int fragment_conversation=0x7f030009; + public static final int fragment_conversations_overview=0x7f03000a; + public static final int manage_accounts=0x7f03000b; + public static final int message_error=0x7f03000c; + public static final int message_recieved=0x7f03000d; + public static final int message_sent=0x7f03000e; } public static final class menu { - public static final int conversations=0x7f090000; - public static final int encryption_choices=0x7f090001; - public static final int manageaccounts=0x7f090002; - public static final int manageaccounts_context=0x7f090003; - public static final int newconversation=0x7f090004; + public static final int contact_details=0x7f090000; + public static final int conversations=0x7f090001; + public static final int encryption_choices=0x7f090002; + public static final int manageaccounts=0x7f090003; + public static final int manageaccounts_context=0x7f090004; + public static final int muc_details=0x7f090005; + public static final int newconversation=0x7f090006; } public static final class string { public static final int action_accounts=0x7f050005; @@ -160,12 +167,14 @@ public final class R { public static final int app_name=0x7f050002; public static final int conference_details=0x7f050010; public static final int encrypted_message=0x7f05000f; + public static final int enter_new_name=0x7f050015; public static final int just_now=0x7f05000c; public static final int moderator=0x7f050012; public static final int nick_in_use=0x7f050011; public static final int openpgp_install_openkeychain_via=0x7f050001; public static final int openpgp_list_preference_none=0x7f050000; public static final int participant=0x7f050013; + public static final int remove_contact_text=0x7f050016; public static final int sending=0x7f05000d; public static final int title_activity_new_conversation=0x7f05000b; public static final int visitor=0x7f050014; diff --git a/res/drawable-hdpi/ic_action_discard.png b/res/drawable-hdpi/ic_action_discard.png Binary files differnew file mode 100644 index 000000000..9c717dd32 --- /dev/null +++ b/res/drawable-hdpi/ic_action_discard.png diff --git a/res/drawable-mdpi/ic_action_discard.png b/res/drawable-mdpi/ic_action_discard.png Binary files differnew file mode 100644 index 000000000..9dfb7cc2c --- /dev/null +++ b/res/drawable-mdpi/ic_action_discard.png diff --git a/res/drawable-xhdpi/ic_action_discard.png b/res/drawable-xhdpi/ic_action_discard.png Binary files differnew file mode 100644 index 000000000..db69d6c25 --- /dev/null +++ b/res/drawable-xhdpi/ic_action_discard.png diff --git a/res/drawable-xxhdpi/ic_action_discard.png b/res/drawable-xxhdpi/ic_action_discard.png Binary files differnew file mode 100644 index 000000000..b522daffe --- /dev/null +++ b/res/drawable-xxhdpi/ic_action_discard.png diff --git a/res/layout/dialog_contact_details.xml b/res/layout/activity_contact_details.xml index 00da4396f..cd49f1bf3 100644 --- a/res/layout/dialog_contact_details.xml +++ b/res/layout/activity_contact_details.xml @@ -3,12 +3,18 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - android:padding="8dp" > + android:background="#e5e5e5"> + <TextView + style="@style/sectionHeader" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:padding="8dp" + android:text="Contact Details" /> <RelativeLayout android:layout_width="wrap_content" - android:layout_height="72dp" - android:padding="0dp"> + android:layout_height="88dp" + android:padding="8dp"> <QuickContactBadge android:id="@+id/details_contact_badge" @@ -21,78 +27,69 @@ android:id="@+id/details_jidbox" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_centerVertical="true" android:layout_toRightOf="@+id/details_contact_badge" android:orientation="vertical" - android:layout_alignParentTop="true" - android:paddingLeft="8dp"> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Jabber ID" - android:textColor="#33B5E5" - android:textSize="20sp" /> + android:paddingLeft="8dp" > <TextView android:id="@+id/details_contactjid" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="something@jabber.example.com" + android:paddingLeft="8dp" android:singleLine="true" - android:textSize="14sp" - android:paddingLeft="8dp"/> + android:text="something@jabber.example.com" + android:textColor="#5b5b5b" + android:textSize="18sp" /> - - </LinearLayout> - <TextView + <TextView android:id="@+id/details_contactstatus" android:layout_width="fill_parent" android:layout_height="fill_parent" + android:paddingLeft="16dp" android:text="online" android:textSize="24sp" - android:textStyle="bold" - android:gravity="center_vertical" - android:layout_below="@+id/details_jidbox" - android:layout_toRightOf="@id/details_contact_badge" - android:paddingLeft="16dp"/> + android:textStyle="bold" /> + </LinearLayout> + </RelativeLayout> - <TextView + + <TextView + style="@style/sectionHeader" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:paddingTop="8dp" - android:text="Your account" - android:textColor="#33B5E5" - android:textSize="20sp"/> - + android:padding="8dp" + android:text="Your account" /> <TextView android:id="@+id/details_account" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="8dp" android:text="julia@jabber.example.com" - android:textSize="14sp" /> - - <TextView + android:textSize="18sp" + android:textColor="#5b5b5b" /> + <TextView + style="@style/sectionHeader" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:paddingTop="8dp" - android:text="Subscription" - android:textColor="#33B5E5" - android:textSize="20sp" /> + android:padding="8dp" + android:text="Subscription" /> <CheckBox android:id="@+id/details_send_presence" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send presence updates" - android:textSize="14sp" /> + android:textSize="18sp" + android:textColor="#5b5b5b" /> <CheckBox android:id="@+id/details_receive_presence" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Receive presence updates" - android:textSize="14sp" /> + android:textSize="18sp" + android:textColor="#5b5b5b" /> </LinearLayout>
\ No newline at end of file diff --git a/res/layout/muc_options.xml b/res/layout/activity_muc_details.xml index fd5583cfe..fd5583cfe 100644 --- a/res/layout/muc_options.xml +++ b/res/layout/activity_muc_details.xml diff --git a/res/layout/edit_contact_name.xml b/res/layout/edit_contact_name.xml new file mode 100644 index 000000000..206c74323 --- /dev/null +++ b/res/layout/edit_contact_name.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:padding="8dp"> + + <TextView + android:id="@+id/textView1" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/enter_new_name" + android:textColor="#5b5b5b" + android:textSize="18sp" /> + + <EditText + android:paddingTop="16dp" + android:paddingBottom="8dp" + android:id="@+id/editText1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:ems="10" + android:inputType="textPersonName" > + + <requestFocus /> + </EditText> + +</LinearLayout> diff --git a/res/menu/contact_details.xml b/res/menu/contact_details.xml new file mode 100644 index 000000000..5d4a8d56b --- /dev/null +++ b/res/menu/contact_details.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" > + <item + android:id="@+id/action_edit_contact" + android:orderInCategory="10" + android:showAsAction="always" + android:icon="@drawable/ic_action_edit" + android:title="Edit name" /> + <item + android:id="@+id/action_delete_contact" + android:orderInCategory="10" + android:showAsAction="always" + android:icon="@drawable/ic_action_discard" + android:title="Delete from roster" /> + <item + android:id="@+id/action_accounts" + android:orderInCategory="90" + android:showAsAction="never" + android:title="@string/action_accounts" + /> + + <item + android:id="@+id/action_settings" + android:orderInCategory="100" + android:showAsAction="never" + android:title="@string/action_settings"/> +</menu> diff --git a/res/menu/muc_details.xml b/res/menu/muc_details.xml new file mode 100644 index 000000000..4f9b6da05 --- /dev/null +++ b/res/menu/muc_details.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" > + <item + android:id="@+id/action_accounts" + android:orderInCategory="90" + android:showAsAction="never" + android:title="@string/action_accounts" + /> + + <item + android:id="@+id/action_settings" + android:orderInCategory="100" + android:showAsAction="never" + android:title="@string/action_settings"/> +</menu> diff --git a/res/values/strings.xml b/res/values/strings.xml index a9e1fb994..3b575db15 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -20,4 +20,6 @@ <string name="moderator">Moderator</string> <string name="participant">Participant</string> <string name="visitor">Visitor</string> + <string name="enter_new_name">Enter a new name:</string> + <string name="remove_contact_text">Do you want to delete %s from your roster. The conversation assoziated with this account will not be removed.</string> </resources> diff --git a/src/eu/siacs/conversations/entities/Contact.java b/src/eu/siacs/conversations/entities/Contact.java index 0eed39ed2..4b97cc41e 100644 --- a/src/eu/siacs/conversations/entities/Contact.java +++ b/src/eu/siacs/conversations/entities/Contact.java @@ -293,4 +293,8 @@ public class Contact extends AbstractEntity implements Serializable { public boolean isInRoster() { return this.inRoster; } + + public String getAccountUuid() { + return this.accountUuid; + } } diff --git a/src/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/eu/siacs/conversations/persistance/DatabaseBackend.java index 1a6f934a7..e2067141c 100644 --- a/src/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -228,7 +228,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { } } - public List<Contact> getContacts(Account account) { + public List<Contact> getContactsByAccount(Account account) { List<Contact> list = new ArrayList<Contact>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor; @@ -246,7 +246,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { return list; } - public List<Contact> getContats(String where) { + public List<Contact> getContacts(String where) { List<Contact> list = new ArrayList<Contact>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(Contact.TABLENAME, null, where, null, null, null, null); @@ -280,5 +280,15 @@ public class DatabaseBackend extends SQLiteOpenHelper { db.delete(Contact.TABLENAME, Contact.UUID + "=?", args); } + public Contact getContact(String uuid) { + SQLiteDatabase db = this.getWritableDatabase(); + String[] args = { uuid }; + Cursor cursor = db.query(Contact.TABLENAME, null, Contact.UUID + "=?", args, null, null, null); + if (cursor.getCount() == 0) + return null; + cursor.moveToFirst(); + return Contact.fromCursor(cursor); + } + } diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index 48f0e4702..e973afa9d 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -535,7 +535,7 @@ public class XmppConnectionService extends Service { public void getRoster(Account account, final OnRosterFetchedListener listener) { - List<Contact> contacts = databaseBackend.getContacts(account); + List<Contact> contacts = databaseBackend.getContactsByAccount(account); for (int i = 0; i < contacts.size(); ++i) { contacts.get(i).setAccount(account); } @@ -575,7 +575,7 @@ public class XmppConnectionService extends Service { mWhere.append(account.getUuid()); mWhere.append("\""); List<Contact> contactsToDelete = databaseBackend - .getContats(mWhere.toString()); + .getContacts(mWhere.toString()); for (Contact contact : contactsToDelete) { databaseBackend.deleteContact(contact); replaceContactInConversation(contact.getJid(), @@ -604,7 +604,7 @@ public class XmppConnectionService extends Service { public void onPhoneContactsLoaded( Hashtable<String, Bundle> phoneContacts) { List<Contact> contacts = databaseBackend - .getContacts(null); + .getContactsByAccount(null); for (int i = 0; i < contacts.size(); ++i) { Contact contact = contacts.get(i); if (phoneContacts.containsKey(contact.getJid())) { @@ -938,6 +938,7 @@ public class XmppConnectionService extends Service { public void updateContact(Contact contact) { databaseBackend.updateContact(contact); + replaceContactInConversation(contact.getJid(), contact); } public void updateMessage(Message message) { @@ -1035,4 +1036,14 @@ public class XmppConnectionService extends Service { public void updateConversation(Conversation conversation) { this.databaseBackend.updateConversation(conversation); } + + public Contact findContact(String uuid) { + Contact contact = this.databaseBackend.getContact(uuid); + for(Account account : getAccounts()) { + if (contact.getAccountUuid().equals(account.getUuid())) { + contact.setAccount(account); + } + } + return contact; + } }
\ No newline at end of file diff --git a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java new file mode 100644 index 000000000..23fb68a16 --- /dev/null +++ b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java @@ -0,0 +1,226 @@ +package eu.siacs.conversations.ui; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.provider.ContactsContract.CommonDataKinds; +import android.provider.ContactsContract.Contacts; +import android.provider.ContactsContract.Intents; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.QuickContactBadge; +import android.widget.TextView; +import eu.siacs.conversations.R; +import eu.siacs.conversations.entities.Contact; +import eu.siacs.conversations.entities.Presences; +import eu.siacs.conversations.utils.UIHelper; + +public class ContactDetailsActivity extends XmppActivity { + public static final String ACTION_VIEW_CONTACT = "view_contact"; + + protected ContactDetailsActivity activity = this; + + private String uuid; + private Contact contact; + + private EditText name; + private TextView contactJid; + private TextView accountJid; + private TextView status; + private CheckBox send; + private CheckBox receive; + private QuickContactBadge badge; + + private DialogInterface.OnClickListener removeFromRoster = new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + activity.xmppConnectionService.deleteContact(contact); + activity.finish(); + } + }; + + private DialogInterface.OnClickListener editContactNameListener = new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + contact.setDisplayName(name.getText().toString()); + activity.xmppConnectionService.updateContact(contact); + populateView(); + } + }; + + private DialogInterface.OnClickListener addToPhonebook = new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); + intent.setType(Contacts.CONTENT_ITEM_TYPE); + intent.putExtra(Intents.Insert.IM_HANDLE, contact.getJid()); + intent.putExtra(Intents.Insert.IM_PROTOCOL, + CommonDataKinds.Im.PROTOCOL_JABBER); + intent.putExtra("finishActivityOnSaveCompleted", true); + activity.startActivityForResult(intent, 0); + } + }; + private OnClickListener onBadgeClick = new OnClickListener() { + + @Override + public void onClick(View v) { + AlertDialog.Builder builder = new AlertDialog.Builder(activity); + builder.setTitle("Add to phone book"); + builder.setMessage("Do you want to add " + contact.getJid() + + " to your phones contact list?"); + builder.setNegativeButton("Cancel", null); + builder.setPositiveButton("Add", addToPhonebook); + builder.create().show(); + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getIntent().getAction().equals(ACTION_VIEW_CONTACT)) { + this.uuid = getIntent().getExtras().getString("uuid"); + } + setContentView(R.layout.activity_contact_details); + + contactJid = (TextView) findViewById(R.id.details_contactjid); + accountJid = (TextView) findViewById(R.id.details_account); + status = (TextView) findViewById(R.id.details_contactstatus); + send = (CheckBox) findViewById(R.id.details_send_presence); + receive = (CheckBox) findViewById(R.id.details_receive_presence); + badge = (QuickContactBadge) findViewById(R.id.details_contact_badge); + + getActionBar().setHomeButtonEnabled(true); + getActionBar().setDisplayHomeAsUpEnabled(true); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem menuItem) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setNegativeButton("Cancel", null); + switch (menuItem.getItemId()) { + case android.R.id.home: + finish(); + break; + case R.id.action_delete_contact: + builder.setTitle("Delete from roster") + .setMessage(getString(R.string.remove_contact_text, contact.getJid())) + .setPositiveButton("Delete", removeFromRoster).create() + .show(); + break; + case R.id.action_edit_contact: + if (contact.getSystemAccount() == null) { + + View view = (View) getLayoutInflater().inflate(R.layout.edit_contact_name, null); + name = (EditText) view.findViewById(R.id.editText1); + name.setText(contact.getDisplayName()); + builder.setView(view) + .setTitle(contact.getJid()) + .setPositiveButton("Edit", editContactNameListener) + .create().show(); + + } else { + Intent intent = new Intent(Intent.ACTION_EDIT); + String[] systemAccount = contact.getSystemAccount().split("#"); + long id = Long.parseLong(systemAccount[0]); + Uri uri = Contacts.getLookupUri(id, systemAccount[1]); + intent.setDataAndType(uri,Contacts.CONTENT_ITEM_TYPE); + intent.putExtra("finishActivityOnSaveCompleted", true); + startActivity(intent); + } + break; + } + return super.onOptionsItemSelected(menuItem); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.contact_details, menu); + return true; + } + + private void populateView() { + setTitle(contact.getDisplayName()); + if (contact.getSubscriptionOption(Contact.Subscription.FROM)) { + send.setChecked(true); + } else { + send.setText("Preemptively grant subscription request"); + if (contact + .getSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT)) { + send.setChecked(true); + } else { + send.setChecked(false); + } + } + if (contact.getSubscriptionOption(Contact.Subscription.TO)) { + receive.setChecked(true); + } else { + receive.setText("Request presence updates"); + if (contact + .getSubscriptionOption(Contact.Subscription.ASKING)) { + receive.setChecked(true); + } else { + receive.setChecked(false); + } + } + + switch (contact.getMostAvailableStatus()) { + case Presences.CHAT: + status.setText("free to chat"); + status.setTextColor(0xFF83b600); + break; + case Presences.ONLINE: + status.setText("online"); + status.setTextColor(0xFF83b600); + break; + case Presences.AWAY: + status.setText("away"); + status.setTextColor(0xFFffa713); + break; + case Presences.XA: + status.setText("extended away"); + status.setTextColor(0xFFffa713); + break; + case Presences.DND: + status.setText("do not disturb"); + status.setTextColor(0xFFe92727); + break; + case Presences.OFFLINE: + status.setText("offline"); + status.setTextColor(0xFFe92727); + break; + default: + status.setText("offline"); + status.setTextColor(0xFFe92727); + break; + } + contactJid.setText(contact.getJid()); + accountJid.setText(contact.getAccount().getJid()); + + UIHelper.prepareContactBadge(this, badge, contact); + + if (contact.getSystemAccount() == null) { + badge.setOnClickListener(onBadgeClick); + } + } + + @Override + public void onBackendConnected() { + if (uuid != null) { + this.contact = xmppConnectionService.findContact(uuid); + if (this.contact != null) { + populateView(); + } + } + } + +} diff --git a/src/eu/siacs/conversations/ui/ConversationActivity.java b/src/eu/siacs/conversations/ui/ConversationActivity.java index 4815957e3..d4d0e5655 100644 --- a/src/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/eu/siacs/conversations/ui/ConversationActivity.java @@ -162,9 +162,9 @@ public class ConversationActivity extends XmppActivity { } ((TextView) view.findViewById(R.id.conversation_lastupdate)) - .setText(UIHelper.readableTimeDifference(getItem(position).getLatestMessage().getTimeSent())); + .setText(UIHelper.readableTimeDifference(conv.getLatestMessage().getTimeSent())); - Uri profilePhoto = getItem(position).getProfilePhotoUri(); + Uri profilePhoto = conv.getProfilePhotoUri(); ImageView imageView = (ImageView) view.findViewById(R.id.conversation_image); if (profilePhoto!=null) { imageView.setImageURI(profilePhoto); @@ -272,12 +272,6 @@ public class ConversationActivity extends XmppActivity { case android.R.id.home: spl.openPane(); break; - case R.id.action_settings: - startActivity(new Intent(this, SettingsActivity.class)); - break; - case R.id.action_accounts: - startActivity(new Intent(this, ManageAccountActivity.class)); - break; case R.id.action_add: startActivity(new Intent(this, NewConversationActivity.class)); break; @@ -290,12 +284,12 @@ public class ConversationActivity extends XmppActivity { selectedConversation = conversationList.get(0); break; case R.id.action_contact_details: - DialogContactDetails details = new DialogContactDetails(); Contact contact = this.getSelectedConversation().getContact(); if (contact != null) { - contact.setAccount(this.selectedConversation.getAccount()); - details.setContact(contact); - details.show(getFragmentManager(), "details"); + Intent intent = new Intent(this,ContactDetailsActivity.class); + intent.setAction(ContactDetailsActivity.ACTION_VIEW_CONTACT); + intent.putExtra("uuid", contact.getUuid()); + startActivity(intent); } else { String jid = getSelectedConversation().getContactJid(); AlertDialog.Builder builder = new AlertDialog.Builder(this); @@ -307,8 +301,8 @@ public class ConversationActivity extends XmppActivity { } break; case R.id.action_muc_details: - Intent intent = new Intent(this,MucOptionsActivity.class); - intent.setAction(MucOptionsActivity.ACTION_VIEW_MUC); + Intent intent = new Intent(this,MucDetailsActivity.class); + intent.setAction(MucDetailsActivity.ACTION_VIEW_MUC); intent.putExtra("uuid", getSelectedConversation().getUuid()); startActivity(intent); break; diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java index b64fe5b2b..6c88fcb39 100644 --- a/src/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/eu/siacs/conversations/ui/ConversationFragment.java @@ -109,8 +109,8 @@ public class ConversationFragment extends Fragment { @Override public void onClick(View v) { - Intent intent = new Intent(getActivity(),MucOptionsActivity.class); - intent.setAction(MucOptionsActivity.ACTION_VIEW_MUC); + Intent intent = new Intent(getActivity(),MucDetailsActivity.class); + intent.setAction(MucDetailsActivity.ACTION_VIEW_MUC); intent.putExtra("uuid", conversation.getUuid()); startActivity(intent); } diff --git a/src/eu/siacs/conversations/ui/DialogContactDetails.java b/src/eu/siacs/conversations/ui/DialogContactDetails.java deleted file mode 100644 index 1210bc3cb..000000000 --- a/src/eu/siacs/conversations/ui/DialogContactDetails.java +++ /dev/null @@ -1,218 +0,0 @@ -package eu.siacs.conversations.ui; - -import eu.siacs.conversations.R; -import eu.siacs.conversations.entities.Contact; -import eu.siacs.conversations.entities.Presences; -import eu.siacs.conversations.utils.UIHelper; -import android.app.AlertDialog; -import android.app.Dialog; -import android.app.DialogFragment; -import android.content.DialogInterface; -import android.content.Intent; -import android.os.Bundle; -import android.provider.ContactsContract.CommonDataKinds; -import android.provider.ContactsContract.Contacts; -import android.provider.ContactsContract.Intents; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.CheckBox; -import android.widget.QuickContactBadge; -import android.widget.TextView; - -public class DialogContactDetails extends DialogFragment { - - private Contact contact = null; - boolean displayingInRoster = false; - - private DialogContactDetails mDetailsDialog = this; - private XmppActivity activity; - - private CheckBox send; - private CheckBox receive; - - private DialogInterface.OnClickListener askRemoveFromRoster = new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setTitle("Delete from roster"); - builder.setMessage("Do you want to delete "+contact.getJid()+" from your roster. The conversation assoziated with this account will not be removed."); - builder.setNegativeButton("Cancel", null); - builder.setPositiveButton("Delete",removeFromRoster); - builder.create().show(); - } - }; - - private DialogInterface.OnClickListener removeFromRoster = new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - activity.xmppConnectionService.deleteContact(contact); - mDetailsDialog.dismiss(); - } - }; - - private DialogInterface.OnClickListener addToPhonebook = new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); - intent.setType(Contacts.CONTENT_ITEM_TYPE); - intent.putExtra(Intents.Insert.IM_HANDLE,contact.getJid()); - intent.putExtra(Intents.Insert.IM_PROTOCOL,CommonDataKinds.Im.PROTOCOL_JABBER); - intent.putExtra("finishActivityOnSaveCompleted", true); - getActivity().startActivityForResult(intent,0); - mDetailsDialog.dismiss(); - } - }; - - private DialogInterface.OnClickListener updateSubscriptions = new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - boolean needsUpdating = false; - if (contact.getSubscriptionOption(Contact.Subscription.FROM)) { - if (!send.isChecked()) { - contact.resetSubscriptionOption(Contact.Subscription.FROM); - contact.resetSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT); - activity.xmppConnectionService.stopPresenceUpdatesTo(contact); - needsUpdating=true; - } - } else { - if (contact.getSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT)) { - if (!send.isChecked()) { - contact.resetSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT); - needsUpdating=true; - } - } else { - if (send.isChecked()) { - contact.setSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT); - needsUpdating=true; - } - } - } - if (contact.getSubscriptionOption(Contact.Subscription.TO)) { - if (!receive.isChecked()) { - contact.resetSubscriptionOption(Contact.Subscription.TO); - activity.xmppConnectionService.stopPresenceUpdatesFrom(contact); - needsUpdating=true; - } - } else { - if (contact.getSubscriptionOption(Contact.Subscription.ASKING)) { - if (!receive.isChecked()) { - contact.resetSubscriptionOption(Contact.Subscription.ASKING); - activity.xmppConnectionService.stopPresenceUpdatesFrom(contact); - needsUpdating=true; - } - } else { - if (receive.isChecked()) { - contact.setSubscriptionOption(Contact.Subscription.ASKING); - activity.xmppConnectionService.requestPresenceUpdatesFrom(contact); - needsUpdating=true; - } - } - } - if (needsUpdating) { - activity.xmppConnectionService.updateContact(contact); - } - } - }; - - public void setContact(Contact contact) { - this.contact = contact; - } - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - this.activity = (XmppActivity) getActivity(); - AlertDialog.Builder builder = new AlertDialog.Builder(this.activity); - LayoutInflater inflater = getActivity().getLayoutInflater(); - View view = inflater.inflate(R.layout.dialog_contact_details, null); - TextView contactJid = (TextView) view.findViewById(R.id.details_contactjid); - TextView accountJid = (TextView) view.findViewById(R.id.details_account); - TextView status = (TextView) view.findViewById(R.id.details_contactstatus); - send = (CheckBox) view.findViewById(R.id.details_send_presence); - receive = (CheckBox) view.findViewById(R.id.details_receive_presence); - //ImageView contactPhoto = (ImageView) view.findViewById(R.id.details_contact_picture); - QuickContactBadge badge = (QuickContactBadge) view.findViewById(R.id.details_contact_badge); - - if (contact.getSubscriptionOption(Contact.Subscription.FROM)) { - send.setChecked(true); - } else { - send.setText("Preemptively grant subscription request"); - if (contact.getSubscriptionOption(Contact.Subscription.PREEMPTIVE_GRANT)) { - send.setChecked(true); - } else { - send.setChecked(false); - } - } - if (contact.getSubscriptionOption(Contact.Subscription.TO)) { - receive.setChecked(true); - } else { - receive.setText("Request presence updates"); - if (contact.getSubscriptionOption(Contact.Subscription.ASKING)) { - receive.setChecked(true); - } else { - receive.setChecked(false); - } - } - - switch (contact.getMostAvailableStatus()) { - case Presences.CHAT: - status.setText("free to chat"); - status.setTextColor(0xFF83b600); - break; - case Presences.ONLINE: - status.setText("online"); - status.setTextColor(0xFF83b600); - break; - case Presences.AWAY: - status.setText("away"); - status.setTextColor(0xFFffa713); - break; - case Presences.XA: - status.setText("extended away"); - status.setTextColor(0xFFffa713); - break; - case Presences.DND: - status.setText("do not disturb"); - status.setTextColor(0xFFe92727); - break; - case Presences.OFFLINE: - status.setText("offline"); - status.setTextColor(0xFFe92727); - break; - default: - status.setText("offline"); - status.setTextColor(0xFFe92727); - break; - } - contactJid.setText(contact.getJid()); - accountJid.setText(contact.getAccount().getJid()); - - UIHelper.prepareContactBadge(getActivity(), badge, contact); - - if (contact.getSystemAccount()==null) { - badge.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setTitle("Add to phone book"); - builder.setMessage("Do you want to add "+contact.getJid()+" to your phones contact list?"); - builder.setNegativeButton("Cancel", null); - builder.setPositiveButton("Add",addToPhonebook); - builder.create().show(); - } - }); - } - - builder.setView(view); - builder.setTitle(contact.getDisplayName()); - - builder.setNeutralButton("Done", this.updateSubscriptions); - builder.setPositiveButton("Remove from roster", this.askRemoveFromRoster); - return builder.create(); - } -} diff --git a/src/eu/siacs/conversations/ui/MucOptionsActivity.java b/src/eu/siacs/conversations/ui/MucDetailsActivity.java index 4381eac4c..f28fb480b 100644 --- a/src/eu/siacs/conversations/ui/MucOptionsActivity.java +++ b/src/eu/siacs/conversations/ui/MucDetailsActivity.java @@ -12,6 +12,8 @@ import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; @@ -22,15 +24,13 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -public class MucOptionsActivity extends XmppActivity { +public class MucDetailsActivity extends XmppActivity { public static final String ACTION_VIEW_MUC = "view_muc"; - private XmppActivity activity = this; private Conversation conversation; private EditText mYourNick; private TextView mRoleAffiliaton; private TextView mFullJid; private LinearLayout membersView; - private TextView mTextParticipantsHead; private LinearLayout mMoreDetails; private String uuid = null; private ArrayAdapter<User> contactsAdapter; @@ -56,9 +56,8 @@ public class MucOptionsActivity extends XmppActivity { if (getIntent().getAction().equals(ACTION_VIEW_MUC)) { this.uuid = getIntent().getExtras().getString("uuid"); } - setContentView(R.layout.muc_options); + setContentView(R.layout.activity_muc_details); mYourNick = (EditText) findViewById(R.id.muc_your_nick); - mTextParticipantsHead = (TextView) findViewById(R.id.muc_participants_header); mFullJid = (TextView) findViewById(R.id.muc_jabberid); ImageButton imageButton = (ImageButton) findViewById(R.id.muc_edit_nick); imageButton.setOnClickListener(this.changeNickListener); @@ -86,10 +85,18 @@ public class MucOptionsActivity extends XmppActivity { return view; } }; + getActionBar().setHomeButtonEnabled(true); + getActionBar().setDisplayHomeAsUpEnabled(true); + } - - public void setConversation(Conversation conversation) { - this.conversation = conversation; + + @Override + public boolean onOptionsItemSelected(MenuItem menuItem) { + switch (menuItem.getItemId()) { + case android.R.id.home: + finish(); + } + return super.onOptionsItemSelected(menuItem); } public String getReadableRole(int role) { @@ -104,6 +111,12 @@ public class MucOptionsActivity extends XmppActivity { return ""; } } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.muc_details, menu); + return true; + } @Override void onBackendConnected() { @@ -114,6 +127,7 @@ public class MucOptionsActivity extends XmppActivity { } } if (this.conversation != null) { + setTitle(conversation.getName()); mFullJid.setText(conversation.getContactJid().split("/")[0]); mYourNick.setText(conversation.getMucOptions().getNick()); mRoleAffiliaton = (TextView) findViewById(R.id.muc_role); @@ -139,6 +153,7 @@ public class MucOptionsActivity extends XmppActivity { this.users.addAll(conversation.getMucOptions().getUsers()); contactsAdapter.notifyDataSetChanged(); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + membersView.removeAllViews(); for(User contact : conversation.getMucOptions().getUsers()) { View view = (View) inflater.inflate(R.layout.contact, null); diff --git a/src/eu/siacs/conversations/ui/NewConversationActivity.java b/src/eu/siacs/conversations/ui/NewConversationActivity.java index 628a30479..4b323c267 100644 --- a/src/eu/siacs/conversations/ui/NewConversationActivity.java +++ b/src/eu/siacs/conversations/ui/NewConversationActivity.java @@ -39,7 +39,6 @@ import android.content.Intent; public class NewConversationActivity extends XmppActivity { - protected List<Contact> phoneContacts = new ArrayList<Contact>(); protected List<Contact> rosterContacts = new ArrayList<Contact>(); protected List<Contact> aggregatedContacts = new ArrayList<Contact>(); protected ListView contactsView; @@ -188,10 +187,10 @@ public class NewConversationActivity extends XmppActivity { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long arg3) { - Contact clickedContact = aggregatedContacts.get(pos); - DialogContactDetails dialog = new DialogContactDetails(); - dialog.setContact(clickedContact); - dialog.show(getFragmentManager(), "details"); + Intent intent = new Intent(activity,ContactDetailsActivity.class); + intent.setAction(ContactDetailsActivity.ACTION_VIEW_CONTACT); + intent.putExtra("uuid", aggregatedContacts.get(pos).getUuid()); + startActivity(intent); return true; } }); @@ -278,12 +277,6 @@ public class NewConversationActivity extends XmppActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.action_settings: - startActivity(new Intent(this, SettingsActivity.class)); - break; - case R.id.action_accounts: - startActivity(new Intent(this, ManageAccountActivity.class)); - break; case R.id.action_refresh_contacts: refreshContacts(); break; diff --git a/src/eu/siacs/conversations/ui/XmppActivity.java b/src/eu/siacs/conversations/ui/XmppActivity.java index 6b1d12891..a2951c65a 100644 --- a/src/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/eu/siacs/conversations/ui/XmppActivity.java @@ -1,5 +1,6 @@ package eu.siacs.conversations.ui; +import eu.siacs.conversations.R; import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.services.XmppConnectionService.XmppConnectionBinder; import android.app.Activity; @@ -10,6 +11,7 @@ import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.IBinder; +import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; @@ -79,4 +81,16 @@ public abstract class XmppActivity extends Activity { } abstract void onBackendConnected(); + + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_settings: + startActivity(new Intent(this, SettingsActivity.class)); + break; + case R.id.action_accounts: + startActivity(new Intent(this, ManageAccountActivity.class)); + break; + } + return super.onOptionsItemSelected(item); + } } |