package com.chrome.codereview;
import android.app.AlarmManager;
import android.app.IntentService;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.preference.PreferenceManager;
import android.util.SparseBooleanArray;
import com.chrome.codereview.data.IssueStateProvider;
import com.chrome.codereview.requests.ServerCaller;
public class CleanUpService extends IntentService {
private static final String ALREADY_SCHEDULED = "CleanUpService_ALREADY_STARTED";
public static void scheduleCleanUp(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
boolean alreadyScheduled = preferences.getBoolean(ALREADY_SCHEDULED, false);
if (alreadyScheduled) {
return;
}
preferences.edit().putBoolean(ALREADY_SCHEDULED, true).apply();
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
PendingIntent intent = PendingIntent.getService(context, 0, new Intent(context, CleanUpService.class), 0);
//just in case
alarmManager.cancel(intent);
alarmManager.setInexactRepeating(AlarmManager.RTC, AlarmManager.INTERVAL_DAY * 7, AlarmManager.INTERVAL_DAY * 7, intent);
}
public CleanUpService() {
super("clean up thread");
}
@Override
protected void onHandleIntent(Intent intent) {
cleanUpClosedIssues();
}
private void cleanUpClosedIssues() {
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(IssueStateProvider.HIDDEN_ISSUES_URI, null, null, null, null);
SparseBooleanArray issuesIds = new SparseBooleanArray();
int issueIdColumn = cursor.getColumnIndex(IssueStateProvider.COLUMN_ISSUE_ID);
while (cursor.moveToNext()) {
issuesIds.put(cursor.getInt(issueIdColumn), true);
}
cursor.close();
ServerCaller serverCaller = ServerCaller.from(getApplicationContext());
for (int i = 0; i < issuesIds.size(); i++) {
int issueId = issuesIds.keyAt(i);
if (serverCaller.isClosedOrDeleted(issueId)) {
contentResolver.delete(IssueStateProvider.HIDDEN_ISSUES_URI, IssueStateProvider.COLUMN_ISSUE_ID + "=?", new String[]{issueId + ""});
}
}
}
}