From 47ae0c3af41404efadcb4127d2e06acff992b2d8 Mon Sep 17 00:00:00 2001
From: Keisuke Kuroyanagi <ksk@google.com>
Date: Wed, 26 Nov 2014 16:57:14 +0900
Subject: [PATCH] Cancel interval alarm for dictionary decaying in onDestroy.

Bug: 18528171
Change-Id: I6e12c006bd9eff15f3fa9cfd335bdd9fa081be61
---
 .../android/inputmethod/latin/LatinIME.java   |  1 +
 .../DictionaryDecayBroadcastReciever.java     | 37 +++++++++++++++----
 .../PersonalizationHelper.java                |  2 +-
 3 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 7b7b6d35e0..c82256183f 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -730,6 +730,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
         unregisterReceiver(mDictionaryPackInstallReceiver);
         unregisterReceiver(mDictionaryDumpBroadcastReceiver);
         mStatsUtilsManager.onDestroy();
+        DictionaryDecayBroadcastReciever.cancelIntervalAlarmForDictionaryDecaying(this);
         super.onDestroy();
     }
 
diff --git a/java/src/com/android/inputmethod/latin/personalization/DictionaryDecayBroadcastReciever.java b/java/src/com/android/inputmethod/latin/personalization/DictionaryDecayBroadcastReciever.java
index 221bb9a8f9..e974f33205 100644
--- a/java/src/com/android/inputmethod/latin/personalization/DictionaryDecayBroadcastReciever.java
+++ b/java/src/com/android/inputmethod/latin/personalization/DictionaryDecayBroadcastReciever.java
@@ -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
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
index 8c5eb0aa73..74196dd6d7 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
@@ -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();
-- 
GitLab