• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy
6  * of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations
14  * under the License.
15  */
16 
17 package com.android.htmlviewer;
18 
19 import java.io.FileNotFoundException;
20 import java.io.File;
21 import java.lang.UnsupportedOperationException;
22 
23 import android.content.ContentProvider;
24 import android.content.ContentValues;
25 import android.database.Cursor;
26 import android.net.Uri;
27 import android.os.Binder;
28 import android.os.ParcelFileDescriptor;
29 import android.os.Process;
30 
31 /**
32  * WebView does not support file: loading. This class wraps a file load
33  * with a content provider.
34  * As HTMLViewer does not have internet access nor does it allow
35  * Javascript to be run, it is safe to load file based HTML content.
36 */
37 public class FileContentProvider extends ContentProvider {
38 
39     public static final String BASE_URI =
40             "content://com.android.htmlfileprovider";
41 
42     @Override
getType(Uri uri)43     public String getType(Uri uri) {
44         // If the mimetype is not appended to the uri, then return an empty string
45         String mimetype = uri.getQuery();
46         return mimetype == null ? "" : mimetype;
47     }
48 
49     @Override
openFile(Uri uri, String mode)50     public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
51         // android:exported="false" is broken in older releases so we have to
52         // manually enforce the calling identity.
53         if (Process.myUid() != Binder.getCallingUid()) {
54             throw new SecurityException("Permission denied");
55         }
56         if (!"r".equals(mode)) {
57             throw new FileNotFoundException("Bad mode for " + uri + ": " + mode);
58         }
59         String filename = uri.getPath();
60         return ParcelFileDescriptor.open(new File(filename),
61             ParcelFileDescriptor.MODE_READ_ONLY);
62     }
63 
64     @Override
delete(Uri uri, String selection, String[] selectionArgs)65     public int delete(Uri uri, String selection, String[] selectionArgs) {
66         throw new UnsupportedOperationException();
67     }
68 
69     @Override
insert(Uri uri, ContentValues values)70     public Uri insert(Uri uri, ContentValues values) {
71         throw new UnsupportedOperationException();
72     }
73 
74     @Override
onCreate()75     public boolean onCreate() {
76         return true;
77     }
78 
79     @Override
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)80     public Cursor query(Uri uri, String[] projection, String selection,
81             String[] selectionArgs, String sortOrder) {
82         throw new UnsupportedOperationException();
83     }
84 
85     @Override
update(Uri uri, ContentValues values, String selection, String[] selectionArgs)86     public int update(Uri uri, ContentValues values, String selection,
87             String[] selectionArgs) {
88         throw new UnsupportedOperationException();
89     }
90 
91 }
92