diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java index 6b49f9aa6..d5dff10db 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java @@ -17,7 +17,6 @@ package com.android.inputmethod.latin; import android.content.Context; -import android.util.Pair; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.Keyboard; @@ -28,6 +27,7 @@ import com.android.inputmethod.latin.utils.SuggestionResults; import java.io.File; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -172,5 +172,5 @@ public interface DictionaryFacilitator { void dumpDictionaryForDebug(final String dictName); - ArrayList> getStatsOfEnabledSubDicts(); + @Nonnull List getDictionaryStats(final Context context); } diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java index e5d770aee..9ce92da9e 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java @@ -19,7 +19,6 @@ package com.android.inputmethod.latin; import android.content.Context; import android.text.TextUtils; import android.util.Log; -import android.util.Pair; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.Keyboard; @@ -39,6 +38,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -644,12 +644,12 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator { } @Override - public ArrayList> getStatsOfEnabledSubDicts() { - final ArrayList> statsOfEnabledSubDicts = new ArrayList<>(); + @Nonnull public List getDictionaryStats(final Context context) { + final ArrayList statsOfEnabledSubDicts = new ArrayList<>(); for (final String dictType : DYNAMIC_DICTIONARY_TYPES) { final ExpandableBinaryDictionary dictionary = mDictionaryGroup.getSubDict(dictType); if (dictionary == null) continue; - statsOfEnabledSubDicts.add(new Pair<>(dictType, dictionary.getDictionaryStats())); + statsOfEnabledSubDicts.add(dictionary.getDictionaryStats()); } return statsOfEnabledSubDicts; } diff --git a/java/src/com/android/inputmethod/latin/DictionaryStats.java b/java/src/com/android/inputmethod/latin/DictionaryStats.java index 5dd39d3d6..a6b37aa8f 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryStats.java +++ b/java/src/com/android/inputmethod/latin/DictionaryStats.java @@ -17,6 +17,7 @@ package com.android.inputmethod.latin; import java.io.File; +import java.math.BigDecimal; import java.util.Locale; public class DictionaryStats { @@ -26,18 +27,54 @@ public class DictionaryStats { public final String mDictName; public final String mDictFilePath; public final long mDictFileSize; - - public final int mUnigramCount; - public final int mNgramCount; - // TODO: Add more members. + public final int mContentVersion; public DictionaryStats(final Locale locale, final String dictName, final File dictFile, - final int unigramCount, final int ngramCount) { + final int contentVersion) { mLocale = locale; mDictName = dictName; - mDictFilePath = dictFile.getAbsolutePath(); - mDictFileSize = dictFile.length(); - mUnigramCount = unigramCount; - mNgramCount = ngramCount; + mDictFilePath = (dictFile == null) ? null : dictFile.getName(); + mDictFileSize = (dictFile == null || !dictFile.exists()) ? 0 : dictFile.length(); + mContentVersion = contentVersion; + } + + public String getFileSizeString() { + if (mDictFileSize == 0) { + return "0"; + } + BigDecimal bytes = new BigDecimal(mDictFileSize); + BigDecimal kb = bytes.divide(new BigDecimal(1024), 2, BigDecimal.ROUND_HALF_UP); + if (kb.longValue() == 0) { + return bytes.toString() + " bytes"; + } + BigDecimal mb = kb.divide(new BigDecimal(1024), 2, BigDecimal.ROUND_HALF_UP); + if (mb.longValue() == 0) { + return kb.toString() + " kb"; + } + return mb.toString() + " Mb"; + } + + @Override + public String toString() { + final StringBuilder builder = new StringBuilder(mDictName); + if (mDictName.equals(Dictionary.TYPE_MAIN)) { + builder.append(" ("); + builder.append(mContentVersion); + builder.append(")"); + } + builder.append(": "); + builder.append(mDictFilePath); + builder.append(" / "); + builder.append(getFileSizeString()); + return builder.toString(); + } + + public static String toString(final Iterable stats) { + final StringBuilder builder = new StringBuilder("LM Stats"); + for (DictionaryStats stat : stats) { + builder.append("\n "); + builder.append(stat.toString()); + } + return builder.toString(); } } diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java index 80daedd50..1ef7061fb 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java @@ -646,16 +646,6 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { }); } - static int parseEntryCount(final String entryCountStr) { - int entryCount; - try { - entryCount = Integer.parseInt(entryCountStr); - } catch (final NumberFormatException e) { - entryCount = DictionaryStats.NOT_AN_ENTRY_COUNT; - } - return entryCount; - } - public DictionaryStats getDictionaryStats() { reloadDictionaryIfRequired(); final String dictName = mDictName; @@ -664,22 +654,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { asyncExecuteTaskWithLock(mLock.readLock(), new Runnable() { @Override public void run() { - final BinaryDictionary binaryDictionary = getBinaryDictionary(); - if (binaryDictionary == null) { - result.set(new DictionaryStats(mLocale, dictName, dictFile, - DictionaryStats.NOT_AN_ENTRY_COUNT, - DictionaryStats.NOT_AN_ENTRY_COUNT)); - return; - } - final int unigramCount = parseEntryCount( - binaryDictionary.getPropertyForGettingStats( - BinaryDictionary.MAX_UNIGRAM_COUNT_QUERY)); - // TODO: Get dedicated entry counts for bigram, trigram, and so on. - final int ngramCount = parseEntryCount(binaryDictionary.getPropertyForGettingStats( - BinaryDictionary.MAX_BIGRAM_COUNT_QUERY)); - // TODO: Get more information from dictionary. - result.set(new DictionaryStats(mLocale, dictName, dictFile, unigramCount, - ngramCount)); + result.set(new DictionaryStats(mLocale, dictName, dictFile, 0)); } }); return result.get(null /* defaultValue */, TIMEOUT_FOR_READ_OPS_IN_MILLISECONDS);