diff options
author | Jeff Hamilton <jham@android.com> | 2010-08-18 16:31:59 -0500 |
---|---|---|
committer | Jeff Hamilton <jham@android.com> | 2010-08-18 16:32:22 -0500 |
commit | 64144e49208df145c8362dfa037335c7b9210167 (patch) | |
tree | a3aeb5b1e57935e11c773dab5315b3dc499d3748 /src | |
parent | 059fae07650065571bd902b4b794050d73c5a1ee (diff) | |
download | packages_apps_Browser-64144e49208df145c8362dfa037335c7b9210167.zip packages_apps_Browser-64144e49208df145c8362dfa037335c7b9210167.tar.gz packages_apps_Browser-64144e49208df145c8362dfa037335c7b9210167.tar.bz2 |
Switch the bookmarks and history over to fragments.
Change-Id: If4edc97d1115bfd261136d5b8cfc82afa21f8ced
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/browser/BrowserActivity.java | 4 | ||||
-rw-r--r-- | src/com/android/browser/BrowserBookmarksPage.java | 123 | ||||
-rw-r--r-- | src/com/android/browser/BrowserHistoryPage.java | 160 | ||||
-rw-r--r-- | src/com/android/browser/CombinedBookmarkHistoryActivity.java | 134 | ||||
-rw-r--r-- | src/com/android/browser/provider/BrowserProvider2.java | 2 |
5 files changed, 207 insertions, 216 deletions
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index 99bf017..4461cf0 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -3915,8 +3915,8 @@ public class BrowserActivity extends Activity intent.putExtra("disable_new_window", !mTabControl.canCreateNewTab()); intent.putExtra("touch_icon_url", current.getTouchIconUrl()); if (startWithHistory) { - intent.putExtra(CombinedBookmarkHistoryActivity.STARTING_TAB, - CombinedBookmarkHistoryActivity.HISTORY_TAB); + intent.putExtra(CombinedBookmarkHistoryActivity.STARTING_FRAGMENT, + CombinedBookmarkHistoryActivity.FRAGMENT_ID_HISTORY); } if (newTabMode) { intent.putExtra(CombinedBookmarkHistoryActivity.NEWTAB_MODE, true); diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java index a01f6fa..f9dc5e0 100644 --- a/src/com/android/browser/BrowserBookmarksPage.java +++ b/src/com/android/browser/BrowserBookmarksPage.java @@ -18,6 +18,7 @@ package com.android.browser; import android.app.Activity; import android.app.AlertDialog; +import android.app.Fragment; import android.app.LoaderManager; import android.content.ClipboardManager; import android.content.ClippedData; @@ -37,6 +38,7 @@ import android.provider.BrowserContract; import android.util.Pair; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; +import android.view.LayoutInflater; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; @@ -54,7 +56,7 @@ import java.util.Stack; /** * View showing the user's bookmarks in the browser. */ -public class BrowserBookmarksPage extends Activity implements View.OnCreateContextMenuListener, +public class BrowserBookmarksPage extends Fragment implements View.OnCreateContextMenuListener, LoaderManager.LoaderCallbacks<Cursor>, OnItemClickListener, IconListener, OnClickListener { static final int BOOKMARKS_SAVE = 1; @@ -62,6 +64,7 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte static final int LOADER_BOOKMARKS = 1; + BookmarksHistoryCallbacks mCallbacks; GridView mGrid; BrowserBookmarksAdapter mAdapter; boolean mDisableNewWindow; @@ -81,7 +84,7 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte if (args != null) { args.getInt(BookmarksLoader.ARG_ROOT_FOLDER, 0); } - return new BookmarksLoader(this, rootFolder); + return new BookmarksLoader(getActivity(), rootFolder); } } throw new UnsupportedOperationException("Unknown loader id " + id); @@ -127,6 +130,7 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte @Override public boolean onContextItemSelected(MenuItem item) { + final Activity activity = getActivity(); // It is possible that the view has been canceled when we get to // this point as back has a higher priority if (mCanceled) { @@ -147,7 +151,7 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte editBookmark(i.position); break; case R.id.shortcut_context_menu_id: - sendBroadcast(createShortcutIntent(i.position)); + activity.sendBroadcast(createShortcutIntent(i.position)); break; case R.id.delete_context_menu_id: displayRemoveBookmarkDialog(i.position); @@ -157,7 +161,7 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte break; case R.id.share_link_context_menu_id: { Cursor cursor = (Cursor) mAdapter.getItem(i.position); - BrowserActivity.sharePage(BrowserBookmarksPage.this, + BrowserActivity.sharePage(activity, cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE), cursor.getString(BookmarksLoader.COLUMN_INDEX_URL), getBitmap(cursor, BookmarksLoader.COLUMN_INDEX_FAVICON), @@ -168,10 +172,8 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte copy(getUrl(i.position)); break; case R.id.homepage_context_menu_id: { - BrowserSettings.getInstance().setHomePage(this, - getUrl(i.position)); - Toast.makeText(this, R.string.homepage_set, - Toast.LENGTH_LONG).show(); + BrowserSettings.getInstance().setHomePage(activity, getUrl(i.position)); + Toast.makeText(activity, R.string.homepage_set, Toast.LENGTH_LONG).show(); break; } // Only for the Most visited page @@ -181,7 +183,7 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte String url = cursor.getString(BookmarksLoader.COLUMN_INDEX_URL); // If the site is bookmarked, the item becomes remove from // bookmarks. - Bookmarks.removeFromBookmarks(this, getContentResolver(), url, name); + Bookmarks.removeFromBookmarks(activity, activity.getContentResolver(), url, name); break; } default: @@ -202,7 +204,8 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; - MenuInflater inflater = getMenuInflater(); + final Activity activity = getActivity(); + MenuInflater inflater = activity.getMenuInflater(); inflater.inflate(R.menu.bookmarkscontext, menu); if (mDisableNewWindow) { @@ -210,7 +213,7 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte } if (mContextHeader == null) { - mContextHeader = new BookmarkItem(BrowserBookmarksPage.this); + mContextHeader = new BookmarkItem(activity); } else if (mContextHeader.getParent() != null) { ((ViewGroup) mContextHeader.getParent()).removeView(mContextHeader); } @@ -237,33 +240,39 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte * Create a new BrowserBookmarksPage. */ @Override - protected void onCreate(Bundle icicle) { + public void onCreate(Bundle icicle) { super.onCreate(icicle); - Intent intent = getIntent(); - if (Intent.ACTION_CREATE_SHORTCUT.equals(intent.getAction())) { - mCreateShortcut = true; - setTitle(R.string.browser_bookmarks_page_bookmarks_text); - } - mDisableNewWindow = intent.getBooleanExtra("disable_new_window", false); + Bundle args = getArguments(); + mCreateShortcut = args == null ? false : args.getBoolean("create_shortcut", false); + mDisableNewWindow = args == null ? false : args.getBoolean("disable_new_window", false); + } - setContentView(R.layout.bookmarks); - mEmptyView = findViewById(android.R.id.empty); - mContentView = findViewById(android.R.id.content); + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + mCallbacks = (BookmarksHistoryCallbacks) activity; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.bookmarks, container, false); + mEmptyView = root.findViewById(android.R.id.empty); + mContentView = root.findViewById(android.R.id.content); - mGrid = (GridView) findViewById(R.id.grid); + mGrid = (GridView) root.findViewById(R.id.grid); mGrid.setOnItemClickListener(this); - mGrid.setColumnWidth( - BrowserActivity.getDesiredThumbnailWidth(this)); + mGrid.setColumnWidth(BrowserActivity.getDesiredThumbnailWidth(getActivity())); if (!mCreateShortcut) { mGrid.setOnCreateContextMenuListener(this); } - mUpButton = (Button) findViewById(R.id.up); + mUpButton = (Button) root.findViewById(R.id.up); mUpButton.setEnabled(false); mUpButton.setOnClickListener(this); - mAdapter = new BrowserBookmarksAdapter(this); + mAdapter = new BrowserBookmarksAdapter(getActivity()); mGrid.setAdapter(mAdapter); // Start the loader for the bookmark data @@ -271,8 +280,10 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte // Add our own listener in case there are favicons that have yet to be loaded. CombinedBookmarkHistoryActivity.getIconListenerSet().addListener(this); - } + return root; + } + @Override public void onReceivedIcon(String url, Bitmap icon) { // A new favicon has been loaded, so let anything attached to the adapter know about it @@ -289,15 +300,15 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte return; } if (mCreateShortcut) { - setResultToParent(RESULT_OK, createShortcutIntent(position)); - finish(); + // TODO handle this + createShortcutIntent(position); return; } Cursor cursor = (Cursor) mAdapter.getItem(position); boolean isFolder = cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0; if (!isFolder) { - loadUrl(position); + mCallbacks.onUrlSelected(getUrl(position), false); } else { String title; if (mFolderStack.size() != 0) { @@ -323,25 +334,19 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte String title = cursor.getString(BookmarksLoader.COLUMN_INDEX_URL); Bitmap touchIcon = getBitmap(cursor, BookmarksLoader.COLUMN_INDEX_TOUCH_ICON); Bitmap favicon = getBitmap(cursor, BookmarksLoader.COLUMN_INDEX_FAVICON); - return BookmarkUtils.createAddToHomeIntent(this, url, title, touchIcon, favicon); + return BookmarkUtils.createAddToHomeIntent(getActivity(), url, title, touchIcon, favicon); } private void loadUrl(int position) { - Cursor cursor = (Cursor) mAdapter.getItem(position); - Intent intent = new Intent(cursor.getString(BookmarksLoader.COLUMN_INDEX_URL)); - setResultToParent(RESULT_OK, intent); - finish(); + mCallbacks.onUrlSelected(getUrl(position), false); } private void openInNewWindow(int position) { - Bundle b = new Bundle(); - b.putBoolean("new_window", true); - setResultToParent(RESULT_OK, (new Intent(getUrl(position))).putExtras(b)); - finish(); + mCallbacks.onUrlSelected(getUrl(position), true); } private void editBookmark(int position) { - Intent intent = new Intent(this, AddBookmarkPage.class); + Intent intent = new Intent(getActivity(), AddBookmarkPage.class); Cursor cursor = (Cursor) mAdapter.getItem(position); Bundle item = new Bundle(); item.putString(Browser.BookmarkColumns.TITLE, @@ -359,10 +364,10 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte } @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { + public void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode) { case BOOKMARKS_SAVE: - if (resultCode == RESULT_OK) { + if (resultCode == Activity.RESULT_OK) { Bundle extras; if (data != null && (extras = data.getExtras()) != null) { // If there are extras, then we need to save @@ -415,7 +420,7 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte } if (values.size() > 0) { - getContentResolver().update( + getActivity().getContentResolver().update( ContentUris.withAppendedId(BrowserContract.Bookmarks.CONTENT_URI, id), values, null, null); } @@ -425,10 +430,11 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte // Put up a dialog asking if the user really wants to // delete the bookmark Cursor cursor = (Cursor) mAdapter.getItem(position); - new AlertDialog.Builder(this) + Context context = getActivity(); + new AlertDialog.Builder(context) .setTitle(R.string.delete_bookmark) .setIcon(android.R.drawable.ic_dialog_alert) - .setMessage(getText(R.string.delete_bookmark_warning).toString().replace( + .setMessage(context.getText(R.string.delete_bookmark_warning).toString().replace( "%s", cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE))) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @@ -446,7 +452,8 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte } private void copy(CharSequence text) { - ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); + ClipboardManager cm = (ClipboardManager) getActivity().getSystemService( + Context.CLIPBOARD_SERVICE); cm.setPrimaryClip(new ClippedData(null, null, new ClippedData.Item(text))); } @@ -457,28 +464,6 @@ public class BrowserBookmarksPage extends Activity implements View.OnCreateConte Cursor cursor = (Cursor) mAdapter.getItem(position); String url = cursor.getString(BookmarksLoader.COLUMN_INDEX_URL); String title = cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE); - Bookmarks.removeFromBookmarks(null, getContentResolver(), url, title); + Bookmarks.removeFromBookmarks(null, getActivity().getContentResolver(), url, title); } - - @Override - public void onBackPressed() { - setResultToParent(RESULT_CANCELED, null); - mCanceled = true; - super.onBackPressed(); - } - - // This Activity is generally a sub-Activity of - // CombinedBookmarkHistoryActivity. In that situation, we need to pass our - // result code up to our parent. However, if someone calls this Activity - // directly, then this has no parent, and it needs to set it on itself. - private void setResultToParent(int resultCode, Intent data) { - Activity parent = getParent(); - if (parent == null) { - setResult(resultCode, data); - } else { - ((CombinedBookmarkHistoryActivity) parent).setResultFromChild( - resultCode, data); - } - } - } diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java index 8116b97..2295804 100644 --- a/src/com/android/browser/BrowserHistoryPage.java +++ b/src/com/android/browser/BrowserHistoryPage.java @@ -17,7 +17,7 @@ package com.android.browser; import android.app.Activity; -import android.app.ExpandableListActivity; +import android.app.Fragment; import android.app.LoaderManager.LoaderCallbacks; import android.content.ClipboardManager; import android.content.Context; @@ -34,27 +34,30 @@ import android.provider.Browser; import android.provider.BrowserContract.History; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.view.ViewStub; import android.webkit.WebIconDatabase.IconListener; import android.widget.ExpandableListView; import android.widget.ExpandableListView.ExpandableListContextMenuInfo; +import android.widget.ExpandableListView.OnChildClickListener; import android.widget.Toast; /** * Activity for displaying the browser's history, divided into * days of viewing. */ -public class BrowserHistoryPage extends ExpandableListActivity - implements LoaderCallbacks<Cursor> { +public class BrowserHistoryPage extends Fragment + implements LoaderCallbacks<Cursor>, OnChildClickListener { static final int LOADER_HISTORY = 1; + BookmarksHistoryCallbacks mCallbacks; + ExpandableListView mList; + View mEmptyView; HistoryAdapter mAdapter; boolean mDisableNewWindow; HistoryItem mContextHeader; @@ -86,24 +89,9 @@ public class BrowserHistoryPage extends ExpandableListActivity static final int INDEX_FAVICON = 4; } - /** - * Report back to the calling activity to load a site. - * @param url Site to load. - * @param newWindow True if the URL should be loaded in a new window - */ - private void loadUrl(String url, boolean newWindow) { - Intent intent = new Intent().setAction(url); - if (newWindow) { - Bundle b = new Bundle(); - b.putBoolean("new_window", true); - intent.putExtras(b); - } - setResultToParent(RESULT_OK, intent); - finish(); - } - private void copy(CharSequence text) { - ClipboardManager cm = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); + ClipboardManager cm = (ClipboardManager) getActivity().getSystemService( + Context.CLIPBOARD_SERVICE); cm.setText(text); } @@ -111,7 +99,7 @@ public class BrowserHistoryPage extends ExpandableListActivity public Loader<Cursor> onCreateLoader(int id, Bundle args) { switch (id) { case LOADER_HISTORY: { - CursorLoader loader = new CursorLoader(this, History.CONTENT_URI, + CursorLoader loader = new CursorLoader(getActivity(), History.CONTENT_URI, HistoryQuery.PROJECTION, null, null, null); return loader; } @@ -130,23 +118,17 @@ public class BrowserHistoryPage extends ExpandableListActivity // Add an empty view late, so it does not claim an empty // history before the adapter is present - final ExpandableListView list = getExpandableListView(); - View v = new ViewStub(this, R.layout.empty_history); - addContentView(v, new LayoutParams( - LayoutParams.MATCH_PARENT, - LayoutParams.MATCH_PARENT)); - list.setEmptyView(v); + mList.setEmptyView(mEmptyView); // Do not post the runnable if there is nothing in the list. - if (list.getExpandableListAdapter().getGroupCount() > 0) { - list.post(new Runnable() { + if (mList.getExpandableListAdapter().getGroupCount() > 0) { + mList.post(new Runnable() { @Override public void run() { // In case the history gets cleared before this // event happens - if (list.getExpandableListAdapter() - .getGroupCount() > 0) { - list.expandGroup(0); + if (mList.getExpandableListAdapter().getGroupCount() > 0) { + mList.expandGroup(0); } } }); @@ -159,68 +141,69 @@ public class BrowserHistoryPage extends ExpandableListActivity } } } - + @Override - protected void onCreate(Bundle icicle) { + public void onCreate(Bundle icicle) { super.onCreate(icicle); - setTitle(R.string.browser_history); - getExpandableListView().setOnCreateContextMenuListener(this); - - mAdapter = new HistoryAdapter(this); - setListAdapter(mAdapter); + setHasOptionsMenu(true); - mDisableNewWindow = getIntent().getBooleanExtra("disable_new_window", false); + Bundle args = getArguments(); + mDisableNewWindow = args.getBoolean("disable_new_window", false); + } - // Register to receive icons in case they haven't all been loaded. - CombinedBookmarkHistoryActivity.getIconListenerSet().addListener(mIconReceiver); + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + mCallbacks = (BookmarksHistoryCallbacks) activity; + } - Activity parent = getParent(); - if (null == parent - || !(parent instanceof CombinedBookmarkHistoryActivity)) { - throw new AssertionError("history page can only be viewed as a tab" - + "in CombinedBookmarkHistoryActivity"); - } + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.history, container, false); + mList = (ExpandableListView) root.findViewById(android.R.id.list); + mList.setOnCreateContextMenuListener(this); + mList.setOnChildClickListener(this); + mAdapter = new HistoryAdapter(getActivity()); + mList.setAdapter(mAdapter); - // initialize the result to canceled, so that if the user just presses - // back then it will have the correct result - setResultToParent(RESULT_CANCELED, null); + mEmptyView = root.findViewById(android.R.id.empty); // Start the loader getLoaderManager().initLoader(LOADER_HISTORY, null, this); + + // Register to receive icons in case they haven't all been loaded. + CombinedBookmarkHistoryActivity.getIconListenerSet().addListener(mIconReceiver); + + return root; } @Override - protected void onDestroy() { + public void onDestroy() { super.onDestroy(); - CombinedBookmarkHistoryActivity.getIconListenerSet() - .removeListener(mIconReceiver); + CombinedBookmarkHistoryActivity.getIconListenerSet().removeListener(mIconReceiver); } @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - MenuInflater inflater = getMenuInflater(); + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.history, menu); - return true; } @Override - public boolean onPrepareOptionsMenu(Menu menu) { + public void onPrepareOptionsMenu(Menu menu) { menu.findItem(R.id.clear_history_menu_id).setVisible( - Browser.canClearHistory(this.getContentResolver())); - return true; + Browser.canClearHistory(getActivity().getContentResolver())); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.clear_history_menu_id: - Browser.clearHistory(getContentResolver()); + Browser.clearHistory(getActivity().getContentResolver()); // BrowserHistoryPage is always a child of // CombinedBookmarkHistoryActivity - ((CombinedBookmarkHistoryActivity) getParent()) - .removeParentChildRelationShips(); + mCallbacks.onRemoveParentChildRelationShips(); return true; default: @@ -230,24 +213,23 @@ public class BrowserHistoryPage extends ExpandableListActivity } @Override - public void onCreateContextMenu(ContextMenu menu, View v, - ContextMenuInfo menuInfo) { - ExpandableListContextMenuInfo i = - (ExpandableListContextMenuInfo) menuInfo; + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { + ExpandableListContextMenuInfo i = (ExpandableListContextMenuInfo) menuInfo; // Do not allow a context menu to come up from the group views. if (!(i.targetView instanceof HistoryItem)) { return; } // Inflate the menu - MenuInflater inflater = getMenuInflater(); + Activity parent = getActivity(); + MenuInflater inflater = parent.getMenuInflater(); inflater.inflate(R.menu.historycontext, menu); HistoryItem historyItem = (HistoryItem) i.targetView; // Setup the header if (mContextHeader == null) { - mContextHeader = new HistoryItem(this); + mContextHeader = new HistoryItem(parent); } else if (mContextHeader.getParent() != null) { ((ViewGroup) mContextHeader.getParent()).removeView(mContextHeader); } @@ -264,7 +246,7 @@ public class BrowserHistoryPage extends ExpandableListActivity item.setTitle(R.string.remove_from_bookmarks); } // decide whether to show the share link option - PackageManager pm = getPackageManager(); + PackageManager pm = parent.getPackageManager(); Intent send = new Intent(Intent.ACTION_SEND); send.setType("text/plain"); ResolveInfo ri = pm.resolveActivity(send, PackageManager.MATCH_DEFAULT_ONLY); @@ -280,35 +262,35 @@ public class BrowserHistoryPage extends ExpandableListActivity HistoryItem historyItem = (HistoryItem) i.targetView; String url = historyItem.getUrl(); String title = historyItem.getName(); + Activity activity = getActivity(); switch (item.getItemId()) { case R.id.open_context_menu_id: - loadUrl(url, false); + mCallbacks.onUrlSelected(url, false); return true; case R.id.new_window_context_menu_id: - loadUrl(url, true); + mCallbacks.onUrlSelected(url, true); return true; case R.id.save_to_bookmarks_menu_id: if (historyItem.isBookmark()) { - Bookmarks.removeFromBookmarks(this, getContentResolver(), + Bookmarks.removeFromBookmarks(activity, activity.getContentResolver(), url, title); } else { - Browser.saveBookmark(this, title, url); + Browser.saveBookmark(activity, title, url); } return true; case R.id.share_link_context_menu_id: - Browser.sendString(this, url, - getText(R.string.choosertitle_sharevia).toString()); + Browser.sendString(activity, url, + activity.getText(R.string.choosertitle_sharevia).toString()); return true; case R.id.copy_url_context_menu_id: copy(url); return true; case R.id.delete_context_menu_id: - Browser.deleteFromHistory(getContentResolver(), url); + Browser.deleteFromHistory(activity.getContentResolver(), url); return true; case R.id.homepage_context_menu_id: - BrowserSettings.getInstance().setHomePage(this, url); - Toast.makeText(this, R.string.homepage_set, - Toast.LENGTH_LONG).show(); + BrowserSettings.getInstance().setHomePage(activity, url); + Toast.makeText(activity, R.string.homepage_set, Toast.LENGTH_LONG).show(); return true; default: break; @@ -320,20 +302,12 @@ public class BrowserHistoryPage extends ExpandableListActivity public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { if (v instanceof BookmarkItem) { - loadUrl(((BookmarkItem) v).getUrl(), false); + mCallbacks.onUrlSelected(((BookmarkItem) v).getUrl(), false); return true; } return false; } - // This Activity is always a sub-Activity of - // CombinedBookmarkHistoryActivity. Therefore, we need to pass our - // result code up to our parent. - private void setResultToParent(int resultCode, Intent data) { - ((CombinedBookmarkHistoryActivity) getParent()).setResultFromChild( - resultCode, data); - } - private class HistoryAdapter extends DateSortedExpandableListAdapter { HistoryAdapter(Context context) { super(context, HistoryQuery.INDEX_DATE_LAST_VISITED); @@ -344,7 +318,7 @@ public class BrowserHistoryPage extends ExpandableListActivity View convertView, ViewGroup parent) { BookmarkItem item; if (null == convertView || !(convertView instanceof BookmarkItem)) { - item = new BookmarkItem(BrowserHistoryPage.this); + item = new BookmarkItem(getContext()); // Add padding on the left so it will be indented from the // arrows on the group views. item.setPadding(item.getPaddingLeft() + 10, diff --git a/src/com/android/browser/CombinedBookmarkHistoryActivity.java b/src/com/android/browser/CombinedBookmarkHistoryActivity.java index 78fcb4b..35267c0 100644 --- a/src/com/android/browser/CombinedBookmarkHistoryActivity.java +++ b/src/com/android/browser/CombinedBookmarkHistoryActivity.java @@ -17,22 +17,39 @@ package com.android.browser; import android.app.Activity; -import android.app.TabActivity; +import android.app.Fragment; +import android.app.FragmentManager; +import android.app.FragmentTransaction; import android.content.Intent; -import android.content.res.Resources; +import android.database.MatrixCursor; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.provider.Browser; +import android.view.View; import android.webkit.WebIconDatabase; import android.webkit.WebIconDatabase.IconListener; -import android.widget.TabHost; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; +import android.widget.SimpleCursorAdapter; import java.util.HashMap; import java.util.Vector; -public class CombinedBookmarkHistoryActivity extends TabActivity - implements TabHost.OnTabChangeListener { +interface BookmarksHistoryCallbacks { + public void onUrlSelected(String url, boolean newWindow); + public void onRemoveParentChildRelationShips(); +} + +public class CombinedBookmarkHistoryActivity extends Activity + implements BookmarksHistoryCallbacks, OnItemClickListener { + final static String NEWTAB_MODE = "newtab_mode"; + final static String STARTING_FRAGMENT = "fragment"; + + final static int FRAGMENT_ID_BOOKMARKS = 1; + final static int FRAGMENT_ID_HISTORY = 2; + /** * Used to inform BrowserActivity to remove the parent/child relationships * from all the tabs. @@ -53,11 +70,7 @@ public class CombinedBookmarkHistoryActivity extends TabActivity */ private boolean mNewTabMode; - /* package */ static String BOOKMARKS_TAB = "bookmark"; - /* package */ static String HISTORY_TAB = "history"; - /* package */ static String STARTING_TAB = "tab"; - - final static String NEWTAB_MODE = "newtab_mode"; + long mCurrentFragment; static class IconListenerSet implements IconListener { // Used to store favicons as we get them from the database @@ -70,6 +83,7 @@ public class CombinedBookmarkHistoryActivity extends TabActivity mUrlsToIcons = new HashMap<String, Bitmap>(); mListeners = new Vector<IconListener>(); } + @Override public void onReceivedIcon(String url, Bitmap icon) { mUrlsToIcons.put(url, icon); for (IconListener listener : mListeners) { @@ -83,9 +97,10 @@ public class CombinedBookmarkHistoryActivity extends TabActivity mListeners.remove(listener); } public Bitmap getFavicon(String url) { - return (Bitmap) mUrlsToIcons.get(url); + return mUrlsToIcons.get(url); } } + private static IconListenerSet sIconListenerSet; static IconListenerSet getIconListenerSet() { if (null == sIconListenerSet) { @@ -97,75 +112,77 @@ public class CombinedBookmarkHistoryActivity extends TabActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.tabs); + setContentView(R.layout.bookmarks_history); setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); - getTabHost().setOnTabChangedListener(this); + ListView list = (ListView) findViewById(android.R.id.list); + list.setOnItemClickListener(this); + MatrixCursor cursor = new MatrixCursor(new String[] { "name", "_id" }); + cursor.newRow().add(getString(R.string.bookmarks)).add(FRAGMENT_ID_BOOKMARKS); + cursor.newRow().add(getString(R.string.history)).add(FRAGMENT_ID_HISTORY); + list.setAdapter(new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, + new String[] { "name" }, new int[] { android.R.id.text1 })); + int startingFragment = FRAGMENT_ID_BOOKMARKS; Bundle extras = getIntent().getExtras(); - if (extras != null) { mNewTabMode = extras.getBoolean(NEWTAB_MODE); + startingFragment = extras.getInt(STARTING_FRAGMENT, FRAGMENT_ID_BOOKMARKS); } - Intent bookmarksIntent = new Intent(this, BrowserBookmarksPage.class); - if (extras != null) { - bookmarksIntent.putExtras(extras); - } - createTab(bookmarksIntent, R.string.tab_bookmarks, - R.drawable.browser_bookmark_tab, BOOKMARKS_TAB); - - Intent historyIntent = new Intent(this, BrowserHistoryPage.class); - String defaultTab = null; - if (extras != null) { - historyIntent.putExtras(extras); - defaultTab = extras.getString(STARTING_TAB); - } - createTab(historyIntent, R.string.tab_history, - R.drawable.browser_history_tab, HISTORY_TAB); - - if (defaultTab != null) { - getTabHost().setCurrentTab(2); - } + // Start up the default fragment + loadFragment(startingFragment); // XXX: Must do this before launching the AsyncTask to avoid a // potential crash if the icon database has not been created. WebIconDatabase.getInstance(); + // Do this every time we launch the activity in case a new favicon was // added to the webkit db. (new AsyncTask<Void, Void, Void>() { + @Override public Void doInBackground(Void... v) { Browser.requestAllIcons(getContentResolver(), - Browser.BookmarkColumns.FAVICON + " is NULL", - getIconListenerSet()); + Browser.BookmarkColumns.FAVICON + " is NULL", getIconListenerSet()); return null; } }).execute(); } - private void createTab(Intent intent, int labelResId, int iconResId, - String tab) { - Resources resources = getResources(); - TabHost tabHost = getTabHost(); - tabHost.addTab(tabHost.newTabSpec(tab).setIndicator( - resources.getText(labelResId), resources.getDrawable(iconResId)) - .setContent(intent)); - } - // Copied from DialTacts Activity - /** {@inheritDoc} */ - public void onTabChanged(String tabId) { - Activity activity = getLocalActivityManager().getActivity(tabId); - if (activity != null) { - activity.onWindowFocusChanged(true); + private void loadFragment(int id) { + String fragmentClassName; + switch (id) { + case FRAGMENT_ID_BOOKMARKS: + fragmentClassName = BrowserBookmarksPage.class.getName(); + break; + case FRAGMENT_ID_HISTORY: + fragmentClassName = BrowserHistoryPage.class.getName(); + break; + default: + throw new IllegalArgumentException(); } + mCurrentFragment = id; + + FragmentManager fm = getFragmentManager(); + FragmentTransaction transaction = fm.openTransaction(); + Fragment frag = Fragment.instantiate(this, fragmentClassName, getIntent().getExtras()); + transaction.replace(R.id.fragment, frag); + transaction.commit(); + } + + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + if (id == mCurrentFragment) return; + loadFragment((int) id); } /** * Store extra data in the Intent to return to the calling Activity to tell * it to clear the parent/child relationships from all tabs. */ - /* package */ void removeParentChildRelationShips() { + @Override + public void onRemoveParentChildRelationShips() { mExtraData = BrowserSettings.PREF_CLEAR_HISTORY; } @@ -175,7 +192,7 @@ public class CombinedBookmarkHistoryActivity extends TabActivity * @param resultCode Uses same codes as Activity.setResult * @param data Intent returned to onActivityResult. */ - /* package */ void setResultFromChild(int resultCode, Intent data) { + private void setResultFromChild(int resultCode, Intent data) { mResultCode = resultCode; mResultData = data; } @@ -194,4 +211,19 @@ public class CombinedBookmarkHistoryActivity extends TabActivity setResult(mResultCode, mResultData); super.finish(); } + + /** + * Report back to the calling activity to load a site. + * @param url Site to load. + * @param newWindow True if the URL should be loaded in a new window + */ + @Override + public void onUrlSelected(String url, boolean newWindow) { + Intent intent = new Intent().setAction(url); + if (newWindow) { + intent.putExtra("new_window", true); + } + setResultFromChild(RESULT_OK, intent); + finish(); + } } diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java index ab24c03..d8eeee3 100644 --- a/src/com/android/browser/provider/BrowserProvider2.java +++ b/src/com/android/browser/provider/BrowserProvider2.java @@ -97,12 +97,12 @@ public class BrowserProvider2 extends SQLiteContentProvider { // Bookmarks HashMap<String, String> map = BOOKMARKS_PROJECTION_MAP; + map.put(Bookmarks._ID, qualifyColumn(TABLE_BOOKMARKS, Bookmarks._ID)); map.put(Bookmarks.TITLE, Bookmarks.TITLE); map.put(Bookmarks.URL, Bookmarks.URL); map.put(Bookmarks.FAVICON, Bookmarks.FAVICON); map.put(Bookmarks.THUMBNAIL, Bookmarks.THUMBNAIL); map.put(Bookmarks.TOUCH_ICON, Bookmarks.TOUCH_ICON); - map.put(Bookmarks._ID, TABLE_BOOKMARKS + "._id AS _id"); map.put(Bookmarks.IS_FOLDER, Bookmarks.IS_FOLDER); map.put(Bookmarks.PARENT, Bookmarks.PARENT); map.put(Bookmarks.POSITION, Bookmarks.POSITION); |