Simplify manual sync

pull/152/head
M66B 6 years ago
parent faab364d1a
commit 21106ad0fd

@ -26,8 +26,6 @@ import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.Typeface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.TextUtils;
@ -281,60 +279,29 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
private void onActionSynchronizeNow() {
Bundle args = new Bundle();
args.putLong("account", folder.account == null ? -1 : folder.account);
args.putLong("folder", folder.id);
new SimpleTask<Boolean>() {
new SimpleTask<Void>() {
@Override
protected Boolean onExecute(Context context, Bundle args) {
long aid = args.getLong("account");
protected Void onExecute(Context context, Bundle args) {
long fid = args.getLong("folder");
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
boolean internet = (ni != null && ni.isConnected());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean enabled = prefs.getBoolean("enabled", true);
if (!Helper.isConnected(context))
throw new IllegalArgumentException(context.getString(R.string.title_no_internet));
DB db = DB.getInstance(context);
try {
db.beginTransaction();
boolean now;
if (aid < 0) {
// Outbox
if (internet) {
now = true;
EntityOperation.sync(context, fid);
} else
throw new IllegalArgumentException(context.getString(R.string.title_no_internet));
} else {
EntityAccount account = db.account().getAccount(aid);
if (account.ondemand || !enabled) {
if (internet) {
now = true;
EntityOperation.sync(context, fid);
} else
throw new IllegalArgumentException(context.getString(R.string.title_no_internet));
} else {
now = "connected".equals(account.state);
EntityOperation.sync(context, fid);
}
}
EntityOperation.sync(context, fid);
db.setTransactionSuccessful();
return now;
} finally {
db.endTransaction();
}
}
@Override
protected void onExecuted(Bundle args, Boolean now) {
if (!now)
Snackbar.make(itemView, R.string.title_sync_delayed, Snackbar.LENGTH_LONG).show();
return null;
}
@Override

@ -115,10 +115,7 @@ public class EntityOperation {
operation.created = new Date().getTime();
operation.id = db.operation().insertOperation(operation);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean enabled = prefs.getBoolean("enabled", true);
if (account != null && (account.ondemand || !enabled)) {
if (account != null && (account.ondemand || !"connected".equals(account.state))) {
db.folder().setFolderState(fid, "waiting");
db.folder().setFolderSyncState(fid, "manual");
} else
@ -126,7 +123,7 @@ public class EntityOperation {
if (account == null) // Outbox
ServiceSend.start(context);
else if (account.ondemand || !enabled)
else if (account.ondemand || !"connected".equals(account.state))
ServiceUI.process(context, fid);
Log.i("Queued sync folder=" + folder);

@ -23,8 +23,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
@ -278,78 +276,43 @@ public class FragmentFolders extends FragmentBase {
Bundle args = new Bundle();
args.putLong("account", account);
new SimpleTask<Boolean>() {
new SimpleTask<Void>() {
@Override
protected void onPostExecute(Bundle args) {
swipeRefresh.setRefreshing(false);
}
@Override
protected Boolean onExecute(Context context, Bundle args) {
protected Void onExecute(Context context, Bundle args) {
long aid = args.getLong("account");
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
boolean internet = (ni != null && ni.isConnected());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean enabled = prefs.getBoolean("enabled", true);
if (!Helper.isConnected(context))
throw new IllegalArgumentException(context.getString(R.string.title_no_internet));
DB db = DB.getInstance(context);
try {
db.beginTransaction();
boolean now = false;
boolean nointernet = false;
if (aid < 0) {
// Unified inbox
List<EntityFolder> folders = db.folder().getFoldersSynchronizingUnified();
for (EntityFolder folder : folders) {
EntityAccount account = db.account().getAccount(folder.account);
if (account.ondemand || !enabled)
if (internet) {
now = true;
EntityOperation.sync(context, folder.id);
} else
nointernet = true;
else {
now = "connected".equals(account.state);
EntityOperation.sync(context, folder.id);
}
}
for (EntityFolder folder : folders)
EntityOperation.sync(context, folder.id);
} else {
// Folder list
EntityAccount account = db.account().getAccount(aid);
if (account.ondemand || !enabled) {
if (internet) {
now = true;
ServiceUI.fsync(context, aid);
} else
nointernet = true;
} else {
if (internet) {
now = true;
ServiceSynchronize.reload(getContext(), "refresh folders");
} else
nointernet = true;
}
if (account.ondemand)
ServiceUI.fsync(context, aid);
else
ServiceSynchronize.reload(getContext(), "refresh folders");
}
db.setTransactionSuccessful();
if (nointernet)
throw new IllegalArgumentException(context.getString(R.string.title_no_internet));
return now;
} finally {
db.endTransaction();
}
}
@Override
protected void onExecuted(Bundle args, Boolean now) {
if (!now)
Snackbar.make(view, R.string.title_sync_delayed, Snackbar.LENGTH_LONG).show();
return null;
}
@Override

@ -31,7 +31,6 @@ import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import android.os.Bundle;
import android.os.Handler;
@ -492,69 +491,29 @@ public class FragmentMessages extends FragmentBase {
protected Boolean onExecute(Context context, Bundle args) {
long fid = args.getLong("folder");
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
boolean internet = (ni != null && ni.isConnected());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean enabled = prefs.getBoolean("enabled", true);
if (!Helper.isConnected(context))
throw new IllegalArgumentException(context.getString(R.string.title_no_internet));
DB db = DB.getInstance(context);
try {
db.beginTransaction();
List<EntityFolder> folders = new ArrayList<>();
if (fid < 0) {
List<EntityFolder> unified = db.folder().getFoldersSynchronizingUnified();
if (unified != null)
folders.addAll(unified);
List<EntityFolder> folders = db.folder().getFoldersSynchronizingUnified();
for (EntityFolder folder : folders)
EntityOperation.sync(context, folder.id);
} else {
EntityFolder folder = db.folder().getFolder(fid);
if (folder != null)
folders.add(folder);
EntityOperation.sync(context, folder.id);
}
boolean now = false;
boolean nointernet = false;
for (EntityFolder folder : folders)
if (folder.account == null) {
// Outbox
if (internet) {
now = true;
EntityOperation.sync(context, folder.id);
} else
nointernet = true;
} else {
EntityAccount account = db.account().getAccount(folder.account);
if (account.ondemand || !enabled) {
if (internet) {
now = true;
EntityOperation.sync(context, folder.id);
} else
nointernet = true;
} else {
now = "connected".equals(account.state);
EntityOperation.sync(context, folder.id);
}
}
db.setTransactionSuccessful();
if (nointernet)
throw new IllegalArgumentException(context.getString(R.string.title_no_internet));
return now;
} finally {
db.endTransaction();
}
}
@Override
protected void onExecuted(Bundle args, Boolean now) {
if (!now) {
swipeRefresh.setRefreshing(false);
Snackbar.make(view, R.string.title_sync_delayed, Snackbar.LENGTH_LONG).show();
}
return null;
}
@Override

@ -695,6 +695,12 @@ public class Helper {
return filename.substring(index + 1);
}
static boolean isConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
return (ni != null && ni.isConnected());
}
static Boolean isMetered(Context context, boolean log) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

@ -26,7 +26,6 @@ import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import android.os.PowerManager;
import android.text.TextUtils;
@ -139,23 +138,17 @@ public class ServiceSend extends LifecycleService {
@Override
public void onAvailable(Network network) {
Log.i("Service send available=" + network);
if (isConnected())
if (Helper.isConnected(ServiceSend.this))
run();
}
@Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities caps) {
Log.i("Service send caps=" + caps);
if (isConnected())
if (Helper.isConnected(ServiceSend.this))
run();
}
private boolean isConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
return (ni != null && ni.isConnected());
}
private void run() {
if (thread != null && thread.isAlive())
return;
@ -218,7 +211,7 @@ public class ServiceSend extends LifecycleService {
Log.i(outbox.name + " end op=" + op.id + "/" + op.name);
}
if (!isConnected())
if (!Helper.isConnected(ServiceSend.this))
break;
}

@ -21,8 +21,6 @@ package eu.faircode.email;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.preference.PreferenceManager;
import com.sun.mail.iap.Argument;
@ -159,10 +157,7 @@ public class ViewModelBrowse extends ViewModel {
try {
// Check connectivity
ConnectivityManager cm = (ConnectivityManager) state.context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
boolean internet = (ni != null && ni.isConnected());
if (!internet)
if (!Helper.isConnected(state.context))
throw new IllegalArgumentException(state.context.getString(R.string.title_no_internet));
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(state.context);

@ -256,7 +256,6 @@
<string name="title_no_uidplus">This provider does not support UIDPLUS</string>
<string name="title_no_utf8">This provider does not support UTF-8</string>
<string name="title_no_sync">Synchronization errors since %1$s</string>
<string name="title_sync_delayed">Synchronization will be performed on the next account connection</string>
<string name="title_drafts_required">A drafts folder is required to send messages</string>
<string name="title_account_delete">Delete this account permanently?</string>
<string name="title_identity_delete">Delete this identity permanently?</string>

Loading…
Cancel
Save