aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2016-03-16 10:46:33 +0100
committerDaniel Gultsch <daniel@gultsch.de>2016-03-16 10:46:33 +0100
commit48be5af55ff22c666a57fe2c2de10a147b6f7958 (patch)
treee12ca5e7c1e7459bb2856c051a6a7483eaf3baac /src/main/java/eu/siacs/conversations
parent323d31ba05c3293a442932b4fde064ee401730aa (diff)
reworked sharewith activity to stay open during sharing
closing the activity prematuraly caused uri permissions to be revoked
Diffstat (limited to 'src/main/java/eu/siacs/conversations')
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java95
-rw-r--r--src/main/java/eu/siacs/conversations/ui/XmppActivity.java1
2 files changed, 66 insertions, 30 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java b/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java
index 09bbe0df1..a710a5589 100644
--- a/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java
@@ -17,17 +17,24 @@ import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
import eu.siacs.conversations.Config;
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.Message;
+import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.ui.adapter.ConversationAdapter;
import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid;
-public class ShareWithActivity extends XmppActivity {
+public class ShareWithActivity extends XmppActivity implements XmppConnectionService.OnConversationUpdate {
+
+ @Override
+ public void onConversationUpdate() {
+ refreshUi();
+ }
private class Share {
public List<Uri> uris = new ArrayList<>();
@@ -36,14 +43,17 @@ public class ShareWithActivity extends XmppActivity {
public String contact;
public String text;
public String uuid;
+ public boolean multiple = false;
}
private Share share;
private static final int REQUEST_START_NEW_CONVERSATION = 0x0501;
private ListView mListView;
+ private ConversationAdapter mAdapter;
private List<Conversation> mConversations = new ArrayList<>();
private Toast mToast;
+ private AtomicInteger attachmentCounter = new AtomicInteger(0);
private UiCallback<Message> attachFileCallback = new UiCallback<Message>() {
@@ -59,26 +69,52 @@ public class ShareWithActivity extends XmppActivity {
runOnUiThread(new Runnable() {
@Override
public void run() {
- if (mToast != null) {
- mToast.cancel();
- }
- if (share.uuid != null) {
- mToast = Toast.makeText(getApplicationContext(),
- getString(share.image ? R.string.shared_image_with_x : R.string.shared_file_with_x,message.getConversation().getName()),
- Toast.LENGTH_SHORT);
- mToast.show();
+ if (attachmentCounter.decrementAndGet() <=0 ) {
+ int resId;
+ if (share.image && share.multiple) {
+ resId = R.string.shared_images_with_x;
+ } else if (share.image) {
+ resId = R.string.shared_image_with_x;
+ } else {
+ resId = R.string.shared_file_with_x;
+ }
+ replaceToast(getString(resId, message.getConversation().getName()));
+ if (share.uuid != null) {
+ finish();
+ } else {
+ switchToConversation(message.getConversation());
+ }
}
}
});
}
@Override
- public void error(int errorCode, Message object) {
- // TODO Auto-generated method stub
-
+ public void error(final int errorCode, Message object) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ replaceToast(getString(errorCode));
+ if (attachmentCounter.decrementAndGet() <=0 ) {
+ finish();
+ }
+ }
+ });
}
};
+ protected void hideToast() {
+ if (mToast != null) {
+ mToast.cancel();
+ }
+ }
+
+ protected void replaceToast(String msg) {
+ hideToast();
+ mToast = Toast.makeText(this, msg ,Toast.LENGTH_LONG);
+ mToast.show();
+ }
+
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_START_NEW_CONVERSATION
@@ -107,8 +143,7 @@ public class ShareWithActivity extends XmppActivity {
setTitle(getString(R.string.title_activity_sharewith));
mListView = (ListView) findViewById(R.id.choose_conversation_list);
- ConversationAdapter mAdapter = new ConversationAdapter(this,
- this.mConversations);
+ mAdapter = new ConversationAdapter(this, this.mConversations);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@@ -191,8 +226,7 @@ public class ShareWithActivity extends XmppActivity {
share();
return;
}
- xmppConnectionService.populateWithOrderedConversations(mConversations,
- this.share != null && this.share.uris.size() == 0);
+ refreshUiReal();
}
private void share() {
@@ -224,6 +258,7 @@ public class ShareWithActivity extends XmppActivity {
}
private void share(final Conversation conversation) {
+ mListView.setEnabled(false);
if (conversation.getNextEncryption() == Message.ENCRYPTION_PGP && !hasPgp()) {
if (share.uuid == null) {
showInstallPgpDialog();
@@ -237,29 +272,21 @@ public class ShareWithActivity extends XmppActivity {
OnPresenceSelected callback = new OnPresenceSelected() {
@Override
public void onPresenceSelected() {
+ attachmentCounter.set(share.uris.size());
if (share.image) {
- mToast = Toast.makeText(getApplicationContext(),
- getText(R.string.preparing_image),
- Toast.LENGTH_LONG);
- mToast.show();
+ share.multiple = share.uris.size() > 1;
+ replaceToast(getString(share.multiple ? R.string.preparing_images : R.string.preparing_image));
for (Iterator<Uri> i = share.uris.iterator(); i.hasNext(); i.remove()) {
ShareWithActivity.this.xmppConnectionService
.attachImageToConversation(conversation, i.next(),
attachFileCallback);
}
} else {
- mToast = Toast.makeText(getApplicationContext(),
- getText(R.string.preparing_file),
- Toast.LENGTH_LONG);
- mToast.show();
+ replaceToast(getString(R.string.preparing_file));
ShareWithActivity.this.xmppConnectionService
.attachFileToConversation(conversation, share.uris.get(0),
attachFileCallback);
}
- if (share.uuid == null) {
- switchToConversation(conversation, null, true);
- }
- finish();
}
};
if (conversation.getAccount().httpUploadAvailable()) {
@@ -269,13 +296,21 @@ public class ShareWithActivity extends XmppActivity {
}
} else {
switchToConversation(conversation, this.share.text, true);
- finish();
}
}
public void refreshUiReal() {
- //nothing to do. This Activity doesn't implement any listeners
+ xmppConnectionService.populateWithOrderedConversations(mConversations, this.share != null && this.share.uris.size() == 0);
+ mAdapter.notifyDataSetChanged();
}
+ @Override
+ public void onBackPressed() {
+ if (attachmentCounter.get() >= 1) {
+ replaceToast(getString(R.string.sharing_files_please_wait));
+ } else {
+ super.onBackPressed();
+ }
+ }
}
diff --git a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java
index baf40b223..c7bf738c7 100644
--- a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java
@@ -1174,6 +1174,7 @@ public abstract class XmppActivity extends Activity {
} else {
if (cancelPotentialWork(message, imageView)) {
imageView.setBackgroundColor(0xff333333);
+ imageView.setImageDrawable(null);
final BitmapWorkerTask task = new BitmapWorkerTask(imageView);
final AsyncDrawable asyncDrawable = new AsyncDrawable(
getResources(), null, task);