summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-06-10 16:27:34 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-06-10 16:27:34 -0700
commit3b0a658012aa92f75fdb2559f43e788c1351f7fd (patch)
tree77f496f8d8755ad19b1f574e43c8285c11119eac /src
parent457ac4aa9e0a08f60641d88c170a1da47bcc23c6 (diff)
parent25ad8ab821d67293a5f53e8d341492be06e187ee (diff)
downloadpackages_apps_Browser-3b0a658012aa92f75fdb2559f43e788c1351f7fd.zip
packages_apps_Browser-3b0a658012aa92f75fdb2559f43e788c1351f7fd.tar.gz
packages_apps_Browser-3b0a658012aa92f75fdb2559f43e788c1351f7fd.tar.bz2
Merge change 3769 into donut
* changes: Squashed commit of the following:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/browser/BrowserActivity.java131
1 files changed, 97 insertions, 34 deletions
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 3252da3..6962c0a 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -708,11 +708,12 @@ public class BrowserActivity extends Activity
// If the intent is ACTION_VIEW and data is not null, the Browser is
// invoked to view the content by another application. In this case,
// the tab will be close when exit.
- String url = getUrlFromIntent(intent);
+ UrlData urlData = getUrlDataFromIntent(intent);
+
final TabControl.Tab t = mTabControl.createNewTab(
Intent.ACTION_VIEW.equals(intent.getAction()) &&
intent.getData() != null,
- intent.getStringExtra(Browser.EXTRA_APPLICATION_ID), url);
+ intent.getStringExtra(Browser.EXTRA_APPLICATION_ID), urlData.mUrl);
mTabControl.setCurrentTab(t);
// This is one of the only places we call attachTabToContentView
// without animating from the tab picker.
@@ -734,14 +735,14 @@ public class BrowserActivity extends Activity
}
copyPlugins(true);
- if (url == null || url.length() == 0) {
+ if (urlData.isEmpty()) {
if (mSettings.isLoginInitialized()) {
webView.loadUrl(mSettings.getHomePage());
} else {
waitForCredentials();
}
} else {
- webView.loadUrl(url);
+ urlData.loadIn(webView);
}
} else {
// TabControl.restoreState() will create a new tab even if
@@ -801,10 +802,11 @@ public class BrowserActivity extends Activity
return;
}
- String url = getUrlFromIntent(intent);
- if (url == null || url.length() == 0) {
- url = mSettings.getHomePage();
+ UrlData urlData = getUrlDataFromIntent(intent);
+ if (urlData.isEmpty()) {
+ urlData = new UrlData(mSettings.getHomePage());
}
+
if (Intent.ACTION_VIEW.equals(action) &&
(flags & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
final String appId =
@@ -821,20 +823,21 @@ public class BrowserActivity extends Activity
// If the WebView has the same original url and is on that
// page, it can be reused.
boolean needsLoad =
- mTabControl.recreateWebView(appTab, url);
+ mTabControl.recreateWebView(appTab, urlData.mUrl);
+
if (current != appTab) {
- showTab(appTab, needsLoad ? url : null);
+ showTab(appTab, needsLoad ? urlData : EMPTY_URL_DATA);
} else {
if (mTabOverview != null && mAnimationCount == 0) {
sendAnimateFromOverview(appTab, false,
- needsLoad ? url : null, TAB_OVERVIEW_DELAY,
+ needsLoad ? urlData : EMPTY_URL_DATA, TAB_OVERVIEW_DELAY,
null);
} else {
// If the tab was the current tab, we have to attach
// it to the view system again.
attachTabToContentView(appTab);
if (needsLoad) {
- appTab.getWebView().loadUrl(url);
+ urlData.loadIn(appTab.getWebView());
}
}
}
@@ -844,21 +847,21 @@ public class BrowserActivity extends Activity
// opened in a new tab unless we have reached MAX_TABS. Then the
// url will be opened in the current tab. If a new tab is
// created, it will have "true" for exit on close.
- openTabAndShow(url, null, true, appId);
+ openTabAndShow(urlData, null, true, appId);
} else {
- if ("about:debug".equals(url)) {
+ if ("about:debug".equals(urlData.mUrl)) {
mSettings.toggleDebugSettings();
return;
}
// If the Window overview is up and we are not in the midst of
// an animation, animate away from the Window overview.
if (mTabOverview != null && mAnimationCount == 0) {
- sendAnimateFromOverview(current, false, url,
+ sendAnimateFromOverview(current, false, urlData,
TAB_OVERVIEW_DELAY, null);
} else {
// Get rid of the subwindow if it exists
dismissSubWindow(current);
- current.getWebView().loadUrl(url);
+ urlData.loadIn(current.getWebView());
}
}
}
@@ -930,7 +933,7 @@ public class BrowserActivity extends Activity
return true;
}
- private String getUrlFromIntent(Intent intent) {
+ private UrlData getUrlDataFromIntent(Intent intent) {
String url = null;
if (intent != null) {
final String action = intent.getAction();
@@ -943,6 +946,13 @@ public class BrowserActivity extends Activity
url += "?" + mimeType;
}
}
+ if ("inline:".equals(url)) {
+ return new InlinedUrlData(
+ intent.getStringExtra(Browser.EXTRA_INLINE_CONTENT),
+ intent.getType(),
+ intent.getStringExtra(Browser.EXTRA_INLINE_ENCODING),
+ intent.getStringExtra(Browser.EXTRA_INLINE_FAILURL));
+ }
} else if (Intent.ACTION_SEARCH.equals(action)
|| MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
|| Intent.ACTION_WEB_SEARCH.equals(action)) {
@@ -973,7 +983,7 @@ public class BrowserActivity extends Activity
}
}
}
- return url;
+ return new UrlData(url);
}
/* package */ static String fixUrl(String inUrl) {
@@ -1895,7 +1905,7 @@ public class BrowserActivity extends Activity
// Send the ANIMTE_FROM_OVERVIEW message after changing the current tab.
private void sendAnimateFromOverview(final TabControl.Tab tab,
- final boolean newTab, final String url, final int delay,
+ final boolean newTab, final UrlData urlData, final int delay,
final Message msg) {
// Set the current tab.
mTabControl.setCurrentTab(tab);
@@ -1919,9 +1929,9 @@ public class BrowserActivity extends Activity
// Load the url after the AnimatingView has captured the picture. This
// prevents any bad layout or bad scale from being used during
// animation.
- if (url != null) {
+ if (!urlData.isEmpty()) {
dismissSubWindow(tab);
- tab.getWebView().loadUrl(url);
+ urlData.loadIn(tab.getWebView());
}
map.put("msg", msg);
mHandler.sendMessageDelayed(mHandler.obtainMessage(
@@ -1945,7 +1955,7 @@ public class BrowserActivity extends Activity
showTab(t, null);
}
- private void showTab(TabControl.Tab t, String url) {
+ private void showTab(TabControl.Tab t, UrlData urlData) {
// Disallow focus change during a tab animation.
if (mAnimationCount > 0) {
return;
@@ -1957,7 +1967,14 @@ public class BrowserActivity extends Activity
delay = TAB_ANIMATION_DURATION + TAB_OVERVIEW_DELAY;
tabPicker(false, mTabControl.getTabIndex(t), false);
}
- sendAnimateFromOverview(t, false, url, delay, null);
+ sendAnimateFromOverview(t, false, urlData, delay, null);
+ }
+
+ // A wrapper function of {@link #openTabAndShow(UrlData, Message, boolean, String)}
+ // that accepts url as string.
+ private void openTabAndShow(String url, final Message msg,
+ boolean closeOnExit, String appId) {
+ openTabAndShow(new UrlData(url), msg, closeOnExit, appId);
}
// This method does a ton of stuff. It will attempt to create a new tab
@@ -1968,7 +1985,7 @@ public class BrowserActivity extends Activity
// the given Message. If the tab overview is already showing (i.e. this
// method is called from TabListener.onClick(), the method will animate
// away from the tab overview.
- private void openTabAndShow(String url, final Message msg,
+ private void openTabAndShow(UrlData urlData, final Message msg,
boolean closeOnExit, String appId) {
final boolean newTab = mTabControl.getTabCount() != TabControl.MAX_TABS;
final TabControl.Tab currentTab = mTabControl.getCurrentTab();
@@ -1977,14 +1994,14 @@ public class BrowserActivity extends Activity
// If the tab overview is up and there are animations, just load
// the url.
if (mTabOverview != null && mAnimationCount > 0) {
- if (url != null) {
+ if (!urlData.isEmpty()) {
// We should not have a msg here since onCreateWindow
// checks the animation count and every other caller passes
// null.
assert msg == null;
// just dismiss the subwindow and load the given url.
dismissSubWindow(currentTab);
- currentTab.getWebView().loadUrl(url);
+ urlData.loadIn(currentTab.getWebView());
}
} else {
// show mTabOverview if it is not there.
@@ -1998,20 +2015,20 @@ public class BrowserActivity extends Activity
// Animate from the Tab overview after any animations have
// finished.
sendAnimateFromOverview(
- mTabControl.createNewTab(closeOnExit, appId, url), true,
- url, delay, msg);
+ mTabControl.createNewTab(closeOnExit, appId, urlData.mUrl), true,
+ urlData, delay, msg);
}
- } else if (url != null) {
+ } else if (!urlData.isEmpty()) {
// We should not have a msg here.
assert msg == null;
if (mTabOverview != null && mAnimationCount == 0) {
- sendAnimateFromOverview(currentTab, false, url,
+ sendAnimateFromOverview(currentTab, false, urlData,
TAB_OVERVIEW_DELAY, null);
} else {
// Get rid of the subwindow if it exists
dismissSubWindow(currentTab);
// Load the given url.
- currentTab.getWebView().loadUrl(url);
+ urlData.loadIn(currentTab.getWebView());
}
}
}
@@ -3334,7 +3351,7 @@ public class BrowserActivity extends Activity
// openTabAndShow will dispatch the message after creating the
// new WebView. This will prevent another request from coming
// in during the animation.
- openTabAndShow(null, msg, false, null);
+ openTabAndShow((String) null, msg, false, null);
parent.addChildTab(mTabControl.getCurrentTab());
WebView.WebViewTransport transport =
(WebView.WebViewTransport) msg.obj;
@@ -4206,7 +4223,7 @@ public class BrowserActivity extends Activity
// middle of an animation, animate away from it to the
// current tab.
if (mTabOverview != null && mAnimationCount == 0) {
- sendAnimateFromOverview(currentTab, false, data,
+ sendAnimateFromOverview(currentTab, false, new UrlData(data),
TAB_OVERVIEW_DELAY, null);
} else {
dismissSubWindow(currentTab);
@@ -4258,7 +4275,7 @@ public class BrowserActivity extends Activity
if (mTabControl.getTabCount() == 0) {
current = mTabControl.createNewTab();
sendAnimateFromOverview(current, true,
- mSettings.getHomePage(), TAB_OVERVIEW_DELAY, null);
+ new UrlData(mSettings.getHomePage()), TAB_OVERVIEW_DELAY, null);
} else {
final int index = position > 0 ? (position - 1) : 0;
current = mTabControl.getTab(index);
@@ -4486,7 +4503,7 @@ public class BrowserActivity extends Activity
"(?i)" + // switch on case insensitive matching
"(" + // begin group for schema
"(?:http|https|file):\\/\\/" +
- "|(?:data|about|content|javascript):" +
+ "|(?:inline|data|about|content|javascript):" +
")" +
"(.*)" );
@@ -4761,4 +4778,50 @@ public class BrowserActivity extends Activity
// the frenquency of checking whether system memory is low
final static int CHECK_MEMORY_INTERVAL = 30000; // 30 seconds
+
+ /**
+ * A UrlData class to abstract how the content will be set to WebView.
+ * This base class uses loadUrl to show the content.
+ */
+ private static class UrlData {
+ String mUrl;
+
+ UrlData(String url) {
+ this.mUrl = url;
+ }
+
+ boolean isEmpty() {
+ return mUrl == null || mUrl.length() == 0;
+ }
+
+ private void loadIn(WebView webView) {
+ webView.loadUrl(mUrl);
+ }
+ };
+
+ /**
+ * A subclass of UrlData class that can display inlined content using
+ * {@link WebView#loadDataWithBaseURL(String, String, String, String, String)}.
+ */
+ private static class InlinedUrlData extends UrlData {
+ InlinedUrlData(String inlined, String mimeType, String encoding, String failUrl) {
+ super(failUrl);
+ mInlined = inlined;
+ mMimeType = mimeType;
+ mEncoding = encoding;
+ }
+ String mMimeType;
+ String mInlined;
+ String mEncoding;
+
+ boolean isEmpty() {
+ return mInlined == null || mInlined.length() == 0 || super.isEmpty();
+ }
+
+ void loadIn(WebView webView) {
+ webView.loadDataWithBaseURL(null, mInlined, mMimeType, mEncoding, mUrl);
+ }
+ }
+
+ private static final UrlData EMPTY_URL_DATA = new UrlData(null);
}