• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.browser;
18 
19 import android.content.Context;
20 import android.graphics.Bitmap;
21 import android.graphics.drawable.Drawable;
22 import android.view.LayoutInflater;
23 import android.view.MotionEvent;
24 import android.view.View;
25 import android.view.ViewGroup;
26 import android.widget.HorizontalScrollView;
27 import android.widget.ImageView;
28 import android.widget.TextView;
29 
30 /**
31  *  Custom layout for an item representing a bookmark in the browser.
32  */
33 class BookmarkItem extends HorizontalScrollView {
34 
35     final static int MAX_TEXTVIEW_LEN = 80;
36 
37     protected TextView    mTextView;
38     protected TextView    mUrlText;
39     protected ImageView   mImageView;
40     protected String      mUrl;
41     protected String      mTitle;
42     protected boolean mEnableScrolling = false;
43 
44     /**
45      *  Instantiate a bookmark item, including a default favicon.
46      *
47      *  @param context  The application context for the item.
48      */
BookmarkItem(Context context)49     BookmarkItem(Context context) {
50         super(context);
51 
52         setClickable(false);
53         setEnableScrolling(false);
54         LayoutInflater factory = LayoutInflater.from(context);
55         factory.inflate(R.layout.history_item, this);
56         mTextView = (TextView) findViewById(R.id.title);
57         mUrlText = (TextView) findViewById(R.id.url);
58         mImageView = (ImageView) findViewById(R.id.favicon);
59         View star = findViewById(R.id.star);
60         star.setVisibility(View.GONE);
61     }
62 
63     /**
64      *  Copy this BookmarkItem to item.
65      *  @param item BookmarkItem to receive the info from this BookmarkItem.
66      */
copyTo(BookmarkItem item)67     /* package */ void copyTo(BookmarkItem item) {
68         item.mTextView.setText(mTextView.getText());
69         item.mUrlText.setText(mUrlText.getText());
70         item.mImageView.setImageDrawable(mImageView.getDrawable());
71     }
72 
73     /**
74      * Return the name assigned to this bookmark item.
75      */
getName()76     /* package */ String getName() {
77         return mTitle;
78     }
79 
getUrl()80     /* package */ String getUrl() {
81         return mUrl;
82     }
83 
84     /**
85      *  Set the favicon for this item.
86      *
87      *  @param b    The new bitmap for this item.
88      *              If it is null, will use the default.
89      */
setFavicon(Bitmap b)90     /* package */ void setFavicon(Bitmap b) {
91         if (b != null) {
92             mImageView.setImageBitmap(b);
93         } else {
94             mImageView.setImageResource(R.drawable.app_web_browser_sm);
95         }
96     }
97 
setFaviconBackground(Drawable d)98     void setFaviconBackground(Drawable d) {
99         mImageView.setBackgroundDrawable(d);
100     }
101 
102     /**
103      *  Set the new name for the bookmark item.
104      *
105      *  @param name The new name for the bookmark item.
106      */
setName(String name)107     /* package */ void setName(String name) {
108         if (name == null) {
109             return;
110         }
111 
112         mTitle = name;
113 
114         if (name.length() > MAX_TEXTVIEW_LEN) {
115             name = name.substring(0, MAX_TEXTVIEW_LEN);
116         }
117 
118         mTextView.setText(name);
119     }
120 
121     /**
122      *  Set the new url for the bookmark item.
123      *  @param url  The new url for the bookmark item.
124      */
setUrl(String url)125     /* package */ void setUrl(String url) {
126         if (url == null) {
127             return;
128         }
129 
130         mUrl = url;
131 
132         url = UrlUtils.stripUrl(url);
133         if (url.length() > MAX_TEXTVIEW_LEN) {
134             url = url.substring(0, MAX_TEXTVIEW_LEN);
135         }
136 
137         mUrlText.setText(url);
138     }
139 
setEnableScrolling(boolean enable)140     void setEnableScrolling(boolean enable) {
141         mEnableScrolling = enable;
142         setFocusable(mEnableScrolling);
143         setFocusableInTouchMode(mEnableScrolling);
144         requestDisallowInterceptTouchEvent(!mEnableScrolling);
145         requestLayout();
146     }
147 
148     @Override
onTouchEvent(MotionEvent ev)149     public boolean onTouchEvent(MotionEvent ev) {
150         if (mEnableScrolling) {
151             return super.onTouchEvent(ev);
152         }
153         return false;
154     }
155 
156     @Override
measureChild(View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)157     protected void measureChild(View child, int parentWidthMeasureSpec,
158             int parentHeightMeasureSpec) {
159         if (mEnableScrolling) {
160             super.measureChild(child, parentWidthMeasureSpec, parentHeightMeasureSpec);
161             return;
162         }
163 
164         final ViewGroup.LayoutParams lp = child.getLayoutParams();
165 
166         final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec,
167                 mPaddingLeft + mPaddingRight, lp.width);
168         final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec,
169                 mPaddingTop + mPaddingBottom, lp.height);
170 
171         child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
172     }
173 
174     @Override
measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)175     protected void measureChildWithMargins(View child,
176             int parentWidthMeasureSpec, int widthUsed,
177             int parentHeightMeasureSpec, int heightUsed) {
178         if (mEnableScrolling) {
179             super.measureChildWithMargins(child, parentWidthMeasureSpec,
180                     widthUsed, parentHeightMeasureSpec, heightUsed);
181             return;
182         }
183 
184         final MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();
185 
186         final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec,
187                 mPaddingLeft + mPaddingRight + lp.leftMargin + lp.rightMargin
188                         + widthUsed, lp.width);
189         final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec,
190                 mPaddingTop + mPaddingBottom + lp.topMargin + lp.bottomMargin
191                         + heightUsed, lp.height);
192 
193         child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
194     }
195 }
196