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