Bug 729252 - Cache cursor data for AwesomeBar context menu. r=mfinkle

This commit is contained in:
Brian Nicholson 2012-03-05 13:31:55 -08:00
parent fef4714ccf
commit 84bac5f8c4

View File

@ -97,6 +97,7 @@ public class AwesomeBar extends Activity implements GeckoEventListener {
private AwesomeBarEditText mText;
private ImageButton mGoButton;
private ContentResolver mResolver;
private ContextMenuSubject mContextMenuSubject;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -410,14 +411,25 @@ public class AwesomeBar extends Activity implements GeckoEventListener {
GeckoAppShell.unregisterGeckoEventListener("SearchEngines:Data", this);
}
private Object mContextMenuSubject = null;
private class ContextMenuSubject {
public int id;
public String url;
public byte[] favicon;
public String title;
public ContextMenuSubject(int id, String url, byte[] favicon, String title) {
this.id = id;
this.url = url;
this.favicon = favicon;
this.title = title;
}
};
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, view, menuInfo);
ListView list = (ListView) view;
Object selectedItem = null;
String title = "";
mContextMenuSubject = null;
if (list == findViewById(R.id.history_list)) {
if (!(menuInfo instanceof ExpandableListView.ExpandableListContextMenuInfo)) {
@ -434,12 +446,12 @@ public class AwesomeBar extends Activity implements GeckoEventListener {
return;
ExpandableListView exList = (ExpandableListView) list;
selectedItem = exList.getExpandableListAdapter().getChild(groupPosition, childPosition);
// The history list is backed by a SimpleExpandableListAdapter
@SuppressWarnings("rawtypes")
Map map = (Map) selectedItem;
title = (String) map.get(URLColumns.TITLE);
Map map = (Map) exList.getExpandableListAdapter().getChild(groupPosition, childPosition);
mContextMenuSubject = new ContextMenuSubject(-1, (String)map.get(URLColumns.URL),
(byte[]) map.get(URLColumns.FAVICON), (String)map.get(URLColumns.TITLE));
} else {
if (!(menuInfo instanceof AdapterView.AdapterContextMenuInfo)) {
Log.e(LOGTAG, "menuInfo is not AdapterContextMenuInfo");
@ -447,7 +459,7 @@ public class AwesomeBar extends Activity implements GeckoEventListener {
}
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
selectedItem = list.getItemAtPosition(info.position);
Object selectedItem = list.getItemAtPosition(info.position);
if (!(selectedItem instanceof Cursor)) {
Log.e(LOGTAG, "item at " + info.position + " is not a Cursor");
@ -455,21 +467,19 @@ public class AwesomeBar extends Activity implements GeckoEventListener {
}
Cursor cursor = (Cursor) selectedItem;
title = cursor.getString(cursor.getColumnIndexOrThrow(URLColumns.TITLE));
// Don't show the context menu for folders
if (list == findViewById(R.id.bookmarks_list) &&
cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks.IS_FOLDER)) == 1) {
selectedItem = null;
if (!(list == findViewById(R.id.bookmarks_list) && cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks.IS_FOLDER)) == 1)) {
mContextMenuSubject = new ContextMenuSubject(cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks._ID)),
cursor.getString(cursor.getColumnIndexOrThrow(URLColumns.URL)),
cursor.getBlob(cursor.getColumnIndexOrThrow(URLColumns.FAVICON)),
cursor.getString(cursor.getColumnIndexOrThrow(URLColumns.TITLE))
);
}
}
if (selectedItem == null || !((selectedItem instanceof Cursor) || (selectedItem instanceof Map))) {
mContextMenuSubject = null;
if (mContextMenuSubject == null)
return;
}
mContextMenuSubject = selectedItem;
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.awesomebar_contextmenu, menu);
@ -479,7 +489,7 @@ public class AwesomeBar extends Activity implements GeckoEventListener {
removeBookmarkItem.setVisible(false);
}
menu.setHeaderTitle(title);
menu.setHeaderTitle(mContextMenuSubject.title);
}
@Override
@ -487,27 +497,10 @@ public class AwesomeBar extends Activity implements GeckoEventListener {
if (mContextMenuSubject == null)
return false;
final int id;
final String url;
byte[] b = null;
String title = "";
if (mContextMenuSubject instanceof Cursor) {
Cursor cursor = (Cursor)mContextMenuSubject;
id = cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks._ID));
url = cursor.getString(cursor.getColumnIndexOrThrow(URLColumns.URL));
b = cursor.getBlob(cursor.getColumnIndexOrThrow(URLColumns.FAVICON));
title = cursor.getString(cursor.getColumnIndexOrThrow(URLColumns.TITLE));
} else if (mContextMenuSubject instanceof Map) {
@SuppressWarnings("rawtypes") Map map = (Map)mContextMenuSubject;
id = -1;
url = (String)map.get(URLColumns.URL);
b = (byte[]) map.get(URLColumns.FAVICON);
title = (String)map.get(URLColumns.TITLE);
} else {
return false;
}
mContextMenuSubject = null;
final int id = mContextMenuSubject.id;
final String url = mContextMenuSubject.url;
final byte[] b = mContextMenuSubject.favicon;
final String title = mContextMenuSubject.title;
switch (item.getItemId()) {
case R.id.open_new_tab: {