Java 类android.provider.UserDictionary.Words 实例源码

项目:keepass2android    文件:UserDictionary.java   
public UserDictionary(Context context, String locale) {
    super(context, Suggest.DIC_USER);
    mLocale = locale;
    // Perform a managed query. The Activity will handle closing and requerying the cursor
    // when needed.
    ContentResolver cres = context.getContentResolver();

    cres.registerContentObserver(Words.CONTENT_URI, true, mObserver = new ContentObserver(null) {
        @Override
        public void onChange(boolean self) {
            setRequiresReload(true);
        }
    });

    loadDictionary();
}
项目:AOSP-Kayboard-7.1.2    文件:UserBinaryDictionary.java   
private void addWordsLocked(final Cursor cursor) {
    if (cursor == null) return;
    if (cursor.moveToFirst()) {
        final int indexWord = cursor.getColumnIndex(Words.WORD);
        final int indexFrequency = cursor.getColumnIndex(Words.FREQUENCY);
        while (!cursor.isAfterLast()) {
            final String word = cursor.getString(indexWord);
            final int frequency = cursor.getInt(indexFrequency);
            final int adjustedFrequency = scaleFrequencyFromDefaultToLatinIme(frequency);
            // Safeguard against adding really long words.
            if (word.length() <= MAX_WORD_LENGTH) {
                runGCIfRequiredLocked(true /* mindsBlockByGC */);
                addUnigramLocked(word, adjustedFrequency, false /* isNotAWord */,
                        false /* isPossiblyOffensive */,
                        BinaryDictionary.NOT_A_VALID_TIMESTAMP);
            }
            cursor.moveToNext();
        }
    }
}
项目:KeePass2Android    文件:UserDictionary.java   
public UserDictionary(Context context, String locale) {
    super(context, Suggest.DIC_USER);
    mLocale = locale;
    // Perform a managed query. The Activity will handle closing and requerying the cursor
    // when needed.
    ContentResolver cres = context.getContentResolver();

    cres.registerContentObserver(Words.CONTENT_URI, true, mObserver = new ContentObserver(null) {
        @Override
        public void onChange(boolean self) {
            setRequiresReload(true);
        }
    });

    loadDictionary();
}
项目:Fictionary    文件:MainActivity.java   
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView dictListView = (ListView) findViewById(R.id.dictionary_list_view);
    ContentResolver resolver = getContentResolver();
    Cursor cursor = resolver.query(UserDictionary.Words.CONTENT_URI, null, null, null, null);
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.listview_layout, cursor, COLUMNS_TO_BE_FOUND, LAYOUT_ITEMS_TO_FILL, 0);
    dictListView.setAdapter(adapter);
    registerForContextMenu(dictListView);
}
项目:hackerskeyboard    文件:UserDictionary.java   
public UserDictionary(Context context, String locale) {
    super(context, Suggest.DIC_USER);
    mLocale = locale;
    // Perform a managed query. The Activity will handle closing and requerying the cursor
    // when needed.
    ContentResolver cres = context.getContentResolver();

    cres.registerContentObserver(Words.CONTENT_URI, true, mObserver = new ContentObserver(null) {
        @Override
        public void onChange(boolean self) {
            setRequiresReload(true);
        }
    });

    loadDictionary();
}
项目:android-kioskime    文件:UserBinaryDictionary.java   
private void addWords(final Cursor cursor) {
    final boolean hasShortcutColumn = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
    clearFusionDictionary();
    if (cursor == null) return;
    if (cursor.moveToFirst()) {
        final int indexWord = cursor.getColumnIndex(Words.WORD);
        final int indexShortcut = hasShortcutColumn ? cursor.getColumnIndex(SHORTCUT) : 0;
        final int indexFrequency = cursor.getColumnIndex(Words.FREQUENCY);
        while (!cursor.isAfterLast()) {
            final String word = cursor.getString(indexWord);
            final String shortcut = hasShortcutColumn ? cursor.getString(indexShortcut) : null;
            final int frequency = cursor.getInt(indexFrequency);
            final int adjustedFrequency = scaleFrequencyFromDefaultToLatinIme(frequency);
            // Safeguard against adding really long words.
            if (word.length() < MAX_WORD_LENGTH) {
                super.addWord(word, null, adjustedFrequency, false /* isNotAWord */);
            }
            if (null != shortcut && shortcut.length() < MAX_WORD_LENGTH) {
                super.addWord(shortcut, word, adjustedFrequency, true /* isNotAWord */);
            }
            cursor.moveToNext();
        }
    }
}
项目:android-kioskime    文件:UserDictionaryCompatUtils.java   
@SuppressWarnings("deprecation")
public static void addWord(final Context context, final String word, final int freq,
        final String shortcut, final Locale locale) {
    if (hasNewerAddWord()) {
        CompatUtils.invoke(Words.class, null, METHOD_addWord, context, word, freq, shortcut,
                locale);
    } else {
        // Fall back to the pre-JellyBean method.
        final int localeType;
        if (null == locale) {
            localeType = Words.LOCALE_TYPE_ALL;
        } else {
            final Locale currentLocale = context.getResources().getConfiguration().locale;
            if (locale.equals(currentLocale)) {
                localeType = Words.LOCALE_TYPE_CURRENT;
            } else {
                localeType = Words.LOCALE_TYPE_ALL;
            }
        }
        Words.addWord(context, word, freq, localeType);
    }
}
项目:keepass2android    文件:UserDictionary.java   
/**
 * Adds a word to the dictionary and makes it persistent.
 * @param word the word to add. If the word is capitalized, then the dictionary will
 * recognize it as a capitalized word when searched.
 * @param frequency the frequency of occurrence of the word. A frequency of 255 is considered
 * the highest.
 * @TODO use a higher or float range for frequency
 */
