reworked contact details
This commit is contained in:
parent
79ec8b2e81
commit
78312d71dd
|
@ -46,9 +46,13 @@
|
||||||
android:parentActivityName="eu.siacs.conversations.ui.ConversationActivity" >
|
android:parentActivityName="eu.siacs.conversations.ui.ConversationActivity" >
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name="eu.siacs.conversations.ui.MucOptionsActivity"
|
android:name="eu.siacs.conversations.ui.MucDetailsActivity"
|
||||||
android:label="Conference Details"
|
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">
|
android:windowSoftInputMode="stateHidden">
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
|
|
|
@ -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=0x7f020007;
|
||||||
public static final int ic_action_cancel_launchersize_light=0x7f020008;
|
public static final int ic_action_cancel_launchersize_light=0x7f020008;
|
||||||
public static final int ic_action_delete=0x7f020009;
|
public static final int ic_action_delete=0x7f020009;
|
||||||
public static final int ic_action_edit=0x7f02000a;
|
public static final int ic_action_discard=0x7f02000a;
|
||||||
public static final int ic_action_group=0x7f02000b;
|
public static final int ic_action_edit=0x7f02000b;
|
||||||
public static final int ic_action_person=0x7f02000c;
|
public static final int ic_action_group=0x7f02000c;
|
||||||
public static final int ic_action_refresh=0x7f02000d;
|
public static final int ic_action_person=0x7f02000d;
|
||||||
public static final int ic_action_secure=0x7f02000e;
|
public static final int ic_action_refresh=0x7f02000e;
|
||||||
public static final int ic_action_send=0x7f02000f;
|
public static final int ic_action_secure=0x7f02000f;
|
||||||
public static final int ic_action_send_now=0x7f020010;
|
public static final int ic_action_send=0x7f020010;
|
||||||
public static final int ic_action_unsecure=0x7f020011;
|
public static final int ic_action_send_now=0x7f020011;
|
||||||
public static final int ic_launcher=0x7f020012;
|
public static final int ic_action_unsecure=0x7f020012;
|
||||||
public static final int ic_profile=0x7f020013;
|
public static final int ic_launcher=0x7f020013;
|
||||||
public static final int message_border=0x7f020014;
|
public static final int ic_profile=0x7f020014;
|
||||||
public static final int notification=0x7f020015;
|
public static final int message_border=0x7f020015;
|
||||||
public static final int red=0x7f020016;
|
public static final int notification=0x7f020016;
|
||||||
public static final int redbackground=0x7f020017;
|
public static final int red=0x7f020017;
|
||||||
public static final int section_header=0x7f020018;
|
public static final int redbackground=0x7f020018;
|
||||||
|
public static final int section_header=0x7f020019;
|
||||||
}
|
}
|
||||||
public static final class id {
|
public static final class id {
|
||||||
public static final int account_confirm_password_desc=0x7f0a001c;
|
public static final int account_confirm_password_desc=0x7f0a0023;
|
||||||
public static final int account_delete=0x7f0a0041;
|
public static final int account_delete=0x7f0a0044;
|
||||||
public static final int account_disable=0x7f0a0042;
|
public static final int account_disable=0x7f0a0045;
|
||||||
public static final int account_enable=0x7f0a0043;
|
public static final int account_enable=0x7f0a0046;
|
||||||
public static final int account_jid=0x7f0a0000;
|
public static final int account_jid=0x7f0a0000;
|
||||||
public static final int account_list=0x7f0a002b;
|
public static final int account_list=0x7f0a0033;
|
||||||
public static final int account_password=0x7f0a0019;
|
public static final int account_password=0x7f0a0020;
|
||||||
public static final int account_password_confirm2=0x7f0a001d;
|
public static final int account_password_confirm2=0x7f0a0024;
|
||||||
public static final int account_status=0x7f0a0002;
|
public static final int account_status=0x7f0a0002;
|
||||||
public static final int account_usetls=0x7f0a001a;
|
public static final int account_usetls=0x7f0a0021;
|
||||||
public static final int action_accounts=0x7f0a003b;
|
public static final int action_accounts=0x7f0a0039;
|
||||||
public static final int action_add=0x7f0a0036;
|
public static final int action_add=0x7f0a003b;
|
||||||
public static final int action_add_account=0x7f0a0040;
|
public static final int action_add_account=0x7f0a0043;
|
||||||
public static final int action_archive=0x7f0a003a;
|
public static final int action_archive=0x7f0a003f;
|
||||||
public static final int action_contact_details=0x7f0a0038;
|
public static final int action_contact_details=0x7f0a003d;
|
||||||
public static final int action_muc_details=0x7f0a0039;
|
public static final int action_delete_contact=0x7f0a0038;
|
||||||
public static final int action_refresh_contacts=0x7f0a0045;
|
public static final int action_edit_contact=0x7f0a0037;
|
||||||
public static final int action_security=0x7f0a0037;
|
public static final int action_muc_details=0x7f0a003e;
|
||||||
public static final int action_settings=0x7f0a003c;
|
public static final int action_refresh_contacts=0x7f0a0048;
|
||||||
public static final int announce_pgp=0x7f0a0044;
|
public static final int action_security=0x7f0a003c;
|
||||||
public static final int contactList=0x7f0a0006;
|
public static final int action_settings=0x7f0a003a;
|
||||||
public static final int contact_display_name=0x7f0a0008;
|
public static final int announce_pgp=0x7f0a0047;
|
||||||
public static final int contact_jid=0x7f0a0009;
|
public static final int contactList=0x7f0a0014;
|
||||||
public static final int contact_photo=0x7f0a0007;
|
public static final int contact_display_name=0x7f0a0016;
|
||||||
public static final int contacts_header=0x7f0a0005;
|
public static final int contact_jid=0x7f0a0017;
|
||||||
public static final int conversation_image=0x7f0a000a;
|
public static final int contact_photo=0x7f0a0015;
|
||||||
public static final int conversation_lastmsg=0x7f0a000c;
|
public static final int contacts_header=0x7f0a0013;
|
||||||
public static final int conversation_lastupdate=0x7f0a000d;
|
public static final int conversation_image=0x7f0a0018;
|
||||||
public static final int conversation_name=0x7f0a000b;
|
public static final int conversation_lastmsg=0x7f0a001a;
|
||||||
public static final int details_account=0x7f0a0012;
|
public static final int conversation_lastupdate=0x7f0a001b;
|
||||||
public static final int details_contact_badge=0x7f0a000e;
|
public static final int conversation_name=0x7f0a0019;
|
||||||
public static final int details_contactjid=0x7f0a0010;
|
public static final int details_account=0x7f0a0007;
|
||||||
public static final int details_contactstatus=0x7f0a0011;
|
public static final int details_contact_badge=0x7f0a0003;
|
||||||
public static final int details_jidbox=0x7f0a000f;
|
public static final int details_contactjid=0x7f0a0005;
|
||||||
public static final int details_receive_presence=0x7f0a0014;
|
public static final int details_contactstatus=0x7f0a0006;
|
||||||
public static final int details_send_presence=0x7f0a0013;
|
public static final int details_jidbox=0x7f0a0004;
|
||||||
public static final int edit_account_register_new=0x7f0a001b;
|
public static final int details_receive_presence=0x7f0a0009;
|
||||||
public static final int encryption_choice_none=0x7f0a003d;
|
public static final int details_send_presence=0x7f0a0008;
|
||||||
public static final int encryption_choice_otr=0x7f0a003e;
|
public static final int editText1=0x7f0a0025;
|
||||||
public static final int encryption_choice_pgp=0x7f0a003f;
|
public static final int edit_account_register_new=0x7f0a0022;
|
||||||
public static final int info_box=0x7f0a0022;
|
public static final int encryption_choice_none=0x7f0a0040;
|
||||||
public static final int list=0x7f0a0029;
|
public static final int encryption_choice_otr=0x7f0a0041;
|
||||||
public static final int message_body=0x7f0a002d;
|
public static final int encryption_choice_pgp=0x7f0a0042;
|
||||||
public static final int message_photo=0x7f0a002c;
|
public static final int info_box=0x7f0a002a;
|
||||||
public static final int message_time=0x7f0a002e;
|
public static final int list=0x7f0a0031;
|
||||||
public static final int messages_view=0x7f0a0021;
|
public static final int message_body=0x7f0a0035;
|
||||||
public static final int muc_edit_nick=0x7f0a0030;
|
public static final int message_photo=0x7f0a0034;
|
||||||
public static final int muc_error=0x7f0a0023;
|
public static final int message_time=0x7f0a0036;
|
||||||
public static final int muc_error_msg=0x7f0a0024;
|
public static final int messages_view=0x7f0a0029;
|
||||||
public static final int muc_jabberid=0x7f0a0031;
|
public static final int muc_edit_nick=0x7f0a000b;
|
||||||
public static final int muc_members=0x7f0a0035;
|
public static final int muc_error=0x7f0a002b;
|
||||||
public static final int muc_more_details=0x7f0a0032;
|
public static final int muc_error_msg=0x7f0a002c;
|
||||||
public static final int muc_participants_header=0x7f0a0034;
|
public static final int muc_jabberid=0x7f0a000c;
|
||||||
public static final int muc_role=0x7f0a0033;
|
public static final int muc_members=0x7f0a0010;
|
||||||
public static final int muc_your_nick=0x7f0a002f;
|
public static final int muc_more_details=0x7f0a000d;
|
||||||
public static final int new_conversation_search=0x7f0a0004;
|
public static final int muc_participants_header=0x7f0a000f;
|
||||||
public static final int new_fingerprint=0x7f0a0025;
|
public static final int muc_role=0x7f0a000e;
|
||||||
public static final int otr_fingerprint=0x7f0a0026;
|
public static final int muc_your_nick=0x7f0a000a;
|
||||||
public static final int pgp_keyentry=0x7f0a0027;
|
public static final int new_conversation_search=0x7f0a0012;
|
||||||
public static final int progressBar1=0x7f0a0003;
|
public static final int new_fingerprint=0x7f0a002d;
|
||||||
public static final int selected_conversation=0x7f0a002a;
|
public static final int otr_fingerprint=0x7f0a002e;
|
||||||
public static final int slidingpanelayout=0x7f0a0028;
|
public static final int pgp_keyentry=0x7f0a002f;
|
||||||
public static final int textSendButton=0x7f0a0020;
|
public static final int progressBar1=0x7f0a0011;
|
||||||
public static final int textView1=0x7f0a0018;
|
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 textView2=0x7f0a0001;
|
||||||
public static final int textinput=0x7f0a001f;
|
public static final int textinput=0x7f0a0027;
|
||||||
public static final int textsend=0x7f0a001e;
|
public static final int textsend=0x7f0a0026;
|
||||||
public static final int verify_otr_fingerprint=0x7f0a0016;
|
public static final int verify_otr_fingerprint=0x7f0a001d;
|
||||||
public static final int verify_otr_jid=0x7f0a0015;
|
public static final int verify_otr_jid=0x7f0a001c;
|
||||||
public static final int verify_otr_yourprint=0x7f0a0017;
|
public static final int verify_otr_yourprint=0x7f0a001e;
|
||||||
}
|
}
|
||||||
public static final class layout {
|
public static final class layout {
|
||||||
public static final int account_row=0x7f030000;
|
public static final int account_row=0x7f030000;
|
||||||
public static final int activity_new_conversation=0x7f030001;
|
public static final int activity_contact_details=0x7f030001;
|
||||||
public static final int contact=0x7f030002;
|
public static final int activity_muc_details=0x7f030002;
|
||||||
public static final int conversation_list_row=0x7f030003;
|
public static final int activity_new_conversation=0x7f030003;
|
||||||
public static final int dialog_contact_details=0x7f030004;
|
public static final int contact=0x7f030004;
|
||||||
public static final int dialog_verify_otr=0x7f030005;
|
public static final int conversation_list_row=0x7f030005;
|
||||||
public static final int edit_account_dialog=0x7f030006;
|
public static final int dialog_verify_otr=0x7f030006;
|
||||||
public static final int fragment_conversation=0x7f030007;
|
public static final int edit_account_dialog=0x7f030007;
|
||||||
public static final int fragment_conversations_overview=0x7f030008;
|
public static final int edit_contact_name=0x7f030008;
|
||||||
public static final int manage_accounts=0x7f030009;
|
public static final int fragment_conversation=0x7f030009;
|
||||||
public static final int message_error=0x7f03000a;
|
public static final int fragment_conversations_overview=0x7f03000a;
|
||||||
public static final int message_recieved=0x7f03000b;
|
public static final int manage_accounts=0x7f03000b;
|
||||||
public static final int message_sent=0x7f03000c;
|
public static final int message_error=0x7f03000c;
|
||||||
public static final int muc_options=0x7f03000d;
|
public static final int message_recieved=0x7f03000d;
|
||||||
|
public static final int message_sent=0x7f03000e;
|
||||||
}
|
}
|
||||||
public static final class menu {
|
public static final class menu {
|
||||||
public static final int conversations=0x7f090000;
|
public static final int contact_details=0x7f090000;
|
||||||
public static final int encryption_choices=0x7f090001;
|
public static final int conversations=0x7f090001;
|
||||||
public static final int manageaccounts=0x7f090002;
|
public static final int encryption_choices=0x7f090002;
|
||||||
public static final int manageaccounts_context=0x7f090003;
|
public static final int manageaccounts=0x7f090003;
|
||||||
public static final int newconversation=0x7f090004;
|
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 class string {
|
||||||
public static final int action_accounts=0x7f050005;
|
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 app_name=0x7f050002;
|
||||||
public static final int conference_details=0x7f050010;
|
public static final int conference_details=0x7f050010;
|
||||||
public static final int encrypted_message=0x7f05000f;
|
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 just_now=0x7f05000c;
|
||||||
public static final int moderator=0x7f050012;
|
public static final int moderator=0x7f050012;
|
||||||
public static final int nick_in_use=0x7f050011;
|
public static final int nick_in_use=0x7f050011;
|
||||||
public static final int openpgp_install_openkeychain_via=0x7f050001;
|
public static final int openpgp_install_openkeychain_via=0x7f050001;
|
||||||
public static final int openpgp_list_preference_none=0x7f050000;
|
public static final int openpgp_list_preference_none=0x7f050000;
|
||||||
public static final int participant=0x7f050013;
|
public static final int participant=0x7f050013;
|
||||||
|
public static final int remove_contact_text=0x7f050016;
|
||||||
public static final int sending=0x7f05000d;
|
public static final int sending=0x7f05000d;
|
||||||
public static final int title_activity_new_conversation=0x7f05000b;
|
public static final int title_activity_new_conversation=0x7f05000b;
|
||||||
public static final int visitor=0x7f050014;
|
public static final int visitor=0x7f050014;
|
||||||
|
|
BIN
res/drawable-hdpi/ic_action_discard.png
Normal file
BIN
res/drawable-hdpi/ic_action_discard.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 454 B |
BIN
res/drawable-mdpi/ic_action_discard.png
Normal file
BIN
res/drawable-mdpi/ic_action_discard.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 333 B |
BIN
res/drawable-xhdpi/ic_action_discard.png
Normal file
BIN
res/drawable-xhdpi/ic_action_discard.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 552 B |
BIN
res/drawable-xxhdpi/ic_action_discard.png
Normal file
BIN
res/drawable-xxhdpi/ic_action_discard.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 781 B |
|
@ -3,12 +3,18 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
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
|
<RelativeLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="72dp"
|
android:layout_height="88dp"
|
||||||
android:padding="0dp">
|
android:padding="8dp">
|
||||||
|
|
||||||
<QuickContactBadge
|
<QuickContactBadge
|
||||||
android:id="@+id/details_contact_badge"
|
android:id="@+id/details_contact_badge"
|
||||||
|
@ -21,78 +27,69 @@
|
||||||
android:id="@+id/details_jidbox"
|
android:id="@+id/details_jidbox"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
android:layout_toRightOf="@+id/details_contact_badge"
|
android:layout_toRightOf="@+id/details_contact_badge"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_alignParentTop="true"
|
android:paddingLeft="8dp" >
|
||||||
android:paddingLeft="8dp">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Jabber ID"
|
|
||||||
android:textColor="#33B5E5"
|
|
||||||
android:textSize="20sp" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/details_contactjid"
|
android:id="@+id/details_contactjid"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="something@jabber.example.com"
|
android:paddingLeft="8dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textSize="14sp"
|
android:text="something@jabber.example.com"
|
||||||
android:paddingLeft="8dp"/>
|
android:textColor="#5b5b5b"
|
||||||
|
android:textSize="18sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
</LinearLayout>
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/details_contactstatus"
|
android:id="@+id/details_contactstatus"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
|
android:paddingLeft="16dp"
|
||||||
android:text="online"
|
android:text="online"
|
||||||
android:textSize="24sp"
|
android:textSize="24sp"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold" />
|
||||||
android:gravity="center_vertical"
|
</LinearLayout>
|
||||||
android:layout_below="@+id/details_jidbox"
|
|
||||||
android:layout_toRightOf="@id/details_contact_badge"
|
|
||||||
android:paddingLeft="16dp"/>
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<TextView
|
|
||||||
|
<TextView
|
||||||
|
style="@style/sectionHeader"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="8dp"
|
android:padding="8dp"
|
||||||
android:text="Your account"
|
android:text="Your account" />
|
||||||
android:textColor="#33B5E5"
|
|
||||||
android:textSize="20sp"/>
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/details_account"
|
android:id="@+id/details_account"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingLeft="8dp"
|
android:paddingLeft="8dp"
|
||||||
android:text="julia@jabber.example.com"
|
android:text="julia@jabber.example.com"
|
||||||
android:textSize="14sp" />
|
android:textSize="18sp"
|
||||||
|
android:textColor="#5b5b5b" />
|
||||||
<TextView
|
<TextView
|
||||||
|
style="@style/sectionHeader"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="8dp"
|
android:padding="8dp"
|
||||||
android:text="Subscription"
|
android:text="Subscription" />
|
||||||
android:textColor="#33B5E5"
|
|
||||||
android:textSize="20sp" />
|
|
||||||
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
android:id="@+id/details_send_presence"
|
android:id="@+id/details_send_presence"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Send presence updates"
|
android:text="Send presence updates"
|
||||||
android:textSize="14sp" />
|
android:textSize="18sp"
|
||||||
|
android:textColor="#5b5b5b" />
|
||||||
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
android:id="@+id/details_receive_presence"
|
android:id="@+id/details_receive_presence"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Receive presence updates"
|
android:text="Receive presence updates"
|
||||||
android:textSize="14sp" />
|
android:textSize="18sp"
|
||||||
|
android:textColor="#5b5b5b" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
28
res/layout/edit_contact_name.xml
Normal file
28
res/layout/edit_contact_name.xml
Normal file
|
@ -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>
|
27
res/menu/contact_details.xml
Normal file
27
res/menu/contact_details.xml
Normal file
|
@ -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>
|
15
res/menu/muc_details.xml
Normal file
15
res/menu/muc_details.xml
Normal file
|
@ -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>
|
|
@ -20,4 +20,6 @@
|
||||||
<string name="moderator">Moderator</string>
|
<string name="moderator">Moderator</string>
|
||||||
<string name="participant">Participant</string>
|
<string name="participant">Participant</string>
|
||||||
<string name="visitor">Visitor</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>
|
</resources>
|
||||||
|
|
|
@ -293,4 +293,8 @@ public class Contact extends AbstractEntity implements Serializable {
|
||||||
public boolean isInRoster() {
|
public boolean isInRoster() {
|
||||||
return this.inRoster;
|
return this.inRoster;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getAccountUuid() {
|
||||||
|
return this.accountUuid;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>();
|
List<Contact> list = new ArrayList<Contact>();
|
||||||
SQLiteDatabase db = this.getReadableDatabase();
|
SQLiteDatabase db = this.getReadableDatabase();
|
||||||
Cursor cursor;
|
Cursor cursor;
|
||||||
|
@ -246,7 +246,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Contact> getContats(String where) {
|
public List<Contact> getContacts(String where) {
|
||||||
List<Contact> list = new ArrayList<Contact>();
|
List<Contact> list = new ArrayList<Contact>();
|
||||||
SQLiteDatabase db = this.getReadableDatabase();
|
SQLiteDatabase db = this.getReadableDatabase();
|
||||||
Cursor cursor = db.query(Contact.TABLENAME, null, where, null, null, null, null);
|
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);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -535,7 +535,7 @@ public class XmppConnectionService extends Service {
|
||||||
|
|
||||||
public void getRoster(Account account,
|
public void getRoster(Account account,
|
||||||
final OnRosterFetchedListener listener) {
|
final OnRosterFetchedListener listener) {
|
||||||
List<Contact> contacts = databaseBackend.getContacts(account);
|
List<Contact> contacts = databaseBackend.getContactsByAccount(account);
|
||||||
for (int i = 0; i < contacts.size(); ++i) {
|
for (int i = 0; i < contacts.size(); ++i) {
|
||||||
contacts.get(i).setAccount(account);
|
contacts.get(i).setAccount(account);
|
||||||
}
|
}
|
||||||
|
@ -575,7 +575,7 @@ public class XmppConnectionService extends Service {
|
||||||
mWhere.append(account.getUuid());
|
mWhere.append(account.getUuid());
|
||||||
mWhere.append("\"");
|
mWhere.append("\"");
|
||||||
List<Contact> contactsToDelete = databaseBackend
|
List<Contact> contactsToDelete = databaseBackend
|
||||||
.getContats(mWhere.toString());
|
.getContacts(mWhere.toString());
|
||||||
for (Contact contact : contactsToDelete) {
|
for (Contact contact : contactsToDelete) {
|
||||||
databaseBackend.deleteContact(contact);
|
databaseBackend.deleteContact(contact);
|
||||||
replaceContactInConversation(contact.getJid(),
|
replaceContactInConversation(contact.getJid(),
|
||||||
|
@ -604,7 +604,7 @@ public class XmppConnectionService extends Service {
|
||||||
public void onPhoneContactsLoaded(
|
public void onPhoneContactsLoaded(
|
||||||
Hashtable<String, Bundle> phoneContacts) {
|
Hashtable<String, Bundle> phoneContacts) {
|
||||||
List<Contact> contacts = databaseBackend
|
List<Contact> contacts = databaseBackend
|
||||||
.getContacts(null);
|
.getContactsByAccount(null);
|
||||||
for (int i = 0; i < contacts.size(); ++i) {
|
for (int i = 0; i < contacts.size(); ++i) {
|
||||||
Contact contact = contacts.get(i);
|
Contact contact = contacts.get(i);
|
||||||
if (phoneContacts.containsKey(contact.getJid())) {
|
if (phoneContacts.containsKey(contact.getJid())) {
|
||||||
|
@ -938,6 +938,7 @@ public class XmppConnectionService extends Service {
|
||||||
|
|
||||||
public void updateContact(Contact contact) {
|
public void updateContact(Contact contact) {
|
||||||
databaseBackend.updateContact(contact);
|
databaseBackend.updateContact(contact);
|
||||||
|
replaceContactInConversation(contact.getJid(), contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateMessage(Message message) {
|
public void updateMessage(Message message) {
|
||||||
|
@ -1035,4 +1036,14 @@ public class XmppConnectionService extends Service {
|
||||||
public void updateConversation(Conversation conversation) {
|
public void updateConversation(Conversation conversation) {
|
||||||
this.databaseBackend.updateConversation(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;
|
||||||
|
}
|
||||||
}
|
}
|
226
src/eu/siacs/conversations/ui/ContactDetailsActivity.java
Normal file
226
src/eu/siacs/conversations/ui/ContactDetailsActivity.java
Normal file
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -162,9 +162,9 @@ public class ConversationActivity extends XmppActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
((TextView) view.findViewById(R.id.conversation_lastupdate))
|
((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);
|
ImageView imageView = (ImageView) view.findViewById(R.id.conversation_image);
|
||||||
if (profilePhoto!=null) {
|
if (profilePhoto!=null) {
|
||||||
imageView.setImageURI(profilePhoto);
|
imageView.setImageURI(profilePhoto);
|
||||||
|
@ -272,12 +272,6 @@ public class ConversationActivity extends XmppActivity {
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
spl.openPane();
|
spl.openPane();
|
||||||
break;
|
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:
|
case R.id.action_add:
|
||||||
startActivity(new Intent(this, NewConversationActivity.class));
|
startActivity(new Intent(this, NewConversationActivity.class));
|
||||||
break;
|
break;
|
||||||
|
@ -290,12 +284,12 @@ public class ConversationActivity extends XmppActivity {
|
||||||
selectedConversation = conversationList.get(0);
|
selectedConversation = conversationList.get(0);
|
||||||
break;
|
break;
|
||||||
case R.id.action_contact_details:
|
case R.id.action_contact_details:
|
||||||
DialogContactDetails details = new DialogContactDetails();
|
|
||||||
Contact contact = this.getSelectedConversation().getContact();
|
Contact contact = this.getSelectedConversation().getContact();
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
contact.setAccount(this.selectedConversation.getAccount());
|
Intent intent = new Intent(this,ContactDetailsActivity.class);
|
||||||
details.setContact(contact);
|
intent.setAction(ContactDetailsActivity.ACTION_VIEW_CONTACT);
|
||||||
details.show(getFragmentManager(), "details");
|
intent.putExtra("uuid", contact.getUuid());
|
||||||
|
startActivity(intent);
|
||||||
} else {
|
} else {
|
||||||
String jid = getSelectedConversation().getContactJid();
|
String jid = getSelectedConversation().getContactJid();
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||||
|
@ -307,8 +301,8 @@ public class ConversationActivity extends XmppActivity {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case R.id.action_muc_details:
|
case R.id.action_muc_details:
|
||||||
Intent intent = new Intent(this,MucOptionsActivity.class);
|
Intent intent = new Intent(this,MucDetailsActivity.class);
|
||||||
intent.setAction(MucOptionsActivity.ACTION_VIEW_MUC);
|
intent.setAction(MucDetailsActivity.ACTION_VIEW_MUC);
|
||||||
intent.putExtra("uuid", getSelectedConversation().getUuid());
|
intent.putExtra("uuid", getSelectedConversation().getUuid());
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -109,8 +109,8 @@ public class ConversationFragment extends Fragment {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent intent = new Intent(getActivity(),MucOptionsActivity.class);
|
Intent intent = new Intent(getActivity(),MucDetailsActivity.class);
|
||||||
intent.setAction(MucOptionsActivity.ACTION_VIEW_MUC);
|
intent.setAction(MucDetailsActivity.ACTION_VIEW_MUC);
|
||||||
intent.putExtra("uuid", conversation.getUuid());
|
intent.putExtra("uuid", conversation.getUuid());
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -12,6 +12,8 @@ import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -22,15 +24,13 @@ import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
public class MucOptionsActivity extends XmppActivity {
|
public class MucDetailsActivity extends XmppActivity {
|
||||||
public static final String ACTION_VIEW_MUC = "view_muc";
|
public static final String ACTION_VIEW_MUC = "view_muc";
|
||||||
private XmppActivity activity = this;
|
|
||||||
private Conversation conversation;
|
private Conversation conversation;
|
||||||
private EditText mYourNick;
|
private EditText mYourNick;
|
||||||
private TextView mRoleAffiliaton;
|
private TextView mRoleAffiliaton;
|
||||||
private TextView mFullJid;
|
private TextView mFullJid;
|
||||||
private LinearLayout membersView;
|
private LinearLayout membersView;
|
||||||
private TextView mTextParticipantsHead;
|
|
||||||
private LinearLayout mMoreDetails;
|
private LinearLayout mMoreDetails;
|
||||||
private String uuid = null;
|
private String uuid = null;
|
||||||
private ArrayAdapter<User> contactsAdapter;
|
private ArrayAdapter<User> contactsAdapter;
|
||||||
|
@ -56,9 +56,8 @@ public class MucOptionsActivity extends XmppActivity {
|
||||||
if (getIntent().getAction().equals(ACTION_VIEW_MUC)) {
|
if (getIntent().getAction().equals(ACTION_VIEW_MUC)) {
|
||||||
this.uuid = getIntent().getExtras().getString("uuid");
|
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);
|
mYourNick = (EditText) findViewById(R.id.muc_your_nick);
|
||||||
mTextParticipantsHead = (TextView) findViewById(R.id.muc_participants_header);
|
|
||||||
mFullJid = (TextView) findViewById(R.id.muc_jabberid);
|
mFullJid = (TextView) findViewById(R.id.muc_jabberid);
|
||||||
ImageButton imageButton = (ImageButton) findViewById(R.id.muc_edit_nick);
|
ImageButton imageButton = (ImageButton) findViewById(R.id.muc_edit_nick);
|
||||||
imageButton.setOnClickListener(this.changeNickListener);
|
imageButton.setOnClickListener(this.changeNickListener);
|
||||||
|
@ -86,10 +85,18 @@ public class MucOptionsActivity extends XmppActivity {
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
getActionBar().setHomeButtonEnabled(true);
|
||||||
|
getActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setConversation(Conversation conversation) {
|
@Override
|
||||||
this.conversation = conversation;
|
public boolean onOptionsItemSelected(MenuItem menuItem) {
|
||||||
|
switch (menuItem.getItemId()) {
|
||||||
|
case android.R.id.home:
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(menuItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getReadableRole(int role) {
|
public String getReadableRole(int role) {
|
||||||
|
@ -105,6 +112,12 @@ public class MucOptionsActivity extends XmppActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.muc_details, menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void onBackendConnected() {
|
void onBackendConnected() {
|
||||||
if (uuid != null) {
|
if (uuid != null) {
|
||||||
|
@ -114,6 +127,7 @@ public class MucOptionsActivity extends XmppActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.conversation != null) {
|
if (this.conversation != null) {
|
||||||
|
setTitle(conversation.getName());
|
||||||
mFullJid.setText(conversation.getContactJid().split("/")[0]);
|
mFullJid.setText(conversation.getContactJid().split("/")[0]);
|
||||||
mYourNick.setText(conversation.getMucOptions().getNick());
|
mYourNick.setText(conversation.getMucOptions().getNick());
|
||||||
mRoleAffiliaton = (TextView) findViewById(R.id.muc_role);
|
mRoleAffiliaton = (TextView) findViewById(R.id.muc_role);
|
||||||
|
@ -139,6 +153,7 @@ public class MucOptionsActivity extends XmppActivity {
|
||||||
this.users.addAll(conversation.getMucOptions().getUsers());
|
this.users.addAll(conversation.getMucOptions().getUsers());
|
||||||
contactsAdapter.notifyDataSetChanged();
|
contactsAdapter.notifyDataSetChanged();
|
||||||
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
membersView.removeAllViews();
|
||||||
for(User contact : conversation.getMucOptions().getUsers()) {
|
for(User contact : conversation.getMucOptions().getUsers()) {
|
||||||
View view = (View) inflater.inflate(R.layout.contact, null);
|
View view = (View) inflater.inflate(R.layout.contact, null);
|
||||||
|
|
|
@ -39,7 +39,6 @@ import android.content.Intent;
|
||||||
|
|
||||||
public class NewConversationActivity extends XmppActivity {
|
public class NewConversationActivity extends XmppActivity {
|
||||||
|
|
||||||
protected List<Contact> phoneContacts = new ArrayList<Contact>();
|
|
||||||
protected List<Contact> rosterContacts = new ArrayList<Contact>();
|
protected List<Contact> rosterContacts = new ArrayList<Contact>();
|
||||||
protected List<Contact> aggregatedContacts = new ArrayList<Contact>();
|
protected List<Contact> aggregatedContacts = new ArrayList<Contact>();
|
||||||
protected ListView contactsView;
|
protected ListView contactsView;
|
||||||
|
@ -188,10 +187,10 @@ public class NewConversationActivity extends XmppActivity {
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
|
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
|
||||||
int pos, long arg3) {
|
int pos, long arg3) {
|
||||||
Contact clickedContact = aggregatedContacts.get(pos);
|
Intent intent = new Intent(activity,ContactDetailsActivity.class);
|
||||||
DialogContactDetails dialog = new DialogContactDetails();
|
intent.setAction(ContactDetailsActivity.ACTION_VIEW_CONTACT);
|
||||||
dialog.setContact(clickedContact);
|
intent.putExtra("uuid", aggregatedContacts.get(pos).getUuid());
|
||||||
dialog.show(getFragmentManager(), "details");
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -278,12 +277,6 @@ public class NewConversationActivity extends XmppActivity {
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
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:
|
case R.id.action_refresh_contacts:
|
||||||
refreshContacts();
|
refreshContacts();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package eu.siacs.conversations.ui;
|
package eu.siacs.conversations.ui;
|
||||||
|
|
||||||
|
import eu.siacs.conversations.R;
|
||||||
import eu.siacs.conversations.services.XmppConnectionService;
|
import eu.siacs.conversations.services.XmppConnectionService;
|
||||||
import eu.siacs.conversations.services.XmppConnectionService.XmppConnectionBinder;
|
import eu.siacs.conversations.services.XmppConnectionService.XmppConnectionBinder;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
@ -10,6 +11,7 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.ServiceConnection;
|
import android.content.ServiceConnection;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
|
||||||
|
@ -79,4 +81,16 @@ public abstract class XmppActivity extends Activity {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract void onBackendConnected();
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue