summaryrefslogtreecommitdiffstats
path: root/WebKit/android/nav/CachedRoot.cpp
Commit message (Collapse)AuthorAgeFilesLines
* improve left edge tap detectionCary Clark2010-11-161-6/+9
| | | | | | | | | | | | | | | | | | Sites like Gizmodo.com layout paragraphs with extra space between lines. Increase the slop allowed when looking for the left edge of a paragraph to accommodate this. Add #define to disable sideways scrolling if the line is already entirely visible. Make various slop consts more clearly named and commented. A companion fix in frameworks/base is not required, but makes scrolling as a result of taps more reliable. bug:1331125 bug:3099569 Change-Id: I0ed89c1f53de99831e835e417b5409c1176fc841
* use layer id to maintain selectionCary Clark2010-11-111-2/+7
| | | | | | | | | | | | | | | | | | The pictures used to draw the page content can change in response to refreshes, as the selection is moved or as the screen is scrolled or zoomed. Track the layer id, instead of the picture pointer, to find the picture that contains the current selection. Before, the selection would disappear as the screen was pinched, or the highlight might disappear even though the anchors draw, or the highlight and anchors might be drawn offset from the screen data. This change eliminates this class of bugs. Change-Id: Ifc440b8aa0c9d6d232e298e42c4c544a41629442 http://b/3183492
* Adjust layers when parent layer scrollsCary Clark2010-11-041-2/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a page has layers, it causes the main body of the page to become a layer as well. The scroll position of the WebView must be applied to the layer to translate the cursor rings correctly for hit-testing. Today, applying the scroll position of the WebView screws up overflow scrolling. Until this gets figured out, skip using the scroll position in CacheFrame adjust() and unadjust(). The position of the layer, and all of its parent layers, should be considered when adjusting the rectangle bounds contained by that layer. Before, only the child layer's position was considered. The clip used by scrollable divs may be initialized but never set. If it is empty, ignore it, rather than clipping out all content. In CacheBuilder, remove a couple of unnecessary lines -- the CacheInput initialization clears all members. In SelectText, reverse the order of the xfer mode and paint objects to remove a Skia ref count assert. In CachedInput, make the debug printout current. Overall, added more debugging output (turned off by default). bug:3030370 Change-Id: Ic19c24b3bf33d081a1d0c1f8c06601dcb56ae881
* allow contained draws to identify a linkCary Clark2010-10-281-10/+15
| | | | | | | | | | | | | | | | | | | The first cut of rewriting hiding and clipping links if they are obscured by a subsequent draw looks for the contained text to find the original link in the picture. Some links contain only bitmaps, and others, like text fields, may contain nothing at all. To identify these, look for bitmaps, and to cover the text field case, look for a background erase. These draws can be used to identify where the link is in the picture. Because bitmaps and background erases can also obscure links, distinguish between draws that are contained by the link from those that overlap it. bug:3120589 Change-Id: Ied8fe2378f27253a162f5f9636f5ade12ce6013c
* rewrite select text and others for layersCary Clark2010-10-271-26/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Layers contain pictures, and draw them offset from the top of the page. Several readers of pictures need to account for this displacement when computing what part of the picture intersects a tap on the screen. The tap may not correspond to the first layer that intersects it, so all layers must be checked to find the best match. The root layer usually draws everywhere, so for a match to correspond to the root, the match must additionally intersect text. Layers may create offscreen bitmaps when drawing to correctly alpha blend the results to the screen, but this causes the items in the bitmap to draw to an unexpected location when the picture is treated as a spatial database. To get around this, call the SkCanvas::save() from the overridden saveLayer() to push and pop the canvas layer state without creating an offscreen. WebCore/platform/graphics/android/LayerAndroid.cpp WebCore/platform/graphics/android/LayerAndroid.h - In find(), iterate through all children, instead of stopping on the first match. - Check to see if the child actually draws at the desired location, and if it draws text there as well. - Specify a slop factor to allow for inaccuracies in touch. - Check the root for text before checking the children. WebKit/android/nav/CachedFrame.cpp WebKit/android/nav/CachedFrame.h - Modify the (x,y) co-ordinate by the layer's offset, when finding the picture corresponding to a point. WebKit/android/nav/CachedLayer.cpp WebKit/android/nav/CachedLayer.h - More plumbing to adjust the point if the picture is contained in an offset layer. WebKit/android/nav/CachedRoot.cpp WebKit/android/nav/CachedRoot.h - Correct the (x,y) locations by the layer offset. - Add some debugging (disabled by default) WebKit/android/nav/ParsedCanvas.h - One stop shopping that calls save() from saveLayer(). - Reset the bounder to null to balance its ref count. WebKit/android/nav/SelectText.cpp WebKit/android/nav/SelectText.h - Rearrange the way pictures are tracked. Record the picture corresponding to the input location when the selection starts, requiring that the picture remain unchanged as the selection extends. - Only draw adornments for when the corresponding picture is drawn. This fixes a Gmail specific problem, where the layers come and go as the page scrolls. - Always use the supplied visible bounds instead of computing it from the canvas. - Correct location points by layer offsets. - Add to the picture ref count so it can't be deleted during selection. WebKit/android/nav/WebView.cpp - Simplify visibleRect code. - Simplify all SelectText interfaces. bug:3114609 Change-Id: I43dc3252fc86c4b6500edcd650126b2559f530e3
* compute cursor rings when layers are transparentCary Clark2010-10-181-132/+477
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Google search suggestions are drawn in a popup menu (a div with a small amount of transparency). This can partially or complete obscure links underneath the popup, and can present touchable targets which may be much larger than the text contained by the link. CachedRoot::checkRings() determines if a larger bounding box can be used for the ring around the link. CachedRoot::maskIfHidden() determines if the ring needs to be cut down in size because it is only partially visible, or fully obscured. Both routines share the implementation that gathers information about the link, which uses RingCanvas to parse the picture, and RingCheck to build layers describing the text and rectangles drawn in the area around the ring. The basic strategy is to find the text contained by the link under consideration, and see if subsequent drawing obscures the text, or if other text would be enclosed by enlarging the ring. Since maskIfHidden() works better now than before, this CL enabled checking for hidden links when recomputing the current selection after the picture updates. It also checks to see if the link can be larger when maskIfHidden() determines that it is unclipped. Also, if a tap is inside the larger ring, but not on the text itself, treat that as a valid hit. (In CachedFrame::findBestHitAt) And, this fixes CacheBuilder debugging code, and the CacheBuilder array crasher described by bug: 3043268 bug: 2661613 Change-Id: I751f6539f6c840889a58de8c4611364442b3e37c
* Merge WebKit at r65072: String class has moved to the WTF namespace.Ben Murdoch2010-08-131-2/+2
| | | | | | See http://trac.webkit.org/changeset/65021 Change-Id: I779a8ec0c3e1e0aed8f8d1894cfc1e5ca33ee549
* Enable navigation in scrollable layers.Patrick Scott2010-08-021-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | EventHandler: * Added IgnoreClipping in order to touch nodes that are clipped out. android_graphics: * Remember the absolute bounds of the node for invals. RenderBox: * Fix a compiler warning. RenderLayer: * Do not record the entire layer contents unless the scroll dimensions are larger than the client dimensions. * Change isSelfPaintingLayer to check for an overflow clip instead of the scrollable dimensions since it can be too early to check at this point. RenderLayerCompositor: * Same as RenderLayer for checking the overflow clip. WebViewCore: * Scroll the containing layer to the node bounds and offset the mouse position if scrolled. Once the mouse event is processed, restore the layer to 0,0. CacheBuilder: * The body position is no longer used. * Do not clip out nodes if the layer is scrollable. CachedFrame: * Add unadjustBounds to restore adjusted bounds to their original position (fixed position elements). * Call unadjustBounds when a node has been found. This new set of bounds is passed over to WebViewCore to handle clicks. * Reject empty node bounds. CachedLayer: * Document adjustBounds and add unadjustBounds. Add in the scroll position to the node bounds. CachedRoot: * Unadjust the mouse bounds. WebView: * Unadjust the mouse bounds and use the absolute bounds of the ring during inval. Bug: 1566791 Change-Id: Ia55f2cbb61869087176d3ff61882e40324614c6a
* don't hide transparent nodesCary Clark2010-04-221-1/+1
| | | | | | | | | | | A node may be transparent if the body of the node is drawn earlier. In this case, the node may not be tested to see if it has been occluded by later drawing, since no drawing inside the scope of the node is actually visible. So, skip the hidden test for transparent nodes. Change-Id: Ib748e9e7b86252f791ee68198d1d794fb4591a88 http://b/2582455
* nextTextField may walk off the end or try invalid framesCary Clark2010-04-221-0/+7
| | | | | | | | | | | Rewrote nextTextField() to check range and frame, and to more resemble other node walkers. Caller no longer passes uninitialized frame in focused case, and looks at parent frames after the target node. Change-Id: I7ea9dffb75d28bdd9d71d83921058feca6baf928 http://b/2607250
* keep frames associated with regular hits and direct hitsCary Clark2010-04-061-1/+2
| | | | | | | | | | The hit test on the nav cache returns a node/frame pair. It looks for the closest hit, but gives priority to a direct hit. Track the frame associated with the direct hit separately, so that the correct node/frame pair is returned. Change-Id: Icb1e3de4a0aad3c6dd9b2b81669f9c7bbb260282 http://b/2316138
* fix nav algorithm when node is clippedCary Clark2010-03-111-1/+0
| | | | | | | | | | | | A fix for http://b/2319610 incorrectly retried finding nodes if the node was clipped, possibly causing infinite recursion. Leave all of the prior fix but only try once. I tested the prior test case and ensured that it still works. Change-Id: Ib229b6fc0ba57c131a8c1f33350982ac22a445c0 http://b/2501914
* allow anchor containing layer to be mapped to navable layerCary Clark2010-03-021-4/+23
| | | | | | | | | | | | | | | | A layer may be inside or outside of an anchor. If it is inside, the corresponding CachedNode has already been created, but is being tracked. These tracked nodes need their layer and unclipped bits set. For now, node in layers are assumed to draw last in their layer, and aren't obscured by other drawing. We may allow nodes in layers to be obscured one day. Preparing for that, translate the layer picture by its global position when testing to see if the node is hidden. Fix debugging by allowing CachedLayer to see inside LayerAndroid. http://b/2453974
* minor fixes to layer navCary Clark2010-02-171-3/+6
| | | | | | | | | | | - get rid of the FloatPoint interface in LayerAndroid; use (x, y) instead - make CachedFrame a friend of CachedRoot and CacheBuilder a friend of CachedNode so they alone can access private fields. - assume the LayerAndroid picture can sometimes be null. If it is, use the main page's picture instead. http://b/2369549
* Add UI considerations to layersCary Clark2010-02-171-38/+183
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | companion fix is in framework/base With fixed layers, parts of the web page are now in motion relative to the document when the page scrolls. Many routines that formerly read static coordinates need to compute locations. In some cases, new computations are cached for speed -- for instance, the current cursor position is cached when it is frequently compared. The cursor rings and other drawing elements like finding text on the page now to be drawn in the correct order so that they appear both under and over layers. There's quite a bit more work to be done. Major pieces are drawing the text selection in the correct order, and computing locations based on nest layers. With this checkin, only the position of the child- most layer is considered when computing bounds. http://b/2369549 JavaScriptCore/wtf/Platform.h - Turn compositing on. All routines that reference LayerAndroid are bracketed by this condition. WebCore/platform/graphics/android/LayerAndroid.h WebCore/platform/graphics/android/LayerAndroid.cpp - Add a unique id to each layer. The unique id is used to associate a layer created when the DOM is parsed in the webkit thread with its copy in the UI thread. - Add: draw the text found on the page, as a call out in the primary draw. The call out must follow the drawing the layers' contents to show the found text correctly. Note that this adds a new slot with identical contents in every child LayerAndroid. In a future optimization, a RootLayerAndroid could hold data common for all child layers. - Add: clipArea(), which returns an array of rectangles describing the clip for this LayerAndroid and its children. Generally, this is the part of the webpage which is covered by one or more fixed layers. - Add: find(FloatPoint) that returns the deepest layer that contains this point. This is used to match taps to the layer that is tapped on. - Add: draw all layer pictures and identify which layer is being drawn. This is used to analyze the picture contents for finding and selecting text. - Add: find the layer that matches a given id; this is used to map cached DOM node data back to the layer that contains it. - Fix up includes, delete unused interfaces WebKit/android/jni/WebViewCore.h WebKit/android/jni/WebViewCore.cpp - Remove local mRootLayer; use the one in WebView.cpp instead (which is in sync with WebView.java) WebKit/Android.mk WebKit/android/nav/CachedLayer.h WebKit/android/nav/CachedLayer.cpp - CacheLayer associates the cached node with the LayerAndroid instance. It contains the index to the node in the cached frame, the LayerAndroid's unique id, and the spacial offset of the node within the layer when the DOM information was captured. It also caches a pointer to the LayerAndroid instance. CacheLayer computes the node's location each time it is called, since the fixed layer may be constantly moving relative to the document's coordinates. WebKit/android/nav/CacheBuilder.h WebKit/android/nav/CacheBuilder.cpp - Track the active layer while building the nav cache. The 'Tracker' structs were refactored to share common code, and a new 'LayerTracker' struct identifies when the node walker is inside a layer. - Added code to dump layer information for debugging. - Note that CachedNode::cursorRingsPtr can only be called during nav data construction - The cache builder can limit or exclude nodes that are clipped out -- but until I have more understanding of layer clipping, treat contained nodes as unclipped. WebKit/android/nav/CachedDebug.h - Add a variant that can dump either to a log file or the console including the function it was dumped from. WebKit/android/nav/CachedFrame.h WebKit/android/nav/CachedFrame.cpp - Add an array of CacheLayer instances. - Protect bounds from direct access since they must always be computed. - Remove misnamed focus parameter from many routines since the cursor node can be read from the root frame. - Add: adjustBounds(), which computes the bounds as the layer moves. - Add: checkRings(), which gets the appropriate picture for the node. - Remove disabled code - Find the layer list for the matching node by using a binary search - Add: resetLayers() to reset the LayerAndroid pointer in CachedLayers when the layer world changes. WebKit/android/nav/CachedHistory.h WebKit/android/nav/CachedHistory.cpp - Update history data to have matching frame and node WebKit/android/nav/CachedNode.h WebKit/android/nav/CachedNode.cpp - Refactor functions that directly read coordinates to compute them. In some cases, pass the frame in so that the layer coordinates can be found. - Add a bit to note that the node belongs to a layer. - Remove duplicate bounds interfaces. - Add methods to get cursor ring data at runtime. - Update debugging info. WebKit/android/nav/CachedRoot.h WebKit/android/nav/CachedRoot.cpp - Isolate direct picture access so that the layer picture can be returned. - Add knowledge of how the base is covered by layers. - Add a pointer to the root LayerAndroid. - delete disabled code. - Move the cursor ring into view if it is obscured by a layer (this isn't totally working) - Before finding the next node to move to, set up 'cursor cache' data, including the visible picture. WebKit/android/nav/FindCanvas.h WebKit/android/nav/FindCanvas.cpp - Move find code here so that it can be called from layers. WebKit/android/nav/WebView.cpp - Add java interface to get viewport metrics on demand. - Pass frame with the node. - Remove the find on page code (now in FindCanvas). - Compute focus rings instead of reading them directly. - Transfer layer id when getting new nav cache. - Set up root LayerAndroid. - Add utility to track if cursor is in a layer. - Simplify drawLayers() to use common view metrics.
* Remove code which retrieves the action associated with a textfield.Leon Scroggins2010-02-091-32/+0
| | | | | | This code was written because we previously only had one action button on the IME for textfields. Now that textfields can always have a next button, we no longer need it.
* clip the cursor rings if occludedCary Clark2010-01-131-4/+6
| | | | | | | Also, if a smaller object, like text, is drawn over a occluding rectangle, ignore it, and don't reset the occluded state. fixes http://b/2319610
* Ensure that the current textfield is actually a textfield before treating it ↵Leon Scroggins2010-01-121-2/+2
| | | | | | like one. Fix for http://b/issue?id=2368868
* In findBestHitAt, set x and y to the intersection of slop and cursor.Leon Scroggins2010-01-061-1/+1
| | | | Fixes http://b/issue?id=2201866
* If the DOM changes textfield focus, make the IME work properly.Leon Scroggins2010-01-041-9/+12
| | | | | | | | | | | | | | Fix for http://b/issue?id=2219166 Requires a change to frameworks/base Remove the old change to update the WebTextView when a key is pressed, since the IME does not generate key events. Instead, when the focus changes, and the IME is serving the WebTextView, immediately clear the cursor and update the WebTextView, so the user can continue typing. Also, allow "Next" to work on the currently focused textfield, even if it's not the cursor. Further, check for a new action if there is a focus but not a cursor.
* Show "Go" for the last textfield in a form.Leon Scroggins2009-12-081-3/+7
| | | | Fixes http://b/issue?id=2210152
* Provide <input> type information to Java side.Leon Scroggins2009-12-071-5/+0
| | | | | | | | | | | | | | | | | Help to fix http://b/issue?id=1890360 and http://b/issue?id=2150538 CacheBuilder.cpp: Explicitly set isTextField to false for textareas. CachedRoot: Remove the code which checks to see if the textfield is a search, since if it is, we can avoid this path altogether. WebView: Return a single integer which tells what type the current text input field is. Requires a change to frameworks/base.
* Store InputType information for <input> fields, return SEARCH action for ↵Leon Scroggins2009-12-071-0/+6
| | | | | | | SEARCH <input> Fixes http://b/issue?id=2299660 and http://b/issue?id=2299650 Also remove isPassword, which is redundant.
* move input-related fields out of CachedNode to expandCary Clark2009-12-041-2/+2
| | | | | | | | | | | | | Some of the fields in CachedNode are relevant only to input fields and text areas. Move these into their own vector so that we can add more data without making all CacheNodes bigger. Remove CacheNode entries that are no longer used, or can be consolidated into the node type. Alphabetize some interfaces and implementations. Update the debugging output. part of http://b/2299660
* Fixes license headers for all files in WebKit/android, other than those in stl/.Steve Block2009-11-131-1/+1
| | | | | | | | | | | | | These files have not yet been upstreamed to webkit.org. WebKit requires either a BSD-style or LGPL 2.1 license for all code. We use a BSD-style 2-clause license for Android-specific files that will be upstreamed to webkit.org. This change adds licenses where absent or simply fixes the names of copyright holders in the license text to 'THE COPYRIGHT OWNER' and cleans up formatting. Files in stl/ currently use licenses other than BSD-style and will require more careful treatment. Change-Id: I67ad4b8932e432d3eaaeecdfeb0d09418496228d
* Fix a clicking bug.Leon Scroggins2009-10-281-10/+1
| | | | | | | | | | | Remove some code that simulates a mouse click at the beginning of a textarea and the end of a textfield. The original goal was to make the click change the selection to be at the beginning or end of the field, respectively. However, we actually make another call which prevents this click from the selection. Further, the selection actually gets changed elsewhere. Fixes http://b/issue?id=2219233
* pass the current cursor when computing the mouse positionCary Clark2009-10-281-2/+2
| | | | | | | | | Most of the time, the simulated mouse position can be computed from the current cursor. But when the cursor is changed, the current cursor info could be out of date and generate a bus error. fixes http://b/issue?id=2061211
* Whether or not a textfield is the last or only, make its action GO.Leon Scroggins2009-09-231-3/+2
| | | | | | Fix for http://b/issue?id=2136097 Change-Id: I8ca00498dd5a8d611bc0de5a941faaf596d9f76d
* fix parent index of focus when building nav cacheCary Clark2009-09-151-1/+1
| | | | | | | | | | | When a focused node is found while walking the DOM, the CachedFrame tree doesn't have its parent pointer set. Fix the focus index in the parent when fixing the parent pointer. Also fix a debug statement so that it doesn't depend on the focus parent. Fixes http://b/issue?id=2048186
* start in the proper subframe when finding the next text fieldCary Clark2009-09-031-1/+1
| | | | fixes http://b/issue?id=2048180
* when finding left edge of text block, don't merge in tall bitmapCary Clark2009-08-261-52/+61
| | | | | | | | | | Zooming in to yahoo.com fails sometimes if the block of text has a large bitmap on the left. This change prevents the bitmap from being seen as a part of the text paragraph. Also, cleaned up the debugging statements. Fixes http://b/issue?id=2066236
* rebuild the nav cache on mouse clicks during page loadCary Clark2009-07-311-16/+30
| | | | | | | | | | | | | | | While the page is loading, the nav cache is not rebuilt. Double-click zooms out the web page by using the nav cache to find the left edge of the column -- but fails to work during page load. This change rebuilds the nav cache (if the page is loading) each time a mouse click is sent to webkit. This doesn't fix the bug where the first double click doesn't align the column correctly, but helps with subsequent clicks. Also, pass scale information to getBlockLeftEdge so it can restrict its search to the area that will be zoomed to. Default to the point clicked if no alignment info can be found.
* Allow user to jump to the next textfield.Leon Scroggins2009-07-311-0/+26
| | | | | | | | In CachedFrame, add methods to find the next textfield and to determine which ImeAction should be associated with a given textfield. In WebView, uses these apis to determine the ImeAction and jump to the next textfield and scroll it on screen. Requires a change to frameworks/base.
* Find left edge of column using nav cache data.Cary Clark2009-07-281-0/+120
| | | | | The function is currently unused, but will be used by Grace's double-tap experiment.
* set trackball click to the edge of the text field, not the middleCary Clark2009-06-241-3/+16
| | | | | | | | Add clicking, key debug statements in WebViewCore.cpp. Fix dumping nav tree to use NamedNodeMap. Set click point to be start of text field, end of text area, middle of others. Make CachedRoot::getSimulatedMousePosition, callers const
* more (browser) trackball-is-a-mouse work in progressCary Clark2009-06-111-31/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | WebViewCore.cpp: Add parameter to CachedRoot::findAt to suppress check for hidden nodes. This helps find a best match for newly built nav caches. Require that the new cursor node closely match the bounds of the prior cursor node. This may need tuning. CacheBuilder.cpp: Remove isInput flag on cached nodes (no longer used) CachedFrame.cpp: Add hideCursor to complement clearCursor. Hide prevents the cursor from drawing but does not move it. Clear removes it altogether so that the next movement starts from the viewPort edge. CachedHistory.cpp: Don't special case text fields when doing history navigation. This special casing in part allowed setting the focus to the homepage input, but since focus is no longer set by nav, it is not required. CachedNode.cpp: Add hideCursor; clean up debugging CachedRoot.cpp: Use navBounds from history instead of cursor bounds to determine next move. Clean up some obsolete code. WebView.cpp: Add hideCursor; call it when appropriate.
* in the browser, make the trackball more like a mouseCary Clark2009-06-011-124/+147
| | | | | | | | | | | | | | Older code treated the trackball as a four way dpad with equivalents to moving up, down, left and right by generating arrow key events. This change makes the trackball solely generate mousemove events. The old arrow keys in turn were mapped to be as close as possible to tab-key events that moved the focus. The new model leaves focus-changes to the DOM. Clicking the dpad is distinguished from pressing the enter key to be more compatible with desktop-authored web pages.
* skip rectangular focus ring check in browser if no pictureCary Clark2009-05-181-0/+2
|
* remove printf error in private browser nav cache debugCary Clark2009-05-141-1/+1
|
* use one rectangle for browser focus ringCary Clark2009-05-131-0/+49
| | | | | | | | | | | | Check to see if the potentially larger hit-test bounds can be used in place of the normal bounds, or if the normal bounds can be used in place of the individual text bounds. Construct a region out of the individual focus ring rectangles, then see if any text is drawn inside the bounds but outside of the focus ring. If not, use one rectangle instead of the rings.
* auto import from //depot/cupcake/@136594The Android Open Source Project2009-03-051-1/+2
|
* auto import from //depot/cupcake/@135843The Android Open Source Project2009-03-031-0/+1087
|
* auto import from //depot/cupcake/@135843The Android Open Source Project2009-03-031-1087/+0
|
* auto import from //branches/cupcake/...@130745The Android Open Source Project2009-02-101-11/+21
|
* auto import from //branches/cupcake/...@126645The Android Open Source Project2009-01-151-10/+19
|
* Code drop from //branches/cupcake/...@124589The Android Open Source Project2008-12-171-0/+1068