Merge branch 'siacs/master' into development
This commit is contained in:
commit
5ae161a593
10 changed files with 104 additions and 60 deletions
|
@ -1,5 +1,8 @@
|
|||
###Changelog
|
||||
|
||||
####Version 1.11.1
|
||||
* fixed some bugs when sharing files with Conversations
|
||||
|
||||
####Version 1.11.0
|
||||
* OMEMO encrypted conferences
|
||||
* resend failed filetransfers automatically
|
||||
|
|
|
@ -61,8 +61,8 @@ android {
|
|||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 23
|
||||
versionCode 132
|
||||
versionName "1.11.0"
|
||||
versionCode 133
|
||||
versionName "1.11.1"
|
||||
archivesBaseName += "-$versionName"
|
||||
applicationId "eu.siacs.conversations"
|
||||
}
|
||||
|
|
|
@ -345,17 +345,8 @@ public class MucOptions {
|
|||
}
|
||||
|
||||
public List<User> getUsers(int max) {
|
||||
ArrayList<User> users = new ArrayList<>();
|
||||
int i = 1;
|
||||
for(User user : this.users.values()) {
|
||||
users.add(user);
|
||||
if (i >= max) {
|
||||
break;
|
||||
} else {
|
||||
++i;
|
||||
}
|
||||
}
|
||||
return users;
|
||||
ArrayList<User> users = getUsers();
|
||||
return users.subList(0, Math.min(max, users.size()));
|
||||
}
|
||||
|
||||
public int getUserCount() {
|
||||
|
|
|
@ -1651,9 +1651,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");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,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;
|
||||
|
@ -21,13 +20,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;
|
||||
|
@ -184,7 +180,7 @@ public class PublishProfilePictureActivity extends XmppActivity {
|
|||
}
|
||||
return true;
|
||||
} else {
|
||||
return onOptionsItemSelected(item);
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
@ -146,23 +181,24 @@ public class ShareWithActivity extends XmppActivity {
|
|||
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) {
|
||||
|
@ -191,8 +227,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 +259,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 +273,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 +297,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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1177,6 +1177,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);
|
||||
|
|
|
@ -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())) {
|
||||
|
|
|
@ -508,8 +508,8 @@
|
|||
<string name="pref_away_when_screen_off_summary">Setzt deinen Status auf \"abwesend\", solange dein Bildschirm abgeschaltet ist</string>
|
||||
<string name="pref_xa_on_silent_mode">Nicht verfügbar bei Stummschaltung</string>
|
||||
<string name="pref_xa_on_silent_mode_summary">Setzt deinen Status auf \"nicht verfügbar\", solange dein Gerät lautlos ist</string>
|
||||
<string name="pref_treat_vibrate_as_silent">Behandle Vibration als stumm</string>
|
||||
<string name="pref_treat_vibrate_as_silent_summary">Setze deinen Status auf \"nicht verfügbar\" solange dein Gerät auf \"vibrieren\" ist.</string>
|
||||
<string name="pref_treat_vibrate_as_silent">Vibration als Lautlos behandeln</string>
|
||||
<string name="pref_treat_vibrate_as_silent_summary">Setzt deinen Status auf \"nicht verfügbar\", solange das Gerät auf Vibration geschaltet ist</string>
|
||||
<string name="hostname_example">xmpp.domain.de</string>
|
||||
<string name="action_add_account_with_certificate">Konto mit Zertifikat hinzufügen</string>
|
||||
<string name="unable_to_parse_certificate">Zertifikat kann nicht gelesen werden</string>
|
||||
|
@ -596,9 +596,9 @@
|
|||
<string name="conference_shutdown">Konferenz wurde geschlossen</string>
|
||||
<string name="conference_name">Konferenz-Name</string>
|
||||
<string name="invalid_conference_name">Ungültiger Konferenz-Name</string>
|
||||
<string name="check_x_filesize_on_host">%1$s-Größe auf %2$s prüfen</string>
|
||||
<string name="check_x_filesize_on_host">%1$s-Größe auf %2$s prüfen</string>
|
||||
<string name="contact_has_no_pgp_key">Pix-Art Messenger ist nicht in der Lage, deine Nachrichten zu verschlüsseln, weil dein Kontakt seinen Schlüssel nicht preisgibt.\n\n</string>
|
||||
<string name="no_keys_just_confirm">Du vertraust diesem Kontakt bereits. In dem du \'Fertig\' auswählst bestätigst Du, dass %s Teil dieser Konferenz ist.</string>
|
||||
<string name="no_keys_just_confirm">Du vertraust diesem Kontakt bereits. Durch Auswählen von \"Fertig\" bestätigst du, dass %s Teil dieser Konferenz ist.</string>
|
||||
<string name="select_image_and_crop">Bild auswählen und zuschneiden</string>
|
||||
<string name="this_account_is_disabled">Du hast diesen Account deaktiviert</string>
|
||||
|
||||
|
|
|
@ -72,6 +72,8 @@
|
|||
<string name="send_failed">delivery failed</string>
|
||||
<string name="send_rejected">rejected</string>
|
||||
<string name="preparing_image">Preparing image for transmission</string>
|
||||
<string name="preparing_images">Preparing images for transmission</string>
|
||||
<string name="sharing_files_please_wait">Sharing files. Please wait…</string>
|
||||
<string name="action_clear_history">Clear history</string>
|
||||
<string name="clear_conversation_history">Clear Conversation History</string>
|
||||
<string name="clear_histor_msg">Do you want to delete all messages within this Conversation?\n\n<b>Warning:</b> This will not influence messages stored on other devices or servers.</string>
|
||||
|
@ -594,6 +596,7 @@
|
|||
<string name="shared_file_with_x">Shared file with %s</string>
|
||||
<string name="shared_image_with_x">Shared image with %s</string>
|
||||
<string name="no_storage_permission">Pix-Art Messenger needs access to external storage</string>
|
||||
<string name="shared_images_with_x">Shared images with %s</string>
|
||||
<string name="sync_with_contacts">Synchronize with contacts</string>
|
||||
<string name="sync_with_contacts_long">Pix-Art Messenger wants to match your XMPP roster with your contacts to show their full names and avatars.\n\nPix-Art Messenger will only read your contacts and match them locally without uploading them to your server.\n\nYou will now be asked to grant permission to access your contacts.</string>
|
||||
<string name="certificate_information">Certificate Information</string>
|
||||
|
|
Reference in a new issue