Merge branch 'master' of github.com:M66B/FairEmail

pull/169/head
M66B 6 years ago
commit 99a89b0491

@ -1711,29 +1711,32 @@ so there is little room for performance improvements.
<a name="faq78"></a> <a name="faq78"></a>
**(78) How do I use schedules?** **(78) How do I use schedules?**
In the settingss you can enable scheduling and set the time to turn synchronizing automatically on and off. In the receive settings you can enable scheduling and set the time period for when messages should be received.
An end time equal to or earlier than the start time is considered to be 24 hours later. Note that an end time equal to or earlier than the start time is considered to be 24 hours later.
Turning FairEmail on or off, for example by using [a quick settings tile](#user-content-faq30), will not turn scheduling off. For more complex schemes you could set one or more accounts to manual synchronization
This means that the next schedule event will still turn FairEmail on or off. and send this command to FairEmail to check for new messages:
You can also automate turning synchronization on and off by sending these commands to FairEmail:
``` ```
(adb shell) am startservice -a eu.faircode.email.ENABLE (adb shell) am startservice -a eu.faircode.email.POLL
(adb shell) am startservice -a eu.faircode.email.DISABLE
``` ```
Sending these commands will turn scheduling off. For a specific account:
If you want to automate checking for new messages, you can send this command to FairEmail: ```
(adb shell) am startservice -a eu.faircode.email.POLL --es account Gmail
```
You can also automate turning receiving messages on and off by sending these commands to FairEmail:
``` ```
(adb shell) adb shell am startservice -a eu.faircode.email.POLL (adb shell) am startservice -a eu.faircode.email.ENABLE
(adb shell) am startservice -a eu.faircode.email.DISABLE
``` ```
It is also possible to enable/disable an account, for example the account with the name *Gmail*: To enable/disable a specific account:
``` ```
(adb shell) am startservice -a eu.faircode.email.ENABLE --es account Gmail (adb shell) am startservice -a eu.faircode.email.ENABLE --es account Gmail
(adb shell) am startservice -a eu.faircode.email.DISABLE --es account Gmail (adb shell) am startservice -a eu.faircode.email.DISABLE --es account Gmail

@ -62,5 +62,4 @@ Tap *Disable battery optimizations* and follow the instructions.
## Questions or problems ## Questions or problems
If you have a question or problem, please [see here](https://github.com/M66B/FairEmail/blob/master/FAQ.md) If you have a question or problem, please [see here](https://github.com/M66B/FairEmail/blob/master/FAQ.md) for help.
or use [this contact form](https://contact.faircode.eu/?product=fairemailsupport) to ask for help (you can use the transaction number "*setup help*").

@ -779,7 +779,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
new SimpleTask<Void>() { new SimpleTask<Void>() {
@Override @Override
protected Void onExecute(Context context, Bundle args) { protected Void onExecute(Context context, Bundle args) {
WorkerPoll.sync(context); WorkerPoll.sync(context, null);
return null; return null;
} }

@ -29,6 +29,8 @@ import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
public class ServiceExternal extends Service { public class ServiceExternal extends Service {
@ -36,7 +38,7 @@ public class ServiceExternal extends Service {
private static final String ACTION_ENABLE = BuildConfig.APPLICATION_ID + ".ENABLE"; private static final String ACTION_ENABLE = BuildConfig.APPLICATION_ID + ".ENABLE";
private static final String ACTION_DISABLE = BuildConfig.APPLICATION_ID + ".DISABLE"; private static final String ACTION_DISABLE = BuildConfig.APPLICATION_ID + ".DISABLE";
// adb shell am startservice -a eu.faircode.email.POLL // adb shell am startservice -a eu.faircode.email.POLL --es account Gmail
// adb shell am startservice -a eu.faircode.email.ENABLE --es account Gmail // adb shell am startservice -a eu.faircode.email.ENABLE --es account Gmail
// adb shell am startservice -a eu.faircode.email.DISABLE --es account Gmail // adb shell am startservice -a eu.faircode.email.DISABLE --es account Gmail
@ -73,20 +75,11 @@ public class ServiceExternal extends Service {
if (!ActivityBilling.isPro(this)) if (!ActivityBilling.isPro(this))
return START_NOT_STICKY; return START_NOT_STICKY;
String action = intent.getAction();
if (ACTION_POLL.equals(action)) {
final Context context = getApplicationContext(); final Context context = getApplicationContext();
executor.submit(new Runnable() { final String accountName = intent.getStringExtra("account");
@Override
public void run() {
WorkerPoll.sync(context);
}
});
return START_NOT_STICKY;
}
final Boolean enabled; final Boolean enabled;
String action = intent.getAction();
if (ACTION_ENABLE.equals(action)) if (ACTION_ENABLE.equals(action))
enabled = true; enabled = true;
else if (ACTION_DISABLE.equals(action)) else if (ACTION_DISABLE.equals(action))
@ -94,32 +87,35 @@ public class ServiceExternal extends Service {
else else
enabled = null; enabled = null;
if (enabled != null) { executor.submit(new Runnable() {
final String accountName = intent.getStringExtra("account"); @Override
public void run() {
if (accountName == null) { if (accountName == null) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); if (enabled == null)
prefs.edit().putBoolean("schedule", false).apply(); WorkerPoll.sync(context, null);
else {
boolean previous = prefs.getBoolean("enabled", true); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
if (!enabled.equals(previous)) {
prefs.edit().putBoolean("enabled", enabled).apply(); prefs.edit().putBoolean("enabled", enabled).apply();
ServiceSynchronize.eval(this, "external"); ServiceSynchronize.eval(context, "external enabled=" + enabled);
} }
} else { } else {
final Context context = getApplicationContext();
executor.submit(new Runnable() {
@Override
public void run() {
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
EntityAccount account = db.account().getAccount(accountName); EntityAccount account = db.account().getAccount(accountName);
if (account != null) { if (account == null) {
db.account().setAccountSynchronize(account.id, enabled); EntityLog.log(context, "Account not found name=" + accountName);
ServiceSynchronize.eval(context, "account enabled=" + enabled); return;
} }
if (enabled == null)
WorkerPoll.sync(context, account.id);
else {
db.account().setAccountSynchronize(account.id, enabled);
ServiceSynchronize.eval(context, "external account=" + accountName + " enabled=" + enabled);
} }
});
} }
} }
});
return START_NOT_STICKY; return START_NOT_STICKY;
} finally { } finally {

@ -1304,27 +1304,27 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
@Override @Override
public void onAvailable(@NonNull Network network) { public void onAvailable(@NonNull Network network) {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); EntityLog.log(ServiceSynchronize.this, "Available network=" + network);
EntityLog.log(ServiceSynchronize.this, "Available network=" + network +
" capabilities " + cm.getNetworkCapabilities(network));
updateState(); updateState();
} }
@Override @Override
public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities capabilities) { public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities capabilities) {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); EntityLog.log(ServiceSynchronize.this, "Changed network=" + network + " capabilities " + capabilities);
EntityLog.log(ServiceSynchronize.this, "Changed network=" + network +
" capabilities " + cm.getNetworkCapabilities(network));
updateState(); updateState();
} }
@Override @Override
public void onLost(@NonNull Network network) { public void onLost(@NonNull Network network) {
try {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo active = cm.getActiveNetworkInfo(); NetworkInfo active = cm.getActiveNetworkInfo();
EntityLog.log(ServiceSynchronize.this, "Lost network=" + network + " active=" + active); EntityLog.log(ServiceSynchronize.this, "Lost network=" + network + " active=" + active);
if (active == null) if (active == null)
lastLost = new Date().getTime(); lastLost = new Date().getTime();
} catch (Throwable ex) {
Log.w(ex);
}
updateState(); updateState();
} }

@ -101,7 +101,7 @@ public class ServiceTileUnseen extends TileService {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
WorkerPoll.sync(context); WorkerPoll.sync(context, null);
} }
}).start(); }).start();
} }

