From c7485ae06c6d5d33c57a03d02bbeed54edb3c66f Mon Sep 17 00:00:00 2001 From: Michael Kolb Date: Fri, 3 Sep 2010 10:10:58 -0700 Subject: checkpoint for moving UI to Holo style mostly final assets dialogs are not styled correctly Change-Id: Ib98312ca9465ded3efc2743f9828fe9a815814cc --- src/com/android/browser/BrowserActivity.java | 96 ++++++++++++++++++--------- src/com/android/browser/PageProgressView.java | 94 ++++++++++++++++++++++++++ src/com/android/browser/TabBar.java | 26 ++------ src/com/android/browser/TitleBar.java | 2 +- src/com/android/browser/TitleBarXLarge.java | 43 ++++++++---- src/com/android/browser/UrlInputView.java | 36 ++++++++-- 6 files changed, 224 insertions(+), 73 deletions(-) create mode 100644 src/com/android/browser/PageProgressView.java (limited to 'src/com/android') diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index 78904854c..e6cb4730f 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -23,6 +23,7 @@ import com.android.common.speech.LoggingEvents; import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; +import android.app.Dialog; import android.app.ProgressDialog; import android.app.SearchManager; import android.content.ActivityNotFoundException; @@ -105,6 +106,7 @@ import android.webkit.WebView; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.LinearLayout; +import android.widget.PopupMenu; import android.widget.TextView; import android.widget.Toast; @@ -126,7 +128,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class BrowserActivity extends Activity - implements View.OnCreateContextMenuListener, DownloadListener { + implements View.OnCreateContextMenuListener, DownloadListener, + PopupMenu.OnMenuItemClickListener { /* Define some aliases to make these debugging flags easier to refer to. * This file imports android.provider.Browser, so we can't just refer to "Browser.DEBUG". @@ -226,6 +229,8 @@ public class BrowserActivity extends Activity mTitleBar.setProgress(100); mFakeTitleBar = new TitleBarXLarge(this); ActionBar actionBar = getActionBar(); + actionBar.setBackgroundDrawable(getResources(). + getDrawable(R.drawable.tabbar_bg)); mTabBar = new TabBar(this, mTabControl, (TitleBarXLarge) mFakeTitleBar); actionBar.setCustomNavigationMode(mTabBar); // disable built in zoom controls @@ -3869,45 +3874,70 @@ public class BrowserActivity extends Activity } - /* package*/ void promptAddOrInstallBookmark() { + /* package */ void promptAddOrInstallBookmark(View anchor) { + PopupMenu popup = new PopupMenu(this, anchor); + popup.getMenuInflater().inflate(R.menu.bookmark_shortcut, popup.getMenu()); + popup.setOnMenuItemClickListener(this); + popup.show(); + } + + /** + * popup menu item click listener + * @param item + */ + public boolean onMenuItemClick(MenuItem item) { + switch(item.getItemId()) { + case R.id.add_bookmark_menu_id: + bookmarkCurrentPage(); + return true; + case R.id.shortcut_to_home_menu_id: + Tab current = mTabControl.getCurrentTab(); + current.populatePickerData(); + String touchIconUrl = mTabControl.getCurrentWebView().getTouchIconUrl(); + if (touchIconUrl != null) { + // Download the touch icon for this site then save + // it to the + // homescreen. + Bundle b = new Bundle(); + b.putString("url", current.getUrl()); + b.putString("title", current.getTitle()); + b.putParcelable("favicon", current.getFavicon()); + Message msg = mHandler.obtainMessage(TOUCH_ICON_DOWNLOADED); + msg.setData(b); + new DownloadTouchIcon(BrowserActivity.this, msg, + mTabControl.getCurrentWebView().getSettings().getUserAgentString()) + .execute(touchIconUrl); + } else { + // add to homescreen, can do it immediately as there + // is no touch + // icon. + showSaveToHomescreenDialog( + current.getUrl(), current.getTitle(), null, current.getFavicon()); + } + return true; + default: + return false; + } + } + + /* package */Dialog makeAddOrInstallDialog() { final Tab current = mTabControl.getCurrentTab(); Resources resources = getResources(); - CharSequence[] choices = { - resources.getString(R.string.save_to_bookmarks), - resources.getString(R.string.create_shortcut_bookmark) - }; + CharSequence[] choices = + {resources.getString(R.string.save_to_bookmarks), + resources.getString(R.string.create_shortcut_bookmark)}; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.add_new_bookmark); builder.setItems(choices, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int item) { - if (item == 0) { - bookmarkCurrentPage(); - } else if (item == 1) { - current.populatePickerData(); - String touchIconUrl = mTabControl.getCurrentWebView().getTouchIconUrl(); - if (touchIconUrl != null) { - // Download the touch icon for this site then save it to the - // homescreen. - Bundle b = new Bundle(); - b.putString("url", current.getUrl()); - b.putString("title", current.getTitle()); - b.putParcelable("favicon", current.getFavicon()); - Message msg = mHandler.obtainMessage(TOUCH_ICON_DOWNLOADED); - msg.setData(b); - new DownloadTouchIcon(BrowserActivity.this, msg, - mTabControl.getCurrentWebView().getSettings() - .getUserAgentString()).execute(touchIconUrl); - } else { - // add to homescreen, can do it immediately as there is no touch - // icon. - showSaveToHomescreenDialog(current.getUrl(), current.getTitle(), - null, current.getFavicon()); - } - } - } + public void onClick(DialogInterface dialog, int item) { + if (item == 0) { + bookmarkCurrentPage(); + } else if (item == 1) { + } + } }); - builder.create().show(); + return builder.create(); } /** diff --git a/src/com/android/browser/PageProgressView.java b/src/com/android/browser/PageProgressView.java new file mode 100644 index 000000000..183566add --- /dev/null +++ b/src/com/android/browser/PageProgressView.java @@ -0,0 +1,94 @@ + +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.browser; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.widget.ImageView; + +/** + * + */ +public class PageProgressView extends ImageView { + + private int mProgress; + private int mMaxProgress; + private Rect mBounds; + + /** + * @param context + * @param attrs + * @param defStyle + */ + public PageProgressView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(context); + } + + /** + * @param context + * @param attrs + */ + public PageProgressView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context); + } + + /** + * @param context + */ + public PageProgressView(Context context) { + super(context); + init(context); + } + + private void init(Context ctx) { + mMaxProgress = 10000; + mBounds = new Rect(0,0,0,0); + mProgress = 0; + } + + @Override + public void onLayout(boolean f, int l, int t, int r, int b) { + mBounds.left = 0; + mBounds.right = (r - l) * mProgress / mMaxProgress; + mBounds.top = 0; + mBounds.bottom = b-t; + } + + void setMaxProgress(int max) { + mMaxProgress = max; + } + + void setProgress(int progress) { + mProgress = progress; + mBounds.right = getWidth()*mProgress/mMaxProgress; + invalidate(); + } + + @Override + public void onDraw(Canvas canvas) { +// super.onDraw(canvas); + Drawable d = getDrawable(); + d.setBounds(mBounds); + d.draw(canvas); + } + +} diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java index 3d8a44f96..cf0f27ca4 100644 --- a/src/com/android/browser/TabBar.java +++ b/src/com/android/browser/TabBar.java @@ -55,13 +55,9 @@ public class TabBar extends LinearLayout private final int mTabWidthSelected; private final int mTabWidthUnselected; - private final Drawable mShowUrlDrawable; - private final Drawable mHideUrlDrawable; - private TitleBarXLarge mTitleBar; private TabScrollView mTabs; - private ImageButton mShowUrlButton; private TabControl mControl; private Map mTabMap; @@ -76,8 +72,6 @@ public class TabBar extends LinearLayout Resources res = context.getResources(); mTabWidthSelected = (int) res.getDimension(R.dimen.tab_width_selected); mTabWidthUnselected = (int) res.getDimension(R.dimen.tab_width_unselected); - mShowUrlDrawable = res.getDrawable(R.drawable.ic_menu_showurl); - mHideUrlDrawable = res.getDrawable(R.drawable.ic_menu_hideurl); mTitleBar = titlebar; mTitleBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, @@ -90,13 +84,10 @@ public class TabBar extends LinearLayout LayoutInflater factory = LayoutInflater.from(context); factory.inflate(R.layout.tab_bar, this); mTabs = (TabScrollView) findViewById(R.id.tabs); - mShowUrlButton = (ImageButton) findViewById(R.id.showurl); // TODO: Change enabled states based on whether you can go // back/forward. Probably should be done inside onPageStarted. - mShowUrlButton.setOnClickListener(this); - // build tabs int tabcount = mControl.getTabCount(); for (int i = 0; i < tabcount; i++) { @@ -113,15 +104,7 @@ public class TabBar extends LinearLayout } public void onClick(View view) { - if (mShowUrlButton == view) { - if (mShowUrlMode) { - showUrlBar(); - } else if (!isLoading()) { - ScrollWebView swv = (ScrollWebView) mControl.getCurrentWebView(); - swv.hideEmbeddedTitleBar(); - mBrowserActivity.hideFakeTitleBar(); - } - } else if (mTabs.getSelectedTab() == view) { + if (mTabs.getSelectedTab() == view) { if (mBrowserActivity.isFakeTitleBarShowing() && !isLoading()) { mBrowserActivity.hideFakeTitleBar(); } else { @@ -145,8 +128,6 @@ public class TabBar extends LinearLayout private void setShowUrlMode(boolean showUrl) { mShowUrlMode = showUrl; - Drawable newDrawable = mShowUrlMode ? mShowUrlDrawable : mHideUrlDrawable; - mShowUrlButton.setImageDrawable(newDrawable); } // callback after fake titlebar is shown @@ -272,7 +253,10 @@ public class TabBar extends LinearLayout public void setSelected(boolean selected) { mSelected = selected; mClose.setVisibility(mSelected ? View.VISIBLE : View.GONE); - mTitle.setTextColor(mSelected ? Color.BLACK : Color.GRAY); + mTitle.setTextAppearance(mBrowserActivity, mSelected ? + R.style.TabTitleSelected : R.style.TabTitleUnselected); + setHorizontalFadingEdgeEnabled(!mSelected); + setFadingEdgeLength(50); super.setSelected(selected); setLayoutParams(new LayoutParams(selected ? mTabWidthSelected : mTabWidthUnselected, diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java index f45025dd6..bbb55ad0d 100644 --- a/src/com/android/browser/TitleBar.java +++ b/src/com/android/browser/TitleBar.java @@ -205,7 +205,7 @@ public class TitleBar extends TitleBarBase { } else if (mInLoad) { mBrowserActivity.stopLoading(); } else { - mBrowserActivity.promptAddOrInstallBookmark(); + mBrowserActivity.promptAddOrInstallBookmark(button); } button.setPressed(false); } else if (mTitleBg.isPressed()) { diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java index a7957ab36..e305c0711 100644 --- a/src/com/android/browser/TitleBarXLarge.java +++ b/src/com/android/browser/TitleBarXLarge.java @@ -16,42 +16,51 @@ package com.android.browser; +import com.android.browser.UrlInputView.UrlInputListener; + +import android.app.AlertDialog; import android.app.SearchManager; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; +import android.graphics.Color; import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Message; import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.MenuInflater; import android.view.View; import android.view.View.OnClickListener; +import android.view.View.OnFocusChangeListener; import android.widget.ImageView; -import com.android.browser.UrlInputView.UrlInputListener; - /** * tabbed title bar for xlarge screen browser */ public class TitleBarXLarge extends TitleBarBase - implements UrlInputListener, OnClickListener { + implements UrlInputListener, OnClickListener, OnFocusChangeListener { private static final int PROGRESS_MAX = 100; private BrowserActivity mBrowserActivity; private Drawable mStopDrawable; private Drawable mReloadDrawable; - private Drawable mProgressDrawable; + private Drawable mFocusDrawable; + private Drawable mUnFocusDrawable; + private View mContainer; private View mBackButton; private View mForwardButton; private View mStar; private View mSearchButton; + private View mInputContainer; private ImageView mStopButton; private View mAllButton; - private ImageView mProgressView; + private PageProgressView mProgressView; private UrlInputView mUrlView; private boolean mInLoad; @@ -59,13 +68,14 @@ public class TitleBarXLarge extends TitleBarBase super(context); mBrowserActivity = context; Resources resources = context.getResources(); - mStopDrawable = resources.getDrawable(R.drawable.ic_stop); - mReloadDrawable = resources.getDrawable(R.drawable.ic_reload); + mStopDrawable = resources.getDrawable(R.drawable.ic_stop_normal); + mReloadDrawable = resources.getDrawable(R.drawable.ic_refresh_normal); + mFocusDrawable = resources.getDrawable(R.drawable.text_field_results); + mUnFocusDrawable = resources.getDrawable(R.drawable.text_field); rebuildLayout(context, true); } private void rebuildLayout(Context context, boolean rebuildData) { - removeAllViews(); LayoutInflater factory = LayoutInflater.from(context); factory.inflate(R.layout.url_bar, this); @@ -80,8 +90,8 @@ public class TitleBarXLarge extends TitleBarBase mStopButton = (ImageView) findViewById(R.id.stop); mSearchButton = findViewById(R.id.search); mLockIcon = (ImageView) findViewById(R.id.lock); - mProgressView = (ImageView) findViewById(R.id.progress); - mProgressDrawable = mProgressView.getDrawable(); + mProgressView = (PageProgressView) findViewById(R.id.progress); + mInputContainer = findViewById(R.id.urlbar); mBackButton.setOnClickListener(this); mForwardButton.setOnClickListener(this); @@ -90,6 +100,15 @@ public class TitleBarXLarge extends TitleBarBase mStopButton.setOnClickListener(this); mSearchButton.setOnClickListener(this); mUrlView.setUrlInputListener(this); + mUrlView.setOnFocusChangeListener(this); + mInputContainer.setBackgroundDrawable(mUnFocusDrawable); + mUrlView.setTextColor(Color.GRAY); + + } + + public void onFocusChange(View v, boolean hasFocus) { + mInputContainer.setBackgroundDrawable(hasFocus ? mFocusDrawable : mUnFocusDrawable); + mUrlView.setTextColor(hasFocus ? Color.BLACK : Color.GRAY); } @Override @@ -99,7 +118,7 @@ public class TitleBarXLarge extends TitleBarBase } else if (mForwardButton == v) { mBrowserActivity.getTopWindow().goForward(); } else if (mStar == v) { - mBrowserActivity.promptAddOrInstallBookmark(); + mBrowserActivity.promptAddOrInstallBookmark(mStar); } else if (mAllButton == v) { mBrowserActivity.bookmarksOrHistoryPicker(false, false); } else if (mSearchButton == v) { @@ -174,7 +193,7 @@ public class TitleBarXLarge extends TitleBarBase mInLoad = true; mStopButton.setImageDrawable(mStopDrawable); } - mProgressDrawable.setLevel(newProgress*10000/PROGRESS_MAX); + mProgressView.setProgress(newProgress*10000/PROGRESS_MAX); } } diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java index 77d7dafdd..9ae464b0c 100644 --- a/src/com/android/browser/UrlInputView.java +++ b/src/com/android/browser/UrlInputView.java @@ -22,8 +22,10 @@ import android.content.Context; import android.database.Cursor; import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.View.OnFocusChangeListener; import android.view.ViewGroup; @@ -47,7 +49,8 @@ public class UrlInputView extends AutoCompleteTextView private UrlInputListener mListener; private InputMethodManager mInputManager; private SuggestionsAdapter mAdapter; - private Drawable mFocusDrawable; + + private OnFocusChangeListener mWrappedFocusListener; public UrlInputView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); @@ -65,16 +68,21 @@ public class UrlInputView extends AutoCompleteTextView } private void init(Context ctx) { - mFocusDrawable = ctx.getResources().getDrawable(R.drawable.textfield_stroke); mInputManager = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); setOnEditorActionListener(this); - setOnFocusChangeListener(this); + super.setOnFocusChangeListener(this); final ContentResolver cr = mContext.getContentResolver(); mAdapter = new SuggestionsAdapter(mContext, BrowserProvider.getBookmarksSuggestions(cr, null)); setAdapter(mAdapter); setOnItemClickListener(this); - setSelectAllOnFocus(true); + setSelectAllOnFocus(false); + + } + + @Override + public void setOnFocusChangeListener(OnFocusChangeListener focusListener) { + mWrappedFocusListener = focusListener; } @Override @@ -82,15 +90,30 @@ public class UrlInputView extends AutoCompleteTextView finishInput(getText().toString()); return true; } - + + @Override + public boolean onTouchEvent(MotionEvent evt) { + + if ((evt.getAction() == MotionEvent.ACTION_DOWN) && !this.hasFocus()) { + Log.i("test","onTouch"); + selectAll(); + requestFocus(); + return true; + } else { + return super.onTouchEvent(evt); + } + } + @Override public void onFocusChange(View v, boolean hasFocus) { - setBackgroundDrawable(hasFocus ? mFocusDrawable : null); if (hasFocus) { forceIme(); } else { finishInput(null); } + if (mWrappedFocusListener != null) { + mWrappedFocusListener.onFocusChange(v, hasFocus); + } } @Override @@ -110,6 +133,7 @@ public class UrlInputView extends AutoCompleteTextView private void finishInput(String url) { this.dismissDropDown(); + this.setSelection(0,0); mInputManager.hideSoftInputFromWindow(getWindowToken(), 0); if (url == null) { mListener.onDismiss(); -- cgit v1.2.3