<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>docs/html/guide/samples/images/SearchableDictionary1.png</filename>
    </added>
    <added>
      <filename>docs/html/guide/samples/images/SearchableDictionary2.png</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -352,6 +352,8 @@ web_docs_sample_code_flags := \
 		            guide/samples/LunarLander &quot;Lunar Lander&quot; \
 		-samplecode $(sample_dir)/NotePad \
 		            guide/samples/NotePad &quot;Note Pad&quot; \
+		-samplecode $(sample_dir)/SearchableDictionary \
+		            guide/samples/SearchableDictionary &quot;Searchable Dictionary&quot; \
 		-samplecode $(sample_dir)/Snake \
 		            guide/samples/Snake &quot;Snake&quot; \
 		-samplecode $(sample_dir)/SoftKeyboard \</diff>
      <filename>Android.mk</filename>
    </modified>
    <modified>
      <diff>@@ -4123,6 +4123,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;includeInGlobalSearch&quot;
+ type=&quot;int&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;16843374&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;indeterminate&quot;
  type=&quot;int&quot;
  transient=&quot;false&quot;
@@ -6191,6 +6202,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;queryAfterZeroResults&quot;
+ type=&quot;int&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;16843394&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;radioButtonStyle&quot;
  type=&quot;int&quot;
  transient=&quot;false&quot;
@@ -6686,6 +6708,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;searchSettingsDescription&quot;
+ type=&quot;int&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;16843402&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;searchSuggestAuthority&quot;
  type=&quot;int&quot;
  transient=&quot;false&quot;
@@ -6741,6 +6774,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;searchSuggestThreshold&quot;
+ type=&quot;int&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;16843373&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;secondaryProgress&quot;
  type=&quot;int&quot;
  transient=&quot;false&quot;
@@ -21158,6 +21202,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;INTENT_ACTION_WEB_SEARCH_SETTINGS&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;android.search.action.WEB_SEARCH_SETTINGS&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;MENU_KEY&quot;
  type=&quot;char&quot;
  transient=&quot;false&quot;
@@ -21191,6 +21246,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;SHORTCUT_MIME_TYPE&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;vnd.android.cursor.item/vnd.android.search.suggest&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;SUGGEST_COLUMN_FORMAT&quot;
  type=&quot;java.lang.String&quot;
  transient=&quot;false&quot;
@@ -21279,6 +21345,28 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;SUGGEST_COLUMN_SHORTCUT_ID&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;suggest_shortcut_id&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
+&lt;field name=&quot;SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;suggest_spinner_while_refreshing&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;SUGGEST_COLUMN_TEXT_1&quot;
  type=&quot;java.lang.String&quot;
  transient=&quot;false&quot;
@@ -21312,6 +21400,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;SUGGEST_NEVER_MAKE_SHORTCUT&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;_-1&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;SUGGEST_URI_PATH_QUERY&quot;
  type=&quot;java.lang.String&quot;
  transient=&quot;false&quot;
@@ -21323,6 +21422,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;SUGGEST_URI_PATH_SHORTCUT&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;search_suggest_shortcut&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;USER_QUERY&quot;
  type=&quot;java.lang.String&quot;
  transient=&quot;false&quot;</diff>
      <filename>api/4.xml</filename>
    </modified>
    <modified>
      <diff>@@ -4123,6 +4123,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;includeInGlobalSearch&quot;
+ type=&quot;int&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;16843374&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;indeterminate&quot;
  type=&quot;int&quot;
  transient=&quot;false&quot;
@@ -6191,6 +6202,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;queryAfterZeroResults&quot;
+ type=&quot;int&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;16843394&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;radioButtonStyle&quot;
  type=&quot;int&quot;
  transient=&quot;false&quot;
@@ -6686,6 +6708,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;searchSettingsDescription&quot;
+ type=&quot;int&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;16843402&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;searchSuggestAuthority&quot;
  type=&quot;int&quot;
  transient=&quot;false&quot;
@@ -6741,6 +6774,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;searchSuggestThreshold&quot;
+ type=&quot;int&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;16843373&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;secondaryProgress&quot;
  type=&quot;int&quot;
  transient=&quot;false&quot;
@@ -21158,6 +21202,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;INTENT_ACTION_WEB_SEARCH_SETTINGS&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;android.search.action.WEB_SEARCH_SETTINGS&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;MENU_KEY&quot;
  type=&quot;char&quot;
  transient=&quot;false&quot;
@@ -21191,6 +21246,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;SHORTCUT_MIME_TYPE&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;vnd.android.cursor.item/vnd.android.search.suggest&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;SUGGEST_COLUMN_FORMAT&quot;
  type=&quot;java.lang.String&quot;
  transient=&quot;false&quot;
@@ -21279,6 +21345,28 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;SUGGEST_COLUMN_SHORTCUT_ID&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;suggest_shortcut_id&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
+&lt;field name=&quot;SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;suggest_spinner_while_refreshing&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;SUGGEST_COLUMN_TEXT_1&quot;
  type=&quot;java.lang.String&quot;
  transient=&quot;false&quot;
@@ -21312,6 +21400,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;SUGGEST_NEVER_MAKE_SHORTCUT&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;_-1&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;SUGGEST_URI_PATH_QUERY&quot;
  type=&quot;java.lang.String&quot;
  transient=&quot;false&quot;
@@ -21323,6 +21422,17 @@
  visibility=&quot;public&quot;
 &gt;
 &lt;/field&gt;
