package com.moez.QKSMS.service; import android.app.AlarmManager; import android.app.IntentService; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.util.Log; import com.moez.QKSMS.common.QKPreferences; import com.moez.QKSMS.enums.QKPreference; import com.moez.QKSMS.transaction.SmsHelper; import java.util.Calendar; public class DeleteOldMessagesService extends IntentService { private static final String TAG = "DeleteOldMessages"; public DeleteOldMessagesService() { super(TAG); } @Override protected void onHandleIntent(Intent intent) { Calendar last = Calendar.getInstance(); last.setTimeInMillis(QKPreferences.getLong(QKPreference.LAST_AUTO_DELETE_CHECK)); Calendar current = Calendar.getInstance(); // Continue if the auto delete setting is enabled, and we haven't done a purge today if (QKPreferences.getBoolean(QKPreference.AUTO_DELETE) && (last.getTimeInMillis() == 0 || current.get(Calendar.DAY_OF_YEAR) != last.get(Calendar.DAY_OF_YEAR) || current.get(Calendar.YEAR) != last.get(Calendar.YEAR))) { Log.i(TAG, "Ready to delete old messages"); QKPreferences.setLong(QKPreference.LAST_AUTO_DELETE_CHECK, System.currentTimeMillis()); deleteOldUnreadMessages(this); deleteOldReadMessages(this); } else { Log.i(TAG, "Not going to delete old messages"); } } private void deleteOldUnreadMessages(Context context) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, -Integer.parseInt(QKPreferences.getString(QKPreference.AUTO_DELETE_UNREAD))); calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY)); calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE)); calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND)); int count = deleteOldMessages(context, SmsHelper.UNREAD_SELECTION, calendar.getTimeInMillis()); Log.i(TAG, "Deleted unread messages: " + count); } private void deleteOldReadMessages(Context context) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, -Integer.parseInt(QKPreferences.getString(QKPreference.AUTO_DELETE_READ))); calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY)); calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE)); calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND)); int count = deleteOldMessages(context, SmsHelper.READ_SELECTION + "=" + SmsHelper.READ, calendar.getTimeInMillis()); Log.i(TAG, "Deleted read messages: " + count); } private int deleteOldMessages(Context context, String selection, long before) { selection += " AND " + SmsHelper.COLUMN_DATE + "<=?"; try { return context.getContentResolver().delete(SmsHelper.SMS_CONTENT_PROVIDER, selection, new String[]{String.valueOf(before)}); } catch (Exception e) { e.printStackTrace(); } return 0; } public static void setupAutoDeleteAlarm(Context context) { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 3); // We want this service to run when the phone is not likely being used Intent intent = new Intent(context, DeleteOldMessagesService.class); PendingIntent pIntent = PendingIntent.getService(context, 9237, intent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager alarm = (AlarmManager) context.getSystemService(ALARM_SERVICE); alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent); } }