@Override
public synchronized void addWord(String word, int frequency) {
    // Force load the dictionary here synchronously
    if (getRequiresReload()) loadDictionaryAsync();
    // Safeguard against adding long words. Can cause stack overflow.
    if (word.length() >= getMaxWordLength()) return;

    super.addWord(word, frequency);

    // Update the user dictionary provider
    final ContentValues values = new ContentValues(5);
    values.put(Words.WORD, word);
    values.put(Words.FREQUENCY, frequency);
    values.put(Words.LOCALE, mLocale);
    values.put(Words.APP_ID, 0);

    final ContentResolver contentResolver = getContext().getContentResolver();
    new Thread("addWord") {
        public void run() {
            contentResolver.insert(Words.CONTENT_URI, values);
        }
    }.start();

    // In case the above does a synchronous callback of the change observer
    setRequiresReload(false);
}
项目:AOSP-Kayboard-7.1.2    文件:AndroidWordLevelSpellCheckerSession.java   
AndroidWordLevelSpellCheckerSession(final AndroidSpellCheckerService service) {
    mService = service;
    final ContentResolver cres = service.getContentResolver();

    mObserver = new ContentObserver(null) {
        @Override
        public void onChange(boolean self) {
            mSuggestionsCache.clearCache();
        }
    };
    cres.registerContentObserver(Words.CONTENT_URI, true, mObserver);
}
项目:KeePass2Android    文件:UserDictionary.java   
/**
 * Adds a word to the dictionary and makes it persistent.
 * @param word the word to add. If the word is capitalized, then the dictionary will
 * recognize it as a capitalized word when searched.
 * @param frequency the frequency of occurrence of the word. A frequency of 255 is considered
 * the highest.
 * @TODO use a higher or float range for frequency
 */
