From 9548f43998a6f49ab8c9672618dbb5553873a456 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 11 Mar 2016 09:01:27 +0100 Subject: close cursor in caps db query --- src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index b975a001..2ce73796 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -415,8 +415,10 @@ public class DatabaseBackend extends SQLiteOpenHelper { Cursor cursor = db.query(ServiceDiscoveryResult.TABLENAME, null, ServiceDiscoveryResult.HASH + "=? AND " + ServiceDiscoveryResult.VER + "=?", selectionArgs, null, null, null); - if (cursor.getCount() == 0) + if (cursor.getCount() == 0) { + cursor.close(); return null; + } cursor.moveToFirst(); ServiceDiscoveryResult result = null; -- cgit v1.2.3 From 817d344521835622a625c8263141dc1148fff451 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 11 Mar 2016 09:01:40 +0100 Subject: log reason for bind failure --- src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 6be220c7..72996e4b 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -915,11 +915,11 @@ public class XmppConnection implements Runnable { sendPostBindInitialization(); } } else { - Log.d(Config.LOGTAG, account.getJid() + ": disconnecting because of bind failure"); + Log.d(Config.LOGTAG, account.getJid() + ": disconnecting because of bind failure. (no jid)"); disconnect(true); } } else { - Log.d(Config.LOGTAG, account.getJid() + ": disconnecting because of bind failure"); + Log.d(Config.LOGTAG, account.getJid() + ": disconnecting because of bind failure ("+packet.toString()); disconnect(true); } } -- cgit v1.2.3 From 290f53f4a6ca4688df04774f63f35384a883763f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 13 Mar 2016 17:38:59 +0100 Subject: fixed recursive call instead of call to super in PublishProfileActivity --- .../eu/siacs/conversations/ui/PublishProfilePictureActivity.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java index ee70ee43..88645c4a 100644 --- a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java @@ -4,7 +4,6 @@ import android.app.PendingIntent; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.view.Menu; @@ -20,13 +19,10 @@ import android.widget.Toast; import com.soundcloud.android.crop.Crop; import java.io.File; -import java.io.FileNotFoundException; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; -import eu.siacs.conversations.persistance.FileBackend; -import eu.siacs.conversations.utils.ExifHelper; import eu.siacs.conversations.utils.FileUtils; import eu.siacs.conversations.utils.PhoneHelper; import eu.siacs.conversations.xmpp.pep.Avatar; @@ -183,7 +179,7 @@ public class PublishProfilePictureActivity extends XmppActivity { } return true; } else { - return onOptionsItemSelected(item); + return super.onOptionsItemSelected(item); } } -- cgit v1.2.3 From 1153e6120d5e04b6ccb30ec3eae8a6ae0acc7bc9 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 13 Mar 2016 17:41:38 +0100 Subject: added logging in case fragment wasn't attached --- src/main/java/eu/siacs/conversations/ui/ConversationActivity.java | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index aee923f6..bb85439a 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -1570,9 +1570,14 @@ public class ConversationActivity extends XmppActivity protected void refreshUiReal() { updateConversationList(); if (conversationList.size() > 0) { + if (!this.mConversationFragment.isAdded()) { + Log.d(Config.LOGTAG,"fragment NOT added to activity. detached="+Boolean.toString(mConversationFragment.isDetached())); + } ConversationActivity.this.mConversationFragment.updateMessages(); updateActionBarTitle(); invalidateOptionsMenu(); + } else { + Log.d(Config.LOGTAG,"not updating conversations fragment because conversations list size was 0"); } } -- cgit v1.2.3 From 0af8ee341c315481930054fd5930b60868ea6fea Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 13 Mar 2016 17:42:17 +0100 Subject: simplified getUsers(max) code --- .../java/eu/siacs/conversations/entities/MucOptions.java | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/eu/siacs/conversations/entities/MucOptions.java b/src/main/java/eu/siacs/conversations/entities/MucOptions.java index 4fe26743..db27810f 100644 --- a/src/main/java/eu/siacs/conversations/entities/MucOptions.java +++ b/src/main/java/eu/siacs/conversations/entities/MucOptions.java @@ -345,17 +345,8 @@ public class MucOptions { } public List getUsers(int max) { - ArrayList users = new ArrayList<>(); - int i = 1; - for(User user : this.users.values()) { - users.add(user); - if (i >= max) { - break; - } else { - ++i; - } - } - return users; + ArrayList users = getUsers(); + return users.subList(0, Math.min(max, users.size())); } public int getUserCount() { -- cgit v1.2.3 From eaddfa7fd1bcbe03cc6c4c757f91af1040f876fa Mon Sep 17 00:00:00 2001 From: fiaxh Date: Tue, 15 Mar 2016 11:09:28 +0100 Subject: Check if path for URI is accessible The path extracted from the Cursor might not be accessible for Conversations. FileUtils accesses URI information through the ContentProvider, so this wouldn't be noticed. Fixes sharing from open-keychain's TemporaryContentProvider --- src/main/java/eu/siacs/conversations/utils/FileUtils.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/eu/siacs/conversations/utils/FileUtils.java b/src/main/java/eu/siacs/conversations/utils/FileUtils.java index ad8b8640..6e75d41c 100644 --- a/src/main/java/eu/siacs/conversations/utils/FileUtils.java +++ b/src/main/java/eu/siacs/conversations/utils/FileUtils.java @@ -10,6 +10,8 @@ import android.os.Environment; import android.provider.DocumentsContract; import android.provider.MediaStore; +import java.io.File; + public class FileUtils { /** @@ -77,7 +79,14 @@ public class FileUtils { } // MediaStore (and general) else if ("content".equalsIgnoreCase(uri.getScheme())) { - return getDataColumn(context, uri, null, null); + String path = getDataColumn(context, uri, null, null); + if (path != null) { + File file = new File(path); + if (!file.canRead()) { + return null; + } + } + return path; } // File else if ("file".equalsIgnoreCase(uri.getScheme())) { -- cgit v1.2.3 From 48be5af55ff22c666a57fe2c2de10a147b6f7958 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 16 Mar 2016 10:46:33 +0100 Subject: reworked sharewith activity to stay open during sharing closing the activity prematuraly caused uri permissions to be revoked --- .../siacs/conversations/ui/ShareWithActivity.java | 95 +++++++++++++++------- .../eu/siacs/conversations/ui/XmppActivity.java | 1 + 2 files changed, 66 insertions(+), 30 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java b/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java index 09bbe0df..a710a558 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 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 mConversations = new ArrayList<>(); private Toast mToast; + private AtomicInteger attachmentCounter = new AtomicInteger(0); private UiCallback attachFileCallback = new UiCallback() { @@ -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 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 baf40b22..c7bf738c 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); -- cgit v1.2.3 From b17ca3543fdfd5a0265e0f64ee24a4ecd7b70741 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 16 Mar 2016 18:09:19 +0100 Subject: made it possible to share text files --- .../java/eu/siacs/conversations/ui/ShareWithActivity.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java b/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java index a710a558..4ec43c27 100644 --- a/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java @@ -181,23 +181,24 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer return; } final String type = intent.getType(); - Log.d(Config.LOGTAG, "action: "+intent.getAction()+ ", type:"+type); + final String action = intent.getAction(); + Log.d(Config.LOGTAG, "action: "+action+ ", type:"+type); share.uuid = intent.getStringExtra("uuid"); - if (Intent.ACTION_SEND.equals(intent.getAction())) { - final Uri uri = getIntent().getParcelableExtra(Intent.EXTRA_STREAM); - if (type != null && uri != null && !type.equalsIgnoreCase("text/plain")) { + if (Intent.ACTION_SEND.equals(action)) { + final String text = intent.getStringExtra(Intent.EXTRA_TEXT); + final Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM); + if (type != null && uri != null && text == null) { this.share.uris.clear(); this.share.uris.add(uri); this.share.image = type.startsWith("image/") || isImage(uri); } else { - this.share.text = getIntent().getStringExtra(Intent.EXTRA_TEXT); + this.share.text = text; } - } else if (Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) { + } else if (Intent.ACTION_SEND_MULTIPLE.equals(action)) { this.share.image = type != null && type.startsWith("image/"); if (!this.share.image) { return; } - this.share.uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); } if (xmppConnectionServiceBound) { -- cgit v1.2.3