Switch the bookmarks and history over to fragments.
Change-Id: If4edc97d1115bfd261136d5b8cfc82afa21f8ced
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 @@
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.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 @@
/**
* 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 @@
static final int LOADER_BOOKMARKS = 1;
+ BookmarksHistoryCallbacks mCallbacks;
GridView mGrid;
BrowserBookmarksAdapter mAdapter;
boolean mDisableNewWindow;
@@ -81,7 +84,7 @@
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 @@
@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 @@
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 @@
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 @@
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 @@
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 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 @@
}
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 @@
* 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 @@
// 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 @@
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 @@
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 @@
}
@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 @@
}
if (values.size() > 0) {
- getContentResolver().update(
+ getActivity().getContentResolver().update(
ContentUris.withAppendedId(BrowserContract.Bookmarks.CONTENT_URI, id),
values, null, null);
}
@@ -425,10 +430,11 @@
// 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 @@
}
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 @@
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);
- }
- }
-
}