Merge "Import revised translations."
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 8ca151a..da98a1c 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -317,7 +317,10 @@
if (urlData.isEmpty()) {
loadUrl(webView, mSettings.getHomePage());
} else {
- loadUrlDataIn(t, urlData);
+ // monkey protection against delayed start
+ if (t != null) {
+ loadUrlDataIn(t, urlData);
+ }
}
} else {
mTabControl.restoreState(icicle, currentTab, restoreIncognitoTabs,
@@ -2088,9 +2091,12 @@
}
protected void setActiveTab(Tab tab) {
- mTabControl.setCurrentTab(tab);
- // the tab is guaranteed to have a webview after setCurrentTab
- mUi.setActiveTab(tab);
+ // monkey protection against delayed start
+ if (tab != null) {
+ mTabControl.setCurrentTab(tab);
+ // the tab is guaranteed to have a webview after setCurrentTab
+ mUi.setActiveTab(tab);
+ }
}
protected void closeEmptyChildTab() {
diff --git a/src/com/android/browser/GoogleAccountLogin.java b/src/com/android/browser/GoogleAccountLogin.java
index 3712490..f4ccfd1 100644
--- a/src/com/android/browser/GoogleAccountLogin.java
+++ b/src/com/android/browser/GoogleAccountLogin.java
@@ -41,6 +41,7 @@
import android.preference.PreferenceManager;
import android.util.Log;
import android.webkit.CookieManager;
+import android.webkit.CookieSyncManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@@ -86,6 +87,12 @@
mWebView = new WebView(mActivity);
mRunnable = runnable;
+ // XXX: Doing pre-login causes onResume to skip calling
+ // resumeWebViewTimers. So to avoid problems with timers not running, we
+ // duplicate the work here using the off-screen WebView.
+ CookieSyncManager.getInstance().startSync();
+ mWebView.resumeTimers();
+
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
diff --git a/src/com/android/browser/ScrollWebView.java b/src/com/android/browser/ScrollWebView.java
index 1d7f23a..2bf07e1 100644
--- a/src/com/android/browser/ScrollWebView.java
+++ b/src/com/android/browser/ScrollWebView.java
@@ -33,6 +33,7 @@
private boolean mIsCancelled;
private boolean mBackgroundRemoved = false;
private boolean mUserInitiated = false;
+ private TitleBarBase mTitleBar;
/**
* @param context
@@ -70,6 +71,11 @@
super(context);
}
+ @Override
+ protected int getTitleHeight() {
+ return (mTitleBar != null) ? mTitleBar.getEmbeddedHeight() : 0;
+ }
+
// scroll runnable implementation
public void run() {
if (!mIsCancelled && (mScrollListener != null)) {
@@ -84,6 +90,7 @@
@Override
public void setEmbeddedTitleBar(final View title) {
super.setEmbeddedTitleBar(title);
+ mTitleBar = (TitleBarBase) title;
if (title != null && mScrollListener != null) {
// allow the scroll listener to initialize its state
post(this);
diff --git a/src/com/android/browser/TitleBarBase.java b/src/com/android/browser/TitleBarBase.java
index 2b64aa3..46136db 100644
--- a/src/com/android/browser/TitleBarBase.java
+++ b/src/com/android/browser/TitleBarBase.java
@@ -113,6 +113,10 @@
}
}
+ public int getEmbeddedHeight() {
+ return getHeight();
+ }
+
// UrlInputListener implementation
/**
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index c732da8..85935a0 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -163,6 +163,11 @@
}
}
+ @Override
+ public int getEmbeddedHeight() {
+ return mContainer.getHeight();
+ }
+
void setUseQuickControls(boolean useQuickControls) {
mUseQuickControls = useQuickControls;
mUrlInput.setUseQuickControls(mUseQuickControls);
@@ -292,7 +297,7 @@
mVoiceSearchIndicator.setVisibility(View.VISIBLE);
}
mWebIcon.setImageResource(R.drawable.ic_search_holo_dark);
- updateSearchMode();
+ updateSearchMode(false);
} else {
mGoButton.setVisibility(View.GONE);
mVoiceSearch.setVisibility(View.GONE);
@@ -342,8 +347,8 @@
}
}
- private void updateSearchMode() {
- setSearchMode(TextUtils.isEmpty(mUrlInput.getText()));
+ private void updateSearchMode(boolean userEdited) {
+ setSearchMode(!userEdited || TextUtils.isEmpty(mUrlInput.getText()));
}
private void setSearchMode(boolean voiceSearchEnabled) {
@@ -370,7 +375,7 @@
public void afterTextChanged(Editable s) {
if (mUrlInput.hasFocus()) {
// check if input field is empty and adjust voice search state
- updateSearchMode();
+ updateSearchMode(true);
// clear voice mode when user types
setInVoiceMode(false, null);
}
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 3033db4..94b1651 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -1142,12 +1142,20 @@
values.put(Bookmarks.DATE_MODIFIED, now);
values.put(Bookmarks.DIRTY, 1);
+ String accountType = values
+ .getAsString(Bookmarks.ACCOUNT_TYPE);
+ String accountName = values
+ .getAsString(Bookmarks.ACCOUNT_NAME);
+ boolean hasParent = values.containsKey(Bookmarks.PARENT);
+ if (hasParent) {
+ // Let's make sure it's valid
+ long parentId = values.getAsLong(Bookmarks.PARENT);
+ hasParent = isValidParent(
+ accountType, accountName, parentId);
+ }
+
// If no parent is set default to the "Bookmarks Bar" folder
- if (!values.containsKey(Bookmarks.PARENT)) {
- String accountType = values
- .getAsString(Bookmarks.ACCOUNT_TYPE);
- String accountName = values
- .getAsString(Bookmarks.ACCOUNT_NAME);
+ if (!hasParent) {
values.put(Bookmarks.PARENT,
queryDefaultFolderId(accountName, accountType));
}
@@ -1226,6 +1234,27 @@
}
}
+ private boolean isValidParent(String accountType, String accountName,
+ long parentId) {
+ Uri uri = Bookmarks.buildFolderUri(parentId);
+ Cursor c = query(uri,
+ new String[] { Bookmarks.ACCOUNT_NAME, Bookmarks.ACCOUNT_TYPE },
+ null, null, null);
+ try {
+ if (c.moveToFirst()) {
+ String parentName = c.getString(0);
+ String parentType = c.getString(1);
+ if (TextUtils.equals(accountName, parentName)
+ && TextUtils.equals(accountType, parentType)) {
+ return true;
+ }
+ }
+ return false;
+ } finally {
+ c.close();
+ }
+ }
+
private void filterSearchClient(String[] selectionArgs) {
if (selectionArgs != null) {
for (int i = 0; i < selectionArgs.length; i++) {