19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.webkit;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1936acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scottimport android.content.ContentResolver;
2036acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scottimport android.graphics.Bitmap;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Functions for manipulating the icon database used by WebView.
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * These functions require that a WebView be constructed before being invoked
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and WebView.getIconDatabase() will return a WebIconDatabase object. This
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WebIconDatabase object is a single instance and all methods operate on that
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * single object.
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
29939e5040b51539be561db1d18dec18196f201f5cJonathan Dixonpublic class WebIconDatabase {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Interface for receiving icons from the database.
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public interface IconListener {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Called when the icon has been retrieved from the database and the
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * result is non-null.
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param url The url passed in the request.
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param icon The favicon for the given url.
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void onReceivedIcon(String url, Bitmap icon);
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Open a the icon database and store the icons in the given path.
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param path The directory path where the icon database will be stored.
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void open(String path) {
48d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Close the shared instance of the icon database.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void close() {
55d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Removes all the icons in the database.
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeAllIcons() {
62d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Request the Bitmap representing the icon for the given page
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * url. If the icon exists, the listener will be called with the result.
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param url The page's url.
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param listener An implementation on IconListener to receive the result.
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void requestIconForPageUrl(String url, IconListener listener) {
72d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7536acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scott    /** {@hide}
7636acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scott     */
7736acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scott    public void bulkRequestIconForPageUrl(ContentResolver cr, String where,
7836acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scott            IconListener listener) {
79d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
8036acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scott    }
8136acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scott
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Retain the icon for the given page url.
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param url The page's url.
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void retainIconForPageUrl(String url) {
87d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Release the icon for the given page url.
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param url The page's url.
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void releaseIconForPageUrl(String url) {
95d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        throw new MustOverrideException();
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the global instance of WebIconDatabase.
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return A single instance of WebIconDatabase. It will be the same
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         instance for the current process each time this method is
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         called.
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static WebIconDatabase getInstance() {
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // XXX: Must be created in the UI thread.
106d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon        return WebViewFactory.getProvider().getWebIconDatabase();
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
110d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon     * @hide Only for use by WebViewProvider implementations
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
112d3101b1d300f5942fdb7dfa323dc8830c4edc007Jonathan Dixon    protected WebIconDatabase() {}
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
114