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