ShareWithActivity.java

  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}