1package eu.siacs.conversations.ui;
2
3import java.util.ArrayList;
4import java.util.Collections;
5import java.util.Comparator;
6import java.util.HashSet;
7import java.util.List;
8import java.util.Set;
9
10import eu.siacs.conversations.R;
11import eu.siacs.conversations.entities.Account;
12import eu.siacs.conversations.entities.Contact;
13import eu.siacs.conversations.entities.Conversation;
14import eu.siacs.conversations.entities.Message;
15import eu.siacs.conversations.utils.UIHelper;
16import android.app.PendingIntent;
17import android.content.Intent;
18import android.content.SharedPreferences;
19import android.graphics.Bitmap;
20import android.net.Uri;
21import android.os.Bundle;
22import android.preference.PreferenceManager;
23import android.view.View;
24import android.view.View.OnClickListener;
25import android.widget.ImageView;
26import android.widget.LinearLayout;
27import android.widget.TextView;
28import android.widget.Toast;
29
30public class ShareWithActivity extends XmppActivity {
31
32 private LinearLayout conversations;
33 private LinearLayout contacts;
34 private boolean isImage = false;
35
36 private UiCallback<Message> attachImageCallback = new UiCallback<Message>() {
37
38 @Override
39 public void userInputRequried(PendingIntent pi, Message object) {
40 // TODO Auto-generated method stub
41
42 }
43
44 @Override
45 public void success(Message message) {
46 xmppConnectionService.sendMessage(message);
47 }
48
49 @Override
50 public void error(int errorCode, Message object) {
51 // TODO Auto-generated method stub
52
53 }
54 };
55
56 @Override
57 protected void onCreate(Bundle savedInstanceState) {
58
59 super.onCreate(savedInstanceState);
60
61 setContentView(R.layout.share_with);
62 setTitle(getString(R.string.title_activity_sharewith));
63
64 contacts = (LinearLayout) findViewById(R.id.contacts);
65 conversations = (LinearLayout) findViewById(R.id.conversations);
66
67 }
68
69 public View createContactView(String name, String msgTxt, Bitmap bm) {
70 View view = (View) getLayoutInflater().inflate(R.layout.contact, null);
71 view.setBackgroundResource(R.drawable.greybackground);
72 TextView contactName = (TextView) view
73 .findViewById(R.id.contact_display_name);
74 contactName.setText(name);
75 TextView msg = (TextView) view.findViewById(R.id.contact_jid);
76 msg.setText(msgTxt);
77 ImageView imageView = (ImageView) view.findViewById(R.id.contact_photo);
78 imageView.setImageBitmap(bm);
79 return view;
80 }
81
82 @Override
83 void onBackendConnected() {
84 this.isImage = (getIntent().getType() != null && getIntent().getType()
85 .startsWith("image/"));
86 SharedPreferences preferences = PreferenceManager
87 .getDefaultSharedPreferences(this);
88 boolean useSubject = preferences.getBoolean("use_subject_in_muc", true);
89
90 Set<Contact> displayedContacts = new HashSet<Contact>();
91 conversations.removeAllViews();
92 List<Conversation> convList = new ArrayList<Conversation>();
93 xmppConnectionService.populateWithOrderedConversations(convList);
94 Collections.sort(convList, new Comparator<Conversation>() {
95 @Override
96 public int compare(Conversation lhs, Conversation rhs) {
97 return (int) (rhs.getLatestMessage().getTimeSent() - lhs
98 .getLatestMessage().getTimeSent());
99 }
100 });
101 for (final Conversation conversation : convList) {
102 if (!isImage || conversation.getMode() == Conversation.MODE_SINGLE) {
103 View view = createContactView(conversation.getName(useSubject),
104 conversation.getLatestMessage().getBody().trim(),
105 conversation.getImage(getApplicationContext(), 48));
106 view.setOnClickListener(new OnClickListener() {
107
108 @Override
109 public void onClick(View v) {
110 share(conversation);
111 }
112 });
113 conversations.addView(view);
114 displayedContacts.add(conversation.getContact());
115 }
116 }
117 contacts.removeAllViews();
118 List<Contact> contactsList = new ArrayList<Contact>();
119 for (Account account : xmppConnectionService.getAccounts()) {
120 for (Contact contact : account.getRoster().getContacts()) {
121 if (!displayedContacts.contains(contact)
122 && (contact.showInRoster())) {
123 contactsList.add(contact);
124 }
125 }
126 }
127
128 Collections.sort(contactsList, new Comparator<Contact>() {
129 @Override
130 public int compare(Contact lhs, Contact rhs) {
131 return lhs.getDisplayName().compareToIgnoreCase(
132 rhs.getDisplayName());
133 }
134 });
135
136 for (int i = 0; i < contactsList.size(); ++i) {
137 final Contact contact = contactsList.get(i);
138 View view = createContactView(contact.getDisplayName(),
139 contact.getJid(),
140 contact.getImage(48, getApplicationContext()));
141 view.setOnClickListener(new OnClickListener() {
142
143 @Override
144 public void onClick(View v) {
145 Conversation conversation = xmppConnectionService
146 .findOrCreateConversation(contact.getAccount(),
147 contact.getJid(), false);
148 share(conversation);
149 }
150 });
151 contacts.addView(view);
152 }
153 }
154
155 private void share(final Conversation conversation) {
156 String sharedText = null;
157 if (isImage) {
158 final Uri uri = (Uri) getIntent().getParcelableExtra(
159 Intent.EXTRA_STREAM);
160 selectPresence(conversation, new OnPresenceSelected() {
161 @Override
162 public void onPresenceSelected() {
163 Toast.makeText(getApplicationContext(),
164 getText(R.string.preparing_image),
165 Toast.LENGTH_LONG).show();
166 ShareWithActivity.this.xmppConnectionService
167 .attachImageToConversation(conversation, uri,
168 attachImageCallback);
169 switchToConversation(conversation, null, true);
170 finish();
171 }
172 });
173
174 } else {
175 sharedText = getIntent().getStringExtra(Intent.EXTRA_TEXT);
176 switchToConversation(conversation, sharedText, true);
177 finish();
178 }
179
180 }
181
182}