16f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi/* 26f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project 36f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * 46f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); 56f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * you may not use this file except in compliance with the License. 66f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * You may obtain a copy of the License at 76f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * 86f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 96f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * 106f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 116f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, 126f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * See the License for the specific language governing permissions and 146f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi * limitations under the License. 156f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi */ 166f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi 176f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagipackage com.android.inputmethod.latin; 186f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi 196f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagiimport java.io.File; 2072278d30478335b914b2a9758fda0131bde9c70eDan Zivkovicimport java.math.BigDecimal; 216f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagiimport java.util.Locale; 226f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi 2388f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovicimport javax.annotation.Nonnull; 2488f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovicimport javax.annotation.Nullable; 2588f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic 266f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagipublic class DictionaryStats { 27743a9b4499c9b53ffedc63f76137ce2eaa3301d0Keisuke Kuroyanagi public static final int NOT_AN_ENTRY_COUNT = -1; 28743a9b4499c9b53ffedc63f76137ce2eaa3301d0Keisuke Kuroyanagi 296f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi public final Locale mLocale; 306d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani public final String mDictType; 316d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani public final String mDictFileName; 326f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi public final long mDictFileSize; 3372278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic public final int mContentVersion; 34ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic public final int mWordCount; 356f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi 3688f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic public DictionaryStats( 3788f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic @Nonnull final Locale locale, 3888f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic @Nonnull final String dictType, 39784233dbc6dda7e702228fc831f3255bb4963f04Dan Zivkovic @Nullable final String dictFileName, 4088f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic @Nullable final File dictFile, 4188f03707aaa9eee60066015b7e954671b2ad0e96Dan Zivkovic final int contentVersion) { 426f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi mLocale = locale; 436d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani mDictType = dictType; 4472278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic mDictFileSize = (dictFile == null || !dictFile.exists()) ? 0 : dictFile.length(); 456d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani mDictFileName = dictFileName; 4672278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic mContentVersion = contentVersion; 47ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic mWordCount = -1; 48ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic } 49ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic 50ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic public DictionaryStats( 51ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic @Nonnull final Locale locale, 52ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic @Nonnull final String dictType, 53ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic final int wordCount) { 54ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic mLocale = locale; 55ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic mDictType = dictType; 56ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic mDictFileSize = wordCount; 57ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic mDictFileName = null; 58ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic mContentVersion = 0; 59ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic mWordCount = wordCount; 6072278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic } 6172278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic 6272278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic public String getFileSizeString() { 6372278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic BigDecimal bytes = new BigDecimal(mDictFileSize); 6472278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic BigDecimal kb = bytes.divide(new BigDecimal(1024), 2, BigDecimal.ROUND_HALF_UP); 6572278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic if (kb.longValue() == 0) { 6672278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic return bytes.toString() + " bytes"; 6772278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic } 6872278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic BigDecimal mb = kb.divide(new BigDecimal(1024), 2, BigDecimal.ROUND_HALF_UP); 6972278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic if (mb.longValue() == 0) { 7072278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic return kb.toString() + " kb"; 7172278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic } 7272278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic return mb.toString() + " Mb"; 7372278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic } 7472278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic 7572278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic @Override 7672278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic public String toString() { 776d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani final StringBuilder builder = new StringBuilder(mDictType); 786d63989197bc6bedbc0b41a6a3dd83deabef9255Jatin Matani if (mDictType.equals(Dictionary.TYPE_MAIN)) { 7972278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic builder.append(" ("); 8072278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic builder.append(mContentVersion); 8172278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic builder.append(")"); 8272278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic } 8372278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic builder.append(": "); 84ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic if (mWordCount > -1) { 85ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic builder.append(mWordCount); 86ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic builder.append(" words"); 87ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic } else { 88ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic builder.append(mDictFileName); 89ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic builder.append(" / "); 90ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic builder.append(getFileSizeString()); 91ec2891b007ac6322bd66aedca217ad4e22b6a85bDan Zivkovic } 9272278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic return builder.toString(); 9372278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic } 9472278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic 9572278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic public static String toString(final Iterable<DictionaryStats> stats) { 9672278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic final StringBuilder builder = new StringBuilder("LM Stats"); 9772278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic for (DictionaryStats stat : stats) { 9872278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic builder.append("\n "); 9972278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic builder.append(stat.toString()); 10072278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic } 10172278d30478335b914b2a9758fda0131bde9c70eDan Zivkovic return builder.toString(); 1026f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi } 1036f2ddddb5b573527d625aee770c9796ce448047eKeisuke Kuroyanagi} 104