Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47ae0c3a authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Cancel interval alarm for dictionary decaying in onDestroy.

Bug: 18528171
Change-Id: I6e12c006bd9eff15f3fa9cfd335bdd9fa081be61
parent 20da4f07
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -730,6 +730,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        unregisterReceiver(mDictionaryPackInstallReceiver);
        unregisterReceiver(mDictionaryDumpBroadcastReceiver);
        mStatsUtilsManager.onDestroy();
        DictionaryDecayBroadcastReciever.cancelIntervalAlarmForDictionaryDecaying(this);
        super.onDestroy();
    }

+30 −7
Original line number Diff line number Diff line
@@ -43,17 +43,40 @@ public class DictionaryDecayBroadcastReciever extends BroadcastReceiver {
    /**
     * Interval to update for decaying dictionaries.
     */
    /* package */ static final long DICTIONARY_DECAY_INTERVAL = TimeUnit.MINUTES.toMillis(60);
    static final long DICTIONARY_DECAY_INTERVAL_IN_MILLIS = TimeUnit.MINUTES.toMillis(60);

    public static void setUpIntervalAlarmForDictionaryDecaying(Context context) {
        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    private static PendingIntent getPendingIntentForDictionaryDecay(final Context context) {
        final Intent updateIntent = new Intent(DICTIONARY_DECAY_INTENT_ACTION);
        updateIntent.setClass(context, DictionaryDecayBroadcastReciever.class);
        final long alarmTime =  System.currentTimeMillis() + DICTIONARY_DECAY_INTERVAL;
        final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0 /* requestCode */,
        return PendingIntent.getBroadcast(context, 0 /* requestCode */,
                updateIntent, PendingIntent.FLAG_CANCEL_CURRENT);
        if (null != alarmManager) alarmManager.setInexactRepeating(AlarmManager.RTC,
                alarmTime, DICTIONARY_DECAY_INTERVAL, pendingIntent);
    }

    /**
     * Set up interval alarm for dynamic dictionaries.
     */
    public static void setUpIntervalAlarmForDictionaryDecaying(final Context context) {
        final AlarmManager alarmManager =
                (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        if (null == alarmManager) {
            return;
        }
        final long alarmTriggerTimeInMillis =
                System.currentTimeMillis() + DICTIONARY_DECAY_INTERVAL_IN_MILLIS;
        alarmManager.setInexactRepeating(AlarmManager.RTC, alarmTriggerTimeInMillis,
                DICTIONARY_DECAY_INTERVAL_IN_MILLIS, getPendingIntentForDictionaryDecay(context));
    }

    /**
     * Cancel interval alarm that has been set up.
     */
    public static void cancelIntervalAlarmForDictionaryDecaying(final Context context) {
        final AlarmManager alarmManager =
                (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        if (null == alarmManager) {
            return;
        }
        alarmManager.cancel(getPendingIntentForDictionaryDecay(context));
    }

    @Override
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ public class PersonalizationHelper {
    private static int sCurrentTimestampForTesting = 0;
    public static void currentTimeChangedForTesting(final int currentTimestamp) {
        if (TimeUnit.MILLISECONDS.toSeconds(
                DictionaryDecayBroadcastReciever.DICTIONARY_DECAY_INTERVAL)
                DictionaryDecayBroadcastReciever.DICTIONARY_DECAY_INTERVAL_IN_MILLIS)
                        < currentTimestamp - sCurrentTimestampForTesting) {
            runGCOnAllOpenedUserHistoryDictionaries();
            runGCOnAllOpenedPersonalizationDictionaries();