diff options
author | John Reck <jreck@google.com> | 2012-01-17 13:20:02 -0800 |
---|---|---|
committer | John Reck <jreck@google.com> | 2012-01-17 15:52:06 -0800 |
commit | 7287f80e144177895a5b17f7e0eb3488303b0d1c (patch) | |
tree | 1b70d7bdf302bd458bc27937f7aaeba802bfe2db /src/com/android/browser/homepages | |
parent | 9f733096d8e5a875edcdd63e24ec7d5a029d499b (diff) | |
download | packages_apps_Browser-7287f80e144177895a5b17f7e0eb3488303b0d1c.zip packages_apps_Browser-7287f80e144177895a5b17f7e0eb3488303b0d1c.tar.gz packages_apps_Browser-7287f80e144177895a5b17f7e0eb3488303b0d1c.tar.bz2 |
Add a folder index view in debug mode
Change-Id: I67bb28d95cbe5ab6cf361271b46acc44398f188e
Diffstat (limited to 'src/com/android/browser/homepages')
-rw-r--r-- | src/com/android/browser/homepages/HomeProvider.java | 26 | ||||
-rw-r--r-- | src/com/android/browser/homepages/RequestHandler.java | 73 |
2 files changed, 97 insertions, 2 deletions
diff --git a/src/com/android/browser/homepages/HomeProvider.java b/src/com/android/browser/homepages/HomeProvider.java index 98fcfbe..49ae694 100644 --- a/src/com/android/browser/homepages/HomeProvider.java +++ b/src/com/android/browser/homepages/HomeProvider.java @@ -16,8 +16,6 @@ */
package com.android.browser.homepages;
-import com.android.browser.BrowserSettings;
-
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
@@ -28,8 +26,13 @@ import android.os.ParcelFileDescriptor; import android.util.Log;
import android.webkit.WebResourceResponse;
+import com.android.browser.BrowserSettings;
+
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
public class HomeProvider extends ContentProvider {
@@ -95,8 +98,27 @@ public class HomeProvider extends ContentProvider { return new WebResourceResponse("text/html", "utf-8", ins);
}
}
+ boolean listFiles = BrowserSettings.getInstance().isDebugEnabled();
+ if (listFiles && interceptFile(url)) {
+ PipedInputStream ins = new PipedInputStream();
+ PipedOutputStream outs = new PipedOutputStream(ins);
+ new RequestHandler(context, Uri.parse(url), outs).start();
+ return new WebResourceResponse("text/html", "utf-8", ins);
+ }
} catch (Exception e) {}
return null;
}
+ private static boolean interceptFile(String url) {
+ if (!url.startsWith("file:///")) {
+ return false;
+ }
+ String fpath = url.substring(7);
+ File f = new File(fpath);
+ if (!f.isDirectory()) {
+ return false;
+ }
+ return true;
+ }
+
}
diff --git a/src/com/android/browser/homepages/RequestHandler.java b/src/com/android/browser/homepages/RequestHandler.java index 3eb58e6..1ae5b3e 100644 --- a/src/com/android/browser/homepages/RequestHandler.java +++ b/src/com/android/browser/homepages/RequestHandler.java @@ -29,10 +29,14 @@ import android.util.Base64; import android.util.Log;
import com.android.browser.R;
+import com.android.browser.homepages.Template.ListEntityIterator;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.text.DateFormat;
+import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -71,6 +75,10 @@ public class RequestHandler extends Thread { }
void doHandleRequest() throws IOException {
+ if ("file".equals(mUri.getScheme())) {
+ writeFolderIndex();
+ return;
+ }
int match = sUriMatcher.match(mUri);
switch (match) {
case INDEX:
@@ -127,6 +135,71 @@ public class RequestHandler extends Thread { t.write(mOutput);
}
+ void writeFolderIndex() throws IOException {
+ File f = new File(mUri.getPath());
+ final File[] files = f.listFiles();
+ Template t = Template.getCachedTemplate(mContext, R.raw.folder_view);
+ t.assign("path", mUri.getPath());
+ t.assign("parent_url", f.getParent() != null ? f.getParent() : f.getPath());
+ t.assignLoop("files", new ListEntityIterator() {
+ int index = -1;
+
+ @Override
+ public void writeValue(OutputStream stream, String key) throws IOException {
+ File f = files[index];
+ if ("name".equals(key)) {
+ stream.write(f.getName().getBytes());
+ }
+ if ("url".equals(key)) {
+ stream.write(("file://" + f.getAbsolutePath()).getBytes());
+ }
+ if ("type".equals(key)) {
+ stream.write((f.isDirectory() ? "dir" : "file").getBytes());
+ }
+ if ("size".equals(key)) {
+ if (f.isFile()) {
+ stream.write(readableFileSize(f.length()).getBytes());
+ }
+ }
+ if ("last_modified".equals(key)) {
+ String date = DateFormat.getDateTimeInstance(
+ DateFormat.SHORT, DateFormat.SHORT)
+ .format(f.lastModified());
+ stream.write(date.getBytes());
+ }
+ if ("alt".equals(key)) {
+ if (index % 2 == 0) {
+ stream.write("alt".getBytes());
+ }
+ }
+ }
+
+ @Override
+ public ListEntityIterator getListIterator(String key) {
+ return null;
+ }
+
+ @Override
+ public void reset() {
+ index = -1;
+ }
+
+ @Override
+ public boolean moveToNext() {
+ return (++index) < files.length;
+ }
+ });
+ t.write(mOutput);
+ }
+
+ static String readableFileSize(long size) {
+ if(size <= 0) return "0";
+ final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
+ int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
+ return new DecimalFormat("#,##0.#").format(
+ size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
+ }
+
String getUriResourcePath() {
final Pattern pattern = Pattern.compile("/?res/([\\w/]+)");
Matcher m = pattern.matcher(mUri.getPath());
|