@Override
public synchronized void addWord(String word, int frequency) {
    // Force load the dictionary here synchronously
    if (getRequiresReload()) loadDictionaryAsync();
    // Safeguard against adding long words. Can cause stack overflow.
    if (word.length() >= getMaxWordLength()) return;

    super.addWord(word, frequency);

    // Update the user dictionary provider
    final ContentValues values = new ContentValues(5);
    values.put(Words.WORD, word);
    values.put(Words.FREQUENCY, frequency);
    values.put(Words.LOCALE, mLocale);
    values.put(Words.APP_ID, 0);

    final ContentResolver contentResolver = getContext().getContentResolver();
    new Thread("addWord") {
        public void run() {
            contentResolver.insert(Words.CONTENT_URI, values);
        }
    }.start();

    // In case the above does a synchronous callback of the change observer
    setRequiresReload(false);
}
项目:hackerskeyboard    文件:UserDictionary.java   
@Override
public void loadDictionaryAsync() {
    Cursor cursor = getContext().getContentResolver()
            .query(Words.CONTENT_URI, PROJECTION, "(locale IS NULL) or (locale=?)", 
                    new String[] { mLocale }, null);
    addWords(cursor);
}
项目:hackerskeyboard    文件:UserDictionary.java   
/**
 * Adds a word to the dictionary and makes it persistent.
 * @param word the word to add. If the word is capitalized, then the dictionary will
 * recognize it as a capitalized word when searched.
 * @param frequency the frequency of occurrence of the word. A frequency of 255 is considered
 * the highest.
 * @TODO use a higher or float range for frequency
 */
