do not attempt to download images when not connected

This commit is contained in:
iNPUTmice 2014-10-17 13:09:02 +02:00
parent 3372e50155
commit 0605390144
8 changed files with 60 additions and 45 deletions

View file

@ -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>

View file

@ -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();

View file

@ -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) {

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -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; }
} }
} }

View file

@ -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;
} }
} }