mirror of
https://github.com/M66B/FairEmail.git
synced 2026-01-03 19:34:15 +01:00
Show backoff time
This commit is contained in:
2316
app/schemas/eu.faircode.email.DB/177.json
Normal file
2316
app/schemas/eu.faircode.email.DB/177.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -96,6 +96,7 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
|
||||
private TextView tvHost;
|
||||
private TextView tvLast;
|
||||
private TextView tvUsage;
|
||||
private TextView tvBackoff;
|
||||
private TextView tvQuota;
|
||||
private TextView tvMaxSize;
|
||||
private TextView tvIdentity;
|
||||
@@ -123,6 +124,7 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
|
||||
tvHost = itemView.findViewById(R.id.tvHost);
|
||||
tvLast = itemView.findViewById(R.id.tvLast);
|
||||
tvUsage = itemView.findViewById(R.id.tvUsage);
|
||||
tvBackoff = itemView.findViewById(R.id.tvBackoff);
|
||||
tvQuota = itemView.findViewById(R.id.tvQuota);
|
||||
tvMaxSize = itemView.findViewById(R.id.tvMaxSize);
|
||||
tvIdentity = itemView.findViewById(R.id.tvIdentity);
|
||||
@@ -197,9 +199,15 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
|
||||
"/" + account.keep_alive_ok +
|
||||
"/" + account.keep_alive_failed +
|
||||
"/" + account.keep_alive_succeeded : "")));
|
||||
|
||||
tvBackoff.setText(context.getString(R.string.title_backoff_until,
|
||||
account.backoff_until == null ? "-" : DTF.format(account.backoff_until)));
|
||||
tvBackoff.setVisibility(account.backoff_until == null && !BuildConfig.DEBUG ? View.GONE : View.VISIBLE);
|
||||
|
||||
Integer percent = null;
|
||||
if (!settings && account.quota_usage != null && account.quota_limit != null)
|
||||
percent = Math.round((float) account.quota_usage * 100 / account.quota_limit);
|
||||
|
||||
tvUsage.setText(percent == null ? null : NF.format(percent) + "%");
|
||||
tvUsage.setVisibility(percent == null ? View.GONE : View.VISIBLE);
|
||||
tvQuota.setText(context.getString(R.string.title_storage_quota,
|
||||
|
||||
@@ -64,7 +64,7 @@ import static eu.faircode.email.ServiceAuthenticator.AUTH_TYPE_PASSWORD;
|
||||
// https://developer.android.com/topic/libraries/architecture/room.html
|
||||
|
||||
@Database(
|
||||
version = 176,
|
||||
version = 177,
|
||||
entities = {
|
||||
EntityIdentity.class,
|
||||
EntityAccount.class,
|
||||
@@ -1731,6 +1731,13 @@ public abstract class DB extends RoomDatabase {
|
||||
Log.i("DB migration from version " + startVersion + " to " + endVersion);
|
||||
db.execSQL("ALTER TABLE `message` ADD COLUMN `auto_submitted` INTEGER");
|
||||
}
|
||||
})
|
||||
.addMigrations(new Migration(176, 177) {
|
||||
@Override
|
||||
public void migrate(@NonNull SupportSQLiteDatabase db) {
|
||||
Log.i("DB migration from version " + startVersion + " to " + endVersion);
|
||||
db.execSQL("ALTER TABLE `account` ADD COLUMN `backoff_until` INTEGER");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -143,6 +143,9 @@ public interface DaoAccount {
|
||||
@Query("UPDATE account SET last_connected = :last_connected WHERE id = :id")
|
||||
int setAccountConnected(long id, long last_connected);
|
||||
|
||||
@Query("UPDATE account SET backoff_until = :backoff_until WHERE id = :id")
|
||||
int setAccountBackoff(long id, Long backoff_until);
|
||||
|
||||
@Query("UPDATE account SET quota_usage = :used, quota_limit = :limit WHERE id = :id")
|
||||
int setAccountQuota(long id, Long used, Long limit);
|
||||
|
||||
|
||||
@@ -142,6 +142,7 @@ public class EntityAccount extends EntityOrder implements Serializable {
|
||||
public String warning;
|
||||
public String error;
|
||||
public Long last_connected;
|
||||
public Long backoff_until;
|
||||
public Long max_size;
|
||||
|
||||
boolean isGmail() {
|
||||
@@ -367,6 +368,7 @@ public class EntityAccount extends EntityOrder implements Serializable {
|
||||
Objects.equals(this.warning, other.warning) &&
|
||||
Objects.equals(this.error, other.error) &&
|
||||
Objects.equals(this.last_connected, other.last_connected) &&
|
||||
Objects.equals(this.backoff_until, other.backoff_until) &&
|
||||
Objects.equals(this.max_size, other.max_size));
|
||||
} else
|
||||
return false;
|
||||
|
||||
@@ -1739,9 +1739,12 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences
|
||||
if (backoff <= max) {
|
||||
// Short back-off period, keep device awake
|
||||
try {
|
||||
db.account().setAccountBackoff(account.id, System.currentTimeMillis() + backoff * 1000L);
|
||||
state.acquire(backoff * 1000L, true);
|
||||
} catch (InterruptedException ex) {
|
||||
Log.w(account.name + " backoff " + ex.toString());
|
||||
} finally {
|
||||
db.account().setAccountBackoff(account.id, null);
|
||||
}
|
||||
} else {
|
||||
// Cancel transient sync operations
|
||||
@@ -1769,6 +1772,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences
|
||||
AlarmManagerCompat.setAndAllowWhileIdle(am, AlarmManager.RTC_WAKEUP, trigger, pi);
|
||||
|
||||
try {
|
||||
db.account().setAccountBackoff(account.id, trigger);
|
||||
wlAccount.release();
|
||||
state.acquire(2 * backoff * 1000L, true);
|
||||
Log.i("### " + account.name + " backoff done");
|
||||
@@ -1776,6 +1780,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences
|
||||
Log.w(account.name + " backoff " + ex.toString());
|
||||
} finally {
|
||||
wlAccount.acquire();
|
||||
db.account().setAccountBackoff(account.id, null);
|
||||
}
|
||||
} finally {
|
||||
am.cancel(pi);
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
android:layout_marginEnd="6dp"
|
||||
android:ellipsize="start"
|
||||
android:singleLine="true"
|
||||
android:text="Last connected time"
|
||||
android:text="@string/title_last_connected"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
app:layout_constraintEnd_toStartOf="@id/tvUsage"
|
||||
app:layout_constraintStart_toEndOf="@+id/ivState"
|
||||
@@ -170,6 +170,20 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvHost" />
|
||||
|
||||
<eu.faircode.email.FixedTextView
|
||||
android:id="@+id/tvBackoff"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="6dp"
|
||||
android:layout_marginEnd="6dp"
|
||||
android:ellipsize="start"
|
||||
android:singleLine="true"
|
||||
android:text="@string/title_backoff_until"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/ivState"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvLast" />
|
||||
|
||||
<eu.faircode.email.FixedTextView
|
||||
android:id="@+id/tvQuota"
|
||||
android:layout_width="0dp"
|
||||
@@ -182,7 +196,7 @@
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tvMaxSize"
|
||||
app:layout_constraintStart_toEndOf="@+id/ivState"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvLast" />
|
||||
app:layout_constraintTop_toBottomOf="@id/tvBackoff" />
|
||||
|
||||
<eu.faircode.email.FixedTextView
|
||||
android:id="@+id/tvMaxSize"
|
||||
@@ -195,7 +209,7 @@
|
||||
android:text="25 MB"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvLast" />
|
||||
app:layout_constraintTop_toBottomOf="@id/tvBackoff" />
|
||||
|
||||
<eu.faircode.email.FixedTextView
|
||||
android:id="@+id/tvIdentity"
|
||||
|
||||
@@ -700,6 +700,7 @@
|
||||
<string name="title_edit_html">Edit as HTML</string>
|
||||
<string name="title_sign_key">Sign key: %1$s</string>
|
||||
<string name="title_last_connected">Last connected: %1$s</string>
|
||||
<string name="title_backoff_until">Waiting until: %1$s</string>
|
||||
<string name="title_storage_quota">Server storage usage: %1$s/%2$s</string>
|
||||
<string name="title_pop_support">The POP3 protocol supports downloading and deleting messages from the inbox only. POP3 cannot mark messages as read, move messages, etc. POP3 will use more battery power and data than IMAP. So, consider using the IMAP protocol whenever possible.</string>
|
||||
<string name="title_oauth_support">OAuth is not supported</string>
|
||||
|
||||
Reference in New Issue
Block a user