Merge "Show a remove button for existing bookmarks." into honeycomb
diff --git a/res/layout/bookmarkthumbnailwidget.xml b/res/layout/bookmarkthumbnailwidget.xml
index 2c94d32..e312a2a 100644
--- a/res/layout/bookmarkthumbnailwidget.xml
+++ b/res/layout/bookmarkthumbnailwidget.xml
@@ -13,50 +13,39 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<FrameLayout
+<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="4dip"
- android:paddingBottom="22dip"
- android:paddingLeft="13dip"
- android:paddingRight="13dip">
- <LinearLayout
+ android:paddingBottom="20dip"
+ android:paddingLeft="12dip"
+ android:paddingRight="12dip">
+ <GridView
+ android:id="@+id/bookmarks_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical"
- android:padding="0dip">
- <ImageView android:background="@drawable/list_div_top_btm_bookmark_widget_holo"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_marginTop="2dip"
- android:layout_marginLeft="1dip"
- android:layout_marginRight="1dip"
- android:visibility="invisible" />
- <GridView
- android:id="@+id/bookmarks_list"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:layout_marginLeft="5dip"
- android:layout_marginRight="5dip"
- android:numColumns="2"
- android:paddingTop="1dip"
- android:paddingBottom="1dip"
- android:paddingRight="0dip"
- android:paddingLeft="0dip"
- android:stretchMode="columnWidth"
- android:horizontalSpacing="@dimen/widgetHorizontalSpacing"
- android:verticalSpacing="@dimen/widgetVerticalSpacing"
- android:drawSelectorOnTop="true"
- android:listSelector="@drawable/bookmark_widget_thumb_selector"
- android:fadingEdgeLength="24dp" />
- <ImageView android:background="@drawable/list_div_top_btm_bookmark_widget_holo"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_marginBottom="3dip"
- android:layout_marginLeft="1dip"
- android:layout_marginRight="1dip"
- android:visibility="invisible" />
- </LinearLayout>
-</FrameLayout>
+ android:numColumns="2"
+ android:paddingBottom="6dip"
+ android:paddingRight="3dip"
+ android:paddingLeft="3dip"
+ android:stretchMode="columnWidth"
+ android:horizontalSpacing="@dimen/widgetHorizontalSpacing"
+ android:verticalSpacing="@dimen/widgetVerticalSpacing"
+ android:drawSelectorOnTop="true"
+ android:listSelector="@drawable/bookmark_widget_thumb_selector"
+ android:fadingEdgeLength="24dp" />
+
+ <ImageButton
+ android:id="@+id/app_shortcut"
+ android:layout_width="56dip"
+ android:layout_height="56dip"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentRight="true"
+ android:layout_marginRight="4dip"
+ android:layout_marginBottom="6dip"
+ android:scaleType="centerInside"
+ android:src="@mipmap/ic_launcher_browser"
+ android:background="@drawable/bookmark_widget_thumb_selector"
+ android:padding="4dip" />
+</RelativeLayout>
diff --git a/res/values-xlarge-port/dimensions.xml b/res/values-xlarge-port/dimensions.xml
index 46e7272..e6b59ce 100644
--- a/res/values-xlarge-port/dimensions.xml
+++ b/res/values-xlarge-port/dimensions.xml
@@ -11,7 +11,7 @@
License.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <dimen name="widgetThumbnailHeight">72dip</dimen>
- <dimen name="widgetHorizontalSpacing">0dip</dimen>
- <dimen name="widgetVerticalSpacing">4dip</dimen>
+ <dimen name="widgetThumbnailHeight">84dip</dimen>
+ <dimen name="widgetHorizontalSpacing">10dip</dimen>
+ <dimen name="widgetVerticalSpacing">10dip</dimen>
</resources>
diff --git a/res/values-xlarge/dimensions.xml b/res/values-xlarge/dimensions.xml
index d56146b..6aa83d2 100644
--- a/res/values-xlarge/dimensions.xml
+++ b/res/values-xlarge/dimensions.xml
@@ -13,8 +13,8 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<dimen name="bookmarkThumbnailWidth">180dip</dimen>
<dimen name="bookmarkThumbnailHeight">120dip</dimen>
- <dimen name="widgetThumbnailHeight">100dip</dimen>
- <dimen name="widgetHorizontalSpacing">12dip</dimen>
+ <dimen name="widgetThumbnailHeight">104dip</dimen>
+ <dimen name="widgetHorizontalSpacing">14dip</dimen>
<dimen name="widgetVerticalSpacing">12dip</dimen>
<dimen name="favicon_padded_size">24dip</dimen>
<!-- For the most visited page -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b9ed908..09bd56d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -427,7 +427,7 @@
<string name="autofill_setup_dialog_message">Browser can automatically complete web forms like this one. Would you like to set up your profile?</string>
<!-- Toast message displayed when the user decides to not set up autofill at this time. We want to remind them that they can configure
it through the Browser Settings menu. [CHAR-LIMIT=NONE] -->
- <string name="autofill_setup_dialog_negative_toast">AutoFill can always be configured through Browser Settings -> Personal Settings.</string>
+ <string name="autofill_setup_dialog_negative_toast">AutoFill can always be configured through Browser Settings.</string>
<!-- Settings screen, section title [CHAR-LIMIT=50] -->
<string name="pref_privacy_security_title">Privacy & Security</string>
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 02f1e7c..b79acab 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1304,11 +1304,7 @@
case WebView.HitTestResult.SRC_ANCHOR_TYPE:
case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE:
- TextView titleView = (TextView) LayoutInflater.from(mActivity)
- .inflate(android.R.layout.browser_link_context_header,
- null);
- titleView.setText(extra);
- menu.setHeaderView(titleView);
+ menu.setHeaderTitle(extra);
// decide whether to show the open link in new tab option
boolean showNewTab = mTabControl.canCreateNewTab();
MenuItem newTabItem
diff --git a/src/com/android/browser/SuggestionsAdapter.java b/src/com/android/browser/SuggestionsAdapter.java
index e2d9386..abf9088 100644
--- a/src/com/android/browser/SuggestionsAdapter.java
+++ b/src/com/android/browser/SuggestionsAdapter.java
@@ -41,13 +41,15 @@
/**
* adapter to wrap multiple cursors for url/search completions
*/
-public class SuggestionsAdapter extends BaseAdapter implements Filterable, OnClickListener {
+public class SuggestionsAdapter extends BaseAdapter implements Filterable,
+ OnClickListener {
static final int TYPE_BOOKMARK = 0;
static final int TYPE_SUGGEST_URL = 1;
static final int TYPE_HISTORY = 2;
static final int TYPE_SEARCH = 3;
static final int TYPE_SUGGEST = 4;
+ static final int TYPE_VOICE_SEARCH = 5;
private static final String[] COMBINED_PROJECTION =
{BrowserContract.Combined._ID, BrowserContract.Combined.TITLE,
@@ -73,7 +75,7 @@
public void onSearch(String txt);
- public void onSelect(String txt, String extraData);
+ public void onSelect(String txt, int type, String extraData);
public void onFilterComplete(int count);
@@ -114,8 +116,9 @@
// replace input field text with suggestion text
mListener.onSearch(item.title);
} else {
- mListener.onSelect((TextUtils.isEmpty(item.url)? item.title : item.url),
- item.extra);
+ mListener.onSelect(
+ (TextUtils.isEmpty(item.url)? item.title : item.url),
+ item.type, item.extra);
}
}
@@ -138,8 +141,10 @@
position = (getCount() - 1) - position;
}
if (mVoiceResults != null) {
- return new SuggestItem(mVoiceResults.get(position), null,
- TYPE_SEARCH);
+ SuggestItem item = new SuggestItem(mVoiceResults.get(position),
+ null, TYPE_VOICE_SEARCH);
+ item.extra = Integer.toString(position);
+ return item;
}
if (mMixedResults == null) {
return null;
@@ -186,6 +191,7 @@
switch (item.type) {
case TYPE_SUGGEST:
case TYPE_SEARCH:
+ case TYPE_VOICE_SEARCH:
id = R.drawable.ic_search_category_suggest;
break;
case TYPE_BOOKMARK:
@@ -203,7 +209,9 @@
if (id != -1) {
ic1.setImageDrawable(mContext.getResources().getDrawable(id));
}
- ic2.setVisibility(((TYPE_SUGGEST == item.type) || (TYPE_SEARCH == item.type))
+ ic2.setVisibility(((TYPE_SUGGEST == item.type)
+ || (TYPE_SEARCH == item.type)
+ || (TYPE_VOICE_SEARCH == item.type))
? View.VISIBLE : View.GONE);
div.setVisibility(ic2.getVisibility());
ic2.setOnClickListener(this);
@@ -396,6 +404,7 @@
url = u;
type = t;
}
+
}
abstract class CursorSource {
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index 8be4df5..b5a8032 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -27,6 +27,7 @@
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.speech.RecognizerResultsIntent;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
@@ -268,7 +269,14 @@
mUiController.getCurrentTopWebView().requestFocus();
mUi.hideFakeTitleBar();
Intent i = new Intent();
- i.setAction(Intent.ACTION_SEARCH);
+ String action = null;
+ if (UrlInputView.VOICE.equals(source)) {
+ action = RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS;
+ source = null;
+ } else {
+ action = Intent.ACTION_SEARCH;
+ }
+ i.setAction(action);
i.putExtra(SearchManager.QUERY, text);
if (extra != null) {
i.putExtra(SearchManager.EXTRA_DATA_KEY, extra);
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index 428a0f2..7dc2ed4 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -17,7 +17,6 @@
package com.android.browser;
import com.android.browser.SuggestionsAdapter.CompletionListener;
-import com.android.browser.SuggestionsAdapter.SuggestItem;
import android.content.Context;
import android.content.res.Configuration;
@@ -27,8 +26,6 @@
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
@@ -41,11 +38,12 @@
*/
public class UrlInputView extends AutoCompleteTextView
implements OnFocusChangeListener, OnEditorActionListener,
- CompletionListener, OnItemClickListener {
+ CompletionListener {
static final String TYPED = "browser-type";
static final String SUGGESTED = "browser-suggest";
+ static final String VOICE = "voice-search";
private UrlInputListener mListener;
private InputMethodManager mInputManager;
@@ -79,7 +77,6 @@
setSelectAllOnFocus(true);
onConfigurationChanged(ctx.getResources().getConfiguration());
setThreshold(1);
- setOnItemClickListener(this);
}
void setController(UiController controller) {
@@ -185,8 +182,9 @@
}
@Override
- public void onSelect(String url, String extra) {
- finishInput(url, extra, SUGGESTED);
+ public void onSelect(String url, int type, String extra) {
+ finishInput(url, extra, (type == SuggestionsAdapter.TYPE_VOICE_SEARCH)
+ ? VOICE : SUGGESTED);
}
@Override
@@ -209,14 +207,6 @@
}
- @Override
- public void onItemClick(
- AdapterView<?> parent, View view, int position, long id) {
- SuggestItem item = mAdapter.getItem(position);
- onSelect((TextUtils.isEmpty(item.url) ? item.title : item.url),
- item.extra);
- }
-
public void setReverseResults(boolean reverse) {
mAdapter.setReverseResults(reverse);
}
diff --git a/src/com/android/browser/widget/BookmarkThumbnailWidgetProvider.java b/src/com/android/browser/widget/BookmarkThumbnailWidgetProvider.java
index 14e1c89..db52130 100644
--- a/src/com/android/browser/widget/BookmarkThumbnailWidgetProvider.java
+++ b/src/com/android/browser/widget/BookmarkThumbnailWidgetProvider.java
@@ -16,6 +16,7 @@
package com.android.browser.widget;
+import com.android.browser.BrowserActivity;
import com.android.browser.R;
import android.app.PendingIntent;
@@ -78,12 +79,16 @@
private void performUpdate(Context context,
AppWidgetManager appWidgetManager, int[] appWidgetIds) {
+ Intent launchBrowser = new Intent(BrowserActivity.ACTION_SHOW_BROWSER,
+ null, context, BrowserActivity.class);
for (int appWidgetId : appWidgetIds) {
Intent updateIntent = new Intent(context, BookmarkThumbnailWidgetService.class);
updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
updateIntent.setData(Uri.parse(updateIntent.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.bookmarkthumbnailwidget);
+ views.setOnClickPendingIntent(R.id.app_shortcut, PendingIntent
+ .getActivity(context, 0, launchBrowser, PendingIntent.FLAG_CANCEL_CURRENT));
views.setRemoteAdapter(R.id.bookmarks_list, updateIntent);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.bookmarks_list);
Intent ic = new Intent(context, BookmarkThumbnailWidgetService.class);