diff options
| author | Leon Scroggins <scroggo@google.com> | 2009-12-10 12:35:56 -0500 |
|---|---|---|
| committer | Leon Scroggins <scroggo@google.com> | 2010-01-19 15:48:48 -0500 |
| commit | 96afcb1a85b1d14be910bfe0a2c4104e6ec87964 (patch) | |
| tree | c03403e06dd5b38937b6864686057496de229df3 /src/com/android/browser | |
| parent | 56199cc25e7ee0455ec2a8099098b66b8554f677 (diff) | |
| download | packages_apps_Browser-96afcb1a85b1d14be910bfe0a2c4104e6ec87964.tar.gz packages_apps_Browser-96afcb1a85b1d14be910bfe0a2c4104e6ec87964.tar.bz2 packages_apps_Browser-96afcb1a85b1d14be910bfe0a2c4104e6ec87964.zip | |
Add data (title, screenshot, favicon) to share intent.
Requires a change to frameworks/base
Fixes http://b/issue?id=2243246
Diffstat (limited to 'src/com/android/browser')
| -rw-r--r-- | src/com/android/browser/BrowserActivity.java | 104 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserBookmarksAdapter.java | 9 | ||||
| -rw-r--r-- | src/com/android/browser/BrowserBookmarksPage.java | 6 |
3 files changed, 101 insertions, 18 deletions
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index a4580871f..0167a9432 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -36,6 +36,7 @@ import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.database.Cursor; +import android.database.DatabaseUtils; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; @@ -1210,19 +1211,21 @@ public class BrowserActivity extends Activity // options selector, so set mCanChord to true so we can access them. mCanChord = true; int id = item.getItemId(); + boolean result = true; switch (id) { // For the context menu from the title bar - case R.id.title_bar_share_page_url: case R.id.title_bar_copy_page_url: - WebView mainView = mTabControl.getCurrentWebView(); - if (null == mainView) { - return false; + Tab currentTab = mTabControl.getCurrentTab(); + if (null == currentTab) { + result = false; + break; } - if (id == R.id.title_bar_share_page_url) { - Browser.sendString(this, mainView.getUrl()); - } else { - copy(mainView.getUrl()); + WebView mainView = currentTab.getWebView(); + if (null == mainView) { + result = false; + break; } + copy(mainView.getUrl()); break; // -- Browser context menu case R.id.open_context_menu_id: @@ -1233,7 +1236,8 @@ public class BrowserActivity extends Activity case R.id.copy_link_context_menu_id: final WebView webView = getTopWindow(); if (null == webView) { - return false; + result = false; + break; } final HashMap hrefMap = new HashMap(); hrefMap.put("webview", webView); @@ -1244,10 +1248,10 @@ public class BrowserActivity extends Activity default: // For other context menus - return onOptionsItemSelected(item); + result = onOptionsItemSelected(item); } mCanChord = false; - return true; + return result; } private Bundle createGoogleSearchSourceBundle(String source) { @@ -1465,9 +1469,17 @@ public class BrowserActivity extends Activity bookmarksOrHistoryPicker(true); break; + case R.id.title_bar_share_page_url: case R.id.share_page_menu_id: - Browser.sendString(this, getTopWindow().getUrl(), - getText(R.string.choosertitle_sharevia).toString()); + Tab currentTab = mTabControl.getCurrentTab(); + if (null == currentTab) { + mCanChord = false; + return false; + } + currentTab.populatePickerData(); + sharePage(this, currentTab.getTitle(), + currentTab.getUrl(), currentTab.getFavicon(), + createScreenshot(currentTab.getWebView())); break; case R.id.dump_nav_menu_id: @@ -2261,8 +2273,41 @@ public class BrowserActivity extends Activity startActivity(intent); break; case R.id.share_link_context_menu_id: - Browser.sendString(BrowserActivity.this, url, - getText(R.string.choosertitle_sharevia).toString()); + // See if this site has been visited before + StringBuilder sb = new StringBuilder( + Browser.BookmarkColumns.URL + " = "); + DatabaseUtils.appendEscapedSQLString(sb, url); + Cursor c = mResolver.query(Browser.BOOKMARKS_URI, + Browser.HISTORY_PROJECTION, + sb.toString(), + null, + null); + if (c.moveToFirst()) { + // The site has been visited before, so grab the + // info from the database. + Bitmap favicon = null; + Bitmap thumbnail = null; + String linkTitle = c.getString(Browser. + HISTORY_PROJECTION_TITLE_INDEX); + byte[] data = c.getBlob(Browser. + HISTORY_PROJECTION_FAVICON_INDEX); + if (data != null) { + favicon = BitmapFactory.decodeByteArray( + data, 0, data.length); + } + data = c.getBlob(Browser. + HISTORY_PROJECTION_THUMBNAIL_INDEX); + if (data != null) { + thumbnail = BitmapFactory.decodeByteArray( + data, 0, data.length); + } + sharePage(BrowserActivity.this, + linkTitle, url, favicon, thumbnail); + } else { + Browser.sendString(BrowserActivity.this, url, + getString( + R.string.choosertitle_sharevia)); + } break; case R.id.copy_link_context_menu_id: copy(url); @@ -2307,6 +2352,35 @@ public class BrowserActivity extends Activity } }; + /** + * Share a page, providing the title, url, favicon, and a screenshot. Uses + * an {@link Intent} to launch the Activity chooser. + * @param c Context used to launch a new Activity. + * @param title Title of the page. Stored in the Intent with + * {@link Browser#EXTRA_SHARE_TITLE} + * @param url URL of the page. Stored in the Intent with + * {@link Intent#EXTRA_TEXT} + * @param favicon Bitmap of the favicon for the page. Stored in the Intent + * with {@link Browser#EXTRA_SHARE_FAVICON} + * @param screenshot Bitmap of a screenshot of the page. Stored in the + * Intent with {@link Browser#EXTRA_SHARE_SCREENSHOT} + */ + public static final void sharePage(Context c, String title, String url, + Bitmap favicon, Bitmap screenshot) { + Intent send = new Intent(Intent.ACTION_SEND); + send.setType("text/plain"); + send.putExtra(Intent.EXTRA_TEXT, url); + send.putExtra(Browser.EXTRA_SHARE_TITLE, title); + send.putExtra(Browser.EXTRA_SHARE_FAVICON, favicon); + send.putExtra(Browser.EXTRA_SHARE_SCREENSHOT, screenshot); + try { + c.startActivity(Intent.createChooser(send, c.getString( + R.string.choosertitle_sharevia))); + } catch(android.content.ActivityNotFoundException ex) { + // if no app handles it, do nothing + } + } + private void updateScreenshot(WebView view) { // If this is a bookmarked site, add a screenshot to the database. // FIXME: When should we update? Every time? diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java index 2601df5f1..7b93fa139 100644 --- a/src/com/android/browser/BrowserBookmarksAdapter.java +++ b/src/com/android/browser/BrowserBookmarksAdapter.java @@ -441,7 +441,7 @@ class BrowserBookmarksAdapter extends BaseAdapter { mCursor.moveToPosition(position - mExtraOffset); tv.setText(mCursor.getString( Browser.HISTORY_PROJECTION_TITLE_INDEX)); - Bitmap thumbnail = getBitmap(Browser.HISTORY_PROJECTION_THUMBNAIL_INDEX, position); + Bitmap thumbnail = getScreenshot(position); if (thumbnail == null) { thumb.setImageResource(R.drawable.browser_thumbnail); } else { @@ -493,6 +493,13 @@ class BrowserBookmarksAdapter extends BaseAdapter { } /** + * Return the screenshot for this item in the list. + */ + public Bitmap getScreenshot(int position) { + return getBitmap(Browser.HISTORY_PROJECTION_THUMBNAIL_INDEX, position); + } + + /** * Return the favicon for this item in the list. */ public Bitmap getFavicon(int position) { diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java index ca77e3caa..d835f84ba 100644 --- a/src/com/android/browser/BrowserBookmarksPage.java +++ b/src/com/android/browser/BrowserBookmarksPage.java @@ -121,8 +121,10 @@ public class BrowserBookmarksPage extends Activity implements openInNewWindow(i.position); break; case R.id.share_link_context_menu_id: - Browser.sendString(BrowserBookmarksPage.this, getUrl(i.position), - getText(R.string.choosertitle_sharevia).toString()); + BrowserActivity.sharePage(BrowserBookmarksPage.this, + mBookmarksAdapter.getTitle(i.position), getUrl(i.position), + getFavicon(i.position), + mBookmarksAdapter.getScreenshot(i.position)); break; case R.id.copy_url_context_menu_id: copy(getUrl(i.position)); |
