1bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
2bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck/*
3bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck * Copyright (C) 2011 The Android Open Source Project
4bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck *
5bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck * Licensed under the Apache License, Version 2.0 (the "License");
6bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck * you may not use this file except in compliance with the License.
7bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck * You may obtain a copy of the License at
8bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck *
9bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck *      http://www.apache.org/licenses/LICENSE-2.0
10bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck *
11bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck * Unless required by applicable law or agreed to in writing, software
12bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck * distributed under the License is distributed on an "AS IS" BASIS,
13bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck * See the License for the specific language governing permissions and
15bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck * limitations under the License.
16bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck */
17bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reckpackage com.android.browser.homepages;
18bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
19438bf46c98890b5fe1356e75b4bc759033c6fc57John Reckimport com.android.browser.BrowserSettings;
20438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck
21bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reckimport android.content.ContentProvider;
22bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reckimport android.content.ContentValues;
23438bf46c98890b5fe1356e75b4bc759033c6fc57John Reckimport android.content.Context;
24bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reckimport android.content.res.AssetFileDescriptor;
25bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reckimport android.database.Cursor;
26bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reckimport android.net.Uri;
27bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reckimport android.os.ParcelFileDescriptor;
28bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reckimport android.util.Log;
29438bf46c98890b5fe1356e75b4bc759033c6fc57John Reckimport android.webkit.WebResourceResponse;
30bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
31bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reckimport java.io.IOException;
32438bf46c98890b5fe1356e75b4bc759033c6fc57John Reckimport java.io.InputStream;
33bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
34bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reckpublic class HomeProvider extends ContentProvider {
35bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
36bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    private static final String TAG = "HomeProvider";
37bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    public static final String AUTHORITY = "com.android.browser.home";
38bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    public static final String MOST_VISITED = "content://" + AUTHORITY + "/";
39bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
40bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    @Override
41bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    public int delete(Uri uri, String selection, String[] selectionArgs) {
42bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck        return 0;
43bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    }
44bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
45bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    @Override
46bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    public String getType(Uri uri) {
47bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck        return null;
48bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    }
49bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
50bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    @Override
51bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    public Uri insert(Uri uri, ContentValues values) {
52bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck        return null;
53bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    }
54bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
55bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    @Override
56bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    public boolean onCreate() {
57bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck        return false;
58bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    }
59bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
60bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    @Override
61bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    public Cursor query(Uri uri, String[] projection, String selection,
62bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck            String[] selectionArgs, String sortOrder) {
63bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck        return null;
64bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    }
65bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
66bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    @Override
67bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    public int update(Uri uri, ContentValues values, String selection,
68bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck            String[] selectionArgs) {
69bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck        return 0;
70bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    }
71bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
72bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    @Override
73bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    public ParcelFileDescriptor openFile(Uri uri, String mode) {
74bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck        try {
75bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck            ParcelFileDescriptor[] pipes = ParcelFileDescriptor.createPipe();
76bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck            final ParcelFileDescriptor write = pipes[1];
77bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck            AssetFileDescriptor afd = new AssetFileDescriptor(write, 0, -1);
78bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck            new RequestHandler(getContext(), uri, afd.createOutputStream()).start();
79bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck            return pipes[0];
80bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck        } catch (IOException e) {
81bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck            Log.e(TAG, "Failed to handle request: " + uri, e);
82bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck            return null;
83bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck        }
84bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck    }
85bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck
86438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck    public static WebResourceResponse shouldInterceptRequest(Context context,
87438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck            String url) {
88438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck        try {
89438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck            boolean useMostVisited = BrowserSettings.getInstance().useMostVisitedHomepage();
90438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck            if (useMostVisited && url.startsWith("content://")) {
91438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck                Uri uri = Uri.parse(url);
92438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck                if (AUTHORITY.equals(uri.getAuthority())) {
93438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck                    InputStream ins = context.getContentResolver()
94438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck                            .openInputStream(uri);
95438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck                    return new WebResourceResponse("text/html", "utf-8", ins);
96438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck                }
97438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck            }
98438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck        } catch (Exception e) {}
99438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck        return null;
100438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck    }
101438bf46c98890b5fe1356e75b4bc759033c6fc57John Reck
102bafe58a83ade9cfa5c91e7033fae2d08a64603e8John Reck}
103