Added option to force polling on (un)metered networks

This commit is contained in:
M66B 2024-01-15 09:44:02 +01:00
parent 1909411855
commit 5c9b6a347f
5 changed files with 62 additions and 3 deletions

View File

@ -229,6 +229,18 @@ public class EntityAccount extends EntityOrder implements Serializable {
}
boolean isExempted(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean poll_metered = prefs.getBoolean("poll_metered", false);
boolean poll_unmetered = prefs.getBoolean("poll_unmetered", false);
if (poll_metered || poll_unmetered) {
ConnectionHelper.NetworkState state = ConnectionHelper.getNetworkState(context);
if (poll_metered && state.isConnected() && !state.isUnmetered())
return false;
if (poll_unmetered && state.isConnected() && state.isUnmetered())
return false;
}
return this.poll_exempted;
}

View File

@ -82,6 +82,8 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr
private Spinner spPollInterval;
private TextView tvPollBattery;
private RecyclerView rvExempted;
private SwitchCompat swPollMetered;
private SwitchCompat swPollUnmetered;
private SwitchCompat swSchedule;
private TextView tvSchedulePro;
private TextView tvScheduleStart;
@ -132,6 +134,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr
private final static List<String> RESET_OPTIONS = Collections.unmodifiableList(Arrays.asList(
"enabled", "poll_interval", "auto_optimize",
"poll_metered", "poll_unmetered",
"schedule", "schedule_start", "schedule_end", "schedule_start_weekend", "schedule_end_weekend", "weekend",
"sync_quick_imap", "sync_quick_pop",
"sync_nodate", "sync_unseen", "sync_flagged", "delete_unseen", "sync_kept",
@ -172,6 +175,8 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr
tvPollBattery = view.findViewById(R.id.tvPollBattery);
rvExempted = view.findViewById(R.id.rvExempted);
swPollMetered = view.findViewById(R.id.swPollMetered);
swPollUnmetered = view.findViewById(R.id.swPollUnmetered);
swSchedule = view.findViewById(R.id.swSchedule);
tvSchedulePro = view.findViewById(R.id.tvSchedulePro);
@ -369,6 +374,20 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr
adapter = new AdapterAccountExempted(getViewLifecycleOwner(), getContext());
rvExempted.setAdapter(adapter);
swPollMetered.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
prefs.edit().putBoolean("poll_metered", checked).apply();
}
});
swPollUnmetered.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
prefs.edit().putBoolean("poll_unmetered", checked).apply();
}
});
swSchedule.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@ -706,6 +725,8 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr
}
tvPollBattery.setVisibility(pollInterval > 0 && pollInterval < 15 ? View.VISIBLE : View.GONE);
swPollMetered.setChecked(prefs.getBoolean("poll_metered", false));
swPollUnmetered.setChecked(prefs.getBoolean("poll_unmetered", false));
grpExempted.setVisibility(pollInterval == 0 ? View.GONE : View.VISIBLE);
swSchedule.setChecked(prefs.getBoolean("schedule", false) && pro);

View File

@ -160,7 +160,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences
private static final String ACTION_NEW_MESSAGE_COUNT = BuildConfig.APPLICATION_ID + ".NEW_MESSAGE_COUNT";
private static final List<String> PREF_EVAL = Collections.unmodifiableList(Arrays.asList(
"enabled", "poll_interval", "last_daily" // restart account(s)
"enabled", "poll_interval", "poll_metered", "poll_unmetered", "last_daily" // restart account(s)
));
private static final List<String> PREF_RELOAD = Collections.unmodifiableList(Arrays.asList(

View File

@ -250,6 +250,30 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvExempted" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swPollMetered"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="12dp"
android:text="@string/title_advanced_poll_metered"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/rvExempted"
app:switchPadding="12dp" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swPollUnmetered"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="12dp"
android:text="@string/title_advanced_poll_unmetered"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/swPollMetered"
app:switchPadding="12dp" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swSchedule"
android:layout_width="0dp"
@ -258,7 +282,7 @@
android:text="@string/title_advanced_schedule"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/rvExempted"
app:layout_constraintTop_toBottomOf="@id/swPollUnmetered"
app:switchPadding="12dp" />
<TextView
@ -477,7 +501,7 @@
android:id="@+id/grpExempted"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="tvExempted,rvExempted" />
app:constraint_referenced_ids="tvExempted,rvExempted,swPollMetered,swPollUnmetered" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>

View File

@ -420,6 +420,8 @@
<string name="title_advanced_when">When</string>
<string name="title_advanced_optimize">Automatically optimize</string>
<string name="title_advanced_always">Always receive messages for these accounts</string>
<string name="title_advanced_poll_metered">Periodically check for new messages while on a metered network</string>
<string name="title_advanced_poll_unmetered">Periodically check for new messages while on a unmetered network</string>
<string name="title_advanced_schedule">Schedule</string>
<string name="title_advanced_schedule_workdays">Workdays</string>
<string name="title_advanced_schedule_weekend">Weekend</string>