diff options
Diffstat (limited to 'src/com/android')
| -rw-r--r-- | src/com/android/browser/BrowserActivity.java | 148 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserBookmarksPage.java | 20 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserHistoryPage.java | 36 | ||||
| -rw-r--r-- | src/com/android/browser/CombinedBookmarkHistoryActivity.java | 268 | ||||
| -rw-r--r-- | src/com/android/browser/CombinedBookmarkHistoryView.java | 164 | ||||
| -rw-r--r-- | src/com/android/browser/ShortcutActivity.java | 21 | ||||
| -rw-r--r-- | src/com/android/browser/TabBar.java | 1 | ||||
| -rw-r--r-- | src/com/android/browser/TitleBarXLarge.java | 2 |
8 files changed, 285 insertions, 375 deletions
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index 1263f3fd5..10ebb5623 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -35,7 +35,6 @@ import android.content.ComponentName; import android.content.ContentProvider; import android.content.ContentProviderClient; import android.content.ContentResolver; -import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; @@ -68,9 +67,8 @@ import android.os.PowerManager; import android.os.Process; import android.os.SystemClock; import android.provider.Browser; -import android.provider.BrowserContract; -import android.provider.ContactsContract; import android.provider.BrowserContract.Images; +import android.provider.ContactsContract; import android.provider.ContactsContract.Intents.Insert; import android.provider.Downloads; import android.provider.MediaStore; @@ -89,7 +87,6 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; @@ -131,8 +128,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class BrowserActivity extends Activity - implements View.OnCreateContextMenuListener, DownloadListener, - PopupMenu.OnMenuItemClickListener { + implements View.OnCreateContextMenuListener, DownloadListener, + PopupMenu.OnMenuItemClickListener, BookmarksHistoryCallbacks { /* Define some aliases to make these debugging flags easier to refer to. * This file imports android.provider.Browser, so we can't just refer to "Browser.DEBUG". @@ -168,6 +165,8 @@ public class BrowserActivity extends Activity */ private FrameLayout mBrowserFrameLayout; + private CombinedBookmarkHistoryView mComboView; + private boolean mXLargeScreenSize; private Boolean mIsProviderPresent = null; @@ -973,6 +972,7 @@ public class BrowserActivity extends Activity if (mActiveTabsPage != null) { removeActiveTabPage(true); } + removeComboView(); cancelStopToast(); @@ -1312,6 +1312,8 @@ public class BrowserActivity extends Activity @Override public boolean onOptionsItemSelected(MenuItem item) { + // menu remains active, so ensure comboview is dismissed + removeComboView(); // check the action bar button before mCanChord check, as the prepare call // doesn't come for action bar buttons if (item.getItemId() == R.id.newtab) { @@ -1348,7 +1350,7 @@ public class BrowserActivity extends Activity break; case R.id.bookmarks_menu_id: - bookmarksOrHistoryPicker(false, false); + bookmarksOrHistoryPicker(false); break; case R.id.active_tabs_menu_id: @@ -1448,7 +1450,7 @@ public class BrowserActivity extends Activity break; case R.id.classic_history_menu_id: - bookmarksOrHistoryPicker(true, false); + bookmarksOrHistoryPicker(true); break; case R.id.title_bar_share_page_url: @@ -2226,8 +2228,9 @@ public class BrowserActivity extends Activity event.startTracking(); return true; } else if (mCustomView == null && mActiveTabsPage == null + && mComboView == null && event.isLongPress()) { - bookmarksOrHistoryPicker(true, false); + bookmarksOrHistoryPicker(true); return true; } break; @@ -2250,6 +2253,8 @@ public class BrowserActivity extends Activity } else if (mActiveTabsPage != null) { // if tab page is showing, hide it removeActiveTabPage(true); + } else if (mComboView != null) { + removeComboView(); } else { WebView subwindow = mTabControl.getCurrentSubWindow(); if (subwindow != null) { @@ -2331,7 +2336,7 @@ public class BrowserActivity extends Activity public void handleMessage(Message msg) { switch (msg.what) { case OPEN_BOOKMARKS: - bookmarksOrHistoryPicker(false, false); + bookmarksOrHistoryPicker(false); break; case FOCUS_NODE_HREF: { @@ -3780,46 +3785,57 @@ public class BrowserActivity extends Activity } } + /** + * callback from ComboPage when bookmark/history selection + */ + @Override + public void onUrlSelected(String url, boolean newTab) { + removeComboView(); + if (!TextUtils.isEmpty(url)) { + if (newTab) { + openTab(url, false); + } else { + final Tab currentTab = mTabControl.getCurrentTab(); + dismissSubWindow(currentTab); + loadUrl(getTopWindow(), url); + } + } + } + + /** + * callback from ComboPage when dismissed + */ + @Override + public void onComboCanceled() { + removeComboView(); + } + + /** + * dismiss the ComboPage + */ + /* package */ void removeComboView() { + if (mComboView != null) { + mContentView.removeView(mComboView); + mTitleBar.setVisibility(View.VISIBLE); + mMenuState = R.id.MAIN_MENU; + attachTabToContentView(mTabControl.getCurrentTab()); + getTopWindow().requestFocus(); + mComboView = null; + } + } + + /** + * callback from ComboPage when clear history is requested + */ + public void onRemoveParentChildRelationships() { + mTabControl.removeParentChildRelationShips(); + } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (getTopWindow() == null) return; - switch (requestCode) { - case COMBO_PAGE: - if (resultCode == RESULT_OK && intent != null) { - String data = intent.getAction(); - Bundle extras = intent.getExtras(); - if (extras != null && - extras.getBoolean( - CombinedBookmarkHistoryActivity.EXTRA_OPEN_NEW_WINDOW, - false)) { - openTab(data, false); - } else if ((extras != null) && - extras.getBoolean(CombinedBookmarkHistoryActivity.NEWTAB_MODE)) { - openTab(data, true); - } else { - final Tab currentTab = mTabControl.getCurrentTab(); - dismissSubWindow(currentTab); - if (data != null && data.length() != 0) { - loadUrl(getTopWindow(), data); - } - } - } else if (resultCode == RESULT_CANCELED) { - if (intent != null) { - float evtx = intent.getFloatExtra(CombinedBookmarkHistoryActivity.EVT_X, -1); - float evty = intent.getFloatExtra(CombinedBookmarkHistoryActivity.EVT_Y, -1); - long now = System.currentTimeMillis(); - MotionEvent evt = MotionEvent.obtain(now, now, - MotionEvent.ACTION_DOWN, evtx, evty, 0); - dispatchTouchEvent(evt); - MotionEvent up = MotionEvent.obtain(evt); - up.setAction(MotionEvent.ACTION_UP); - dispatchTouchEvent(up); - } - } - // Deliberately fall through to PREFERENCES_PAGE, since the - // same extra may be attached to the COMBO_PAGE case PREFERENCES_PAGE: if (resultCode == RESULT_OK && intent != null) { String action = intent.getStringExtra(Intent.EXTRA_TEXT); @@ -3940,13 +3956,11 @@ public class BrowserActivity extends Activity * @param startWithHistory If true, open starting on the history tab. * Otherwise, start with the bookmarks tab. */ - /* package */ void bookmarksOrHistoryPicker(boolean startWithHistory, boolean newTabMode) { + /* package */ void bookmarksOrHistoryPicker(boolean startWithHistory) { WebView current = mTabControl.getCurrentWebView(); if (current == null) { return; } - Intent intent = new Intent(this, - CombinedBookmarkHistoryActivity.class); String title = current.getTitle(); String url = current.getUrl(); Bitmap thumbnail = createScreenshot(current, getDesiredThumbnailWidth(this), @@ -3965,28 +3979,22 @@ public class BrowserActivity extends Activity if (title == null) { title = url; } - intent.putExtra("title", title); - intent.putExtra("url", url); - intent.putExtra("thumbnail", thumbnail); + Bundle extras = new Bundle(); + extras.putString("title", title); + extras.putString("url", url); + extras.putParcelable("thumbnail", thumbnail); // Disable opening in a new window if we have maxed out the windows - intent.putExtra("disable_new_window", !mTabControl.canCreateNewTab()); - intent.putExtra("touch_icon_url", current.getTouchIconUrl()); - if (startWithHistory) { - intent.putExtra(CombinedBookmarkHistoryActivity.STARTING_FRAGMENT, - CombinedBookmarkHistoryActivity.FRAGMENT_ID_HISTORY); - } - intent.putExtra(CombinedBookmarkHistoryActivity.NEWTAB_MODE, newTabMode); - int top = -1; - int height = -1; - if (mXLargeScreenSize) { - showFakeTitleBar(); - int titleBarHeight = ((TitleBarXLarge)mFakeTitleBar).getHeightWithoutProgress(); - top = mTabBar.getBottom() + titleBarHeight; - height = getTopWindow().getHeight() - titleBarHeight; - } - intent.putExtra(CombinedBookmarkHistoryActivity.EXTRA_TOP, top); - intent.putExtra(CombinedBookmarkHistoryActivity.EXTRA_HEIGHT, height); - startActivityForResult(intent, COMBO_PAGE); + extras.putBoolean("disable_new_window", !mTabControl.canCreateNewTab()); + extras.putString("touch_icon_url", current.getTouchIconUrl()); + + mComboView = new CombinedBookmarkHistoryView(this, + startWithHistory ? CombinedBookmarkHistoryView.FRAGMENT_ID_HISTORY + : CombinedBookmarkHistoryView.FRAGMENT_ID_BOOKMARKS, + extras); + removeTabFromContentView(mTabControl.getCurrentTab()); + mTitleBar.setVisibility(View.GONE); + hideFakeTitleBar(); + mContentView.addView(mComboView, COVER_SCREEN_PARAMS); } private void showSaveToHomescreenDialog(String url, String title, Bitmap touchIcon, @@ -4015,7 +4023,6 @@ public class BrowserActivity extends Activity startActivity(intent); } - // Called when loading from context menu or LOAD_URL message private void loadUrlFromContext(WebView view, String url) { // In case the user enters nothing. @@ -4342,7 +4349,6 @@ public class BrowserActivity extends Activity private SystemAllowGeolocationOrigins mSystemAllowGeolocationOrigins; // activity requestCode - final static int COMBO_PAGE = 1; final static int PREFERENCES_PAGE = 3; final static int FILE_SELECTED = 4; diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java index 4630d4e85..be6f8f835 100644 --- a/src/com/android/browser/BrowserBookmarksPage.java +++ b/src/com/android/browser/BrowserBookmarksPage.java @@ -77,7 +77,7 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte static final String EXTRA_DISABLE_WINDOW = "disable_new_window"; static final String ACCOUNT_NAME_UNSYNCED = "Unsynced"; - + public static final String PREF_ACCOUNT_TYPE = "acct_type"; public static final String PREF_ACCOUNT_NAME = "acct_name"; @@ -95,6 +95,13 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte Stack<Pair<String, Uri>> mFolderStack = new Stack<Pair<String, Uri>>(); Button mUpButton; + static BrowserBookmarksPage newInstance(BookmarksHistoryCallbacks cb, Bundle args) { + BrowserBookmarksPage bbp = new BrowserBookmarksPage(); + bbp.mCallbacks = cb; + bbp.setArguments(args); + return bbp; + } + @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { switch (id) { @@ -107,7 +114,6 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte } return new BookmarksLoader(getActivity(), accountType, accountName); } - case LOADER_ACCOUNTS_THEN_BOOKMARKS: { return new CursorLoader(getActivity(), Accounts.CONTENT_URI, new String[] { Accounts.ACCOUNT_TYPE, Accounts.ACCOUNT_NAME }, null, null, @@ -328,7 +334,7 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte item.setName(cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE)); Bitmap bitmap = getBitmap(cursor, BookmarksLoader.COLUMN_INDEX_FAVICON); if (bitmap == null) { - bitmap = CombinedBookmarkHistoryActivity.getIconListenerSet().getFavicon(url); + bitmap = CombinedBookmarkHistoryView.getIconListenerSet().getFavicon(url); } item.setFavicon(bitmap); } @@ -346,12 +352,6 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte } @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - mCallbacks = (BookmarksHistoryCallbacks) activity; - } - - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Context context = getActivity(); @@ -395,7 +395,7 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte } // Add our own listener in case there are favicons that have yet to be loaded. - CombinedBookmarkHistoryActivity.getIconListenerSet().addListener(this); + CombinedBookmarkHistoryView.getIconListenerSet().addListener(this); return root; } diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java index 2295804e5..72d8c28a7 100644 --- a/src/com/android/browser/BrowserHistoryPage.java +++ b/src/com/android/browser/BrowserHistoryPage.java @@ -95,6 +95,13 @@ public class BrowserHistoryPage extends Fragment cm.setText(text); } + static BrowserHistoryPage newInstance(BookmarksHistoryCallbacks cb, Bundle args) { + BrowserHistoryPage bhp = new BrowserHistoryPage(); + bhp.mCallbacks = cb; + bhp.setArguments(args); + return bhp; + } + @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { switch (id) { @@ -153,12 +160,6 @@ public class BrowserHistoryPage extends Fragment } @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.history, container, false); @@ -174,15 +175,14 @@ public class BrowserHistoryPage extends Fragment getLoaderManager().initLoader(LOADER_HISTORY, null, this); // Register to receive icons in case they haven't all been loaded. - CombinedBookmarkHistoryActivity.getIconListenerSet().addListener(mIconReceiver); - + CombinedBookmarkHistoryView.getIconListenerSet().addListener(mIconReceiver); return root; } @Override public void onDestroy() { super.onDestroy(); - CombinedBookmarkHistoryActivity.getIconListenerSet().removeListener(mIconReceiver); + CombinedBookmarkHistoryView.getIconListenerSet().removeListener(mIconReceiver); } @Override @@ -195,20 +195,18 @@ public class BrowserHistoryPage extends Fragment menu.findItem(R.id.clear_history_menu_id).setVisible( Browser.canClearHistory(getActivity().getContentResolver())); } - + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.clear_history_menu_id: Browser.clearHistory(getActivity().getContentResolver()); - // BrowserHistoryPage is always a child of - // CombinedBookmarkHistoryActivity - mCallbacks.onRemoveParentChildRelationShips(); + mCallbacks.onRemoveParentChildRelationships(); return true; - + default: break; - } + } return super.onOptionsItemSelected(item); } @@ -251,13 +249,13 @@ public class BrowserHistoryPage extends Fragment send.setType("text/plain"); ResolveInfo ri = pm.resolveActivity(send, PackageManager.MATCH_DEFAULT_ONLY); menu.findItem(R.id.share_link_context_menu_id).setVisible(ri != null); - + super.onCreateContextMenu(menu, v, menuInfo); } - + @Override public boolean onContextItemSelected(MenuItem item) { - ExpandableListContextMenuInfo i = + ExpandableListContextMenuInfo i = (ExpandableListContextMenuInfo) item.getMenuInfo(); HistoryItem historyItem = (HistoryItem) i.targetView; String url = historyItem.getUrl(); @@ -342,7 +340,7 @@ public class BrowserHistoryPage extends Fragment item.setFavicon(BitmapFactory.decodeByteArray(data, 0, data.length)); } else { - item.setFavicon(CombinedBookmarkHistoryActivity + item.setFavicon(CombinedBookmarkHistoryView .getIconListenerSet().getFavicon(url)); } return item; diff --git a/src/com/android/browser/CombinedBookmarkHistoryActivity.java b/src/com/android/browser/CombinedBookmarkHistoryActivity.java deleted file mode 100644 index a98408c6c..000000000 --- a/src/com/android/browser/CombinedBookmarkHistoryActivity.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright (C) 2009 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. - */ - -package com.android.browser; - -import android.app.Activity; -import android.app.Fragment; -import android.app.FragmentManager; -import android.app.FragmentTransaction; -import android.content.Intent; -import android.database.MatrixCursor; -import android.graphics.Bitmap; -import android.os.AsyncTask; -import android.os.Bundle; -import android.provider.Browser; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.view.WindowManager; -import android.webkit.WebIconDatabase; -import android.webkit.WebIconDatabase.IconListener; -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; - -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 EXTRA_OPEN_NEW_WINDOW = "new_window"; - final static String STARTING_FRAGMENT = "fragment"; - final static String EVT_X = "evt_x"; - final static String EVT_Y = "evt_y"; - final static String EXTRA_TOP = "top"; - final static String EXTRA_HEIGHT = "height"; - - - 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. - */ - private String mExtraData; - /** - * Intent to be passed to calling Activity when finished. Keep a pointer to - * it locally so mExtraData can be added. - */ - private Intent mResultData; - /** - * Result code to pass back to calling Activity when finished. - */ - private int mResultCode; - - /** - * Flag to inform the browser to force the result to open in a new tab. - */ - private boolean mNewTabMode; - - private int mRequestedTop; - private int mRequestedHeight; - - long mCurrentFragment; - - static class IconListenerSet implements IconListener { - // Used to store favicons as we get them from the database - // FIXME: We use a different method to get the Favicons in - // BrowserBookmarksAdapter. They should probably be unified. - private HashMap<String, Bitmap> mUrlsToIcons; - private Vector<IconListener> mListeners; - - public IconListenerSet() { - 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) { - listener.onReceivedIcon(url, icon); - } - } - public void addListener(IconListener listener) { - mListeners.add(listener); - } - public void removeListener(IconListener listener) { - mListeners.remove(listener); - } - public Bitmap getFavicon(String url) { - return mUrlsToIcons.get(url); - } - } - - private static IconListenerSet sIconListenerSet; - static IconListenerSet getIconListenerSet() { - if (null == sIconListenerSet) { - sIconListenerSet = new IconListenerSet(); - } - return sIconListenerSet; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.bookmarks_history); - - setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); - - 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); - mRequestedTop = extras.getInt(EXTRA_TOP, -1); - mRequestedHeight = extras.getInt(EXTRA_HEIGHT, -1); - startingFragment = extras.getInt(STARTING_FRAGMENT, FRAGMENT_ID_BOOKMARKS); - } - - // 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()); - return null; - } - }).execute(); - } - - @Override - public void onAttachedToWindow() { - if (mRequestedTop > -1) { - WindowManager.LayoutParams lp = getWindow().getAttributes(); - lp.x = 0; - lp.y = mRequestedTop; - lp.height = mRequestedHeight; - lp.gravity = Gravity.TOP | Gravity.LEFT; - getWindow().setAttributes(lp); - } - } - - @Override - public boolean onTouchEvent(MotionEvent evt) { - if (((evt.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN) && (evt.getY() < 0)) { - Intent result = new Intent(); - result.putExtra(EVT_X, evt.getRawX()); - result.putExtra(EVT_Y, evt.getRawY()); - setResultFromChild(Activity.RESULT_CANCELED, result); - finish(); - return true; - } - return super.onTouchEvent(evt); - } - - 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. - */ - @Override - public void onRemoveParentChildRelationShips() { - mExtraData = BrowserSettings.PREF_CLEAR_HISTORY; - } - - /** - * Custom setResult() method so that the Intent can have extra data attached - * if necessary. - * @param resultCode Uses same codes as Activity.setResult - * @param data Intent returned to onActivityResult. - */ - private void setResultFromChild(int resultCode, Intent data) { - mResultCode = resultCode; - mResultData = data; - } - - @Override - public void finish() { - if (mExtraData != null) { - mResultCode = RESULT_OK; - if (mResultData == null) mResultData = new Intent(); - mResultData.putExtra(Intent.EXTRA_TEXT, mExtraData); - } - if (mNewTabMode) { - if (mResultData == null) mResultData = new Intent(); - mResultData.putExtra(NEWTAB_MODE, true); - } - 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(EXTRA_OPEN_NEW_WINDOW, true); - } - setResultFromChild(RESULT_OK, intent); - finish(); - } -} diff --git a/src/com/android/browser/CombinedBookmarkHistoryView.java b/src/com/android/browser/CombinedBookmarkHistoryView.java new file mode 100644 index 000000000..b48020965 --- /dev/null +++ b/src/com/android/browser/CombinedBookmarkHistoryView.java @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2009 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. + */ + +package com.android.browser; + +import android.app.Fragment; +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.content.Context; +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.LayoutInflater; +import android.view.View; +import android.webkit.WebIconDatabase; +import android.webkit.WebIconDatabase.IconListener; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.SimpleCursorAdapter; + +import java.util.HashMap; +import java.util.Vector; + +interface BookmarksHistoryCallbacks { + public void onUrlSelected(String url, boolean newWindow); + public void onRemoveParentChildRelationships(); + public void onComboCanceled(); +} + +public class CombinedBookmarkHistoryView extends LinearLayout + implements OnItemClickListener { + + final static String STARTING_FRAGMENT = "fragment"; + + final static int FRAGMENT_ID_BOOKMARKS = 1; + final static int FRAGMENT_ID_HISTORY = 2; + + private BrowserActivity mBrowserActivity; + + private Bundle mExtras; + + long mCurrentFragment; + + static class IconListenerSet implements IconListener { + // Used to store favicons as we get them from the database + // FIXME: We use a different method to get the Favicons in + // BrowserBookmarksAdapter. They should probably be unified. + private HashMap<String, Bitmap> mUrlsToIcons; + private Vector<IconListener> mListeners; + + public IconListenerSet() { + 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) { + listener.onReceivedIcon(url, icon); + } + } + public void addListener(IconListener listener) { + mListeners.add(listener); + } + public void removeListener(IconListener listener) { + mListeners.remove(listener); + } + public Bitmap getFavicon(String url) { + return mUrlsToIcons.get(url); + } + } + + private static IconListenerSet sIconListenerSet; + static IconListenerSet getIconListenerSet() { + if (null == sIconListenerSet) { + sIconListenerSet = new IconListenerSet(); + } + return sIconListenerSet; + } + + public CombinedBookmarkHistoryView(Context context, int startingFragment, Bundle extras) { + super(context); + mBrowserActivity = (BrowserActivity) context; + mExtras = extras; + View v = LayoutInflater.from(context).inflate(R.layout.bookmarks_history, this); + Resources res = context.getResources(); + +// setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); + + ListView list = (ListView) findViewById(android.R.id.list); + list.setOnItemClickListener(this); + MatrixCursor cursor = new MatrixCursor(new String[] { "name", "_id" }); + cursor.newRow().add(res.getString(R.string.bookmarks)).add(FRAGMENT_ID_BOOKMARKS); + cursor.newRow().add(res.getString(R.string.history)).add(FRAGMENT_ID_HISTORY); + list.setAdapter(new SimpleCursorAdapter(context, + android.R.layout.simple_list_item_1, cursor, + new String[] { "name" }, new int[] { android.R.id.text1 })); + + // Start up the default fragment + loadFragment(startingFragment, mExtras); + + // 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 the view is created in case a new favicon was + // added to the webkit db. + (new AsyncTask<Void, Void, Void>() { + @Override + public Void doInBackground(Void... v) { + Browser.requestAllIcons(mBrowserActivity.getContentResolver(), + Browser.BookmarkColumns.FAVICON + " is NULL", getIconListenerSet()); + return null; + } + }).execute(); + + } + + private void loadFragment(int id, Bundle extras) { + String fragmentClassName; + Fragment fragment = null; + switch (id) { + case FRAGMENT_ID_BOOKMARKS: + fragment = BrowserBookmarksPage.newInstance(mBrowserActivity, extras); + break; + case FRAGMENT_ID_HISTORY: + fragment = BrowserHistoryPage.newInstance(mBrowserActivity, extras); + break; + default: + throw new IllegalArgumentException(); + } + mCurrentFragment = id; + + FragmentManager fm = mBrowserActivity.getFragmentManager(); + FragmentTransaction transaction = fm.openTransaction(); + transaction.replace(R.id.fragment, fragment); + transaction.commit(); + } + + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + if (id == mCurrentFragment) return; + loadFragment((int) id, mExtras); + } + +} diff --git a/src/com/android/browser/ShortcutActivity.java b/src/com/android/browser/ShortcutActivity.java index 7994d0a77..1d970ea9b 100644 --- a/src/com/android/browser/ShortcutActivity.java +++ b/src/com/android/browser/ShortcutActivity.java @@ -35,16 +35,11 @@ public class ShortcutActivity extends Activity Bundle extras = new Bundle(); extras.putBoolean(BrowserBookmarksPage.EXTRA_SHORTCUT, true); extras.putBoolean(BrowserBookmarksPage.EXTRA_DISABLE_WINDOW, true); - Fragment frag = Fragment.instantiate(this, BrowserBookmarksPage.class.getName(), extras); + Fragment frag = BrowserBookmarksPage.newInstance(this, extras); transaction.add(android.R.id.content, frag); transaction.commit(); } - /** - * not used for shortcuts - */ - @Override - public void onRemoveParentChildRelationShips() {} /** * handle fragment startActivity @@ -60,6 +55,20 @@ public class ShortcutActivity extends Activity super.finish(); } + // BookmarksHistoryCallbacks + + /** + * not used for shortcuts + */ + @Override + public void onRemoveParentChildRelationships() {} + + @Override + public void onComboCanceled() { + setResult(RESULT_CANCELED); + finish(); + } + /** * not used for shortcuts */ diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java index 9217ef2a9..696301e6c 100644 --- a/src/com/android/browser/TabBar.java +++ b/src/com/android/browser/TabBar.java @@ -121,6 +121,7 @@ public class TabBar extends LinearLayout } public void onClick(View view) { + mBrowserActivity.removeComboView(); if (mNewTab == view) { mBrowserActivity.openTabToHomePage(); } else if (mTabs.getSelectedTab() == view) { diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java index b652e15ca..57098a9b3 100644 --- a/src/com/android/browser/TitleBarXLarge.java +++ b/src/com/android/browser/TitleBarXLarge.java @@ -126,7 +126,7 @@ public class TitleBarXLarge extends TitleBarBase } else if (mStar == v) { mBrowserActivity.promptAddOrInstallBookmark(mStar); } else if (mAllButton == v) { - mBrowserActivity.bookmarksOrHistoryPicker(false, false); + mBrowserActivity.bookmarksOrHistoryPicker(false); } else if (mSearchButton == v) { search(); } else if (mStopButton == v) { |