+&lt;field name=&quot;SUGGEST_URI_PATH_SHORTCUT&quot;
+ type=&quot;java.lang.String&quot;
+ transient=&quot;false&quot;
+ volatile=&quot;false&quot;
+ value=&quot;&amp;quot;search_suggest_shortcut&amp;quot;&quot;
+ static=&quot;true&quot;
+ final=&quot;true&quot;
+ deprecated=&quot;not deprecated&quot;
+ visibility=&quot;public&quot;
+&gt;
+&lt;/field&gt;
 &lt;field name=&quot;USER_QUERY&quot;
  type=&quot;java.lang.String&quot;
  transient=&quot;false&quot;</diff>
      <filename>api/current.xml</filename>
    </modified>
    <modified>
      <diff>@@ -51,6 +51,8 @@ import java.util.List;
  * &lt;li&gt;&lt;a href=&quot;#HowSearchIsInvoked&quot;&gt;How Search Is Invoked&lt;/a&gt;
  * &lt;li&gt;&lt;a href=&quot;#ImplementingSearchForYourApp&quot;&gt;Implementing Search for Your App&lt;/a&gt;
  * &lt;li&gt;&lt;a href=&quot;#Suggestions&quot;&gt;Search Suggestions&lt;/a&gt;
+ * &lt;li&gt;&lt;a href=&quot;#ExposingSearchSuggestionsToQuickSearchBox&quot;&gt;Exposing Search Suggestions to
+ * Quick Search Box&lt;/a&gt;&lt;/li&gt;
  * &lt;li&gt;&lt;a href=&quot;#ActionKeys&quot;&gt;Action Keys&lt;/a&gt;
  * &lt;li&gt;&lt;a href=&quot;#SearchabilityMetadata&quot;&gt;Searchability Metadata&lt;/a&gt;
  * &lt;li&gt;&lt;a href=&quot;#PassingSearchContext&quot;&gt;Passing Search Context&lt;/a&gt;
@@ -246,6 +248,12 @@ import java.util.List;
  * &lt;li&gt;Summaries of possible results&lt;/li&gt;
  * &lt;/ul&gt;
  * 
+ * &lt;p&gt;Once an application is configured to provide search suggestions, those same suggestions can
+ * easily be made available to the system-wide Quick Search Box, providing faster access to its
+ * content from one central prominent place. See
+ * &lt;a href=&quot;#ExposingSearchSuggestionsToQuickSearchBox&quot;&gt;Exposing Search Suggestions to Quick Search
+ * Box&lt;/a&gt; for more details.
+ * 
  * &lt;p&gt;The primary form of suggestions is known as &lt;i&gt;queried suggestions&lt;/i&gt; and is based on query
  * text that the user has already typed.  This would generally be based on partial matches in
  * the available data.  In certain situations - for example, when no query text has been typed yet -
