diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-07-26 21:47:27 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-07-26 21:47:27 -0700 |
commit | d5ec6ebee26e530d96299d9821950f7cce4b3636 (patch) | |
tree | 86dea6e13b333ccda7a930c0413684c673f7190d /docs | |
parent | 678d1ed007d880128284bae2c9af7b773bf14eb7 (diff) | |
parent | 11b6a29dfe380c97fa3df67a6b97ff3383592b58 (diff) | |
download | frameworks_base-d5ec6ebee26e530d96299d9821950f7cce4b3636.zip frameworks_base-d5ec6ebee26e530d96299d9821950f7cce4b3636.tar.gz frameworks_base-d5ec6ebee26e530d96299d9821950f7cce4b3636.tar.bz2 |
am 11b6a29d: Merge change 8564 into donut
Merge commit '11b6a29dfe380c97fa3df67a6b97ff3383592b58'
* commit '11b6a29dfe380c97fa3df67a6b97ff3383592b58':
AI 150594: change the homepage markup and styles to allow variable height in
AI 150587: add a sitemap for translated docs, for submission to Webmaster Tools,
AI 150541: roll the docs forward to 1.5 r3
AI 150538: add note that appwidget updates will wake the device and suggest an alarm
AI 150536: Change the formatting of sdk redirect pages so that they are not language-specific.
AI 150535: add the Videos page to the site
Diffstat (limited to 'docs')
-rw-r--r-- | docs/html/guide/topics/appwidgets/index.jd | 16 | ||||
-rw-r--r-- | docs/html/index.jd | 41 | ||||
-rw-r--r-- | docs/html/intl/ja/index.jd | 39 | ||||
-rw-r--r-- | docs/html/sdk/RELEASENOTES.jd | 70 | ||||
-rw-r--r-- | docs/html/sdk/android-1.5.jd | 1 | ||||
-rw-r--r-- | docs/html/sdk/index.jd | 3 | ||||
-rw-r--r-- | docs/html/sdk/older_releases.jd | 6 | ||||
-rw-r--r-- | docs/html/sdk/preview/features.html | 191 | ||||
-rw-r--r-- | docs/html/sdk/preview/features.jd | 6 | ||||
-rw-r--r-- | docs/html/sdk/preview/index.jd | 2 | ||||
-rw-r--r-- | docs/html/sdk/sdk_toc.cs | 5 | ||||
-rw-r--r-- | docs/html/sitemap-intl.txt | 12 | ||||
-rw-r--r-- | docs/html/videos/index.jd | 338 |
13 files changed, 500 insertions, 230 deletions
diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd index 01a9648..fc0061d 100644 --- a/docs/html/guide/topics/appwidgets/index.jd +++ b/docs/html/guide/topics/appwidgets/index.jd @@ -150,14 +150,26 @@ folder.</p> <code>(number of cells * 74) - 2</code><br/> Following this formula, you should use 72 dp for a height of one cell, 294 dp and for a width of four cells.</p> </li> - <li>The <code>updatePerdiodMillis</code> attribute defines how often the App Widget framework should + <li>The <code>updatePeriodMillis</code> attribute defines how often the App Widget framework should request an update from the {@link android.appwidget.AppWidgetProvider} by calling the {@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) onUpdate()} method. The actual update is not guaranteed to occur exactly on time with this value and we suggest updating as infrequently as possible—perhaps no more than once an hour to conserve the battery. You might also allow the user to adjust the frequency in a configuration—some people might want a stock ticker to update every 15 minutes, or maybe - only four times a day.</li> + only four times a day. + <p class="note"><strong>Note:</strong> If the device is asleep when it is time for an update + (as defined by <code>updatePeriodMillis</code>), then the device will wake up in order + to perform the update. If you don't update more than once per hour, this probably won't + cause significant problems for the battery life. If, however, you need to update more + frequently and/or you do not need to update while the device is asleep, then you can instead + perform updates based on an alarm that will not wake the device. To do so, set an alarm with + an Intent that your AppWidgetProvider receives, using the {@link android.app.AlarmManager}. + Set the alarm type to either {@link android.app.AlarmManager#ELAPSED_REALTIME} or + {@link android.app.AlarmManager#RTC}, which will only + deliver the alarm when the device is awake. Then set <code>updatePeriodMillis</code> to + zero (<code>"0"</code>).</p> + </li> <li>The <code>initialLayout</code> attribute points to the layout resource that defines the App Widget layout.</li> <li>The <code>configure</code> attribute defines the {@link android.app.Activity} to launch when diff --git a/docs/html/index.jd b/docs/html/index.jd index e3f2ec4..c39e9a8 100644 --- a/docs/html/index.jd +++ b/docs/html/index.jd @@ -11,21 +11,19 @@ home=true </div><!-- end homeTitle --> <div id="announcement-block"> <!-- total max width is 520px --> - <img src="/assets/images/home/IO-logo.png" alt="Google I/O Developer Conference 2009" width="242px" /> - <div id="announcement" style="width:270px"> - <p>The Google I/O developer conference took place May 27-28 in San Francisco. - If you missed the conference, you can experience the Android sessions - by viewing YouTube videos and presentation slides.</p> - <p><a href="http://code.google.com/events/io/sessions.html#mobile">See the Mobile sessions at Google I/O »</a></p> + <img src="/assets/images/home/android_adc.png" alt="Android Developer Challenge 2" width="232px" /> + <div id="announcement" style="width:275px"> + <p>The second Android Developer Challenge has begun! In this contest, + real-world users will help review and score applications and the overall winner will + take away $250,000. The deadline for submitting an application to the contest is August 31, 2009.</p> + <p><a href="http://code.google.com/android/adc/">Learn more about ADC 2 »</a></p> </div> <!-- end annoucement --> </div> <!-- end annoucement-block --> </div><!-- end topAnnouncement --> - <div id="carousel"> - <div id="carouselMain"> - <div id="bulletinImg"></div> - <div id="bulletinDesc"></div> - </div> + <div id="carouselMain" style="height:192px"> <!-- this height can be adjusted based on the content height --> + </div> <div class="clearer"></div> + <div id="carouselWheel"> <div class="app-list-container" align="center"> <a href="javascript:{}" id="arrow-left" onclick="" class="arrow-left-off"></a> <div id="list-clip"> @@ -33,10 +31,10 @@ home=true <!-- populated by buildCarousel() --> </div> </div><!-- end list-clip --> - <a href="javascript:page_right()" id="arrow-right" onclick="" class="arrow-right-off"></a> + <a href="javascript:{ page_right(); }" id="arrow-right" onclick="" class="arrow-right-on"></a> <div class="clearer"></div> </div><!-- end app-list container --> - </div><!-- end carousel --> + </div><!-- end carouselWheel --> </div><!-- end homeMiddle --> <div style="clear:both"> </div> @@ -81,8 +79,8 @@ home=true <td class="imageCell"><a href="http://www.youtube.com/user/androiddevelopers"><img src="{@docRoot}assets/images/video-droid.png" style="padding:0" /></a></td> <td> <h2 class="green">Watch</h2> - <object width="150" height="140"><param name="movie" value="http://www.youtube.com/v/x1ZZ-R3p_w8&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/x1ZZ-R3p_w8&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="150" height="140"></embed></object> - <p style="margin-top:1em"><a href="http://www.youtube.com/user/androiddevelopers">More Android videos »</a></p> + <object width="150" height="140"><param name="movie" value="http://www.youtube.com/v/GARMe7Km_gk&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/GARMe7Km_gk&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="150" height="140"></embed></object> + <p style="margin-top:1em"><a href="{@docRoot}videos/index.html">More Android videos »</a></p> </td> </tr> @@ -122,10 +120,19 @@ home=true 'sdk': { 'layout':"imgLeft", 'icon':"sdk-small.png", - 'name':"SDK 1.5 r2", + 'name':"SDK 1.5 r3", 'img':"sdk-large.png", 'title':"Android 1.5 SDK", - 'desc': "<p>Android 1.5 SDK is now available. It includes new APIs for Android 1.5, updated developer tools, multiple platform versions, and a Google APIs add-on.</p><p><a href='{@docRoot}sdk/1.5_r2/index.html'>Download Android 1.5 SDK</a></p>" + 'desc': "<p>Android 1.5 SDK is now available. It includes new APIs for Android 1.5, updated developer tools, multiple platform versions, and a Google APIs add-on.</p><p><a href='{@docRoot}sdk/1.5_r3/index.html'>Download Android 1.5 SDK »</a></p>" + }, + + 'io': { + 'layout':"imgLeft", + 'icon':"io-small.png", + 'name':"Google I/O", + 'img':"io-large.png", + 'title':"Google I/O Developer Conference", + 'desc': "<p>The Google I/O developer conference took place May 27-28 in San Francisco. If you missed the conference, you can experience the Android sessions by viewing YouTube videos.</p><p><a href='{@docRoot}videos/index.html'>See the sessions from Google I/O »</a></p>" }, 'mapskey': { diff --git a/docs/html/intl/ja/index.jd b/docs/html/intl/ja/index.jd index 5a64ff6..a5378c9 100644 --- a/docs/html/intl/ja/index.jd +++ b/docs/html/intl/ja/index.jd @@ -11,19 +11,17 @@ home=true </div><!-- end homeTitle --> <div id="announcement-block"> <!-- total max width is 520px --> - <img src="/assets/images/home/IO-logo.png" alt="Google I/O Developer Conference 2009" width="242px" /> - <div id="announcement" style="width:270px"> - <p>Google I/O は、サンフランシスコの Moscone Center で 5 月 27~28 日に開催された開発者会議です。このイベントに参加できなかった方は、各アンドロイド向けセッションを、YouTube ビデオやプレゼンテーションのスライド資料で体験する事が可能です。</p> - <p><a href="http://code.google.com/events/io/sessions.html#mobile">Mobile のセッションを参照してください »</a></p> + <img src="/assets/images/home/android_adc.png" alt="Android Developer Challenge 2" width="232px" /> + <div id="announcement" style="width:275px"> + <p>第2Android Developer Challengeが、遂に登場しました!このアプリケーション開発コンテストでは、Androidのユーザなら誰でも簡単に参加でき、一等の賞金は$250,000 です。登録の締切日は8月31日になります。</p> + <p><a href="http://code.google.com/android/adc/">Android Developer Challengeについて詳しくはこちら »</a></p> </div> <!-- end annoucement --> </div> <!-- end annoucement-block --> </div><!-- end topAnnouncement --> - <div id="carousel"> - <div id="carouselMain"> - <div id="bulletinImg"></div> - <div id="bulletinDesc"></div> - </div> + <div id="carouselMain" style="height:210px"> <!-- this height can be adjusted based on the content height --> + </div> <div class="clearer"></div> + <div id="carouselWheel"> <div class="app-list-container" align="center"> <a href="javascript:{}" id="arrow-left" onclick="" class="arrow-left-off"></a> <div id="list-clip"> @@ -31,10 +29,10 @@ home=true <!-- populated by buildCarousel() --> </div> </div><!-- end list-clip --> - <a href="javascript:page_right()" id="arrow-right" onclick="" class="arrow-right-off"></a> + <a href="javascript:{ page_right(); }" id="arrow-right" onclick="" class="arrow-right-on"></a> <div class="clearer"></div> </div><!-- end app-list container --> - </div><!-- end carousel --> + </div><!-- end carouselWheel --> </div><!-- end homeMiddle --> <div style="clear:both"> </div> @@ -79,8 +77,8 @@ home=true <td class="imageCell"><a href="http://www.youtube.com/user/androiddevelopers"><img src="{@docRoot}assets/images/video-droid.png" style="padding:0" /></a></td> <td> <h2 class="green">再生</h2> - <object width="150" height="140"><param name="movie" value="http://www.youtube.com/v/x1ZZ-R3p_w8&hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/x1ZZ-R3p_w8&hl=ja&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="150" height="140"></embed></object> - <p style="margin-top:1em"><a href="http://www.youtube.com/user/androiddevelopers">その他の Android 動画 »</a></p> + <object width="150" height="140"><param name="movie" value="http://www.youtube.com/v/GARMe7Km_gk&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/GARMe7Km_gk&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="150" height="140"></embed></object> + <p style="margin-top:1em"><a href="{@docRoot}videos/index.html">その他の Android 動画 »</a></p> </td> </tr> @@ -120,10 +118,19 @@ home=true 'sdk': { 'layout':"imgLeft", 'icon':"sdk-small.png", - 'name':"SDK 1.5 r2", + 'name':"SDK 1.5 r3", 'img':"sdk-large.png", - 'title':"Android 1.5 SDK r2", - 'desc': "<p>Android 1.5 SDK の最新バージョンが公開されました。このリリースには Android 1.5 用の API、最新版デベロッパーツール、複数プラットフォーム(バージョン)サポート、そして Google API のアドオンが含まれています。</p><p><a href='{@docRoot}sdk/1.5_r2/index.html'>Android 1.5 SDK をダウンロード</a></p>" + 'title':"Android 1.5 SDK", + 'desc': "<p>Android 1.5 SDK の最新バージョンが公開されました。このリリースには Android 1.5 用の API、最新版デベロッパーツール、複数プラットフォーム(バージョン)サポート、そして Google API のアドオンが含まれています。</p><p><a href='{@docRoot}sdk/1.5_r3/index.html'>Android 1.5 SDK をダウンロード »</a></p>" + }, + + 'io': { + 'layout':"imgLeft", + 'icon':"io-small.png", + 'name':"Google I/O", + 'img':"io-large.png", + 'title':"Google I/O Developer Conference", + 'desc': "<p>Google I/O は、サンフランシスコの Moscone Center で 5 月 27~28 日に開催された開発者会議です。このイベントに参加できなかった方は、各アンドロイド向けセッションを、YouTube ビデオ資料で体験する事が可能<nobr>です</nobr>。</p><p><a href='{@docRoot}videos/index.html'>セッションを参照してください »</a></p>" }, 'mapskey': { diff --git a/docs/html/sdk/RELEASENOTES.jd b/docs/html/sdk/RELEASENOTES.jd index a3361d5..03eeb4b 100644 --- a/docs/html/sdk/RELEASENOTES.jd +++ b/docs/html/sdk/RELEASENOTES.jd @@ -5,6 +5,76 @@ page.title=SDK Release Notes releases. For the latest known issues, please ensure that you're viewing this page at <a href="http://developer.android.com/sdk/RELEASENOTES.html">http://developer.android.com/sdk/RELEASENOTES.html</a>.</p> +<h2 id="1.5_r3">Android 1.5 SDK, Release 3</h2> + +<p>Provides an updated Android 1.5 system image that includes permissions +fixes, as described below, and a new application — an IME for Japanese +text input. Also provides the same set of developer tools included in the +previous SDK, but with bug fixes and several new features.</p> + +<h3>Permissions Fixes</h3> + +<p>The latest version of the Android platform, deployable to +Android-powered devices, includes fixes to the permissions-checking +in certain areas of the framework. Specifically, the Android system +now properly checks and enforces several existing permissions where it +did not do so in the previous release. Because of these changes in +enforcement, you are strongly encouraged to test your application +against the new Android 1.5 system image included in this SDK, to ensure +that it functions normally. </p> + +<p>In particular, if your application uses any of the system areas listed below, +you should add the required permissions to the application's manifest and then +test the areas of your code that depend on the permission-protected services. +Even if you believe your application does not use the permissions-protected +services, you should compile and test your application under the latest platform +version to ensure that users will not encounter problems when using your +application. </p> + +<p>The changes to permissions are as follows:</p> + +<ul> +<li>When an application requests access to device camera (through +android.hardware.camera), the <code>CAMERA</code> permission check is now +properly enforced. </li> +<li>When an application requests access to device audio capture (through +android.media.MediaRecorder), the <code>RECORD_AUDIO</code> permission check is +now properly enforced.</li> +</ul> + +<p>For more information, see the issue described in the oCert advisory +below:</p> + +<p style="margin-left: 2em;"><a href="http://www.ocert.org/advisories/ocert-2009-011.html">http://www.ocert.org/advisories/ocert-2009-011.html</a> </p> + +<h3>Resolved Issues, Changes</h3> + +<ul> +<li>The SDK includes a new version of the Google APIs add-on. The add-on +provides an updated com.google.android.maps external library that fixes compile +errors related to certain classes such as GeoPoint. For information about the +Google APIs add-on and the library it provides, see: + +<p style="margin-left:2em;"><a +href="http://code.google.com/android/add-ons/google-apis">http://code.google.com/android/add-ons/google-apis</a> </p></li> + +<li>The SDK add-on architecture now lets device manufacturers specify a USB +Vendor ID in their add-ons. +<li>The <code>android</code> tool provides a new command that scans SDK add-ons +for their USB Vendor IDs and makes them available to adb (OS X and Linux +versions of the SDK only). The command is <code>android update adb</code>. On +Windows versions of the SDK, a custom USB driver is included that supports the +"Google" and "HTC" Vendor IDs, which allow adb to recognize G1 and HTC +Magic devices. For other devices, contact the device manufacturer +to obtain a USB driver, especially if you have an SDK add-on that defines +a new USB Vendor ID.</li> +<li>The telephony, sensor, and geo fix issues in the emulator are now +fixed.</li> +<li>When you use adb to uninstall an upgraded application, the Android system +now properly restores any permissions that had already been granted to the +previous (downgrade) version of the application</li> +</ul> + <h2 id="1.5_r2">Android 1.5 SDK, Release 2</h2> <p>This SDK release provides the same developer tools as the Android 1.5 SDK, diff --git a/docs/html/sdk/android-1.5.jd b/docs/html/sdk/android-1.5.jd index addd644..748f3ee 100644 --- a/docs/html/sdk/android-1.5.jd +++ b/docs/html/sdk/android-1.5.jd @@ -125,6 +125,7 @@ application against the Android library that corresponds to the application's <li>Dialer</li> <li>Email</li> <li>Gallery</li> + <li>IME for Japanese text input</li> <li>Messaging</li> <li>Music</li> <li>Settings</li> diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd index 38db6f8..2ac7688 100644 --- a/docs/html/sdk/index.jd +++ b/docs/html/sdk/index.jd @@ -1,4 +1,5 @@ -sdk.redirect=1.1_r1 +sdk.redirect=true + @jd:body diff --git a/docs/html/sdk/older_releases.jd b/docs/html/sdk/older_releases.jd index 3c2bbd4..febccd04 100644 --- a/docs/html/sdk/older_releases.jd +++ b/docs/html/sdk/older_releases.jd @@ -26,6 +26,12 @@ release</a>.</p> <th>Description</td> </tr> <tr> + <td><a href="{@docRoot}sdk/1.5_r1/index.html">Android 1.5 SDK, Release 2</a></td> + <td style="text-align:center;">Android 1.5<br>Android 1.1</td> + <td><em>May 2009</em></td> + <td>Replaced by Android 1.5 SDK, Release 3. <em><a href="RELEASENOTES.html#1.5_r2">Release notes</a></em></td> + </tr> + <tr> <td><a href="{@docRoot}sdk/1.5_r1/index.html">Android 1.5 SDK, Release 1</a></td> <td style="text-align:center;">Android 1.5<br>Android 1.1</td> <td><em>April 2009</em></td> diff --git a/docs/html/sdk/preview/features.html b/docs/html/sdk/preview/features.html deleted file mode 100644 index 941c96d..0000000 --- a/docs/html/sdk/preview/features.html +++ /dev/null @@ -1,191 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<html> - - <head> - <title>Redirecting...</title> - <meta http-equiv="refresh" content="0;url=/sdk/android-1.5-highlights.html"> - <link href="/assets/android-developer-docs.css" rel="stylesheet" type="text/css" /> - </head> - -<body class="gc-documentation"> -<a name="top"></a> - - <div id="header"> - <div id="headerLeft"> - <a href="/index.html" tabindex="-1"><img - src="/assets/images/bg_logo.png" alt="Android Developers" /></a> - <ul class="sdk"> - <li id="home-link"><a href="/index.html"> - <span>Home</span></a></li> - <li id="sdk-link"><a href="/sdk/1.5_r1/index.html"><span>SDK</span></a></li> - <li id="guide-link"><a href="/guide/index.html" - onClick="return loadLast('guide')"><span>Dev Guide</span></a></li> - <li id="reference-link"><a href="/reference/packages.html" - onClick="return loadLast('reference')"><span>Reference</span></a></li> - <li><a href="http://android-developers.blogspot.com"><span>Blog</span></a></li> - <li id="community-link"><a href="/community/index.html"><span>Community</span></a></li> - </ul> - </div> - <div id="headerRight"> - <div id="headerLinks"> - <!-- <img src="/assets/images/icon_world.jpg" alt="" /> --> - <span class="text"> - <!-- <a href="#">English</a> | --> - <a href="http://www.android.com">Android.com</a> - </span> - </div> - <div id="search" > - <div id="searchForm"> - <form accept-charset="utf-8" class="gsc-search-box" - onsubmit="return submit_search()"> - <table class="gsc-search-box" cellpadding="0" cellspacing="0"><tbody> - <tr> - <td class="gsc-input"> - <input id="search_autocomplete" class="gsc-input" type="text" size="33" autocomplete="off" - title="search developer docs" name="q" - value="search developer docs" - onFocus="search_focus_changed(this, true)" - onBlur="search_focus_changed(this, false)" - onkeydown="return search_changed(event, true, '/')" - onkeyup="return search_changed(event, false, '/')" /> - <div id="search_filtered_div" class="no-display"> - <table id="search_filtered" cellspacing=0> - </table> - </div> - </td> - <td class="gsc-search-button"> - <input type="submit" value="Search" title="search" id="search-button" class="gsc-search-button" /> - </td> - <td class="gsc-clear-button"> - <div title="clear results" class="gsc-clear-button"> </div> - </td> - </tr></tbody> - </table> - </form> - </div><!-- searchForm --> - </div><!-- search --> - </div><!-- headerRight --> - </div><!-- header --> - - - <div class="g-section g-tpl-240" id="body-content"> - <div class="g-unit g-first not-resizable" id="side-nav"> - <div id="devdoc-nav"> -<ul> - <li> - <h2>Current SDK Release</h2> - <ul> - <li><a href="/sdk/1.5_r2/index.html">Download</a></li> - <li><a href="/sdk/1.5_r2/installing.html">Installing</a></li> - <li><a href="/sdk/1.5_r2/upgrading.html">Upgrading</a></li> - <li><a href="/sdk/1.5_r2/requirements.html">System Requirements</a></li> - </ul> - <ul> - <li><a href="/sdk/terms.html">SDK Terms and Conditions</a></li> - <li><a href="/sdk/RELEASENOTES.html">SDK Release Notes</a></li> - </ul> - <li> - <h2>System Image Version Notes</h2> - <ul> - <li><a href="/sdk/android-1.5.html">Android 1.5 Version Notes</a></li> - <li><a href="/sdk/android-1.1.html">Android 1.1 Version Notes</a></li> - </ul> - </li> - <li> - <h2>Previous SDK Releases</h2> - <ul> - <li><a href="/sdk/1.1_r1/index.html">Android 1.1 SDK, r1</a></li> - <li><a href="/sdk/1.0_r2/index.html">Android 1.0 SDK, r2</a></li> - <li><a href="/sdk/older_releases.html">Other Releases</a></li> - </ul> - </li> -</ul> - -<script type="text/javascript"> -<!-- - buildToggleLists(); -//--> -</script> - </div> - </div> <!-- end side-nav --> - - - -<div class="g-unit"> - <div id="jd-content"> - <p>Redirecting to - <a href="/sdk/android-1.5-highlights.html"> - /sdk/android-1.5-highlights.html - </a></p> - -</div><!-- end jd-content --> - - - -</div><!-- end doc-content --> - -</div> <!-- end body-content --> - -</body> -</html> - - - diff --git a/docs/html/sdk/preview/features.jd b/docs/html/sdk/preview/features.jd new file mode 100644 index 0000000..43856de --- /dev/null +++ b/docs/html/sdk/preview/features.jd @@ -0,0 +1,6 @@ +sdk.redirect=true +sdk.redirect.path=android-1.5-highlights.html + +@jd:body + + diff --git a/docs/html/sdk/preview/index.jd b/docs/html/sdk/preview/index.jd index cb699e9..1e6b26b 100644 --- a/docs/html/sdk/preview/index.jd +++ b/docs/html/sdk/preview/index.jd @@ -1,5 +1,5 @@ sdk.redirect=true -@jd:body +@jd:body diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs index bcf32b0..22d6f43 100644 --- a/docs/html/sdk/sdk_toc.cs +++ b/docs/html/sdk/sdk_toc.cs @@ -1,4 +1,4 @@ - +<?cs if:!sdk.redirect ?> <ul> <li><?cs if:android.whichdoc != "online" ?> @@ -51,7 +51,7 @@ <span class="es">Notas de la versión de System Image</span> <span class="fr">Notes de version de l'image système</span> <span class="it">Note sulla versione dell'immagine <br />di sistema</span> - <span class="ja">システム イメージ バージョンに関する<br />注意事項</span> + <span class="ja">システム イメージ バージョンに<br />関する注意事項</span> <span class="zh-CN">系统图片版本说明</span> <span class="zh-TW">系統影像版本資訊</span> </h2> @@ -92,3 +92,4 @@ changeNavLang(getLangPref()); //--> </script> +<?cs /if ?>
\ No newline at end of file diff --git a/docs/html/sitemap-intl.txt b/docs/html/sitemap-intl.txt new file mode 100644 index 0000000..ded0554 --- /dev/null +++ b/docs/html/sitemap-intl.txt @@ -0,0 +1,12 @@ +http://developer.android.com/ja/sdk/1.5_r3/installing.html +http://developer.android.com/ja/community/index.html +http://developer.android.com/ja/index.html +http://developer.android.com/ja/guide/publishing/versioning.html +http://developer.android.com/ja/guide/publishing/app-signing.html +http://developer.android.com/ja/guide/publishing/preparing.html +http://developer.android.com/ja/guide/tutorials/hello-world.html +http://developer.android.com/ja/guide/topics/fundamentals.html +http://developer.android.com/ja/guide/index.html +http://developer.android.com/ja/guide/basics/what-is-android.html +http://developer.android.com/ja/guide/developing/other-ide.html +http://developer.android.com/ja/guide/developing/eclipse-adt.html diff --git a/docs/html/videos/index.jd b/docs/html/videos/index.jd new file mode 100644 index 0000000..c9c88cf --- /dev/null +++ b/docs/html/videos/index.jd @@ -0,0 +1,338 @@ +videos=true +page.title=Videos +@jd:body + +<script src="http://swfobject.googlecode.com/svn/trunk/swfobject/swfobject.js" type="text/javascript"></script>
+<script src="{@docRoot}assets/jquery-history.js" type="text/javascript"></script> +<script type="text/javascript"> +// for debugging in FF, so other browsers ignore the console commands. +var console; +if (!console) console = { 'log': function() {} }; + +/* This 'playlist' object defines the playlist IDs for each tab. + * Each name inside 'playlist' corresponds to class names for the tab that the playlists belong to (eg: "googleioTab" and "googleioBox" divs). + * Each string in 'ids' is the ID of a YouTube playlist that belongs in the corresponding tab. + */ +var playlists = { + 'googleio' : { + 'ids': ["734A052F802C96B9"] + }, + 'about' : { + 'ids': ["D7C64411AF40DEA5","611F8C5DBF49CEC6"] + }, + 'developertips' : { + 'ids': ["43E15866EF0033A2"] + }, + 'developersandbox' : { + 'ids': ["77426907BBAD558E"] + } +}; + +/* Some playlists include the title in the description meta-data, so we need to account for this when building the thumbnail lists, so we don't show the title twice + * This string is read via indexOf(), so multiple IDs need only be comma-separated in this string. + */ +var playlistsWithTitleInDescription = "734A052F802C96B9"; + +/* This 'featured' object defines the Feature Videos list. + * Each playlist ID is paired with a custom video description. + */ +var featured = { +// How to Make your Android UI Fast.. + 'N6YdwzAvwOA' : "Make your user interface fast, with more efficient AdapterViews, better bitmap scaling, faster redrawing, ViewStub layouts, fewer Views, and more.", +// Coding for Life: Battery Life + 'OUemfrKe65c' : "Learn what kinds of operations consume the most battery and how you can reduce your usage, with tips for parsing and zipping data, using wakelocks, and running a Service.", +// How Do I Code Thee? + 'GARMe7Km_gk' : "If you'd like to augment your Android applications with pieces written in JavaScript or native code, watch this video." +}; +
+/* When an event on the browser history occurs (back, forward, load), + * load the video found in the URL hash + */
+$(window).history(function(e, hash) {
+ if (location.href.indexOf("#v=") != -1) {
+ videoId = location.href.split("#v=");
+ clickVideo(videoId[1]); // click the link with a matching class
+ }
+}); + +/* Load a video into the player box. + * @param id The YouTube video ID + * @param title The video title to display in the player box (character escaped) + * @param autoplay Whether to automatically play the video + */ +function loadVideo(id, title, autoplay) { + if($("." + id).hasClass("noplay")) { + console.log("noplay"); + autoplay = false; + $("." + id).removeClass("noplay"); + } + swfobject.embedSWF('http://www.youtube.com/v/' + id + '&rel=1&border=0&fs=1&autoplay=' + + (autoplay?1:0), 'player', '500', '334', '9.0.0', false, false, {allowfullscreen: 'true'}); + $("#videoPlayerTitle").html("<h2>" + unescape(title) + "</h2>"); +
+ $.history.add('v=' + id); // add the current video to the browser history + document.getElementById("doc-content").scrollTop = 0; // scroll the window to the top +} + +/* Draw all videos from a playlist into a 'videoPreviews' list + * @param data The feed data returned from the youtube request + */ +function renderPlaylist(data) { + var MAX_DESC_LENGTH = 390; // the length at which we will trim the description + var feed = data.feed; + var entries = feed.entry || []; + var playlistId = feed.yt$playlistId.$t; + + var ul = $('<ul class="videoPreviews" />'); + + // Loop through each entry (each video) and add it to the 'videoPreviews' list + for (var i = 0; i < entries.length; i++) { + var entry = entries[i]; + + var title = entry.title.$t; + var id = entry.media$group.yt$videoid.$t; + var thumbUrl = entry.media$group.media$thumbnail[0].url; + var fullDescription = entry.media$group.media$description.$t; + var playerUrl = entry.media$group.media$content[0].url; + + // Check whether this playlist includes the video title inside the description meta-data, so we can remove it + if (playlistsWithTitleInDescription.indexOf(playlistId) != -1) { + var lines = fullDescription.split("\n"); + // If the first line includes the first 17 chars from the title, let's use the title from the desciption instead (because it's a more complete title) + // This accounts for, literally, "Google I/O 2009 -", which is (so far) the min AND max for properly identifying a title in the only playlist with titles in the description + if (lines[0].indexOf(title.slice(0,16)) != -1) { + h3Title = "<h3>" + lines[0] + "</h3>"; + if (lines[2].length < 30) lines = lines.slice(3); // also, if the second line is very short (the speaker name), slice it out too + else lines = lines.slice(1); // otherwise, slice after the first line + } + fullDescription = lines.join(""); + } + + var shortDescription = fullDescription.substr(0, MAX_DESC_LENGTH); + shortDescription += shortDescription.length == MAX_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description + + var img = $('<img src="' + thumbUrl + '" width="120" height="90"/>'); + var a = $('<a class="' + id + '" href="#" onclick="loadVideo(\'' + id + '\',\'' + escape(title) + '\',true); return setSelected(this);" />'); + var pShortDescription = $('<p class="short">' + shortDescription + '</p>'); + var pFullDescription = $('<p class="full">' + fullDescription + '</p>'); + var h3Title = "<h3>" + title + "</h3>"; + var pToggle = "<p class='toggle'><a href='#' onclick='return toggleDescription(this)'><span class='more'>more</span><span class='less'>less</span></a></p>"; + var li = $('<li/>'); + + li.append(a); + a.append(img).append(h3Title).append(pShortDescription); + + // Add the full description and "more/less" toggle, if necessary + if (fullDescription.length > MAX_DESC_LENGTH) { + a.append(pFullDescription); + li.append(pToggle); + } + + ul.append(li); + } + + // Now add the 'videoPreviews' list to the page, and be sure we put it in the right tab + // This is the part that allows us to put multiple playlists in one tab + for (var x in playlists) { + var ids = playlists[x].ids; + for (var i in ids) { + if (ids[i] == playlistId) { + $("#"+x+"Box").append(ul); + break; + } + } + } +} + +/* Draw a featured video into the existing 'videoPreviews' list + * @param data The video data returned from the youtube request + */ +function renderFeatured(data) { + var MAX_TITLE_LENGTH = 48; + var entry = data.entry || []; + var id = entry.media$group.yt$videoid.$t; + var description = featured[id]; + var title = entry.title.$t; + var thumbUrl = entry.media$group.media$thumbnail[0].url; + var playerUrl = entry.media$group.media$content[0].url; + + var ellipsis = title.length > MAX_TITLE_LENGTH ? "..." : ""; + + var h3Title = "<h3>"+ title.substr(0,MAX_TITLE_LENGTH) + ellipsis + "</h3>"; + var img = $('<img src="' + thumbUrl + '" width="120" height="90"/>'); + var p = $('<p>' + description + '</p>'); + var a = $('<a class="' + id + '" href="#" onclick="loadVideo(\'' + id + '\',\'' + title + '\',true); return setSelected(this);" />'); + var li = $("<li/>"); + + a.append(h3Title).append(img).append(p); + li.append(a); + + $("#mainBodyRight .videoPreviews").append(li); +} + +/* Request the playlist feeds from YouTube */ +function showPlaylists() { + for (var x in playlists) { + var ids = playlists[x].ids; + for (var i in ids) { + var script = "<script type='text/javascript' src='http://gdata.youtube.com/feeds/api/playlists/" + + ids[i] + + "?v=2&alt=json-in-script&callback=renderPlaylist'><\/script>"; + $("body").append(script); + } + } +} + +/* Request the featured videos from YouTube */ +function showFeatured() { + for (var id in featured) { + var script = "<script type='text/javascript' src='http://gdata.youtube.com/feeds/api/videos/" + + id + + "?v=2&alt=json-in-script&callback=renderFeatured'><\/script>"; + $("body").append(script); + } +} + +/* Reveal a tab (playlist) box + * @param name The name of the tab + */ +function showBox(name) { + $("#"+name+"Box").addClass("selected").siblings().removeClass("selected"); + $("#"+name+"Tab").addClass("selected").siblings().removeClass("selected"); + return false; +} + +/* Highlight a video thumbnail, including all duplicates that there may be + * @param link The link <a> object that was clicked + */ +function setSelected(link) { + var videoId = $(link).attr("class"); + if (videoId.indexOf("selected") != -1) { // this means this video is already selected and playing, so bail out + return false; + } + $(".videoPreviews .selected").removeClass("selected"); + $("a." + videoId).addClass("selected").each( function (i) { + if ($(this).is(":hidden")) { + var boxName = $(this).parent().parent().parent().attr("id").split("Box"); + $("#"+boxName[0]+"Tab a").click(); + } + }); + return false; +} + +/* Reveal and hide the long/short descriptions for a video in the playlist + * @param link The link <a> object that was clicked + */ +function toggleDescription(link) { + var aToggle = $(link); + $("span", aToggle).toggle(); + var aDescription = $(">a", aToggle.parent().parent()); + $("p.short", aDescription).toggle(); + $("p.full", aDescription).toggle(); + if ($("span.less", aToggle).is(":visible")) { + aDescription.css("height", "auto"); + } else { + aDescription.css("height", "90px"); + } + return false; +} + +/* Add actions to the page onload event so that we load a video right away */ +addLoadEvent(function () {
+ // if there's a video url in the hash, click that video
+ if (location.href.indexOf("#v=") != -1) {
+ var videoId = location.href.split("#v="); + clickVideo(videoId[1]); + } else { // otherwise, click the default video + clickDefaultVideo(); + } +}); + + +var clickVideoAttempts = 0; // Used with clickVideo() + +/* Click a video in order to load it and select it + * @param videoId The ID of the video to click + */ +function clickVideo(videoId) { + if ($("." + videoId).length != 0) { // if we find the video, click it and return + $("." + videoId).addClass("noplay"); // add class to indicate we should NOT autoplay (class removed by loadVideo)
+ $("." + videoId + ":first").click(); + return; + } else { // if we don't find it, increment clickVideoAttempts + console.log("video NOT found: " + videoId); + clickVideoAttempts++; + } + + // if we don't find it after 20 attempts (2 seconds), click the first feature video
+ if (clickVideoAttempts > 10) { + console.log("video never found, clicking default..."); + clickVideoAttempts = 0; + clickDefaultVideo(); + } else { // try again after 100 milliseconds + setTimeout('clickVideo("'+videoId+'")', 100); + } +} + +/* Click the default video that should be loaded on page load (the first video in the featured list) */ +function clickDefaultVideo() { + if ($("#mainBodyRight .videoPreviews a:first").length != 0) { + var videoId = $("#mainBodyRight .videoPreviews a:first").attr("class"); + $("." + videoId).addClass("noplay"); // add class to indicate we should NOT autoplay (class removed by loadVideo)
+ $("." + videoId + ":first").click(); + return; + } else { // if we don't find it, increment clickVideoAttempts + console.log("default video NOT found"); + clickVideoAttempts++; + } + + // if we don't find it after 50 attempts (5 seconds), just fail
+ if (clickVideoAttempts > 50) { + console.log("default video never found..."); + } else { // try again after 100 milliseconds + setTimeout('clickDefaultVideo()', 100); + } +} +</script> + + <div id="mainBodyFixed"> + + <div id="mainBodyLeft" class="videoPlayer" > + <div id="videoPlayerBox"> + <div id="videoBorder"> + <div id="videoPlayerTitle"></div> + <div id="objectWrapper"> + <object id="player"></object> + </div> + </div> + </div> + </div><!-- end mainBodyLeft --> + + <div id="mainBodyRight" class="videoPlayer"> + <h2>Featured Videos</h2> + <ul class="videoPreviews"></ul> + </div><!-- end mainBodyRight --> + + <ul id="videoTabs"> + <li id="aboutTab" class="selected"><a onclick="return showBox('about');" href="#">About the Platform</a></li> + <li id="developertipsTab"><a onclick="return showBox('developertips');" href="#">Developer Tips</a></li> + <li id="googleioTab"><a onclick="return showBox('googleio');" href="#">Google I/O Sessions</a></li> + <li id="developersandboxTab"><a onclick="return showBox('developersandbox');" href="#">Developer Sandbox</a></li> + </ul> + + <div id="videos"> + <div id="aboutBox" class="selected"></div> + <div id="developertipsBox"></div> + <div id="googleioBox"></div> + <div id="developersandboxBox"></div> + </div> + + </div><!-- end mainBodyFixed --> + +<script type="text/javascript"> +// Initialization actions +showFeatured(); // load featured videos +showPlaylists(); // load playslists +</script> + +
\ No newline at end of file |