brought restart threshold down to 8 times in 8h

This commit is contained in:
Daniel Gultsch 2016-11-08 21:37:44 +01:00
parent 1ef8d0a746
commit 698ddadbee
4 changed files with 31 additions and 8 deletions

View File

@ -101,8 +101,8 @@ public final class Config {
public static final long MAM_MAX_CATCHUP = MILLISECONDS_IN_DAY / 2;
public static final int MAM_MAX_MESSAGES = 500;
public static final long FREQUENT_RESTARTS_DETECTION_WINDOW = 10 * 60 * 60 * 1000; // 10 hours
public static final long FREQUENT_RESTARTS_THRESHOLD = 10;
public static final long FREQUENT_RESTARTS_DETECTION_WINDOW = 8 * 60 * 60 * 1000; // 10 hours
public static final long FREQUENT_RESTARTS_THRESHOLD = 8;
public static final ChatState DEFAULT_CHATSTATE = ChatState.ACTIVE;
public static final int TYPING_TIMEOUT = 8;

View File

@ -139,7 +139,9 @@ public class DatabaseBackend extends SQLiteOpenHelper {
+ ") ON CONFLICT IGNORE"
+ ");";
private static String CREATE_START_TIMES_TABLE = "create table start_times (timestamp NUMBER);";
private static String START_TIMES_TABLE = "start_times";
private static String CREATE_START_TIMES_TABLE = "create table "+START_TIMES_TABLE+" (timestamp NUMBER);";
private DatabaseBackend(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
@ -1232,16 +1234,24 @@ public class DatabaseBackend extends SQLiteOpenHelper {
public boolean startTimeCountExceedsThreshold() {
SQLiteDatabase db = this.getWritableDatabase();
long cleanBeforeTimestamp = System.currentTimeMillis() - Config.FREQUENT_RESTARTS_DETECTION_WINDOW;
db.execSQL("delete from start_times where timestamp < "+cleanBeforeTimestamp);
db.execSQL("delete from "+START_TIMES_TABLE+" where timestamp < "+cleanBeforeTimestamp);
ContentValues values = new ContentValues();
values.put("timestamp",System.currentTimeMillis());
db.insert("start_times",null,values);
db.insert(START_TIMES_TABLE,null,values);
String[] columns = new String[]{"count(timestamp)"};
Cursor cursor = db.query("start_times",columns,null,null,null,null,null);
Cursor cursor = db.query(START_TIMES_TABLE,columns,null,null,null,null,null);
int count;
if (cursor.moveToFirst()) {
return cursor.getInt(0) >= Config.FREQUENT_RESTARTS_THRESHOLD;
count = cursor.getInt(0);
} else {
return false;
count = 0;
}
cursor.close();
return count >= Config.FREQUENT_RESTARTS_THRESHOLD;
}
public void clearStartTimeCounter() {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("delete from "+START_TIMES_TABLE);
}
}

View File

@ -3605,6 +3605,15 @@ public class XmppConnectionService extends Service {
conversation.setBookmark(bookmark);
}
public void clearStartTimeCounter() {
mDatabaseExecutor.execute(new Runnable() {
@Override
public void run() {
databaseBackend.clearStartTimeCounter();
}
});
}
public interface OnMamPreferencesFetched {
void onPreferencesFetched(Element prefs);
void onPreferencesFetchFailed();

View File

@ -249,6 +249,10 @@ public class SettingsActivity extends XmppActivity implements
}
}
} else if (name.equals("keep_foreground_service")) {
boolean foreground_service = preferences.getBoolean("keep_foreground_service",false);
if (!foreground_service) {
xmppConnectionService.clearStartTimeCounter();
}
xmppConnectionService.toggleForegroundService();
} else if (resendPresence.contains(name)) {
if (xmppConnectionServiceBound) {