@@ -480,6 +488,26 @@ import java.util.List;
  *             {@link android.content.Intent#ACTION_SEARCH ACTION_SEARCH}, optional otherwise.&lt;/td&gt;
  *     &lt;/tr&gt;
  *
+ *     &lt;tr&gt;&lt;th&gt;{@link #SUGGEST_COLUMN_SHORTCUT_ID}&lt;/th&gt;
+ *         &lt;td&gt;This column is used to indicate whether a search suggestion should be stored as a
+ *             shortcut, and whether it should be validated.  Shortcuts are usually formed when the
+ *             user clicks a suggestion from Quick Search Box.  If missing, the result will be
+ *             stored as a shortcut and never refreshed.  If set to
+ *             {@link #SUGGEST_NEVER_MAKE_SHORTCUT}, the result will not be stored as a shortcut.
+ *             Otherwise, the shortcut id will be used to check back for for an up to date
+ *             suggestion using {@link #SUGGEST_URI_PATH_SHORTCUT}. Read more about shortcut
+ *             refreshing in the section about
+ *             &lt;a href=&quot;#ExposingSearchSuggestionsToQuickSearchBox&quot;&gt;exposing search suggestions to
+ *             Quick Search Box&lt;/a&gt;.&lt;/td&gt;
+ *         &lt;td align=&quot;center&quot;&gt;No.  Only applicable to sources included in Quick Search Box.&lt;/td&gt;
+ *     &lt;/tr&gt;
+ *
+ *     &lt;tr&gt;&lt;th&gt;{@link #SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING}&lt;/th&gt;
+ *         &lt;td&gt;This column is used to specify that a spinner should be shown in lieu of an icon2
+ *             while the shortcut of this suggestion is being refreshed in Quick Search Box.&lt;/td&gt;
+ *         &lt;td align=&quot;center&quot;&gt;No.  Only applicable to sources included in Quick Search Box.&lt;/td&gt;
+ *     &lt;/tr&gt;
+ * 
  *     &lt;tr&gt;&lt;th&gt;&lt;i&gt;Other Columns&lt;/i&gt;&lt;/th&gt;
  *         &lt;td&gt;Finally, if you have defined any &lt;a href=&quot;#ActionKeys&quot;&gt;Action Keys&lt;/a&gt; and you wish 
  *             for them to have suggestion-specific definitions, you'll need to define one 
@@ -553,6 +581,68 @@ import java.util.List;
  * query text is provided and the SUGGEST_COLUMN_INTENT_DATA values are not suitable for user 
  * inspection and editing.&lt;/li&gt;&lt;/ul&gt;
  *
+ * &lt;a name=&quot;ExposingSearchSuggestionsToQuickSearchBox&quot;&gt;&lt;/a&gt;
+ * &lt;h3&gt;Exposing Search Suggestions to Quick Search Box&lt;/h3&gt;
+ * 
+ * &lt;p&gt;Once your application is set up to provide search suggestions, making them available to the
+ * globally accessable Quick Search Box is as easy as setting android:includeInGlobalSearch to
+ * &quot;true&quot; in your searchable metadata file.  Beyond that, here are some more details of how
+ * suggestions interact with Quick Search Box, and optional ways that you may customize suggestions
+ * for your application.
+ * 
+ * &lt;p&gt;&lt;b&gt;Important Note:&lt;/b&gt;  By default, your application will not be enabled as a suggestion
+ * provider (or &quot;searchable item&quot;) in Quick Search Box. Once your app is installed, the user must
+ * enable it as a &quot;searchable item&quot; in the Search settings in order to receive your app's
+ * suggestions in Quick Search Box. You should consider how to message this to users of your app -
+ * perhaps with a note to the user the first time they launch the app about how to enable search
+ * suggestions. This gives your app a chance to be queried for suggestions as the user types into
+ * Quick Search Box, though exactly how or if your suggestions will be surfaced is decided by Quick
+ * Search Box.
+ *
+ * &lt;p&gt;&lt;b&gt;Source Ranking:&lt;/b&gt;  Once your application's search results are made available to Quick
+ * Search Box, how they surface to the user for a particular query will be determined as appropriate
+ * by Quick Search Box ranking. This may depend on how many other apps have results for that query,
+ * and how often the user has clicked on your results compared to the other apps - but there is no
+ * guarantee about how ranking will occur, or whether your app's suggestions will show at all for
+ * a given query.  In general, you can expect that providing quality results will increase the
+ * likelihood that your app's suggestions are provided in a prominent position, and apps that
+ * provide lower quality suggestions will be more likely to be ranked lower and/or not displayed.
+ *
+ * &lt;p&gt;&lt;b&gt;Search Settings:&lt;/b&gt;  Each app that is available to Quick Search Box has an entry in the
+ * system settings where the user can enable or disable the inclusion of its results.  Below the
+ * name of the application, each application may provide a brief description of what kind of
+ * information will be made available via a search settings description string pointed to by the
+ * android:searchSettingsDescription attribute in the searchable metadata. Note that the
+ * user will need to visit this settings menu to enable search suggestions for your app before your
+ * app will have a chance to provide search suggestions to Quick Search Box - see the section
+ * called &quot;Important Note&quot; above.
+ *
+ * &lt;p&gt;&lt;b&gt;Shortcuts:&lt;/b&gt;  Suggestions that are clicked on by the user may be automatically made into
+ * shortcuts, which are suggestions that have been copied from your provider in order to be quickly
+ * displayed without the need to re-query the original sources. Shortcutted suggestions may be
+ * displayed for the query that yielded the suggestion and for any prefixes of that query. You can
+ * request how to have your app's suggestions made into shortcuts, and whether they should be
+ * refreshed, using the {@link #SUGGEST_COLUMN_SHORTCUT_ID} column:
+ * &lt;ul&gt;&lt;li&gt;Suggestions that do not include a shortcut id column will be made into shortcuts and
+ * never refreshed.  This makes sense for suggestions that refer to data that will never be changed
+ * or removed.&lt;/li&gt;
+ * &lt;li&gt;Suggestions that include a shortcut id will be re-queried for a fresh version of the
+ * suggestion each time the shortcut is displayed.  The shortcut will be quickly displayed with
+ * whatever data was most recently available until the refresh query returns, after which the
+ * suggestion will be dynamically refreshed with the up to date information.  The shortcut refresh
+ * query will be sent to your suggestion provider with a uri of {@link #SUGGEST_URI_PATH_SHORTCUT}.
+ * The result should contain one suggestion using the same columns as the suggestion query, or be
+ * empty, indicating that the shortcut is no longer valid.  Shortcut ids make sense when referring
+ * to data that may change over time, such as a contact's presence status.  If a suggestion refers
+ * to data that could take longer to refresh, such as a network based refresh of a stock quote, you
+ * may include {@link #SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING} to show a progress spinner for the
+ * right hand icon until the refresh is complete.&lt;/li&gt;
+ * &lt;li&gt;Finally, to prevent a suggestion from being copied into a shortcut, you may provide a
+ * shortcut id with a value of {@link #SUGGEST_NEVER_MAKE_SHORTCUT}.&lt;/li&gt;&lt;/ul&gt;
+ * 
+ * Note that Quick Search Box will ultimately decide whether to shortcut your app's suggestions,
+ * considering these values as a strong request from your application.
+ * 
  * &lt;a name=&quot;ActionKeys&quot;&gt;&lt;/a&gt;
  * &lt;h3&gt;Action Keys&lt;/h3&gt;
  * 
@@ -725,7 +815,12 @@ import java.util.List;
  *                         and editing.&lt;/td&gt;
  *                 &lt;/tr&gt;
  *                 &lt;/tbody&gt;
- *            &lt;/table&gt;&lt;/td&gt;
+ *            &lt;/table&gt;
+ *            Note that the icon of your app will likely be shown alongside any badge you specify,
+ *            to differentiate search in your app from Quick Search Box. The display of this icon
+ *            is not under the app's control.
+ *         &lt;/td&gt;
+ *            
  *         &lt;td align=&quot;center&quot;&gt;No&lt;/td&gt;
  *     &lt;/tr&gt;
  *     
@@ -869,6 +964,47 @@ import java.util.List;
  *     &lt;/tbody&gt;
  * &lt;/table&gt;
  *
+ * &lt;p&gt;Elements of search metadata that configure search suggestions being available to Quick Search
+ * Box:
+ * &lt;table border=&quot;2&quot; width=&quot;85%&quot; align=&quot;center&quot; frame=&quot;hsides&quot; rules=&quot;rows&quot;&gt;
+ *
+ *     &lt;thead&gt;
+ *     &lt;tr&gt;&lt;th&gt;Attribute&lt;/th&gt; &lt;th&gt;Description&lt;/th&gt; &lt;th&gt;Required?&lt;/th&gt;&lt;/tr&gt;
+ *     &lt;/thead&gt;
+ *
+ *     &lt;tr&gt;&lt;th&gt;android:includeInGlobalSearch&lt;/th&gt;
+ *         &lt;td&gt;If true, indicates the search suggestions provided by your application should be
+ *             included in the globally accessible Quick Search Box.  The attributes below are only
+ *             applicable if this is set to true.&lt;/td&gt;
+ *         &lt;td align=&quot;center&quot;&gt;Yes&lt;/td&gt;
+ *     &lt;/tr&gt;
+ *
+ *     &lt;tr&gt;&lt;th&gt;android:searchSettingsDescription&lt;/th&gt;
+ *         &lt;td&gt;If provided, provides a brief description of the search suggestions that are provided
+ *             by your application to Quick Search Box, and will be displayed in the search settings
+ *             entry for your application.&lt;/td&gt;
+ *         &lt;td align=&quot;center&quot;&gt;No&lt;/td&gt;
+ *     &lt;/tr&gt;
+ *
+ *     &lt;tr&gt;&lt;th&gt;android:queryAfterZeroResults&lt;/th&gt;
+ *         &lt;td&gt;Indicates whether a source should be invoked for supersets of queries it has
+ *             returned zero results for in the past.  For example, if a source returned zero
+ *             results for &quot;bo&quot;, it would be ignored for &quot;bob&quot;.  If set to false, this source
+ *             will only be ignored for a single session; the next time the search dialog is
+ *             invoked, all sources will be queried.  The default value is false.&lt;/td&gt;
+ *         &lt;td align=&quot;center&quot;&gt;No&lt;/td&gt;
+ *     &lt;/tr&gt;
+ *
+ *     &lt;tr&gt;&lt;th&gt;android:searchSuggestThreshold&lt;/th&gt;
+ *         &lt;td&gt;Indicates the minimum number of characters needed to trigger a source from Quick
+ *             Search Box.  Only guarantees that a source will not be queried for anything shorter
+ *             than the threshold.  The default value is 0.&lt;/td&gt;
+ *         &lt;td align=&quot;center&quot;&gt;No&lt;/td&gt;
+ *     &lt;/tr&gt;
+ *
+ *     &lt;/tbody&gt;
+ * &lt;/table&gt;
+ *
  * &lt;p&gt;&lt;b&gt;Additional metadata for search action keys.&lt;/b&gt;  For each action key that you would like to
  * define, you'll need to add an additional element defining that key, and using the attributes
  * discussed in &lt;a href=&quot;#ActionKeys&quot;&gt;Action Keys&lt;/a&gt;.  A simple example is shown here:
@@ -1246,16 +1382,12 @@ public class SearchManager
      * result indicates the shortcut refers to a no longer valid sugggestion.
      *
      * @see #SUGGEST_COLUMN_SHORTCUT_ID
-     *
-     * @hide pending enabling of global search for third parties
      */
     public final static String SUGGEST_URI_PATH_SHORTCUT = &quot;search_suggest_shortcut&quot;;
     
     /**
      * MIME type for shortcut validation.  You'll use this in your suggestions content provider
      * in the getType() function.
-     *
-     * @hide pending enabling of global search for third parties
      */
     public final static String SHORTCUT_MIME_TYPE = 
             &quot;vnd.android.cursor.item/vnd.android.search.suggest&quot;;
@@ -1268,7 +1400,7 @@ public class SearchManager
      * In addition to the columns below, the suggestion columns are used to pass along the full
      * suggestion so it can be shortcutted.
      *
-     * @hide an implementation detail not part of the public api
+     * @hide
      */
     public final static String SEARCH_CLICK_REPORT_AUTHORITY =
             &quot;com.android.globalsearch.stats&quot;;
@@ -1276,21 +1408,21 @@ public class SearchManager
     /**
      * The path the write goes to.
      *
-     * @hide an implementation detail not part of the public api
+     * @hide
      */
     public final static String SEARCH_CLICK_REPORT_URI_PATH = &quot;click&quot;;
 
     /**
      * The column storing the query for the click.
      *
-     * @hide an implementation detail not part of the public api
+     * @hide
      */
     public final static String SEARCH_CLICK_REPORT_COLUMN_QUERY = &quot;query&quot;;
 
     /**
      * The column storing the component name of the application that was pivoted into.
      *
-     * @hide an implementation detail not part of the public api
+     * @hide
      */
     public final static String SEARCH_CLICK_REPORT_COLUMN_COMPONENT = &quot;component&quot;;
 
@@ -1375,7 +1507,7 @@ public class SearchManager
      *  {@link #COMPONENT_NAME_KEY}. For use by the global search system only - if other providers
      *  attempt to use this column, the value will be overwritten by global search.
      *
-     * @hide an implementation detail not part of the public api
+     * @hide
      */
     public final static String SUGGEST_COLUMN_INTENT_COMPONENT_NAME = &quot;suggest_intent_component&quot;;
     /**
@@ -1400,8 +1532,6 @@ public class SearchManager
      * {@link #SUGGEST_NEVER_MAKE_SHORTCUT}, the result will not be stored as a shortcut.
      * Otherwise, the shortcut id will be used to check back for an up to date suggestion using
      * {@link #SUGGEST_URI_PATH_SHORTCUT}.
-     *
-     * @hide pending reenabling of global search for third parties
      */
     public final static String SUGGEST_COLUMN_SHORTCUT_ID = &quot;suggest_shortcut_id&quot;;
 
@@ -1410,7 +1540,7 @@ public class SearchManager
      * cursor item's background color if it needs a non-default background color. A non-zero value
      * indicates a valid background color to override the default.
      *
-     * @hide an implementation detail not part of the public api
+     * @hide For internal use, not part of the public API.
      */
     public final static String SUGGEST_COLUMN_BACKGROUND_COLOR = &quot;suggest_background_color&quot;;
     
@@ -1418,8 +1548,6 @@ public class SearchManager
      * Column name for suggestions cursor. &lt;i&gt;Optional.&lt;/i&gt; This column is used to specify
      * that a spinner should be shown in lieu of an icon2 while the shortcut of this suggestion
      * is being refreshed.
-     *
-     * @hide pending reenabling of global search for third parties
      */
     public final static String SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING =
             &quot;suggest_spinner_while_refreshing&quot;;
@@ -1427,8 +1555,6 @@ public class SearchManager
     /**
      * Column value for suggestion column {@link #SUGGEST_COLUMN_SHORTCUT_ID} when a suggestion
      * should not be stored as a shortcut in global search.
-     *
-     * @hide pending reenabling of global search for third parties
      */
     public final static String SUGGEST_NEVER_MAKE_SHORTCUT = &quot;_-1&quot;;
 
@@ -1475,8 +1601,6 @@ public class SearchManager
      * Intent action for starting a web search provider's settings activity.
      * Web search providers should handle this intent if they have provider-specific
      * settings to implement.
-     *
-     * @hide implementation detail only relevent to web search providers
      */
     public final static String INTENT_ACTION_WEB_SEARCH_SETTINGS
             = &quot;android.search.action.WEB_SEARCH_SETTINGS&quot;;
@@ -1491,7 +1615,8 @@ public class SearchManager
     
     /**
      * Intent action broadcasted to inform that the search settings have changed in some way.
-     * Either searchables have been enabled or disabled.
+     * Either searchables have been enabled or disabled, or a different web search provider
+     * has been chosen.
      */
     public final static String INTENT_ACTION_SEARCH_SETTINGS_CHANGED
             = &quot;android.search.action.SETTINGS_CHANGED&quot;;
@@ -1500,7 +1625,7 @@ public class SearchManager
      * If a suggestion has this value in {@link #SUGGEST_COLUMN_INTENT_ACTION},
      * the search dialog will take no action.
      *
-     * @hide an implentation detail not part of the public api
+     * @hide
      */
     public final static String INTENT_ACTION_NONE = &quot;android.search.action.ZILCH&quot;;
     </diff>
      <filename>core/java/android/app/SearchManager.java</filename>
    </modified>
    <modified>
      <diff>@@ -26,7 +26,6 @@ import android.content.IntentFilter;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
-import android.content.pm.ApplicationInfo;
 import android.os.Bundle;
 import android.util.Log;
 
@@ -231,16 +230,14 @@ public class Searchables {
                         : webSearchInfoList.get(ii - search_count);
                 ActivityInfo ai = info.activityInfo;
                 // Check first to avoid duplicate entries.
-                if (newSearchablesMap.containsKey(new ComponentName(ai.packageName, ai.name))) {
-                    continue;
-                }
-                SearchableInfo searchable = SearchableInfo.getActivityMetaData(mContext, ai);
-                if (searchable != null) {
-                    newSearchablesList.add(searchable);
-                    newSearchablesMap.put(searchable.getSearchActivity(), searchable);
-                    if (searchable.shouldIncludeInGlobalSearch()
-                            &amp;&amp; isWhitelistedForGlobalSearch(pm, searchable.getSearchActivity())) {
-                        newSearchablesInGlobalSearchList.add(searchable);
+                if (newSearchablesMap.get(new ComponentName(ai.packageName, ai.name)) == null) {
+                    SearchableInfo searchable = SearchableInfo.getActivityMetaData(mContext, ai);
+                    if (searchable != null) {
+                        newSearchablesList.add(searchable);
+                        newSearchablesMap.put(searchable.getSearchActivity(), searchable);
+                        if (searchable.shouldIncludeInGlobalSearch()) {
+                            newSearchablesInGlobalSearchList.add(searchable);
+                        }
                     }
                 }
             }
@@ -292,25 +289,6 @@ public class Searchables {
     }
 
     /**
-     * Determines whether an activity may be included in quick search box.  For now this is
-     * restricted to system installed apps.
-     *
-     * TODO: remove when we are ready to enable global search for third party applications.
-     *
-     * @param pm The package manager.
-     * @param searchActivity The component of the search activity.
-     * @return True if the search activity may include its search suggestions in quick search box.
-     */
-    private boolean isWhitelistedForGlobalSearch(PackageManager pm, ComponentName searchActivity) {
-        try {
-            ActivityInfo ai = pm.getActivityInfo(searchActivity, 0);
-            return ((ai.applicationInfo.flags &amp; ApplicationInfo.FLAG_SYSTEM) != 0);
-        } catch (PackageManager.NameNotFoundException e) {
-            return false;
-        }
-    }
-
-    /**
      * Checks if the given activity component is present in the system and if so makes it the
      * preferred activity for handling ACTION_WEB_SEARCH.
      * @param component Name of the component to check and set as preferred.</diff>
      <filename>core/java/android/server/search/Searchables.java</filename>
    </modified>
    <modified>
      <diff>@@ -1527,7 +1527,7 @@ public abstract class Layout {
                     if (bm != null) {
                         workPaint.set(paint);
                         Styled.measureText(paint, workPaint, text,
-                                           offset, offset + 1, null);
+                                           j, j + 2, null);
 
                         float wid = (float) bm.getWidth() *
                                     -workPaint.ascent() / bm.getHeight();</diff>
      <filename>core/java/android/text/Layout.java</filename>
    </modified>
    <modified>
      <diff>@@ -2866,16 +2866,16 @@
             when the user clicks a suggestion.  &lt;i&gt;Optional attribute.&lt;/i&gt; --&gt;
         &lt;attr name=&quot;searchSuggestIntentData&quot; format=&quot;string&quot; /&gt;
 
-        &lt;!-- @hide If provided, this is the minimum number of characters needed to trigger
+        &lt;!-- If provided, this is the minimum number of characters needed to trigger
              search suggestions. The default value is 0. &lt;i&gt;Optional attribute.&lt;/i&gt; --&gt;
         &lt;attr name=&quot;searchSuggestThreshold&quot; format=&quot;integer&quot; /&gt;
 
-        &lt;!-- @hide If provided and &lt;code&gt;true&lt;/code&gt;, this searchable activity will be
+        &lt;!-- If provided and &lt;code&gt;true&lt;/code&gt;, this searchable activity will be
              included in any global lists of search targets.
-             The default value is &lt;code&gt;false&lt;/code&gt;. &lt;i&gt;Optional attribute.&lt;/i&gt;.--&gt;
+             The default value is &lt;code&gt;false&lt;/code&gt;. &lt;i&gt;Optional attribute.&lt;/i&gt;. --&gt;
         &lt;attr name=&quot;includeInGlobalSearch&quot; format=&quot;boolean&quot; /&gt;
 
-        &lt;!-- @hide If provided and &lt;code&gt;true&lt;/code&gt;, this searchable activity will be invoked for all
+        &lt;!-- If provided and &lt;code&gt;true&lt;/code&gt;, this searchable activity will be invoked for all
              queries in a particular session. If set to &lt;code&gt;false&lt;/code&gt; and the activity
              returned zero results for a query, it will not be invoked again in that session for
              supersets of that zero-results query. For example, if the activity returned zero
@@ -2883,7 +2883,7 @@
              The default value is &lt;code&gt;false&lt;/code&gt;. &lt;i&gt;Optional attribute.&lt;/i&gt;. --&gt;
         &lt;attr name=&quot;queryAfterZeroResults&quot; format=&quot;boolean&quot; /&gt;
         
-        &lt;!-- @hide If provided, this string will be used to describe the searchable item in the
+        &lt;!-- If provided, this string will be used to describe the searchable item in the
              searchable items settings within system search settings. &lt;i&gt;Optional
              attribute.&lt;/i&gt; --&gt;
         &lt;attr name=&quot;searchSettingsDescription&quot; format=&quot;string&quot; /&gt;</diff>
      <filename>core/res/res/values/attrs.xml</filename>
    </modified>
    <modified>
      <diff>@@ -1094,9 +1094,7 @@
   &lt;public type=&quot;attr&quot; name=&quot;tension&quot; id=&quot;0x0101026a&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;extraTension&quot; id=&quot;0x0101026b&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;anyDensity&quot; id=&quot;0x0101026c&quot; /&gt;
-  &lt;!-- {@hide} --&gt;
   &lt;public type=&quot;attr&quot; name=&quot;searchSuggestThreshold&quot; id=&quot;0x0101026d&quot; /&gt;
-  &lt;!-- {@hide} --&gt;
   &lt;public type=&quot;attr&quot; name=&quot;includeInGlobalSearch&quot; id=&quot;0x0101026e&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;onClick&quot; id=&quot;0x0101026f&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;targetSdkVersion&quot; id=&quot;0x01010270&quot; /&gt;
@@ -1117,7 +1115,6 @@
   &lt;public type=&quot;attr&quot; name=&quot;backupAgent&quot; id=&quot;0x0101027f&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;allowBackup&quot; id=&quot;0x01010280&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;glEsVersion&quot; id=&quot;0x01010281&quot; /&gt;
-  &lt;!-- {@hide} --&gt;
   &lt;public type=&quot;attr&quot; name=&quot;queryAfterZeroResults&quot; id=&quot;0x01010282&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;dropDownHeight&quot; id=&quot;0x01010283&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;smallScreens&quot; id=&quot;0x01010284&quot; /&gt;
@@ -1126,7 +1123,6 @@
   &lt;public type=&quot;attr&quot; name=&quot;progressBarStyleInverse&quot; id=&quot;0x01010287&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;progressBarStyleSmallInverse&quot; id=&quot;0x01010288&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;progressBarStyleLargeInverse&quot; id=&quot;0x01010289&quot; /&gt;
-  &lt;!-- {@hide} --&gt;
   &lt;public type=&quot;attr&quot; name=&quot;searchSettingsDescription&quot; id=&quot;0x0101028a&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;textColorPrimaryInverseDisableOnly&quot; id=&quot;0x0101028b&quot; /&gt;
   &lt;public type=&quot;attr&quot; name=&quot;autoUrlDetect&quot; id=&quot;0x0101028c&quot; /&gt;</diff>
      <filename>core/res/res/values/public.xml</filename>
    </modified>
    <modified>
      <diff>@@ -375,7 +375,7 @@
     &lt;/ul&gt;
     &lt;ul&gt;
     &lt;?cs if:android.whichdoc != &quot;online&quot; ?&gt;
-      &lt;li&gt;&lt;a href=&quot;&lt;?cs var:toroot ?&gt;../samples&quot;&gt;
+      &lt;li&gt;&lt;a href=&quot;&lt;?cs var:toroot ?&gt;../platforms/android-&lt;?cs var:sdk.version ?&gt;/samples&quot;&gt;
             &lt;span class=&quot;en&quot;&gt;Sample Code&lt;/span&gt;
           &amp;raquo;&lt;/a&gt;&lt;/li&gt;
     &lt;?cs else ?&gt;
@@ -399,6 +399,9 @@
           &lt;li&gt;&lt;a href=&quot;&lt;?cs var:toroot ?&gt;guide/samples/NotePad/index.html&quot;&gt;
                 &lt;span class=&quot;en&quot;&gt;Note Pad&lt;/span&gt;
               &lt;/a&gt;&lt;/li&gt;
+          &lt;li&gt;&lt;a href=&quot;&lt;?cs var:toroot ?&gt;guide/samples/SearchableDictionary/index.html&quot;&gt;
+                &lt;span class=&quot;en&quot;&gt;Searchable Dictionary&lt;/span&gt;
+              &lt;/a&gt;&lt;/li&gt;
           &lt;li&gt;&lt;a href=&quot;&lt;?cs var:toroot ?&gt;guide/samples/Snake/index.html&quot;&gt;
                 &lt;span class=&quot;en&quot;&gt;Snake&lt;/span&gt;
               &lt;/a&gt;&lt;/li&gt;</diff>
      <filename>docs/html/guide/guide_toc.cs</filename>
    </modified>
    <modified>
      <diff>@@ -33,6 +33,10 @@ can modify them and watch them execute. &lt;/p&gt;
   &lt;dd&gt;An application for saving notes. Similar (but not identical) to the 
     &lt;a href=&quot;{@docRoot}guide/tutorials/notepad/index.html&quot;&gt;Notepad tutorial&lt;/a&gt;.&lt;/dd&gt;
   
+ &lt;dt&gt;&lt;a href=&quot;SearchableDictionary/index.html&quot;&gt;Searchable Dictionary&lt;/a&gt;&lt;/dt&gt;
+  &lt;dd&gt;A sample application that demonstrates Android's search framework, 
+  including how to provide search suggestions for Quick Search Box.&lt;/dd&gt;
+  
  &lt;dt&gt;&lt;a href=&quot;Snake/index.html&quot;&gt;Snake&lt;/a&gt;&lt;/dt&gt;
   &lt;dd&gt;An implementation of the classic game &quot;Snake.&quot;&lt;/dd&gt;
   </diff>
      <filename>docs/html/guide/samples/index.jd</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,8 @@ page.title=&amp;lt;uses-feature&amp;gt;
 &lt;dt&gt;syntax:&lt;/dt&gt;
 &lt;dd&gt;
 &lt;pre class=&quot;stx&quot;&gt;
-&amp;lt;uses-feature android:&lt;a href=&quot;#glEsVersion&quot;&gt;glEsVersion&lt;/a&gt;=[&quot;true&quot; | &quot;false&quot;] /&amp;gt;
+&amp;lt;uses-feature android:&lt;a href=&quot;#glEsVersion&quot;&gt;glEsVersion&lt;/a&gt;=&quot;&lt;em&gt;integer&lt;/em&gt;&quot;
+              android:&lt;a href=&quot;#name&quot;&gt;name&lt;/a&gt;=&quot;&lt;em&gt;string&lt;/em&gt;&quot; /&amp;gt;
 &lt;/pre&gt;
 &lt;/dd&gt;
 
@@ -14,15 +15,60 @@ page.title=&amp;lt;uses-feature&amp;gt;
 &lt;dd&gt;&lt;code&gt;&lt;a href=&quot;{@docRoot}guide/topics/manifest/manifest-element.html&quot;&gt;&amp;lt;manifest&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/dd&gt;
 
 &lt;dt&gt;description:&lt;/dt&gt;
-&lt;dd&gt;This element specifies specific features used by the application.
+&lt;dd&gt;This element declares a specific feature used by the application.
 Android provides some features that may not be equally supported by all
 Android devices. In a manner similar to the &lt;code&gt;&lt;a href=&quot;uses-sdk-element.html&quot;&gt;&amp;lt;uses-sdk&gt;&lt;/a&gt;&lt;/code&gt; 
-element, this element allows an application to specify which potentially variable
-features it requires. In this way, the application
-will not be installed on devices that do not offer the required feature.&lt;/p&gt;
+element, this element allows an application to specify which device-variable
+features it uses. In this way, the application
+will not be installed on devices that do not offer the feature.&lt;/p&gt;
+
+&lt;p&gt;For example, an application might specify that it requires a camera with auto-focus capabilities.
+If a device does not provide a camera with auto-focus, then it will not allow
+installation of the application.&lt;/p&gt;
+
+&lt;p&gt;In order to maintain strict device compatibility, it's very important that you use
+this element to declare all features that your application uses. Failure to declare
+a feature may result your application being installed on a device
+that does not support the feature and your application failing.&lt;/p&gt;
+
+&lt;p&gt;For some features, there may exist a specfic attribute that allows you to define
+a version of the feature, such as the version of Open GL used (declared with
+&lt;a href=&quot;#glEsVersion&quot;&gt;{@code glEsVersion}&lt;/a&gt;). Other features that either do or do not
+exist for a device, such as camera auto-focus, are declared using the
+&lt;a href=&quot;#name&quot;&gt;{@code name}&lt;/a&gt; attribute.&lt;/p&gt;
+
+&lt;p&gt;Any software or hardware features that may vary among Android-powered
+devices will be listed on this page among the attributes below. If you see any features
+here that you use in your application, you should include a {@code
+&amp;lt;uses-feature&gt;} element for each one. For example, if your application uses the device
+camera, then you should include the following in your {@code AndroidManifest.xml}:&lt;/p&gt;
+
+&lt;pre&gt;
+&amp;lt;uses-feature android:name=&quot;android.hardware.camera&quot; /&gt;
+&lt;/pre&gt;
+
+&lt;p&gt;If you declare &quot;android.hardware.camera&quot;, then your application is considered
+compatible with all devices that include a camera, regardless of whether auto-focus is
+available or not. If you also use the auto-focus features (available through the {@link
+android.hardware.Camera Camera API}), then you need to include an additional
+{@code &amp;lt;uses-feature&gt;} element that declares the &quot;android.hardware.camera.autofocus&quot;
+feature. Also note that you must still request the {@link android.Manifest.permission#CAMERA
+CAMERA permission}. Requesting permission grants your application access to the
+appropriate hardware and software, while declaring the features used by
+your application ensures proper device compatibility.&lt;/p&gt;
+
+&lt;p&gt;Although the {@code &amp;lt;uses-feature&gt;} element is only activated for devices running 
+API Level 4 or higher, it is safe to include this for applications that declare 
+a &lt;a href=&quot;uses-sdk-element.html#min&quot;&gt;{@code minSdkVersion}&lt;/a&gt; 
+of &quot;3&quot; or lower. Devices running older versions of the platform 
+will simply ignore this element, but newer devices will recognize it and enforce 
+installation restrictions based on whether the device supports the feature.&lt;/p&gt;
+
+&lt;p class=&quot;note&quot;&gt;&lt;strong&gt;Note:&lt;/strong&gt;
+For each feature required by your application, you must include a new {@code
+&amp;lt;uses-feature&gt;} element. Multiple features cannot be declared in one 
+instance of this element.&lt;/p&gt;
 
-&lt;p&gt;For example, an application might specify that it requires a certain version of Open GL.
-If a device does not support that version of Open GL, then it will not allow installation of the application.&lt;/p&gt;
 &lt;/dd&gt; 
 
 
@@ -38,6 +84,44 @@ If a device does not support that version of Open GL, then it will not allow ins
 &lt;/dl&gt;
 &lt;/dd&gt;
 
+&lt;dd&gt;
+&lt;dl class=&quot;attr&quot;&gt;&lt;dt&gt;&lt;a name=&quot;name&quot;&gt;&lt;/a&gt;{@code android:name}&lt;/dt&gt;
+  &lt;dd&gt;The name of a feature required by the application. 
+  The value must be one of the following accepted strings:
+  
+  &lt;table&gt; 
+    &lt;tr&gt; 
+       &lt;th&gt;Feature&lt;/th&gt;
+       &lt;th&gt;Value&lt;/th&gt; 
+       &lt;th&gt;Description&lt;/th&gt; 
+    &lt;/tr&gt;&lt;tr&gt; 
+       &lt;td rowspan=&quot;3&quot;&gt;Camera&lt;/td&gt;
+       &lt;td&gt;&quot;{@code android.hardware.camera}&quot;&lt;/td&gt; 
+       &lt;td&gt;The application requires a camera.&lt;/td&gt; 
+    &lt;/tr&gt;&lt;tr&gt; 
+       &lt;td&gt;&quot;{@code android.hardware.camera.autofocus}&quot;&lt;/td&gt; 
+       &lt;td&gt;The application requires a camera with auto-focus capability.
+       As a prerequisite, &quot;{@code android.hardware.camera}&quot; must also be declared
+       with a separate {@code &amp;lt;uses-feature&gt;} element.
+       &lt;/td&gt;
+     &lt;tr&gt;
+       &lt;td colspan=&quot;2&quot;&gt;
+         &lt;strong&gt;Note:&lt;/strong&gt; Any application that requests the 
+         {@link android.Manifest.permission#CAMERA CAMERA permission} but does &lt;em&gt;not&lt;/em&gt;
+         declare any camera features with the {@code &amp;lt;uses-feature&gt;} element will be assumed
+         to use all camera features (such as auto-focus). Thus, the application will not
+         be compatible with devices that do not support all features. Please use 
+         {@code &amp;lt;uses-feature&gt;} to declare only the camera features that your 
+         application needs.
+       &lt;/td&gt;
+     &lt;/tr&gt;
+    &lt;/tr&gt;
+  &lt;/table&gt;
+  
+  &lt;/dd&gt;
+&lt;/dl&gt;
+&lt;/dd&gt;
+
 &lt;!-- ##api level indication## --&gt;
 &lt;dt&gt;introduced in:&lt;/dt&gt;
 &lt;dd&gt;API Level 4&lt;/dd&gt;</diff>
      <filename>docs/html/guide/topics/manifest/uses-feature-element.jd</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,10 @@ page.title=&amp;lt;uses-sdk&amp;gt;
 
 &lt;dl class=&quot;xml&quot;&gt;
 &lt;dt&gt;syntax:&lt;/dt&gt;
-&lt;dd&gt;&lt;pre class=&quot;stx&quot;&gt;&amp;lt;uses-sdk android:&lt;a href=&quot;#min&quot;&gt;minSdkVersion&lt;/a&gt;=&quot;&lt;i&gt;integer&lt;/i&gt;&quot; /&amp;gt;&lt;/pre&gt;&lt;/dd&gt;
+&lt;dd&gt;&lt;pre&gt;
+&amp;lt;uses-sdk android:&lt;a href=&quot;#min&quot;&gt;minSdkVersion&lt;/a&gt;=&quot;&lt;i&gt;integer&lt;/i&gt;&quot; 
+          android:&lt;a href=&quot;#max&quot;&gt;maxSdkVersion&lt;/a&gt;=&quot;&lt;i&gt;integer&lt;/i&gt;&quot;
+          android:&lt;a href=&quot;#target&quot;&gt;targetSdkVersion&lt;/a&gt;=&quot;&lt;i&gt;integer&lt;/i&gt;&quot; /&amp;gt;&lt;/pre&gt;&lt;/dd&gt;
 
 &lt;dt&gt;contained in:&lt;/dt&gt;
 &lt;dd&gt;&lt;code&gt;&lt;a href=&quot;{@docRoot}guide/topics/manifest/manifest-element.html&quot;&gt;&amp;lt;manifest&amp;gt;&lt;/a&gt;&lt;/code&gt;&lt;/dd&gt;
@@ -64,12 +67,16 @@ and minor versions).&lt;/p&gt;
   &lt;dt&gt;&lt;a name=&quot;target&quot;&gt;&lt;/a&gt;{@code android:targetSdkVersion}&lt;/dt&gt;
   &lt;dd&gt;An integer designating the API Level that the application is targetting.
   
-  &lt;p&gt;With this attribute set, the application says that is is be able to run on 
+  &lt;p&gt;With this attribute set, the application says that it is able to run on 
   older versions (down to {@code minSdkVersion}), but was explicitly tested to work 
   with the version specified here.
-  Specifying this version allows the platform to disable compatibility
-  code that is not required or enable newer features that are not
-  available to older applications.&lt;/p&gt;
+  Specifying this target version allows the platform to disable compatibility
+  settings that are not required for the target version (which may otherwise be turned on
+  in order to maintain forward-compatibility) or enable newer features that are not
+  available to older applications. This does not mean that you can program different 
+  features for different versions of the platform&amp;mdash;it simply informs the platform that you
+  have tested against the target version and the platform should not perform any extra
+  work to maintain forward-compatibility with the target version.&lt;/p&gt;
   
   &lt;p&gt;Introduced in: API Level 4&lt;/p&gt;
   &lt;/dd&gt;</diff>
      <filename>docs/html/guide/topics/manifest/uses-sdk-element.jd</filename>
    </modified>
    <modified>
      <diff>@@ -67,7 +67,8 @@ public class LifecycleTest extends ActivityTestsBase {
         runLaunchpad(LaunchpadActivity.LIFECYCLE_SCREEN);
     }
 
-    @LargeTest
+    //flaky test, removing from large suite until 1866891 is fixed
+    //@LargeTest
     public void testDialog() throws Exception {
         mIntent = mTopIntent;
         runLaunchpad(LaunchpadActivity.LIFECYCLE_DIALOG);</diff>
      <filename>tests/AndroidTests/src/com/android/unit_tests/activity/LifecycleTest.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>72b1f379d5c97c8ff31d2201e78215af777d6bda</id>
    </parent>
  </parents>
  <author>
    <name>Jean-Baptiste Queru</name>
    <email>jbq@google.com</email>
  </author>
  <url>http://github.com/android/platform_frameworks_base/commit/8f4b5a561813ee8c22d2b8e73c33299471d4a3f3</url>
  <id>8f4b5a561813ee8c22d2b8e73c33299471d4a3f3</id>
  <committed-date>2009-09-02T13:39:46-07:00</committed-date>
  <authored-date>2009-09-02T13:39:46-07:00</authored-date>
  <message>donut snapshot</message>
  <tree>b19d6696816a2892cea093dab422becd50e9a21f</tree>
  <committer>
    <name>Jean-Baptiste Queru</name>
    <email>jbq@google.com</email>
  </committer>
</commit>