@ -45,7 +45,7 @@ public class WorkerPoll extends Worker {
public Result doWork() { public Result doWork() {
Log.i("Running " + getName()); Log.i("Running " + getName());
sync(getApplicationContext()); sync(getApplicationContext(), null);
return Result.success(); return Result.success();
} }
@ -76,13 +76,14 @@ public class WorkerPoll extends Worker {
} }
} }
static void sync(Context context) { static void sync(Context context, Long aid) {
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
try { try {
db.beginTransaction(); db.beginTransaction();
List<EntityAccount> accounts = db.account().getSynchronizingAccounts(); List<EntityAccount> accounts = db.account().getSynchronizingAccounts();
for (EntityAccount account : accounts) { for (EntityAccount account : accounts)
if (aid == null || account.id.equals(aid)) {
List<EntityFolder> folders = db.folder().getSynchronizingFolders(account.id); List<EntityFolder> folders = db.folder().getSynchronizingFolders(account.id);
if (folders.size() > 0) if (folders.size() > 0)
Collections.sort(folders, folders.get(0).getComparator(context)); Collections.sort(folders, folders.get(0).getComparator(context));

@ -30,7 +30,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:checked="true" android:checked="true"
android:text="@string/title_advanced_enabled" android:text="@string/title_advanced_receive"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAdvancedHint" app:layout_constraintTop_toBottomOf="@id/tvAdvancedHint"

@ -221,7 +221,7 @@
<string name="title_advanced_section_privacy">Privacy</string> <string name="title_advanced_section_privacy">Privacy</string>
<string name="title_advanced_section_misc">Miscellaneous</string> <string name="title_advanced_section_misc">Miscellaneous</string>
<string name="title_advanced_enabled">Enabled</string> <string name="title_advanced_receive">Receive messages</string>
<string name="title_advanced_when">When</string> <string name="title_advanced_when">When</string>
<string name="title_advanced_schedule">Schedule</string> <string name="title_advanced_schedule">Schedule</string>
<string name="title_advanced_unseen">All unread messages</string> <string name="title_advanced_unseen">All unread messages</string>

Loading…
Cancel
Save