do not attempt to download images when not connected
This commit is contained in:
parent
3372e50155
commit
0605390144
|
@ -268,5 +268,6 @@
|
||||||
<string name="using_account">using account %s</string>
|
<string name="using_account">using account %s</string>
|
||||||
<string name="checking_image">Checking image on HTTP host</string>
|
<string name="checking_image">Checking image on HTTP host</string>
|
||||||
<string name="image_file_deleted">The image file has been deleted</string>
|
<string name="image_file_deleted">The image file has been deleted</string>
|
||||||
|
<string name="not_connected_try_again">You are not connected. Try again later</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -12,7 +12,7 @@ public interface Downloadable {
|
||||||
public static final int STATUS_DOWNLOADING = 0x204;
|
public static final int STATUS_DOWNLOADING = 0x204;
|
||||||
public static final int STATUS_DELETED = 0x205;
|
public static final int STATUS_DELETED = 0x205;
|
||||||
|
|
||||||
public void start();
|
public boolean start();
|
||||||
|
|
||||||
public int getStatus();
|
public int getStatus();
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,9 @@ import javax.net.ssl.HttpsURLConnection;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import eu.siacs.conversations.Config;
|
||||||
import eu.siacs.conversations.entities.Downloadable;
|
import eu.siacs.conversations.entities.Downloadable;
|
||||||
import eu.siacs.conversations.entities.DownloadableFile;
|
import eu.siacs.conversations.entities.DownloadableFile;
|
||||||
import eu.siacs.conversations.entities.Message;
|
import eu.siacs.conversations.entities.Message;
|
||||||
|
@ -35,9 +37,14 @@ public class HttpConnection implements Downloadable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public boolean start() {
|
||||||
changeStatus(STATUS_DOWNLOADING);
|
if (mXmppConnectionService.hasInternetConnection()) {
|
||||||
new Thread(new FileDownloader()).start();
|
changeStatus(STATUS_DOWNLOADING);
|
||||||
|
new Thread(new FileDownloader()).start();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(Message message) {
|
public void init(Message message) {
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
package eu.siacs.conversations.http;
|
package eu.siacs.conversations.http;
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
import eu.siacs.conversations.entities.Message;
|
import eu.siacs.conversations.entities.Message;
|
||||||
import eu.siacs.conversations.entities.Message.ImageParams;
|
|
||||||
import eu.siacs.conversations.services.AbstractConnectionManager;
|
import eu.siacs.conversations.services.AbstractConnectionManager;
|
||||||
import eu.siacs.conversations.services.XmppConnectionService;
|
import eu.siacs.conversations.services.XmppConnectionService;
|
||||||
|
|
||||||
|
|
|
@ -13,12 +13,10 @@ import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.SystemClock;
|
|
||||||
import android.support.v4.app.NotificationCompat;
|
import android.support.v4.app.NotificationCompat;
|
||||||
import android.support.v4.app.TaskStackBuilder;
|
import android.support.v4.app.TaskStackBuilder;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
|
|
||||||
import eu.siacs.conversations.Config;
|
|
||||||
import eu.siacs.conversations.R;
|
import eu.siacs.conversations.R;
|
||||||
import eu.siacs.conversations.entities.Account;
|
import eu.siacs.conversations.entities.Account;
|
||||||
import eu.siacs.conversations.entities.Conversation;
|
import eu.siacs.conversations.entities.Conversation;
|
||||||
|
|
|
@ -346,15 +346,10 @@ public class XmppConnectionService extends Service {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.wakeLock.acquire();
|
this.wakeLock.acquire();
|
||||||
ConnectivityManager cm = (ConnectivityManager) getApplicationContext()
|
|
||||||
.getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
||||||
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
|
||||||
boolean isConnected = activeNetwork != null
|
|
||||||
&& activeNetwork.isConnected();
|
|
||||||
|
|
||||||
for (Account account : accounts) {
|
for (Account account : accounts) {
|
||||||
if (!account.isOptionSet(Account.OPTION_DISABLED)) {
|
if (!account.isOptionSet(Account.OPTION_DISABLED)) {
|
||||||
if (!isConnected) {
|
if (!hasInternetConnection()) {
|
||||||
account.setStatus(Account.STATUS_NO_INTERNET);
|
account.setStatus(Account.STATUS_NO_INTERNET);
|
||||||
if (statusListener != null) {
|
if (statusListener != null) {
|
||||||
statusListener.onStatusChanged(account);
|
statusListener.onStatusChanged(account);
|
||||||
|
@ -413,6 +408,13 @@ public class XmppConnectionService extends Service {
|
||||||
return START_STICKY;
|
return START_STICKY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasInternetConnection() {
|
||||||
|
ConnectivityManager cm = (ConnectivityManager) getApplicationContext()
|
||||||
|
.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
||||||
|
return activeNetwork != null && activeNetwork.isConnected();
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("TrulyRandom")
|
@SuppressLint("TrulyRandom")
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
|
@ -1873,8 +1875,8 @@ public class XmppConnectionService extends Service {
|
||||||
private class DeletedDownloadable implements Downloadable {
|
private class DeletedDownloadable implements Downloadable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public boolean start() {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -102,7 +102,8 @@ public class MessageAdapter extends ArrayAdapter<Message> {
|
||||||
}
|
}
|
||||||
boolean multiReceived = message.getConversation().getMode() == Conversation.MODE_MULTI
|
boolean multiReceived = message.getConversation().getMode() == Conversation.MODE_MULTI
|
||||||
&& message.getMergedStatus() <= Message.STATUS_RECEIVED;
|
&& message.getMergedStatus() <= Message.STATUS_RECEIVED;
|
||||||
if (message.getType() == Message.TYPE_IMAGE) {
|
if (message.getType() == Message.TYPE_IMAGE
|
||||||
|
|| message.getDownloadable() != null) {
|
||||||
ImageParams params = message.getImageParams();
|
ImageParams params = message.getImageParams();
|
||||||
if (params.size != 0) {
|
if (params.size != 0) {
|
||||||
filesize = params.size / 1024 + " KB";
|
filesize = params.size / 1024 + " KB";
|
||||||
|
@ -262,6 +263,20 @@ public class MessageAdapter extends ArrayAdapter<Message> {
|
||||||
viewHolder.messageBody.setTextIsSelectable(true);
|
viewHolder.messageBody.setTextIsSelectable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void displayDownloadableMessage(ViewHolder viewHolder,
|
||||||
|
final Message message) {
|
||||||
|
viewHolder.image.setVisibility(View.GONE);
|
||||||
|
viewHolder.messageBody.setVisibility(View.GONE);
|
||||||
|
viewHolder.download_button.setVisibility(View.VISIBLE);
|
||||||
|
viewHolder.download_button.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
startDonwloadable(message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void displayImageMessage(ViewHolder viewHolder,
|
private void displayImageMessage(ViewHolder viewHolder,
|
||||||
final Message message) {
|
final Message message) {
|
||||||
if (viewHolder.download_button != null) {
|
if (viewHolder.download_button != null) {
|
||||||
|
@ -474,20 +489,11 @@ public class MessageAdapter extends ArrayAdapter<Message> {
|
||||||
} else if (d != null
|
} else if (d != null
|
||||||
&& d.getStatus() == Downloadable.STATUS_CHECKING) {
|
&& d.getStatus() == Downloadable.STATUS_CHECKING) {
|
||||||
displayInfoMessage(viewHolder, R.string.checking_image);
|
displayInfoMessage(viewHolder, R.string.checking_image);
|
||||||
} else if (d != null && d.getStatus() == Downloadable.STATUS_DELETED) {
|
} else if (d != null
|
||||||
|
&& d.getStatus() == Downloadable.STATUS_DELETED) {
|
||||||
displayInfoMessage(viewHolder, R.string.image_file_deleted);
|
displayInfoMessage(viewHolder, R.string.image_file_deleted);
|
||||||
} else if (d != null && d.getStatus() == Downloadable.STATUS_OFFER) {
|
} else if (d != null && d.getStatus() == Downloadable.STATUS_OFFER) {
|
||||||
viewHolder.image.setVisibility(View.GONE);
|
displayDownloadableMessage(viewHolder, item);
|
||||||
viewHolder.messageBody.setVisibility(View.GONE);
|
|
||||||
viewHolder.download_button.setVisibility(View.VISIBLE);
|
|
||||||
viewHolder.download_button
|
|
||||||
.setOnClickListener(new OnClickListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
startDonwloadable(item);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else if ((item.getEncryption() == Message.ENCRYPTION_DECRYPTED)
|
} else if ((item.getEncryption() == Message.ENCRYPTION_DECRYPTED)
|
||||||
|| (item.getEncryption() == Message.ENCRYPTION_NONE)
|
|| (item.getEncryption() == Message.ENCRYPTION_NONE)
|
||||||
|| (item.getEncryption() == Message.ENCRYPTION_OTR)) {
|
|| (item.getEncryption() == Message.ENCRYPTION_OTR)) {
|
||||||
|
@ -525,13 +531,13 @@ public class MessageAdapter extends ArrayAdapter<Message> {
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean startDonwloadable(Message message) {
|
public void startDonwloadable(Message message) {
|
||||||
Downloadable downloadable = message.getDownloadable();
|
Downloadable downloadable = message.getDownloadable();
|
||||||
if (downloadable != null) {
|
if (downloadable != null) {
|
||||||
downloadable.start();
|
if (!downloadable.start()) {
|
||||||
return true;
|
Toast.makeText(activity, R.string.not_connected_try_again,
|
||||||
} else {
|
Toast.LENGTH_SHORT).show();
|
||||||
return false;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -875,17 +875,20 @@ public class JingleConnection implements Downloadable {
|
||||||
return this.transport;
|
return this.transport;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start() {
|
public boolean start() {
|
||||||
if (mJingleStatus == JINGLE_STATUS_INITIATED) {
|
if (account.getStatus() == Account.STATUS_ONLINE) {
|
||||||
new Thread(new Runnable() {
|
if (mJingleStatus == JINGLE_STATUS_INITIATED) {
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
sendAccept();
|
sendAccept();
|
||||||
}
|
}
|
||||||
}).start();
|
}).start();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
} else {
|
} else {
|
||||||
Log.d(Config.LOGTAG, "status (" + mJingleStatus + ") was not ok");
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue