am 674c51a0: am ec2981a4: Fix a bug on upgrading user history scheme

* commit '674c51a01117b73dd25473195f92fb0c0158da26':
  Fix a bug on upgrading user history scheme
main
satok 2012-06-07 11:28:41 -07:00 committed by Android Git Automerger
commit 1e96cc1f51
2 changed files with 9 additions and 1 deletions

View File

@ -229,6 +229,7 @@ public class UserHistoryDictionary extends ExpandableDictionary {
public void loadDictionaryAsync() { public void loadDictionaryAsync() {
synchronized(mBigramList) { synchronized(mBigramList) {
final long last = SettingsValues.getLastUserHistoryWriteTime(mPrefs, mLocale); final long last = SettingsValues.getLastUserHistoryWriteTime(mPrefs, mLocale);
final boolean initializing = last == 0;
final long now = System.currentTimeMillis(); final long now = System.currentTimeMillis();
// Load the words that correspond to the current input locale // Load the words that correspond to the current input locale
final Cursor cursor = query(MAIN_COLUMN_LOCALE + "=?", new String[] { mLocale }); final Cursor cursor = query(MAIN_COLUMN_LOCALE + "=?", new String[] { mLocale });
@ -253,7 +254,8 @@ public class UserHistoryDictionary extends ExpandableDictionary {
} else if (word1.length() < BinaryDictionary.MAX_WORD_LENGTH } else if (word1.length() < BinaryDictionary.MAX_WORD_LENGTH
&& word2.length() < BinaryDictionary.MAX_WORD_LENGTH) { && word2.length() < BinaryDictionary.MAX_WORD_LENGTH) {
super.setBigramAndGetFrequency( super.setBigramAndGetFrequency(
word1, word2, new ForgettingCurveParams(fc, now, last)); word1, word2, initializing ? new ForgettingCurveParams(true)
: new ForgettingCurveParams(fc, now, last));
} }
mBigramList.addBigram(word1, word2, (byte)fc); mBigramList.addBigram(word1, word2, (byte)fc);
cursor.moveToNext(); cursor.moveToNext();

View File

@ -30,6 +30,7 @@ public class UserHistoryForgettingCurveUtils {
private static final long ELAPSED_TIME_INTERVAL_MILLIS = ELAPSED_TIME_INTERVAL_HOURS private static final long ELAPSED_TIME_INTERVAL_MILLIS = ELAPSED_TIME_INTERVAL_HOURS
* DateUtils.HOUR_IN_MILLIS; * DateUtils.HOUR_IN_MILLIS;
private static final int HALF_LIFE_HOURS = 48; private static final int HALF_LIFE_HOURS = 48;
private static final int MAX_PUSH_ELAPSED = (FC_LEVEL_MAX + 1) * (ELAPSED_TIME_MAX + 1);
private UserHistoryForgettingCurveUtils() { private UserHistoryForgettingCurveUtils() {
// This utility class is not publicly instantiable. // This utility class is not publicly instantiable.
@ -94,6 +95,11 @@ public class UserHistoryForgettingCurveUtils {
if (elapsedTimeCount <= 0) { if (elapsedTimeCount <= 0) {
return; return;
} }
if (elapsedTimeCount >= MAX_PUSH_ELAPSED) {
mLastTouchedTime = now;
mFc = 0;
return;
}
for (int i = 0; i < elapsedTimeCount; ++i) { for (int i = 0; i < elapsedTimeCount; ++i) {
mLastTouchedTime += ELAPSED_TIME_INTERVAL_MILLIS; mLastTouchedTime += ELAPSED_TIME_INTERVAL_MILLIS;
mFc = pushElapsedTime(mFc); mFc = pushElapsedTime(mFc);