Add a delete button to quickly delete a word in the user dictionary.

This commit is contained in:
Amith Yamasani
2010-09-23 15:41:50 -07:00
parent 653abb13d8
commit e2ac72b4bc
4 changed files with 91 additions and 10 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
android:paddingLeft="6dip"
android:minHeight="?android:attr/listPreferredItemHeight"/>
<ImageView
android:id="@+id/divider"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginLeft="8dip"
android:src="@drawable/nav_divider"
/>
<ImageView
android:id="@+id/delete_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:paddingLeft="16dip"
android:paddingRight="16dip"
android:paddingTop="8dip"
android:paddingBottom="8dip"
android:src="@drawable/ic_item_delete"
android:background="@android:drawable/list_selector_background"
/>
</LinearLayout>

View File

@@ -41,6 +41,7 @@ import android.view.WindowManager;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AlphabetIndexer;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SectionIndexer;
@@ -59,7 +60,10 @@ public class UserDictionarySettings extends ListFragment implements DialogCreata
private static final String[] QUERY_PROJECTION = {
UserDictionary.Words._ID, UserDictionary.Words.WORD
};
private static final int INDEX_ID = 0;
private static final int INDEX_WORD = 1;
// Either the locale is empty (means the word is applicable to all locales)
// or the word equals our current locale
private static final String QUERY_SELECTION = UserDictionary.Words.LOCALE + "=? OR "
@@ -152,9 +156,9 @@ public class UserDictionarySettings extends ListFragment implements DialogCreata
private ListAdapter createAdapter() {
return new MyAdapter(getActivity(),
android.R.layout.simple_list_item_1, mCursor,
new String[] { UserDictionary.Words.WORD },
new int[] { android.R.id.text1 });
R.layout.user_dictionary_item, mCursor,
new String[] { UserDictionary.Words.WORD, UserDictionary.Words._ID },
new int[] { android.R.id.text1, R.id.delete_button }, this);
}
@Override
@@ -285,15 +289,35 @@ public class UserDictionarySettings extends ListFragment implements DialogCreata
UserDictionary.Words.CONTENT_URI, DELETE_SELECTION, new String[] { word });
}
private static class MyAdapter extends SimpleCursorAdapter implements SectionIndexer {
private AlphabetIndexer mIndexer;
public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
private static class MyAdapter extends SimpleCursorAdapter implements SectionIndexer,
View.OnClickListener {
private AlphabetIndexer mIndexer;
private UserDictionarySettings mSettings;
private ViewBinder mViewBinder = new ViewBinder() {
public boolean setViewValue(View v, Cursor c, int columnIndex) {
if (v instanceof ImageView && columnIndex == INDEX_ID) {
v.setOnClickListener(MyAdapter.this);
v.setTag(c.getString(INDEX_WORD));
return true;
}
return false;
}
};
public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to,
UserDictionarySettings settings) {
super(context, layout, c, from, to);
mSettings = settings;
int wordColIndex = c.getColumnIndexOrThrow(UserDictionary.Words.WORD);
String alphabet = context.getString(com.android.internal.R.string.fast_scroll_alphabet);
mIndexer = new AlphabetIndexer(c, wordColIndex, alphabet);
String alphabet = context.getString(
com.android.internal.R.string.fast_scroll_alphabet);
mIndexer = new AlphabetIndexer(c, wordColIndex, alphabet);
setViewBinder(mViewBinder);
}
public int getPositionForSection(int section) {
@@ -307,5 +331,9 @@ public class UserDictionarySettings extends ListFragment implements DialogCreata
public Object[] getSections() {
return mIndexer.getSections();
}
public void onClick(View v) {
mSettings.deleteWord((String) v.getTag());
}
}
}