diff --git a/res/drawable/grey.xml b/res/drawable/grey.xml
new file mode 100644
index 00000000..bdb9383f
--- /dev/null
+++ b/res/drawable/grey.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/greybackground.xml b/res/drawable/greybackground.xml
new file mode 100644
index 00000000..529af5e8
--- /dev/null
+++ b/res/drawable/greybackground.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/res/layout/share_with.xml b/res/layout/share_with.xml
new file mode 100644
index 00000000..ae73a688
--- /dev/null
+++ b/res/layout/share_with.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 646ec4c5..937f5570 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -25,4 +25,5 @@
The server %s presented you with an unstrusted, possible self signed, certificate.
Server Info
Register new account on server
+ Share with
diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java
index 57cb60b9..9a5cbc0c 100644
--- a/src/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/eu/siacs/conversations/services/XmppConnectionService.java
@@ -398,7 +398,7 @@ public class XmppConnectionService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
- Log.d(LOGTAG,"calling start service. caller was:"+intent.getAction());
+ //Log.d(LOGTAG,"calling start service. caller was:"+intent.getAction());
ConnectivityManager cm = (ConnectivityManager) getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
@@ -670,7 +670,7 @@ public class XmppConnectionService extends Service {
return packet;
}
- public void getRoster(Account account,
+ private void getRoster(Account account,
final OnRosterFetchedListener listener) {
List contacts = databaseBackend.getContactsByAccount(account);
for (int i = 0; i < contacts.size(); ++i) {
@@ -680,6 +680,14 @@ public class XmppConnectionService extends Service {
listener.onRosterFetched(contacts);
}
}
+
+ public List getRoster(Account account) {
+ List contacts = databaseBackend.getContactsByAccount(account);
+ for (int i = 0; i < contacts.size(); ++i) {
+ contacts.get(i).setAccount(account);
+ }
+ return contacts;
+ }
public void updateRoster(final Account account,
final OnRosterFetchedListener listener) {
diff --git a/src/eu/siacs/conversations/ui/ConversationActivity.java b/src/eu/siacs/conversations/ui/ConversationActivity.java
index e471d46d..1577fdc5 100644
--- a/src/eu/siacs/conversations/ui/ConversationActivity.java
+++ b/src/eu/siacs/conversations/ui/ConversationActivity.java
@@ -11,7 +11,6 @@ import eu.siacs.conversations.entities.Contact;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.utils.UIHelper;
-import android.net.Uri;
import android.os.Bundle;
import android.app.AlertDialog;
import android.app.FragmentTransaction;
@@ -42,6 +41,7 @@ public class ConversationActivity extends XmppActivity {
public static final String VIEW_CONVERSATION = "viewConversation";
public static final String CONVERSATION = "conversationUuid";
+ public static final String TEXT = "text";
public static final int REQUEST_SEND_MESSAGE = 0x75441;
public static final int REQUEST_DECRYPT_PGP = 0x76783;
@@ -437,7 +437,8 @@ public class ConversationActivity extends XmppActivity {
}
}
paneShouldBeOpen = false;
- swapConversationFragment();
+ String text = getIntent().getExtras().getString(TEXT, null);
+ swapConversationFragment().setText(text);
}
} else {
if (xmppConnectionService.getAccounts().size() == 0) {
diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java
index 2aabec87..23b17077 100644
--- a/src/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/eu/siacs/conversations/ui/ConversationFragment.java
@@ -1,6 +1,5 @@
package eu.siacs.conversations.ui;
-import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
@@ -19,7 +18,6 @@ import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.entities.MucOptions;
import eu.siacs.conversations.entities.MucOptions.OnRenameListener;
import eu.siacs.conversations.services.XmppConnectionService;
-import eu.siacs.conversations.utils.PhoneHelper;
import eu.siacs.conversations.utils.UIHelper;
import android.app.AlertDialog;
import android.app.Fragment;
@@ -30,9 +28,7 @@ import android.content.IntentSender;
import android.content.SharedPreferences;
import android.content.IntentSender.SendIntentException;
import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.graphics.Typeface;
-import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
@@ -63,6 +59,7 @@ public class ConversationFragment extends Fragment {
protected String queuedPqpMessage = null;
private EditText chatMsg;
+ private String pastedText = null;
protected Bitmap selfBitmap;
@@ -153,6 +150,11 @@ public class ConversationFragment extends Fragment {
final View view = inflater.inflate(R.layout.fragment_conversation,
container, false);
chatMsg = (EditText) view.findViewById(R.id.textinput);
+
+ if (pastedText!=null) {
+ chatMsg.setText(pastedText);
+ }
+
ImageButton sendButton = (ImageButton) view
.findViewById(R.id.textSendButton);
sendButton.setOnClickListener(this.sendMsgListener);
@@ -640,4 +642,8 @@ public class ConversationFragment extends Fragment {
}
}
+
+ public void setText(String text) {
+ this.pastedText = text;
+ }
}
diff --git a/src/eu/siacs/conversations/ui/ManageAccountActivity.java b/src/eu/siacs/conversations/ui/ManageAccountActivity.java
index 0d3adc85..22f7c78f 100644
--- a/src/eu/siacs/conversations/ui/ManageAccountActivity.java
+++ b/src/eu/siacs/conversations/ui/ManageAccountActivity.java
@@ -289,6 +289,8 @@ public class ManageAccountActivity extends XmppActivity {
XmppConnection xmpp = selectedAccountForActionMode.getXmppConnection();
long connectionAge = (SystemClock.elapsedRealtime() - xmpp.lastConnect) / 60000;
long sessionAge = (SystemClock.elapsedRealtime() - xmpp.lastSessionStarted) / 60000;
+ long connectionAgeHours = connectionAge / 60;
+ long sessionAgeHours = sessionAge / 60;
View view = (View) getLayoutInflater().inflate(R.layout.server_info, null);
TextView connection = (TextView) view.findViewById(R.id.connection);
TextView session = (TextView) view.findViewById(R.id.session);
@@ -299,13 +301,21 @@ public class ManageAccountActivity extends XmppActivity {
TextView roster = (TextView) view.findViewById(R.id.roster);
pcks_received.setText(""+xmpp.getReceivedStanzas());
pcks_sent.setText(""+xmpp.getSentStanzas());
- connection.setText(connectionAge+" mins");
+ if (connectionAgeHours >= 2) {
+ connection.setText(connectionAgeHours+" hours");
+ } else {
+ connection.setText(connectionAge+" mins");
+ }
if (xmpp.hasFeatureStreamManagment()) {
- session.setText(sessionAge+" mins");
+ if (sessionAgeHours >= 2) {
+ session.setText(sessionAgeHours+" hours");
+ } else {
+ session.setText(sessionAge+" mins");
+ }
stream.setText("Yes");
} else {
stream.setText("No");
- session.setText(connectionAge+" mins");
+ session.setText(connection.getText());
}
if (xmpp.hasFeaturesCarbon()) {
carbon.setText("Yes");
diff --git a/src/eu/siacs/conversations/ui/MucDetailsActivity.java b/src/eu/siacs/conversations/ui/MucDetailsActivity.java
index 5bd3556c..478397e7 100644
--- a/src/eu/siacs/conversations/ui/MucDetailsActivity.java
+++ b/src/eu/siacs/conversations/ui/MucDetailsActivity.java
@@ -64,26 +64,6 @@ public class MucDetailsActivity extends XmppActivity {
membersView = (LinearLayout) findViewById(R.id.muc_members);
mMoreDetails = (LinearLayout) findViewById(R.id.muc_more_details);
mMoreDetails.setVisibility(View.GONE);
- /*contactsAdapter = new ArrayAdapter(this,
- R.layout.contact, users) {
- @Override
- public View getView(int position, View view, ViewGroup parent) {
- LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- User contact = getItem(position);
- if (view == null) {
- view = (View) inflater.inflate(R.layout.contact, null);
- }
-
- ((TextView) view.findViewById(R.id.contact_display_name))
- .setText(getItem(position).getName());
- TextView role = (TextView) view.findViewById(R.id.contact_jid);
- role.setText(getReadableRole(contact.getRole()));
- ImageView imageView = (ImageView) view
- .findViewById(R.id.contact_photo);
- imageView.setImageBitmap(UIHelper.getContactPictureByName(contact.getName(), 90));
- return view;
- }
- };*/
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
diff --git a/src/eu/siacs/conversations/ui/NewConversationActivity.java b/src/eu/siacs/conversations/ui/NewConversationActivity.java
index e275cea7..537e6c51 100644
--- a/src/eu/siacs/conversations/ui/NewConversationActivity.java
+++ b/src/eu/siacs/conversations/ui/NewConversationActivity.java
@@ -6,7 +6,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
-import java.util.Locale;
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account;
@@ -14,11 +13,9 @@ import eu.siacs.conversations.entities.Contact;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.utils.UIHelper;
import eu.siacs.conversations.utils.Validator;
-import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@@ -230,19 +227,7 @@ public class NewConversationActivity extends XmppActivity {
Conversation conversation = xmppConnectionService
.findOrCreateConversation(account, contact.getJid(), muc);
- switchToConversation(conversation);
- }
-
- public void switchToConversation(Conversation conversation) {
- Intent viewConversationIntent = new Intent(this,
- ConversationActivity.class);
- viewConversationIntent.setAction(Intent.ACTION_VIEW);
- viewConversationIntent.putExtra(ConversationActivity.CONVERSATION,
- conversation.getUuid());
- viewConversationIntent.setType(ConversationActivity.VIEW_CONVERSATION);
- viewConversationIntent.setFlags(viewConversationIntent.getFlags()
- | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(viewConversationIntent);
+ switchToConversation(conversation,null);
}
@Override
@@ -265,12 +250,14 @@ public class NewConversationActivity extends XmppActivity {
@Override
public void onClick(DialogInterface dialog, int which) {
Conversation conversation = xmppConnectionService.findOrCreateConversation(accounts.get(which), finalJid, false);
- switchToConversation(conversation);
+ switchToConversation(conversation,null);
+ finish();
}
}).show();
} else {
Conversation conversation = xmppConnectionService.findOrCreateConversation(this.accounts.get(0), jid, false);
- switchToConversation(conversation);
+ switchToConversation(conversation,null);
+ finish();
}
}
}
@@ -282,24 +269,10 @@ public class NewConversationActivity extends XmppActivity {
}
this.rosterContacts.clear();
for (int i = 0; i < accounts.size(); ++i) {
- xmppConnectionService.getRoster(accounts.get(i),
- new OnRosterFetchedListener() {
-
- @Override
- public void onRosterFetched(List roster) {
- rosterContacts.addAll(roster);
- runOnUiThread(new Runnable() {
-
- @Override
- public void run() {
- updateAggregatedContacts();
- }
- });
-
- }
- });
- }
+ rosterContacts.addAll(xmppConnectionService.getRoster(accounts.get(i)));
}
+ updateAggregatedContacts();
+ }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
diff --git a/src/eu/siacs/conversations/ui/ShareWithActivity.java b/src/eu/siacs/conversations/ui/ShareWithActivity.java
new file mode 100644
index 00000000..81616212
--- /dev/null
+++ b/src/eu/siacs/conversations/ui/ShareWithActivity.java
@@ -0,0 +1,128 @@
+package eu.siacs.conversations.ui;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.entities.Contact;
+import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.utils.UIHelper;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+public class ShareWithActivity extends XmppActivity {
+
+ private LinearLayout conversations;
+ private LinearLayout contacts;
+
+ private OnClickListener click = new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+
+ }
+ };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.share_with);
+ setTitle("Share with Conversation");
+
+ contacts = (LinearLayout) findViewById(R.id.contacts);
+ conversations = (LinearLayout) findViewById(R.id.conversations);
+
+ }
+
+
+ public View createContactView(String name, String msgTxt, Bitmap bm) {
+ View view = (View) getLayoutInflater().inflate(R.layout.contact, null);
+ view.setBackgroundResource(R.drawable.greybackground);
+ TextView contactName =(TextView) view.findViewById(R.id.contact_display_name);
+ contactName.setText(name);
+ TextView msg = (TextView) view.findViewById(R.id.contact_jid);
+ msg.setText(msgTxt);
+ ImageView imageView = (ImageView) view.findViewById(R.id.contact_photo);
+ imageView.setImageBitmap(bm);
+ return view;
+ }
+
+
+
+ @Override
+ void onBackendConnected() {
+ Set displayedContacts = new HashSet();
+ conversations.removeAllViews();
+ List convList = xmppConnectionService.getConversations();
+ Collections.sort(convList, new Comparator() {
+ @Override
+ public int compare(Conversation lhs, Conversation rhs) {
+ return (int) (rhs.getLatestMessage().getTimeSent() - lhs.getLatestMessage().getTimeSent());
+ }
+ });
+ for(final Conversation conversation : convList) {
+ View view = createContactView(conversation.getName(), conversation.getLatestMessage().getBody().trim(), UIHelper.getContactPicture(conversation.getContact(),conversation.getName(), 90,this.getApplicationContext()));
+ view.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ String sharedText = getIntent().getStringExtra(Intent.EXTRA_TEXT);
+ switchToConversation(conversation, sharedText);
+ finish();
+ }
+ });
+ conversations.addView(view);
+ if (conversation.getContact() != null) {
+ displayedContacts.add(conversation.getContact().getUuid());
+ }
+ }
+ contacts.removeAllViews();
+ final List contactsList = new ArrayList();
+ for(Account account : xmppConnectionService.getAccounts()) {
+ for(final Contact contact : xmppConnectionService.getRoster(account)) {
+ if (!displayedContacts.contains(contact.getUuid())) {
+ contactsList.add(contact);
+ }
+ }
+ }
+
+ Collections.sort(contactsList, new Comparator() {
+ @Override
+ public int compare(Contact lhs, Contact rhs) {
+ return lhs.getDisplayName().compareToIgnoreCase(rhs.getDisplayName());
+ }
+ });
+
+ for(int i = 0; i < contactsList.size(); ++i) {
+ final Contact con = contactsList.get(i);
+ View view = createContactView(con.getDisplayName(), con.getJid(), UIHelper.getContactPicture(con,null, 90,this.getApplicationContext()));
+ view.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ String sharedText = getIntent().getStringExtra(Intent.EXTRA_TEXT);
+ Conversation conversation = xmppConnectionService.findOrCreateConversation(con.getAccount(), con.getJid(), false);
+ switchToConversation(conversation, sharedText);
+ finish();
+ }
+ });
+ contacts.addView(view);
+ }
+ }
+
+}
diff --git a/src/eu/siacs/conversations/ui/XmppActivity.java b/src/eu/siacs/conversations/ui/XmppActivity.java
index 1596a53a..dc8c3d5d 100644
--- a/src/eu/siacs/conversations/ui/XmppActivity.java
+++ b/src/eu/siacs/conversations/ui/XmppActivity.java
@@ -1,6 +1,7 @@
package eu.siacs.conversations.ui;
import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.services.XmppConnectionService.XmppConnectionBinder;
import eu.siacs.conversations.utils.ExceptionHelper;
@@ -103,4 +104,19 @@ public abstract class XmppActivity extends Activity {
super.onCreate(savedInstanceState);
ExceptionHelper.init(getApplicationContext());
}
+
+ public void switchToConversation(Conversation conversation, String text) {
+ Intent viewConversationIntent = new Intent(this,
+ ConversationActivity.class);
+ viewConversationIntent.setAction(Intent.ACTION_VIEW);
+ viewConversationIntent.putExtra(ConversationActivity.CONVERSATION,
+ conversation.getUuid());
+ if (text!=null) {
+ viewConversationIntent.putExtra(ConversationActivity.TEXT, text);
+ }
+ viewConversationIntent.setType(ConversationActivity.VIEW_CONVERSATION);
+ viewConversationIntent.setFlags(viewConversationIntent.getFlags()
+ | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(viewConversationIntent);
+ }
}
diff --git a/src/eu/siacs/conversations/xmpp/XmppConnection.java b/src/eu/siacs/conversations/xmpp/XmppConnection.java
index 5a29ad62..677c0ba6 100644
--- a/src/eu/siacs/conversations/xmpp/XmppConnection.java
+++ b/src/eu/siacs/conversations/xmpp/XmppConnection.java
@@ -720,7 +720,7 @@ public class XmppConnection implements Runnable {
if (this.streamFeatures==null) {
return false;
} else {
- return this.streamFeatures.hasChild("has");
+ return this.streamFeatures.hasChild("sm");
}
}