AddBookmarkPage.java revision 0a1d838ccd16ac08300bb8ac89b61ee0c956a49b
10c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project/* 20c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 30c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * 40c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 50c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * you may not use this file except in compliance with the License. 60c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * You may obtain a copy of the License at 70c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * 80c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 90c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * 100c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 110c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 120c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * See the License for the specific language governing permissions and 140c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project * limitations under the License. 150c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project */ 160c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 170c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectpackage com.android.browser; 180c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 190c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.app.Activity; 200c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.content.ContentResolver; 210c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.content.Intent; 220c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.content.res.Resources; 233918d4443ff38ef1870e02aa51a8b29f8352bb1aPatrick Scottimport android.database.Cursor; 24aac7aa6fcfcb519755987ec126be066323f589c8Ben Murdochimport android.graphics.Bitmap; 250c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.net.ParseException; 260c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.net.WebAddress; 270c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.os.Bundle; 281794fe252866c311f3b4700a2a1e44e843962243Ben Murdochimport android.os.Handler; 291794fe252866c311f3b4700a2a1e44e843962243Ben Murdochimport android.os.Message; 300c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.provider.Browser; 310c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.view.View; 320c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.view.Window; 330c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.widget.EditText; 340c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.widget.TextView; 350c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport android.widget.Toast; 360c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 37f2407c682fafef77d568deba9987b193a5f2d361Cary Clarkimport java.net.URI; 38f2407c682fafef77d568deba9987b193a5f2d361Cary Clarkimport java.net.URISyntaxException; 390c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectimport java.util.Date; 400c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 410c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Projectpublic class AddBookmarkPage extends Activity { 420c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 430c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project private final String LOGTAG = "Bookmarks"; 440c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 450c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project private EditText mTitle; 460c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project private EditText mAddress; 470c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project private TextView mButton; 480c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project private View mCancelButton; 490c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project private boolean mEditingExisting; 500c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project private Bundle mMap; 513918d4443ff38ef1870e02aa51a8b29f8352bb1aPatrick Scott private String mTouchIconUrl; 52aac7aa6fcfcb519755987ec126be066323f589c8Ben Murdoch private Bitmap mThumbnail; 53aac7aa6fcfcb519755987ec126be066323f589c8Ben Murdoch private String mOriginalUrl; 540c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 551794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch // Message IDs 561794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch private static final int SAVE_BOOKMARK = 100; 571794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch 581794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch private Handler mHandler; 591794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch 600c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project private View.OnClickListener mSaveBookmark = new View.OnClickListener() { 610c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project public void onClick(View v) { 620c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project if (save()) { 630c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project finish(); 640c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 650c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 660c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project }; 670c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 680c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project private View.OnClickListener mCancel = new View.OnClickListener() { 690c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project public void onClick(View v) { 700c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project finish(); 710c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 720c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project }; 730c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 740c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project protected void onCreate(Bundle icicle) { 750c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project super.onCreate(icicle); 760c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project requestWindowFeature(Window.FEATURE_LEFT_ICON); 770c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project setContentView(R.layout.browser_add_bookmark); 780c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project setTitle(R.string.save_to_bookmarks); 79a753d009f11cabc73259f0a1c565301550ef1aa2Ben Murdoch getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.ic_list_bookmark); 800c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 810c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project String title = null; 820c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project String url = null; 830c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mMap = getIntent().getExtras(); 840c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project if (mMap != null) { 850c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project Bundle b = mMap.getBundle("bookmark"); 860c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project if (b != null) { 870c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mMap = b; 880c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mEditingExisting = true; 890c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project setTitle(R.string.edit_bookmark); 900c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 910c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project title = mMap.getString("title"); 92aac7aa6fcfcb519755987ec126be066323f589c8Ben Murdoch url = mOriginalUrl = mMap.getString("url"); 933918d4443ff38ef1870e02aa51a8b29f8352bb1aPatrick Scott mTouchIconUrl = mMap.getString("touch_icon_url"); 94aac7aa6fcfcb519755987ec126be066323f589c8Ben Murdoch mThumbnail = (Bitmap) mMap.getParcelable("thumbnail"); 950c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 960c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 970c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mTitle = (EditText) findViewById(R.id.title); 980c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mTitle.setText(title); 990c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mAddress = (EditText) findViewById(R.id.address); 1000c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mAddress.setText(url); 1010c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 1020c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project View.OnClickListener accept = mSaveBookmark; 1030c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mButton = (TextView) findViewById(R.id.OK); 1040c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mButton.setOnClickListener(accept); 1050c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 1060c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mCancelButton = findViewById(R.id.cancel); 1070c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mCancelButton.setOnClickListener(mCancel); 1080c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project 1090c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project if (!getWindow().getDecorView().isInTouchMode()) { 1100c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mButton.requestFocus(); 1110c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 1120c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 1131794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch 11402065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins /** 11502065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins * Runnable to save a bookmark, so it can be performed in its own thread. 11602065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins */ 11702065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins private class SaveBookmarkRunnable implements Runnable { 11802065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins private Message mMessage; 11902065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins public SaveBookmarkRunnable(Message msg) { 12002065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins mMessage = msg; 12102065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins } 12202065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins public void run() { 12302065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins // Unbundle bookmark data. 12402065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins Bundle bundle = mMessage.getData(); 12502065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins String title = bundle.getString("title"); 12602065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins String url = bundle.getString("url"); 12702065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins boolean invalidateThumbnail = bundle.getBoolean( 12802065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins "invalidateThumbnail"); 12902065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins Bitmap thumbnail = invalidateThumbnail ? null 13002065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins : (Bitmap) bundle.getParcelable("thumbnail"); 13102065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins String touchIconUrl = bundle.getString("touchIconUrl"); 13202065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins 13302065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins // Save to the bookmarks DB. 13402065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins try { 13502065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins final ContentResolver cr = getContentResolver(); 13602065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins Bookmarks.addBookmark(null, cr, url, title, thumbnail, true); 13702065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins if (touchIconUrl != null) { 13802065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins final Cursor c 13902065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins = BrowserBookmarksAdapter.queryBookmarksForUrl(cr, 14002065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins null, url, true); 14102065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins new DownloadTouchIcon(cr, c, url).execute(mTouchIconUrl); 14202065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins } 14302065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins mMessage.arg1 = 1; 14402065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins } catch (IllegalStateException e) { 14502065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins mMessage.arg1 = 0; 14602065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins } 14702065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins mMessage.sendToTarget(); 14802065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins } 14902065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins } 15002065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins 1511794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch private void createHandler() { 1521794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch if (mHandler == null) { 1531794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch mHandler = new Handler() { 1541794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch @Override 1551794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch public void handleMessage(Message msg) { 1561794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch switch (msg.what) { 1571794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch case SAVE_BOOKMARK: 15802065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins if (1 == msg.arg1) { 1591794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch Toast.makeText(AddBookmarkPage.this, R.string.bookmark_saved, 1601794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch Toast.LENGTH_LONG).show(); 1611794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch } else { 1621794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch Toast.makeText(AddBookmarkPage.this, R.string.bookmark_not_saved, 1631794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch Toast.LENGTH_LONG).show(); 1641794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch } 1651794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch break; 1661794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch } 1671794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch } 1681794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch }; 1691794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch } 1701794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch } 1711794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch 1720c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project /** 1731794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch * Parse the data entered in the dialog and post a message to update the bookmarks database. 1740c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project */ 1750c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project boolean save() { 1761794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch createHandler(); 1771794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch 1780c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project String title = mTitle.getText().toString().trim(); 1790c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project String unfilteredUrl = 1800c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project BrowserActivity.fixUrl(mAddress.getText().toString()); 1810c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project boolean emptyTitle = title.length() == 0; 1820c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project boolean emptyUrl = unfilteredUrl.trim().length() == 0; 1830c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project Resources r = getResources(); 1840c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project if (emptyTitle || emptyUrl) { 1850c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project if (emptyTitle) { 1860c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mTitle.setError(r.getText(R.string.bookmark_needs_title)); 1870c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 1880c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project if (emptyUrl) { 1890c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project mAddress.setError(r.getText(R.string.bookmark_needs_url)); 1900c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 1910c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project return false; 1920c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 193ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch String url = unfilteredUrl.trim(); 194f2407c682fafef77d568deba9987b193a5f2d361Cary Clark try { 195ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch // We allow bookmarks with a javascript: scheme, but these will in most cases 196ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch // fail URI parsing, so don't try it if that's the kind of bookmark we have. 197ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch 198ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch if (!url.toLowerCase().startsWith("javascript:")) { 199ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch URI uriObj = new URI(url); 200ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch String scheme = uriObj.getScheme(); 201ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch if (!Bookmarks.urlHasAcceptableScheme(url)) { 202ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch // If the scheme was non-null, let the user know that we 203ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch // can't save their bookmark. If it was null, we'll assume 204ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch // they meant http when we parse it in the WebAddress class. 205ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch if (scheme != null) { 206ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch mAddress.setError(r.getText(R.string.bookmark_cannot_save_url)); 207ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch return false; 208ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch } 209ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch WebAddress address; 210ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch try { 211ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch address = new WebAddress(unfilteredUrl); 212ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch } catch (ParseException e) { 213ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch throw new URISyntaxException("", ""); 214ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch } 215ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch if (address.mHost.length() == 0) { 216ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch throw new URISyntaxException("", ""); 217ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch } 218ca12cfa98fdf995c4cf37f487a050d0d4fb261e0Ben Murdoch url = address.toString(); 219f2407c682fafef77d568deba9987b193a5f2d361Cary Clark } 2200c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 221f2407c682fafef77d568deba9987b193a5f2d361Cary Clark } catch (URISyntaxException e) { 222f2407c682fafef77d568deba9987b193a5f2d361Cary Clark mAddress.setError(r.getText(R.string.bookmark_url_not_valid)); 223f2407c682fafef77d568deba9987b193a5f2d361Cary Clark return false; 2240c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 2251794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch 2261794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch if (mEditingExisting) { 2271794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch mMap.putString("title", title); 2281794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch mMap.putString("url", url); 2291794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch mMap.putBoolean("invalidateThumbnail", !url.equals(mOriginalUrl)); 2301794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch setResult(RESULT_OK, (new Intent()).setAction( 2311794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch getIntent().toString()).putExtras(mMap)); 2321794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch } else { 2331794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch // Post a message to write to the DB. 2341794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch Bundle bundle = new Bundle(); 2351794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch bundle.putString("title", title); 2361794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch bundle.putString("url", url); 2371794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch bundle.putParcelable("thumbnail", mThumbnail); 2381794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch bundle.putBoolean("invalidateThumbnail", !url.equals(mOriginalUrl)); 2391794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch bundle.putString("touchIconUrl", mTouchIconUrl); 2401794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch Message msg = Message.obtain(mHandler, SAVE_BOOKMARK); 2411794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch msg.setData(bundle); 24202065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins // Start a new thread so as to not slow down the UI 24302065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins Thread t = new Thread(new SaveBookmarkRunnable(msg)); 24402065b07aea6b4392c344a4172c3ab56019225edLeon Scroggins t.start(); 2451794fe252866c311f3b4700a2a1e44e843962243Ben Murdoch setResult(RESULT_OK); 2460a1d838ccd16ac08300bb8ac89b61ee0c956a49bKristian Monsen LogTag.logBookmarkAdded(url, "bookmarkview"); 2470c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 2480c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project return true; 2490c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project } 2500c90888c75eed12f6e2e14a9044faf50bd4af8edThe Android Open Source Project} 251