@Override
public synchronized void addWord(String word, int frequency) {
    // Force load the dictionary here synchronously
    if (getRequiresReload()) loadDictionaryAsync();
    // Safeguard against adding long words. Can cause stack overflow.
    if (word.length() >= getMaxWordLength()) return;

    super.addWord(word, frequency);

    // Update the user dictionary provider
    final ContentValues values = new ContentValues(5);
    values.put(Words.WORD, word);
    values.put(Words.FREQUENCY, frequency);
    values.put(Words.LOCALE, mLocale);
    values.put(Words.APP_ID, 0);

    final ContentResolver contentResolver = getContext().getContentResolver();
    new Thread("addWord") {
        public void run() {
            contentResolver.insert(Words.CONTENT_URI, values);
        }
    }.start();

    // In case the above does a synchronous callback of the change observer
    setRequiresReload(false);
}
项目:android-kioskime    文件:AndroidWordLevelSpellCheckerSession.java   
AndroidWordLevelSpellCheckerSession(final AndroidSpellCheckerService service) {
    mService = service;
    final ContentResolver cres = service.getContentResolver();

    mObserver = new ContentObserver(null) {
        @Override
        public void onChange(boolean self) {
            mSuggestionsCache.clearCache();
        }
    };
    cres.registerContentObserver(Words.CONTENT_URI, true, mObserver);
}
项目:android-kioskime    文件:UserBinaryDictionary.java   
private String getChangedWordForUri(final Uri uri) {
    final Cursor cursor = mContext.getContentResolver().query(uri,
            PROJECTION_QUERY, null, null, null);
    if (cursor == null) return null;
    try {
        if (!cursor.moveToFirst()) return null;
        final int indexWord = cursor.getColumnIndex(Words.WORD);
        return cursor.getString(indexWord);
    } finally {
        cursor.close();
    }
}
项目:android-kioskime    文件:UserBinaryDictionary.java   
public boolean isEnabled() {
    final ContentResolver cr = mContext.getContentResolver();
    final ContentProviderClient client = cr.acquireContentProviderClient(Words.CONTENT_URI);
    if (client != null) {
        client.release();
        return true;
    } else {
        return false;
    }
}
项目:android-kioskime    文件:UserBinaryDictionary.java   
public UserBinaryDictionary(final Context context, final String locale,
        final boolean alsoUseMoreRestrictiveLocales) {
    super(context, getFilenameWithLocale(NAME, locale), Dictionary.TYPE_USER);
    if (null == locale) throw new NullPointerException(); // Catch the error earlier
    if (SubtypeLocale.NO_LANGUAGE.equals(locale)) {
        // If we don't have a locale, insert into the "all locales" user dictionary.
        mLocale = USER_DICTIONARY_ALL_LANGUAGES;
    } else {
        mLocale = locale;
    }
    mAlsoUseMoreRestrictiveLocales = alsoUseMoreRestrictiveLocales;
    // Perform a managed query. The Activity will handle closing and re-querying the cursor
    // when needed.
    ContentResolver cres = context.getContentResolver();

    mObserver = new ContentObserver(null) {
        @Override
        public void onChange(final boolean self) {
            // This hook is deprecated as of API level 16 (Build.VERSION_CODES.JELLY_BEAN),
            // but should still be supported for cases where the IME is running on an older
            // version of the platform.
            onChange(self, null);
        }
        // The following hook is only available as of API level 16
        // (Build.VERSION_CODES.JELLY_BEAN), and as such it will only work on JellyBean+
        // devices. On older versions of the platform, the hook above will be called instead.
        @Override
        public void onChange(final boolean self, final Uri uri) {
            setRequiresReload(true);
            // We want to report back to Latin IME in case the user just entered the word.
            // If the user changed the word in the dialog box, then we want to replace
            // what was entered in the text field.
            if (null == uri || !(context instanceof LatinIME)) return;
            final long changedRowId = ContentUris.parseId(uri);
            if (-1 == changedRowId) return; // Unknown content... Not sure why we're here
            final String changedWord = getChangedWordForUri(uri);
            ((LatinIME)context).onWordAddedToUserDictionary(changedWord);
        }
    };
    cres.registerContentObserver(Words.CONTENT_URI, true, mObserver);

    loadDictionary();
}
项目:android-kioskime    文件:UserBinaryDictionary.java   
@Override
public void loadDictionaryAsync() {
    // Split the locale. For example "en" => ["en"], "de_DE" => ["de", "DE"],
    // "en_US_foo_bar_qux" => ["en", "US", "foo_bar_qux"] because of the limit of 3.
    // This is correct for locale processing.
    // For this example, we'll look at the "en_US_POSIX" case.
    final String[] localeElements =
            TextUtils.isEmpty(mLocale) ? new String[] {} : mLocale.split("_", 3);
    final int length = localeElements.length;

    final StringBuilder request = new StringBuilder("(locale is NULL)");
    String localeSoFar = "";
    // At start, localeElements = ["en", "US", "POSIX"] ; localeSoFar = "" ;
    // and request = "(locale is NULL)"
    for (int i = 0; i < length; ++i) {
        // i | localeSoFar    | localeElements
        // 0 | ""             | ["en", "US", "POSIX"]
        // 1 | "en_"          | ["en", "US", "POSIX"]
        // 2 | "en_US_"       | ["en", "en_US", "POSIX"]
        localeElements[i] = localeSoFar + localeElements[i];
        localeSoFar = localeElements[i] + "_";
        // i | request
        // 0 | "(locale is NULL)"
        // 1 | "(locale is NULL) or (locale=?)"
        // 2 | "(locale is NULL) or (locale=?) or (locale=?)"
        request.append(" or (locale=?)");
    }
    // At the end, localeElements = ["en", "en_US", "en_US_POSIX"]; localeSoFar = en_US_POSIX_"
    // and request = "(locale is NULL) or (locale=?) or (locale=?) or (locale=?)"

    final String[] requestArguments;
    // If length == 3, we already have all the arguments we need (common prefix is meaningless
    // inside variants
    if (mAlsoUseMoreRestrictiveLocales && length < 3) {
        request.append(" or (locale like ?)");
        // The following creates an array with one more (null) position
        final String[] localeElementsWithMoreRestrictiveLocalesIncluded =
                Arrays.copyOf(localeElements, length + 1);
        localeElementsWithMoreRestrictiveLocalesIncluded[length] =
                localeElements[length - 1] + "_%";
        requestArguments = localeElementsWithMoreRestrictiveLocalesIncluded;
        // If for example localeElements = ["en"]
        // then requestArguments = ["en", "en_%"]
        // and request = (locale is NULL) or (locale=?) or (locale like ?)
        // If localeElements = ["en", "en_US"]
        // then requestArguments = ["en", "en_US", "en_US_%"]
    } else {
        requestArguments = localeElements;
    }
    final Cursor cursor = mContext.getContentResolver().query(
            Words.CONTENT_URI, PROJECTION_QUERY, request.toString(), requestArguments, null);
    try {
        addWords(cursor);
    } finally {
        if (null != cursor) cursor.close();
    }
}