Detailed changes
@@ -670,6 +670,12 @@ public class XmppConnectionService extends Service {
Log.d(Config.LOGTAG, "gcm push message arrived in service. extras=" + intent.getExtras());
pushedAccountHash = intent.getStringExtra("account");
break;
+ case Intent.ACTION_SEND:
+ Uri uri = intent.getData();
+ if (uri != null) {
+ Log.d(Config.LOGTAG, "received uri permission for "+uri.toString());
+ }
+ return START_STICKY;
}
}
synchronized (this) {
@@ -1601,6 +1601,7 @@ public class ConversationActivity extends XmppActivity
}
final Toast prepareFileToast = Toast.makeText(getApplicationContext(),getText(R.string.preparing_file), Toast.LENGTH_LONG);
prepareFileToast.show();
+ delegateUriPermissionsToService(uri);
xmppConnectionService.attachFileToConversation(conversation, uri, new UiInformableCallback<Message>() {
@Override
public void inform(final String text) {
@@ -1654,6 +1655,7 @@ public class ConversationActivity extends XmppActivity
}
final Toast prepareFileToast = Toast.makeText(getApplicationContext(),getText(R.string.preparing_image), Toast.LENGTH_LONG);
prepareFileToast.show();
+ delegateUriPermissionsToService(uri);
xmppConnectionService.attachImageToConversation(conversation, uri,
new UiCallback<Message>() {
@@ -816,7 +816,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
Toast.makeText(activity, activity.getString(R.string.no_permission_to_access_x, file.getAbsolutePath()), Toast.LENGTH_SHORT).show();
return;
}
- shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
String mime = message.getMimeType();
if (mime == null) {
mime = "*/*";
@@ -318,11 +318,15 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
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()) {
+ final Uri uri = i.next();
+ delegateUriPermissionsToService(uri);
xmppConnectionService.attachImageToConversation(conversation, i.next(), attachFileCallback);
}
} else {
replaceToast(getString(R.string.preparing_file));
- xmppConnectionService.attachFileToConversation(conversation, share.uris.get(0), attachFileCallback);
+ final Uri uri = share.uris.get(0);
+ delegateUriPermissionsToService(uri);
+ xmppConnectionService.attachFileToConversation(conversation, uri, attachFileCallback);
}
};
if (account.httpUploadAvailable()
@@ -525,6 +525,14 @@ public abstract class XmppActivity extends Activity {
startActivity(intent);
}
+ protected void delegateUriPermissionsToService(Uri uri) {
+ Intent intent = new Intent(this,XmppConnectionService.class);
+ intent.setAction(Intent.ACTION_SEND);
+ intent.setData(uri);
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ startService(intent);
+ }
+
protected void inviteToConversation(Conversation conversation) {
Intent intent = new Intent(getApplicationContext(),
ChooseContactActivity.class);