项目: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,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);
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,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,false /* isNotAWord */);
}
if (null != shortcut && shortcut.length() < MAX_WORD_LENGTH) {
super.addWord(shortcut,word,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,METHOD_addWord,context,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,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,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,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,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,mObserver);
}
项目:android-kioskime
文件:UserBinaryDictionary.java
private String getChangedWordForUri(final Uri uri) {
final Cursor cursor = mContext.getContentResolver().query(uri,PROJECTION_QUERY,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,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","POSIX"] ; localeSoFar = "" ;
// and request = "(locale is NULL)"
for (int i = 0; i < length; ++i) {
// i | localeSoFar | localeElements
// 0 | "" | ["en","POSIX"]
// 1 | "en_" | ["en","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,"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_%"]
} else {
requestArguments = localeElements;
}
final Cursor cursor = mContext.getContentResolver().query(
Words.CONTENT_URI,request.toString(),requestArguments,null);
try {
addWords(cursor);
} finally {
if (null != cursor) cursor.close();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。