am 50585e76: Merge "Add sepolicy and mac_perms to installclean"
* commit '50585e76fd13eb3d91f8d9e9e7ae5e1a3cd1ae86':
Add sepolicy and mac_perms to installclean
diff --git a/tools/droiddoc/templates-sdk/assets/android-developer-docs.css b/tools/droiddoc/templates-sdk/assets/android-developer-docs.css
new file mode 100644
index 0000000..cd610f7
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/assets/android-developer-docs.css
@@ -0,0 +1,2768 @@
+/* file: android-developer-core.css
+ author: smain
+ date: september 2008
+ info: core developer styles (developer.android.com)
+ Required by jdiff
+*/
+
+
+/* RESET STYLES */
+
+html,body,div,h1,h2,h3,h4,h5,h6,p,img,
+dl,dt,dd,ol,ul,li,table,caption,tbody,
+tfoot,thead,tr,th,td,form,fieldset,
+embed,object,applet {
+ margin: 0;
+ padding: 0;
+ border: 0;
+}
+
+/* BASICS */
+
+html, body {
+ overflow:hidden; /* keeps scrollbar off IE */
+ background-color:#fff;
+}
+
+body {
+ font-family:arial,sans-serif;
+ color:#000;
+ font-size:13px;
+ color:#333;
+ background-image:url(images/bg_fade.jpg);
+ background-repeat:repeat-x;
+}
+
+a, a code {
+ color:#006699;
+}
+
+a:active,
+a:active code {
+ color:#f00;
+}
+
+a:visited,
+a:visited code {
+ color:#006699;
+}
+
+input, select,
+textarea, option, label {
+ font-family:inherit;
+ font-size:inherit;
+ padding:0;
+ margin:0;
+ vertical-align:middle;
+}
+
+option {
+ padding:0 4px;
+}
+
+p, form {
+ padding:0;
+ margin:0 0 1em;
+}
+
+code, pre {
+ color:#007000;
+ font-family:monospace;
+ line-height:1em;
+}
+
+var {
+ color:#007000;
+ font-style:italic;
+}
+
+pre {
+ border:1px solid #ccc;
+ background-color:#fafafa;
+ padding:10px;
+ margin:0 0 1em 1em;
+ overflow:auto;
+ line-height:inherit; /* fixes vertical scrolling in webkit */
+}
+
+h1,h2,h3,h4,h5 {
+ margin:1em 0;
+ padding:0;
+}
+
+p,ul,ol,dl,dd,dt,li {
+ line-height:1.3em;
+}
+
+ul,ol {
+ margin:0 0 .8em;
+ padding:0 0 0 2em;
+}
+
+li {
+ padding:0 0 .5em;
+}
+
+dl {
+ margin:0 0 1em 0;
+ padding:0;
+}
+
+dt {
+ margin:0;
+ padding:0;
+}
+
+dd {
+ margin:0 0 1em;
+ padding:0 0 0 2em;
+}
+
+li p {
+ margin:.5em 0 0;
+}
+
+dd p {
+ margin:1em 0 0;
+}
+
+li pre, li table, li img {
+ margin:.5em 0 0 1em;
+}
+
+dd pre,
+#jd-content dd table,
+#jd-content dd img {
+ margin:1em 0 0 1em;
+}
+
+li ul,
+li ol,
+dd ul,
+dd ol {
+ margin:0;
+ padding: 0 0 0 2em;
+}
+
+li li,
+dd li {
+ margin:0;
+ padding:.5em 0 0;
+}
+
+dl dl,
+ol dl,
+ul dl {
+ margin:0 0 1em;
+ padding:0;
+}
+
+table {
+ font-size:1em;
+ margin:0 0 1em;
+ padding:0;
+ border-collapse:collapse;
+ border-width:0;
+ empty-cells:show;
+}
+
+td,th {
+ border:1px solid #ccc;
+ padding:6px 12px;
+ text-align:left;
+ vertical-align:top;
+ background-color:inherit;
+}
+
+th {
+ background-color:#dee8f1;
+}
+
+td > p:last-child {
+ margin:0;
+}
+
+hr.blue {
+ background-color:#DDF0F2;
+ border:none;
+ height:5px;
+ margin:20px 0 10px;
+}
+
+blockquote {
+ margin: 0 0 1em 1em;
+ padding: 0 4em 0 1em;
+ border-left:2px solid #eee;
+}
+/* LAYOUT */
+
+#body-content {
+ /* "Preliminary" watermark for preview releases and interim builds.
+ background:transparent url(images/preliminary.png) repeat scroll 0 0; */
+ margin:0;
+ position:relative;
+ width:100%;
+}
+
+#header {
+ height: 114px;
+ position:relative;
+ z-index:100;
+ min-width:675px; /* min width for the tabs, before they wrap */
+ padding:0 10px;
+ border-bottom:3px solid #94b922;
+}
+
+#headerLeft{
+ padding: 25px 0 0;
+}
+
+#headerLeft img{
+ height:50px;
+ width:180px;
+}
+
+#headerRight {
+ position:absolute;
+ right:0;
+ top:0;
+ text-align:right;
+}
+
+/* Tabs in the header */
+
+#header ul {
+ list-style: none;
+ margin: 7px 0 0;
+ padding: 0;
+ height: 29px;
+}
+
+#header li {
+ float: left;
+ margin: 0px 2px 0px 0px;
+ padding:0;
+}
+
+#header li a {
+ text-decoration: none;
+ display: block;
+ background-image: url(images/bg_images_sprite.png);
+ background-position: 0 -58px;
+ background-repeat: no-repeat;
+ color: #666;
+ font-size: 13px;
+ font-weight: bold;
+ width: 94px;
+ height: 29px;
+ text-align: center;
+ margin: 0px;
+}
+
+#header li a:hover {
+ background-image: url(images/bg_images_sprite.png);
+ background-position: 0 -29px;
+ background-repeat: no-repeat;
+}
+
+#header li a span {
+ position:relative;
+ top:7px;
+}
+
+#header li a span+span {
+ display:none;
+}
+
+/* tab highlighting */
+
+.home #home-link a,
+.guide #guide-link a,
+.reference #reference-link a,
+.sdk #sdk-link a,
+.resources #resources-link a,
+.videos #videos-link a {
+ background-image: url(images/bg_images_sprite.png);
+ background-position: 0 0;
+ background-repeat: no-repeat;
+ color: #fff;
+ font-weight: bold;
+ cursor:default;
+}
+
+.home #home-link a:hover,
+.guide #guide-link a:hover,
+.reference #reference-link a:hover,
+.sdk #sdk-link a:hover,
+.resources #resources-link a:hover,
+.videos #videos-link a:hover {
+ background-image: url(images/bg_images_sprite.png);
+ background-position: 0 0;
+}
+
+#headerLinks {
+ margin:10px 10px 0 0;
+ height:13px;
+ font-size: 11px;
+ vertical-align: top;
+}
+
+#headerLinks a {
+ color: #7FA9B5;
+}
+
+#headerLinks img {
+ vertical-align:middle;
+}
+
+#language {
+ margin:0 10px 0 4px;
+}
+
+#search {
+ height:45px;
+ margin:15px 10px 0 0;
+}
+
+/* MAIN BODY */
+
+#mainBodyFluid {
+ margin: 20px 10px;
+ color:#333;
+}
+
+#mainBodyFixed {
+ margin: 20px 10px;
+ color: #333;
+ width:930px;
+ position:relative;
+}
+
+#mainBodyFixed h3,
+#mainBodyFluid h3 {
+ color:#336666;
+ font-size:1.25em;
+ margin: 0em 0em 0em 0em;
+ padding-bottom:.5em;
+}
+
+#mainBodyFixed h2,
+#mainBodyFluid h2 {
+ color:#336666;
+ font-size:1.25em;
+ margin: 0;
+ padding-bottom:.5em;
+}
+
+#mainBodyFixed h1,
+#mainBodyFluid h1 {
+ color:#435A6E;
+ font-size:1.7em;
+ margin: 1em 0;
+}
+
+#mainBodyFixed .green,
+#mainBodyFluid .green,
+#jd-content .green {
+ color:#7BB026;
+ background-color:none;
+}
+
+#mainBodyLeft {
+ float: left;
+ width: 600px;
+ margin-right: 20px;
+ color: #333;
+ position:relative;
+}
+
+div.indent {
+ margin-left: 40px;
+ margin-right: 70px;
+}
+
+#mainBodyLeft p {
+ color: #333;
+ font-size: 13px;
+}
+
+#mainBodyLeft p.blue {
+ color: #669999;
+}
+
+#mainBodyLeft #communityDiv {
+ float: left;
+ background-image:url(images/bg_community_leftDiv.jpg);
+ background-repeat: no-repeat;
+ width: 581px;
+ height: 347px;
+ padding: 20px 0px 0px 20px;
+}
+
+#mainBodyRight {
+ float: left;
+ width: 300px;
+ color: #333;
+}
+
+#mainBodyRight p {
+ padding-right: 50px;
+ color: #333;
+}
+
+#mainBodyRight table {
+ width: 100%;
+}
+
+#mainBodyRight td {
+ border:0px solid #666;
+ padding:0px 5px;
+ text-align:left;
+}
+
+#mainBodyRight td p {
+ margin:0 0 1em 0;
+}
+
+#mainBodyRight .blueBorderBox {
+ border:5px solid #ddf0f2;
+ padding:18px 18px 18px 18px;
+ text-align:left;
+}
+
+#mainBodyFixed .seperator {
+ background-image:url(images/hr_gray_side.jpg);
+ background-repeat:no-repeat;
+ width: 100%;
+ float: left;
+ clear: both;
+}
+
+#mainBodyBottom {
+ float: left;
+ width: 100%;
+ clear:both;
+ color: #333;
+}
+
+#mainBodyBottom .seperator {
+ background-image:url(images/hr_gray_main.jpg);
+ background-repeat:no-repeat;
+ width: 100%;
+ float: left;
+ clear: both;
+}
+
+/* FOOTER */
+
+#footer {
+ float: left;
+ width:90%;
+ margin: 20px;
+ color: #aaa;
+ font-size: 11px;
+}
+
+#footer a {
+ color: #aaa;
+ font-size: 11px;
+}
+
+#footer a:hover {
+ text-decoration: underline;
+ color:#aaa;
+}
+
+#footerlinks {
+ margin-top:2px;
+}
+
+#footerlinks a,
+#footerlinks a:visited {
+ color:#006699;
+}
+
+/* SEARCH FILTER */
+
+#search_autocomplete {
+ color:#aaa;
+}
+
+#search-button {
+ display:inline;
+}
+
+#search_filtered_div {
+ position:absolute;
+ margin-top:-1px;
+ z-index:101;
+ border:1px solid #BCCDF0;
+ background-color:#fff;
+}
+
+#search_filtered {
+ min-width:100%;
+}
+#search_filtered td{
+ background-color:#fff;
+ border-bottom: 1px solid #669999;
+ line-height:1.5em;
+}
+
+#search_filtered .jd-selected {
+ background-color: #94b922;
+ cursor:pointer;
+}
+#search_filtered .jd-selected,
+#search_filtered .jd-selected a {
+ color:#fff;
+}
+
+.no-display {
+ display: none;
+}
+
+.jd-autocomplete {
+ font-family: Arial, sans-serif;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ font-size: 0.81em;
+ border: none;
+ margin: 0;
+ line-height: 1.05em;
+}
+
+.show-row {
+ display: table-row;
+}
+.hide-row {
+ display: hidden;
+}
+
+/* SEARCH */
+
+/* restrict global search form width */
+#searchForm {
+ width:350px;
+}
+
+#searchTxt {
+ width:200px;
+}
+
+/* disable twiddle and size selectors for left column */
+#leftSearchControl div {
+ width: 100%;
+}
+
+#leftSearchControl .gsc-twiddle {
+ background-image : none;
+}
+
+#leftSearchControl td, #searchForm td {
+ border: 0px solid #000;
+}
+
+#leftSearchControl .gsc-resultsHeader .gsc-title {
+ padding-left : 0px;
+ font-weight : bold;
+ font-size : 13px;
+ color:#006699;
+ display : none;
+}
+
+#leftSearchControl .gsc-resultsHeader div.gsc-results-selector {
+ display : none;
+}
+
+#leftSearchControl .gsc-resultsRoot {
+ padding-top : 6px;
+}
+
+#leftSearchControl div.gs-visibleUrl-long {
+ display : block;
+ color:#006699;
+}
+
+.gsc-webResult div.gs-visibleUrl-short,
+table.gsc-branding,
+.gsc-clear-button {
+ display : none;
+}
+
+.gsc-cursor-box .gsc-cursor div.gsc-cursor-page,
+.gsc-cursor-box .gsc-trailing-more-results a.gsc-trailing-more-results,
+#leftSearchControl a,
+#leftSearchControl a b {
+ color:#006699;
+}
+
+.gsc-resultsHeader {
+ display: none;
+}
+
+/* Disable built in search forms */
+.gsc-control form.gsc-search-box {
+ display : none;
+}
+table.gsc-search-box {
+ margin:6px 0 0 0;
+ border-collapse:collapse;
+}
+
+td.gsc-input {
+ padding:0 2px;
+ width:100%;
+ vertical-align:middle;
+}
+
+input.gsc-input {
+ border:1px solid #BCCDF0;
+ width:99%;
+ padding-left:2px;
+ font-size:.95em;
+}
+
+td.gsc-search-button {
+ text-align: right;
+ padding:0;
+ vertical-align:top;
+}
+
+#search-button {
+ margin:0 0 0 2px;
+ font-size:11px;
+}
+
+/* search result tabs */
+
+#doc-content .gsc-control {
+ position:relative;
+}
+
+#doc-content .gsc-tabsArea {
+ position:relative;
+ white-space:nowrap;
+}
+
+#doc-content .gsc-tabHeader {
+ padding: 3px 6px;
+ position:relative;
+ width:auto;
+}
+
+#doc-content .gsc-tabHeader.gsc-tabhActive {
+ border-top: 2px solid #94B922;
+}
+
+#doc-content h2#searchTitle {
+ padding:0;
+}
+
+#doc-content .gsc-resultsbox-visible {
+ padding:1em 0 0 6px;
+}
+
+/* CAROUSEL */
+
+#homeMiddle {
+ padding: 0px 0px 0px 0px;
+ float: left;
+ width: 584px;
+ height: 627px;
+ position:relative;
+}
+
+#topAnnouncement {
+ background:url(images/home/bg_home_announcement.png) no-repeat 0 0;
+}
+
+#homeTitle {
+ padding:15px 15px 0;
+ height:30px;
+}
+
+#homeTitle h2 {
+ padding:0;
+}
+
+#announcement-block {
+ padding:0 15px 0;
+ overflow:hidden;
+ background: url(images/hr_gray_side.jpg) no-repeat 15px 0;
+ zoom:1;
+}
+
+#announcement-block>* {
+ padding:15px 0 0;
+}
+
+#announcement-block img {
+ float:left;
+ margin:0 30px 0 0;
+}
+
+#announcement {
+ float:left;
+ margin:0;
+}
+
+#carousel {
+ background:url(images/home/bg_home_carousel.png) no-repeat 0 0;
+ position:relative;
+ height:400px;
+}
+
+#carouselMain {
+ background: url(images/home/bg_home_carousel_board.png) 0 0 no-repeat;
+ height:auto;
+ padding: 25px 21px 0;
+ overflow:hidden;
+ position:relative;
+ zoom:1; /*IE6*/
+}
+
+#carouselMain img {
+ margin:0;
+}
+
+#carouselMain .bulletinDesc h3 {
+ margin:0;
+ padding:0;
+}
+
+#carouselMain .bulletinDesc p {
+ margin:0;
+ padding:0.7em 0 0;
+}
+
+#carouselWheel {
+ background: url(images/home/bg_home_carousel_wheel.png) 0 0 no-repeat;
+ padding-top:40px;
+ height:150px;
+}
+
+.clearer { clear:both; }
+
+a#arrow-left, a#arrow-right {
+ float:left;
+ width:42px;
+ height:42px;
+ background-image:url(images/home/carousel_buttons_sprite.png);
+ background-repeat:no-repeat;
+}
+a#arrow-left {
+ margin:35px 3px 0 10px;
+}
+a#arrow-right {
+ margin:35px 10px 0 0;
+}
+a.arrow-left-off,
+a#arrow-left.arrow-left-off:hover {
+ background-position:0 0;
+}
+a.arrow-right-off,
+a#arrow-right.arrow-right-off:hover {
+ background-position:-42px 0;
+}
+a#arrow-left:hover {
+ background-position:0 -42px;
+}
+a#arrow-right:hover {
+ background-position:-42px -42px;
+}
+a.arrow-left-on {
+ background-position:0 0;
+}
+a.arrow-right-on {
+ background-position:-42px 0;
+}
+a.arrow-right-off,
+a.arrow-left-off {
+ cursor:default;
+}
+
+.app-list-container {
+ margin:0 20px;
+ position:relative;
+ width:100%;
+}
+
+div#list-clip {
+ height:110px;
+ width:438px;
+ overflow:hidden;
+ position:relative;
+ float:left;
+}
+
+div#app-list {
+ left:0;
+ z-index:1;
+ position:absolute;
+ margin:11px 0 0;
+ _margin-top:13px;
+ width:1000%;
+}
+
+#app-list a {
+ display:block;
+ float:left;
+ height:90px;
+ width:90px;
+ margin:0 24px 0;
+ padding:3px;
+ background:#99cccc;
+ -webkit-border-radius:7px;
+ -moz-border-radius:7px;
+ border-radius:7px;
+ text-decoration:none;
+ text-align:center;
+ font-size:11px;
+ line-height:11px;
+}
+
+#app-list a span {
+ position:relative;
+ top:-4px;
+}
+
+#app-list img {
+ width:90px;
+ height:70px;
+ margin:0;
+}
+
+#app-list a.selected,
+#app-list a:active.selected,
+#app-list a:hover.selected {
+ background:#A4C639;
+ color:#fff;
+ cursor:default;
+ text-decoration:none;
+}
+
+#app-list a:hover,
+#app-list a:active {
+ background:#ff9900;
+}
+
+#app-list a:hover span,
+#app-list a:active span {
+ text-decoration:underline;
+}
+
+#droid-name {
+ padding-top:.5em;
+ color:#666;
+ padding-bottom:.25em;
+}
+
+/*IE6*/
+* html #app-list a { zoom: 1; margin:0 24px 0 15px;}
+
+* html #list-clip {
+ width:430px !important;
+}
+
+/*carousel bulletin layouts*/
+/*460px width*/
+/*185px height*/
+.img-left {
+ float:left;
+ width:230px;
+ overflow:hidden;
+ padding:8px 0 8px 8px;
+}
+.desc-right {
+ float:left;
+ width:270px;
+ padding:10px;
+}
+.img-right {
+ float:right;
+ width:220px;
+ overflow:hidden;
+ padding:8px 8px 8px 0;
+}
+.desc-left {
+ float:right;
+ width:280px;
+ padding:10px;
+ text-align:right;
+}
+.img-top {
+ padding:20px 20px 0;
+}
+.desc-bottom {
+ padding:10px;
+}
+
+
+/* VIDEO PAGE */
+
+#mainBodyLeft.videoPlayer {
+ width:570px;
+}
+
+#mainBodyRight.videoPlayer {
+ width:330px;
+}
+
+/* player */
+
+#videoPlayerBox {
+ background-color: #DAF3FC;
+ border-radius:7px;
+ -moz-border-radius:7px;
+ -webkit-border-radius:7px;
+ width:530px;
+ padding:20px;
+ border:1px solid #d3ecf5;
+ box-shadow:2px 3px 1px #eee;
+ -moz-box-shadow:2px 3px 1px #eee;
+ -webkit-box-shadow:2px 3px 1px #eee;
+}
+
+#videoBorder {
+ background-color: #FFF;
+ min-height:399px;
+ height:auto !important;
+ border:1px solid #ccdada;
+ border-radius:7px 7px 0 0;
+ -moz-border-radius:7px 7px 0 0;
+ -webkit-border-top-left-radius:7px;
+ -webkit-border-top-right-radius:7px;
+}
+
+#videoPlayerTitle {
+ width:500px;
+ padding:15px 15px 0;
+}
+
+#videoPlayerTitle h2 {
+ font-weight:bold;
+ font-size:1.2em;
+ color:#336666;
+ margin:0;
+ padding:0;
+}
+
+#objectWrapper {
+ padding:15px 15px;
+ height:334px;
+ width:500px;
+}
+
+/* playlist tabs */
+
+ul#videoTabs {
+ list-style-type:none;
+ padding:0;
+ clear:both;
+ margin:0;
+ padding: 20px 0 0 15px;
+ zoom:1; /* IE7/8, otherwise top-padding is double */
+}
+
+ul#videoTabs li {
+ display:inline;
+ padding:0;
+ margin:0 3px 0 0;
+ line-height:2em;
+}
+
+ul#videoTabs li a {
+ border-radius:7px 7px 0 0;
+ -moz-border-radius:7px 7px 0 0;
+ -webkit-border-top-left-radius:7px;
+ -webkit-border-top-right-radius:7px;
+ background:#95c0d0;
+ color:#fff;
+ text-decoration:none;
+ padding:.45em 1.5em;
+ font-weight:bold;
+}
+
+ul#videoTabs li.selected a {
+ font-weight:bold;
+ text-decoration:none;
+ color:#555;
+ background:#daf3fc;
+ border-bottom:1px solid #daf3fc;
+}
+
+ul#videoTabs li:hover a {
+ background:#85acba;
+}
+
+ul#videoTabs li.selected:hover a {
+ background:#daf3fc;
+}
+
+/* playlists */
+
+#videos {
+ background:#daf3fc;
+ margin-bottom:1.5em;
+ padding:15px;
+ border-radius:5px;
+ -moz-border-radius:5px;
+ -webkit-border-radius:5px;
+ box-shadow:2px 3px 1px #eee;
+ -moz-box-shadow:2px 3px 1px #eee;
+ -webkit-box-shadow:2px 3px 1px #eee;
+}
+
+#videos div {
+ display:none;
+}
+
+#videos div.selected {
+ display:block;
+}
+
+ul.videoPreviews {
+ list-style:none;
+ padding:0;
+ margin:0;
+ zoom:1; /* IE, otherwise, layout doesn't update when showing 'more' */
+}
+
+ul.videoPreviews li {
+ margin:0 0 5px;
+ padding:0;
+ overflow:hidden;
+ position:relative;
+}
+
+#mainBodyFixed ul.videoPreviews h3 {
+ font-size: 12px;
+ margin:0 0 1em 130px;
+ padding:0;
+ font-weight:bold;
+ color:inherit;
+}
+
+ul.videoPreviews a {
+ margin:1px;
+ padding:10px;
+ text-decoration:none;
+ height:90px;
+ display:block;
+ border-radius:5px;
+ -moz-border-radius:5px;
+ -webkit-border-radius:5px;
+ background-color:transparent;
+}
+
+ul.videoPreviews a:hover {
+ background-color:#FFF;
+ border:none; /* IE8, otherwise, bg doesn't work */
+}
+
+ul.videoPreviews a.selected {
+ background-color: #FF9900;
+}
+
+ul.videoPreviews img {
+ float:left;
+ clear:left;
+ margin:0;
+}
+
+ul.videoPreviews h3 {
+ font-size:12px;
+ font-weight:bold;
+ text-decoration:none;
+ margin:0 0 1em 130px;
+ padding:0;
+}
+
+ul.videoPreviews p {
+ font-size: 12px;
+ text-decoration:none;
+ margin:0 0 1.2em 130px;
+}
+
+ul.videoPreviews p.full {
+ display:none;
+}
+
+ul.videoPreviews span.more {
+ padding:0 0 0 12px;
+ background:url(images/arrow_bluelink_down.png) 0 2px no-repeat;
+}
+
+ul.videoPreviews span.less {
+ padding:0 0 0 12px;
+ background:url(images/arrow_bluelink_up.png) 0 2px no-repeat;
+ display:none;
+}
+
+ul.videoPreviews p.toggle {
+ position:absolute;
+ margin:0;
+ margin-top:-23px; /* instead of bottom:23px, because IE won't do it correctly */
+ left:140px;
+}
+
+ul.videoPreviews p.toggle a {
+ height:auto;
+ margin:0;
+ padding:0;
+ zoom:1; /* IE6, otherwise the margin considers the img on redraws */
+}
+
+ul.videoPreviews p.toggle a:hover {
+ text-decoration:underline;
+ background:transparent; /* IE6, otherwise it inherits white */
+}
+
+/* featured videos */
+
+#mainBodyRight h2 {
+ padding:0 0 5px;
+}
+
+#mainBodyRight ul.videoPreviews {
+ margin:10px 0 0;
+}
+
+#mainBodyRight ul.videoPreviews li {
+ font-size:11px;
+ line-height:13px;
+ margin:0 0 5px;
+ padding:0;
+}
+
+#mainBodyRight ul.videoPreviews h3 {
+ padding:0;
+ margin:0;
+ font-size:100%;
+}
+
+#mainBodyRight ul.videoPreviews a {
+ text-decoration:none;
+ height:108px;
+ border:1px solid #FFF;
+}
+
+#mainBodyRight ul.videoPreviews a:hover {
+ border:1px solid #CCDADA;
+}
+
+#mainBodyRight ul.videoPreviews a.selected {
+ border:1px solid #FFF;
+}
+
+#mainBodyRight ul.videoPreviews p {
+ line-height:1.2em;
+ padding:0;
+ margin:4px 0 0 130px;
+}
+
+#mainBodyRight ul.videoPreviews img {
+ margin-top:5px;
+}
+
+/* Pretty printing styles. Used with prettify.js. */
+
+.str { color: #080; }
+.kwd { color: #008; }
+.com { color: #800; }
+.typ { color: #606; }
+.lit { color: #066; }
+.pun { color: #660; }
+.pln { color: #000; }
+dl.tag-list dt code,
+.tag { color: #008; }
+dl.atn-list dt code,
+.atn { color: #828; }
+.atv { color: #080; }
+.dec { color: #606; }
+
+@media print {
+ .str { color: #060; }
+ .kwd { color: #006; font-weight: bold; }
+ .com { color: #600; font-style: italic; }
+ .typ { color: #404; font-weight: bold; }
+ .lit { color: #044; }
+ .pun { color: #440; }
+ .pln { color: #000; }
+ .tag { color: #006; font-weight: bold; }
+ .atn { color: #404; }
+ .atv { color: #060; }
+}
+
+
+#title {
+ border-bottom: 4px solid #ccc;
+ display:none;
+}
+
+#title h1 {
+ color:#336666;
+ margin:0;
+ padding: 5px 10px;
+ font-size: 1em;
+ line-height: 15px;
+}
+
+#title h1 .small{
+ color:#000;
+ margin:0;
+ font-size: 13px;
+ padding:0 0 0 15px;
+}
+
+/* SIDE NAVIGATION */
+
+#side-nav {
+ padding:0 6px 0 0;
+ background-color: #fff;
+ font-size:12px;
+}
+
+#resize-packages-nav {
+/* keeps the resize handle below the h-scroll handle */
+ height:270px;
+ overflow:hidden;
+ max-height:100%;
+}
+
+#packages-nav {
+ height:270px;
+ max-height:inherit;
+ position:relative;
+ overflow:auto;
+}
+
+#classes-nav,
+#devdoc-nav {
+ overflow:auto;
+ position:relative;
+}
+
+#side-nav ul {
+ list-style: none;
+ margin: 0;
+ padding:5px 0;
+}
+
+#side-nav ul ul {
+ margin: .5em 0 0 0;
+ padding: 0;
+}
+
+#side-nav li {
+ padding:0;
+ padding:1px 0 1px 0;
+ zoom:1;
+}
+
+#side-nav li span.heading,
+#side-nav li h2 {
+ display:block;
+ font-size:12px;
+ font-weight: bold;
+ margin:.5em 0 0 0;
+ padding: 3px 0 1px 9px;
+}
+
+#side-nav li a {
+ display: inline-block; /* needed to apply padding to line-wraps */
+ text-decoration:none;
+ padding: 0 0 0 18px;
+ zoom:1;
+}
+
+#side-nav li a span+span {
+ display:none;
+}
+
+#side-nav li a:hover {
+ text-decoration:underline;
+}
+
+#side-nav li a+a {
+ padding: 0;
+}
+/*second level (nested) list*/
+#side-nav li li li a {
+ padding: 0 0 0 28px;
+}
+/*third level (nested) list*/
+#side-nav li li li li a {
+ padding: 0 0 0 38px;
+}
+
+#side-nav .selected {
+ background-color: #435a6e;
+ color: #fff;
+ font-weight:bold;
+}
+
+#side-nav .selected a {
+ color: #fff;
+ text-decoration:none;
+}
+
+#side-nav strong {
+ display:block;
+}
+
+#side-nav .toggle-list .toggle-img {
+ margin:0;
+ padding:0;
+ position:absolute;
+ top:0;
+ left:0;
+ height:16px;
+ width:15px;
+ outline-style:none;
+}
+/* second-level toggle */
+#side-nav .toggle-list .toggle-list .toggle-img {
+ left:10px;
+}
+
+#side-nav .closed .toggle-img,
+#side-nav .open .closed .toggle-img {
+ background:url('images/triangle-closed-small.png') 7px 4px no-repeat;
+}
+#side-nav .open .toggle-img {
+ background:url('images/triangle-opened-small.png') 7px 4px no-repeat;
+}
+
+#side-nav .toggle-list {
+ position:relative;
+}
+
+#side-nav .toggle-list ul {
+ margin:0;
+ display:none;
+}
+
+#side-nav .toggle-list div {
+ display:block;
+}
+
+#index-links .selected {
+ background-color: #fff;
+ color: #000;
+ font-weight:normal;
+ text-decoration:none;
+}
+
+#index-links {
+ padding:7px 0 4px 10px;
+}
+
+/* nav tree */
+
+#nav-tree ul {
+ padding:5px 0 1.5em;
+}
+
+#side-nav #nav-tree ul li a,
+#side-nav #nav-tree ul li span.no-children {
+ padding: 0 0 0 0;
+ margin: 0;
+}
+
+#nav-tree .plus {
+ margin: 0 3px 0 0;
+}
+
+#nav-tree ul ul {
+ list-style: none;
+ margin: 0;
+ padding: 0 0 0 0;
+}
+
+#nav-tree ul li {
+ margin: 0;
+ padding: 0 0 0 0;
+ white-space: nowrap;
+}
+
+#nav-tree .children_ul {
+ margin:0;
+}
+
+#nav-tree a.nolink {
+ color: black;
+ text-decoration: none;
+}
+
+#nav-tree span.label {
+ width: 100%;
+}
+
+#nav-tree {
+ overflow-x: auto;
+ overflow-y: scroll;
+}
+
+#nav-swap {
+ font-size:10px;
+ line-height:10px;
+ margin-left:1em;
+ text-decoration:none;
+ display:block;
+}
+
+#tree-link {
+
+}
+
+/* DOCUMENT BODY */
+
+#doc-content {
+ overflow:auto;
+}
+
+#jd-header {
+ background-color: #E2E2E2;
+ padding: 7px 15px;
+}
+
+#jd-header h1 {
+ margin: 0 0 10px;
+ font-size:1.7em;
+}
+
+#jd-header .crumb {
+ font-size:.9em;
+ line-height:1em;
+ color:#777;
+}
+
+#jd-header .crumb a,
+#jd-header .crumb a:visited {
+ text-decoration:none;
+ color:#777;
+}
+
+#jd-header .crumb a:hover {
+ text-decoration:underline;
+}
+
+#jd-header table {
+ margin:0;
+ padding:0;
+}
+
+#jd-header td {
+ border:none;
+ padding:0;
+ vertical-align:top;
+}
+
+#jd-header.guide-header {
+ background-color:#fff;
+ color:#435a6e;
+ height:50px;
+}
+
+#jd-descr {
+ position:relative;
+}
+
+/* summary tables for reference pages */
+.jd-sumtable {
+ margin: .5em 1em 1em 1em;
+ width:95%; /* consistent table widths; within IE's quirks */
+ font-size:.9em;
+}
+
+.jd-sumtable a {
+ text-decoration:none;
+}
+
+.jd-sumtable a:hover {
+ text-decoration:underline;
+}
+
+/* the link inside a sumtable for "Show All/Hide All" */
+.toggle-all {
+ display:block;
+ float:right;
+ font-weight:normal;
+ font-size:0.9em;
+}
+
+/* adjustments for in/direct subclasses tables */
+.jd-sumtable-subclasses {
+ margin: 1em 0 0 0;
+ max-width:968px;
+}
+
+/* extra space between end of method name and open-paren */
+.sympad {
+ margin-right: 2px;
+}
+
+/* right alignment for the return type in sumtable */
+.jd-sumtable .jd-typecol {
+ text-align:right;
+}
+
+/* adjustments for the expando table-in-table */
+.jd-sumtable-expando {
+ margin:.5em 0;
+ padding:0;
+}
+
+/* a div that holds a short description */
+.jd-descrdiv {
+ padding:3px 1em 0 1em;
+ margin:0;
+ border:0;
+}
+
+/* page-top-right container for reference pages (holds
+links to summary tables) */
+#api-info-block {
+ font-size:.8em;
+ padding:6px 10px;
+ font-weight:normal;
+ float:right;
+ text-align:right;
+ color:#999;
+ max-width:70%;
+}
+
+#api-level-toggle {
+ padding:0 10px;
+ font-size:11px;
+ float:right;
+}
+
+#api-level-toggle label.disabled {
+ color:#999;
+}
+
+div.api-level {
+ font-size:.8em;
+ font-weight:normal;
+ color:#999;
+ float:right;
+ padding:0 7px 0;
+ margin-top:-25px;
+}
+
+#api-info-block div.api-level {
+ font-size:1.3em;
+ font-weight:bold;
+ float:none;
+ color:#444;
+ padding:0;
+ margin:0;
+}
+
+/* Force link colors for IE6 */
+div.api-level a {
+ color:#999;
+}
+#api-info-block div.api-level a:link {
+ color:#444;
+}
+#api-level-toggle a {
+ color:#999;
+}
+
+div#deprecatedSticker {
+ display:none;
+ z-index:99;
+ position:fixed;
+ right:15px;
+ top:114px;
+ margin:0;
+ padding:1em;
+ background:#FFF;
+ border:1px solid #dddd00;
+ box-shadow:-5px 5px 10px #ccc;
+ -moz-box-shadow:-5px 5px 10px #ccc;
+ -webkit-box-shadow:-5px 5px 10px #ccc;
+}
+
+div#naMessage {
+ display:none;
+ width:555px;
+ height:0;
+ margin:0 auto;
+}
+
+div#naMessage div {
+ z-index:99;
+ width:450px;
+ position:fixed;
+ margin:50px 0;
+ padding:4em 4em 3em;
+ background:#FFF;
+ border:1px solid #dddd00;
+ box-shadow:-10px 10px 40px #888;
+ -moz-box-shadow:-10px 10px 40px #888;
+ -webkit-box-shadow:-10px 10px 40px #888;
+}
+/* IE6 can't position fixed */
+* html div#naMessage div { position:absolute; }
+
+div#naMessage strong {
+ font-size:1.1em;
+}
+
+.absent,
+.absent a:link,
+.absent a:visited,
+.absent a:hover,
+.absent * {
+ color:#bbb !important;
+ cursor:default !important;
+ text-decoration:none !important;
+}
+
+#api-level-toggle a,
+.api-level a {
+ color:inherit;
+ text-decoration:none;
+}
+
+#api-level-toggle a:hover,
+.api-level a:hover {
+ color:inherit;
+ text-decoration:underline !important;
+ cursor:pointer !important;
+}
+
+#side-nav li.absent.selected,
+#side-nav li.absent.selected *,
+#side-nav div.label.absent.selected,
+#side-nav div.label.absent.selected * {
+ background-color:#eaeaea !important;
+}
+/* IE6 quirk (won't chain classes, so just keep background blue) */
+* html #side-nav li.selected,
+* html #side-nav li.selected *,
+* html #side-nav div.label.selected,
+* html #side-nav div.label.selected * {
+ background-color: #435a6e !important;
+}
+
+
+.absent h4.jd-details-title,
+.absent h4.jd-details-title * {
+ background-color:#f6f6f6 !important;
+}
+
+.absent img {
+ opacity: .3;
+ filter: alpha(opacity=30);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+}
+
+
+/* applies to a div containing links to summary tables */
+.sum-details-links {
+ padding:0;
+ font-weight:normal;
+}
+
+.sum-details-links a {
+ text-decoration:none;
+}
+
+.sum-details-links a:hover {
+ text-decoration:underline;
+}
+
+
+/* inheritance table */
+.jd-inheritance-table {
+ border-spacing:0;
+ margin:0;
+ padding:0;
+ font-size:.9em;
+}
+.jd-inheritance-table td {
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+.jd-inheritance-table .jd-inheritance-space {
+ font-weight:bold;
+ width:1em;
+}
+.jd-inheritance-table .jd-inheritance-interface-cell {
+ padding-left: 17px;
+}
+
+#jd-content {
+ padding: 18px 15px;
+}
+
+hr {
+ background-color:#ccc;
+ border-color:#fff;
+ margin:2em 0 1em;
+}
+
+/* DOC CLASSES */
+
+#jd-content h1 {
+/*sdk page*/
+ font-size:1.6em;
+ color:#336666;
+ margin:0 0 .5em;
+}
+
+#jd-content h2 {
+ font-size:1.45em;
+ color:#111;
+ border-top:2px solid #ccc;
+ padding: .5em 0 0;
+ margin: 2em 0 1em 0;
+}
+
+#jd-content h3 {
+ font-size:1.3em;
+ color:#3a3a3a;
+ padding: 0;
+ margin: 1.5em 0 .65em 0;
+}
+
+#jd-content h4 {
+ font-size:1.1em;
+ color:#3a3a3a;
+ padding: 0;
+ margin: 1.25em 0 .65em 0;
+}
+
+#jd-content h5 {
+ font-size:1.0em;
+ color:#3a3a3a;
+ padding: 0;
+ margin: 1em 0 .65em 0;
+}
+
+#jd-content .small-header {
+ font-size:1em;
+ color:#000;
+ font-weight:bold;
+ border:none;
+ padding:0;
+ margin:1em 0 .5em;
+ position:inherit;
+}
+
+#jd-content table {
+ margin: 0 0 1em 1em;
+}
+
+#jd-content img {
+ margin: 0 0 1em 1em;
+}
+
+#jd-content li img,
+#jd-content dd img {
+ margin:.5em 0 .5em 1em;
+}
+
+.nolist {
+ list-style:none;
+ padding:0;
+ margin:0 0 1em 1em;
+}
+
+.nolist li {
+ padding:0 0 2px;
+ margin:0;
+}
+
+h4 .normal {
+ font-size:.9em;
+ font-weight:normal;
+}
+
+.caps {
+ font-variant:small-caps;
+ font-size:1.2em;
+}
+
+dl.tag-list dl.atn-list {
+ padding:0 0 0 2em;
+}
+
+.jd-details {
+/* border:1px solid #669999;
+ padding:4px; */
+ margin:0 0 1em;
+}
+
+/* API reference: a container for the
+.tagdata blocks that make up the detailed
+description */
+.jd-details-descr {
+ padding:0;
+ margin:.5em .25em;
+}
+
+/* API reference: a block containing
+a detailed description, a params table,
+seealso list, etc */
+.jd-tagdata {
+ margin:.5em 1em;
+}
+
+.jd-tagdata p {
+ margin:0 0 1em 1em;
+}
+
+/* API reference: adjustments to
+the detailed description block */
+.jd-tagdescr {
+ margin:.25em 0 .75em 0;
+ line-height:1em;
+}
+
+.jd-tagdescr p {
+ margin:.5em 0;
+ padding:0;
+
+}
+
+.jd-tagdescr ol,
+.jd-tagdescr ul {
+ margin:0 2.5em;
+ padding:0;
+}
+
+.jd-tagdescr table,
+.jd-tagdescr img {
+ margin:.25em 1em;
+}
+
+.jd-tagdescr li {
+margin:0 0 .25em 0;
+padding:0;
+}
+
+/* API reference: heading marking
+the details section for constants,
+attrs, methods, etc. */
+h4.jd-details-title {
+ font-size:1.15em;
+ background-color: #E2E2E2;
+ margin:1.5em 0 .6em;
+ padding:3px 95px 3px 3px; /* room for api-level */
+}
+
+h4.jd-tagtitle {
+ margin:0;
+}
+
+/* API reference: heading for "Parameters", "See Also", etc.,
+in details sections */
+h5.jd-tagtitle {
+ margin:0 0 .25em 0;
+ font-size:1em;
+}
+
+.jd-tagtable {
+ margin:0;
+}
+
+.jd-tagtable td,
+.jd-tagtable th {
+ border:none;
+ background-color:#fff;
+ vertical-align:top;
+ font-weight:normal;
+ padding:2px 10px;
+}
+
+.jd-tagtable th {
+ font-style:italic;
+}
+
+#jd-content table h2 {
+ background-color: #d6d6d6;
+ font-size: 1.1em;
+ margin:0 0 10px;
+ padding:5px;
+ left:0;
+ width:auto;
+}
+
+div.design-announce {
+ border-top:1px solid #33B5E5;
+ border-bottom:1px solid #33B5E5;
+ padding:5px 10px 10px 55px;
+ margin:2em 0;
+ background:url('images/icon_design.png') 5px 13px no-repeat;
+}
+
+div.design-announce p {
+ margin: .5em 0 0 0;
+}
+
+div.special {
+ padding: .5em 1em 1em 1em;
+ margin: 0 0 1em;
+ background-color: #DAF3FC;
+ border:1px solid #d3ecf5;
+ border-radius:5px;
+ -moz-border-radius:5px;
+ -webkit-border-radius:5px;
+}
+
+div.special p {
+ margin: .5em 0 0 0;
+}
+
+div.special ol {
+ margin: 0;
+}
+
+div.special ol li {
+ margin: 0;
+ padding: 0;
+}
+
+#jd-content div.special h2,
+#jd-content div.special h3 {
+ color:#669999;
+ font-size:1.2em;
+ border:none;
+ margin:0 0 .5em;
+ padding:0;
+}
+
+#jd-content div.special.reference h2,
+#jd-content div.special.reference h3,
+#jd-content div.special.reference h4 {
+ color:#000;
+ font-size:1em;
+ border:none;
+ font-weight:bold;
+ margin:.5em 0;
+ padding:0;
+}
+
+p.note, div.note,
+p.caution, div.caution,
+p.warning, div.warning {
+ margin: 1em;
+ padding: 0 0 0 .5em;
+ border-left: 4px solid;
+}
+
+p.special-note,
+div.special-note {
+ background-color:#EBF3DB;
+ padding:10px 20px;
+ margin:0 0 1em;
+}
+
+p.note,
+div.note {
+ border-color: #99aacc;
+}
+
+p.warning,
+div.warning {
+ border-color: #aa0033;
+}
+
+p.caution,
+div.caution {
+ border-color: #ffcf00;
+}
+
+li .note,
+li .caution,
+li .warning {
+ margin: .5em 0 0 0;
+ padding: .2em .5em .2em .9em;
+}
+
+/* Makes sure the first paragraph does not add top-whitespace within the box*/
+li .note>p:first-child,
+li .caution>p:first-child,
+li .warning>p:first-child {
+ margin-top:0;
+ padding-top:0;
+}
+
+dl.xml dt {
+ font-variant:small-caps;
+ font-size:1.2em;
+}
+
+dl.xml dl {
+ padding:0;
+}
+
+dl.xml dl dt {
+ font-variant:normal;
+ font-size:1em;
+}
+
+.listhead li {
+ font-weight: bold;
+}
+
+.listhead li *, /*ie*/.listhead li li {
+ font-weight: normal;
+}
+
+ol.no-style,
+ul.no-style {
+ list-style:none;
+ padding-left:1em;
+}
+
+.new,
+.new-child {
+ font-size: .78em;
+ font-weight: bold;
+ color: #ff3d3d;
+ text-decoration: none;
+ vertical-align:top;
+ line-height:.9em;
+ white-space:nowrap;
+}
+
+.toggle-list.open .new-child {
+ display:none;
+}
+
+pre.classic {
+ background-color:transparent;
+ border:none;
+ padding:0;
+}
+
+p.img-caption {
+ margin: -0.5em 0 1em 1em; /* matches default img left-margin */
+}
+
+div.figure {
+ float:right;
+ clear:right;
+ margin:1em 0 0 0;
+ padding:0 0 0 3em;
+ background-color:#fff;
+ /* width must be defined w/ an inline style matching the image width */
+}
+
+#jd-content
+div.figure img {
+ margin: 0 0 1em;
+}
+
+div.figure p.img-caption {
+ margin: -0.5em 0 1em 0;
+}
+
+p.table-caption {
+ margin: 0 0 0.5em 1em; /* matches default table left-margin */
+}
+
+
+/* toggle for misc content (such as long sample code)
+ see toggleContent() script in android-developer-docs.js */
+.toggle-content.closed .toggle-content-toggleme {
+ display:none;
+}
+
+.toggle-content a[href="#"] {
+ text-decoration:none;
+ color:inherit;
+}
+
+.toggle-content-toggleme {
+ padding-bottom:1px; /* fixes animation bounce due to margins */
+}
+
+#jd-content .toggle-content img.toggle-content-img {
+ margin:0;
+}
+
+
+/* BEGIN quickview sidebar element styles */
+
+#qv-wrapper {
+ float: right;
+ width:310px; /* +35px padding */
+ background-color:#fff;
+ margin:-48px 0 2px 0;
+ padding:0 0 20px 35px;
+}
+
+#qv {
+ background-color:#fff;
+ border:4px solid #dee8f1;
+ margin:0;
+ padding:0 5px 5px;
+ width:292px; /* +10px padding; +8px border */
+ font-size:.9em;
+}
+
+#qv ol {
+ list-style:none;
+ padding: 0;
+}
+
+#qv ol ol{
+ list-style:none;
+ padding: 0 0 0 12px;
+ margin:0;
+}
+
+#qv ul {
+ padding: 0 10px 0 2em;
+}
+
+#qv li {
+ padding: 0 10px 3px;
+ line-height: 1.2em;
+}
+
+#qv li li {
+ padding: 3px 10px 0;
+}
+
+#qv ul li {
+ padding: 0 10px 0 0;
+}
+
+#qv li.selected a {
+ color:#555;
+ text-decoration:none;
+}
+
+#qv a,
+#qv a code {
+ color:#cc6600;
+}
+
+#qv p {
+ margin:8px 0 0;
+ padding:0 10px;
+}
+
+#jd-content #qv h2 {
+ font-size:1.05em;
+ font-weight:bold;
+ margin:12px 0 .25em 0;
+ padding:0 10px;
+ background-color:transparent;
+ color:#7BB026;
+ border:none;
+ left:0;
+ z-index:1;
+}
+
+#qv-extra #rule {
+ padding: 0 10px;
+ margin: 0;
+}
+
+#qv-sub-rule {
+ padding: 5px 15px 10px;
+ margin: 0;
+}
+
+#jd-content
+#qv-sub-rule h2 {
+ margin: 0 0 .5em 0;
+}
+
+/* END quickview sidebar element styles */
+
+/* Begin sidebox sidebar element styles */
+
+.sidebox-wrapper {
+ float:right;
+ clear:right;
+ width:310px; /* +35px padding */
+ background-color:#fff;
+ margin:0;
+ padding:0 0 20px 35px;
+}
+
+.sidebox {
+ border-left:1px solid #dee8f1;
+ background-color:#ffffee;
+ margin:0;
+ padding:8px 12px;
+ font-size:0.9em;
+ width:285px; /* +24px padding; +1px border */
+}
+
+.sidebox p {
+ margin-bottom: .75em;
+}
+
+.sidebox ul {
+ padding: 0 0 0 1.5em;
+}
+
+.sidebox li ul {
+ margin-top:0;
+ margin-bottom:.1em;
+}
+
+.sidebox li {
+padding:0 0 0 0em;
+}
+
+#jd-content .sidebox h2,
+#jd-content .sidebox h3,
+#jd-content .sidebox h4,
+#jd-content .sidebox h5 {
+ border:none;
+ font-size:1em;
+ margin:0;
+ padding:0 0 8px;
+ left:0;
+ z-index:0;
+}
+
+.sidebox hr {
+ background-color:#ccc;
+ border:none;
+}
+
+/* End sidebox sidebar element styles */
+
+/* BEGIN developer training bar styles */
+
+div#tb-wrapper {
+ float: right;
+ clear:right;
+ width:380px; /* +25px padding = 405 */
+ background-color:#fff;
+ margin:0 0 2px 0;
+ padding:0 0 20px 25px;
+}
+
+div#tb {
+ margin:0;
+ padding:0 15px;
+ width:350px; /* +15px padding = 380 */
+ font-size:.9em;
+ background:#e9e9e9;
+ border:1px solid #aaa;
+ border-radius:5px;
+ -moz-border-radius:5px;
+ -webkit-border-radius:5px;
+ overflow:auto;
+}
+
+div#tb h2 {
+ font-size:1.3em;
+ font-weight:bold;
+ margin:1em 0;
+ padding:0;
+ background-color:transparent;
+ border:none;
+ clear:both;
+}
+
+div.download-box a.button {
+ color: #069;
+ font-size:1.1em;
+ font-weight:bold;
+ text-decoration:none;
+ height:27px;
+ line-height:27px;
+ text-align:center;
+ padding:5px 8px;
+ background-color: #fff;
+ border: 1px solid #aaa;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+}
+
+div.download-box a.button:hover {
+ border-color: #09C;
+ background-color: #4CADCB;
+ background-image: -webkit-gradient(linear,left top,left bottom,from(#5dbcd9),to(#4cadcb));
+ background-image: -webkit-linear-gradient(top,#5dbcd9,#4cadcb);
+ background-image: -moz-linear-gradient(top,#5dbcd9,#4cadcb);
+ background-image: -ms-linear-gradient(top,#5dbcd9,#4cadcb);
+ background-image: -o-linear-gradient(top,#5dbcd9,#4cadcb);
+ background-image: linear-gradient(top,#5dbcd9,#4cadcb);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5dbcd9',EndColorStr='#4cadcb');
+ color: #fff;
+}
+
+div.download-box a.button:active {
+ background-color: #1E799A;
+ background-image: none;
+ border-color: #30B7E6;
+}
+
+div.download-box p.filename {
+ font-size:0.85em;
+ color:#888;
+ margin:4px 0 1em 10px;
+}
+
+/* End developer training bar */
+
+/* Training nav bar (previous/next) */
+
+div.training-nav-top {
+ float: right;
+ width:380px; /* +25px padding = 405 */
+ margin:-58px 0 0 0;
+ padding:0 0 20px 25px;
+}
+
+div.training-nav-bottom {
+ padding:1px; /* for weird FF bug (scrollbar appears) */
+ margin:3em 0;
+ overflow:auto;
+}
+
+div.training-nav-button-next a,
+div.training-nav-button-previous a {
+ display:block;
+ width:160px;
+ height:55px;
+ padding:4px 7px;
+ border:1px solid #aaa;
+ border-radius:5px;
+ -moz-border-radius:5px;
+ -webkit-border-radius:5px;
+ text-decoration:none;
+ font-weight:bold;
+}
+
+div.training-nav-button-next a:hover,
+div.training-nav-button-previous a:hover {
+ border:1px solid #069; /* match link color */
+}
+
+div.training-nav-button-next a:active,
+div.training-nav-button-previous a:active {
+ border:1px solid #f00; /* match link color */
+}
+
+div.training-nav-button-previous {
+ float:left;
+ text-align:left;
+}
+
+div.training-nav-button-next {
+ float:right;
+ text-align:right;
+}
+
+span.training-nav-button-title {
+ display:block;
+ font-size:.85em;
+ font-weight:normal;
+ line-height:1.3em;
+ margin:.5em 0 0;
+}
+
+/* End training nav bar */
+
+/* BEGIN image and caption styles (originally for UI Guidelines docs) */
+
+table.image-caption {
+ padding:0;
+ margin:.5em 0;
+ border:0;
+}
+
+td.image-caption-i {
+ font-size:92%;
+ padding:0 5px;
+ margin:0;
+ border:0;
+}
+
+td.image-caption-i img {
+ padding:0 1em;
+ margin:0;
+}
+
+.image-list {
+ width:24px;
+ text-align:center;
+}
+
+td.image-caption-c {
+ font-size:92%;
+ padding:1em 2px 2px 2px;
+ margin:0;
+ border:0;
+ width:350px;
+}
+
+.grad-rule-top {
+background-image:url(images/grad-rule-qv.png);
+background-repeat:no-repeat;
+padding-top:1em;
+margin-top:0;
+}
+
+.image-caption-nested {
+ margin-top:0;
+ padding:0 0 0 1em;
+}
+
+.image-caption-nested td {
+ padding:0 4px 2px 0;
+ margin:0;
+ border:0;
+}
+
+/* END image and caption styles */
+
+/* table of contents */
+
+ol.toc {
+ margin: 0 0 1em 0;
+ padding: 0;
+ list-style: none;
+ font-size:95%;
+}
+
+ol.toc li {
+ font-weight: bold;
+ margin: 0 0 .5em 1em;
+ padding: 0;
+}
+
+ol.toc li p {
+ font-weight: normal;
+}
+
+ol.toc li ol {
+ margin: 0;
+ padding: 0;
+}
+
+ol.toc li li {
+ padding: 0;
+ margin: 0 0 0 1em;
+ font-weight: normal;
+ list-style: none;
+}
+
+table ol.toc {
+ margin-left: 0;
+}
+
+.columns td {
+ padding:0 5px;
+ border:none;
+}
+
+/* link table */
+.jd-linktable {
+ margin: 0 0 1em;
+ border-bottom: 1px solid #888;
+}
+.jd-linktable th,
+.jd-linktable td {
+ padding: 3px 5px;
+ vertical-align: top;
+ text-align: left;
+ border:none;
+}
+.jd-linktable tr {
+ background-color: #fff;
+}
+.jd-linktable td {
+ border-top: 1px solid #888;
+ background-color: inherit;
+}
+.jd-linktable td p {
+ padding: 0 0 5px;
+}
+.jd-linktable .jd-linkcol {
+}
+.jd-linktable .jd-descrcol {
+}
+.jd-linktable .jd-typecol {
+ text-align:right;
+}
+.jd-linktable .jd-valcol {
+}
+.jd-linktable .jd-commentrow {
+ border-top:none;
+ padding-left:25px;
+}
+.jd-deprecated-warning {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+tr.alt-color {
+ background-color: #f6f6f6;
+}
+
+/* expando trigger */
+#jd-content .jd-expando-trigger-img {
+ margin:0;
+}
+
+/* jd-expando */
+.jd-inheritedlinks {
+ padding:0 0 0 13px
+}
+
+/* SDK PAGE */
+table.download tr {
+ background-color:#d9d9d9;
+}
+
+table.download tr.alt-color {
+ background-color:#ededed;
+}
+
+table.download td,
+table.download th {
+ border:2px solid #fff;
+ padding:10px 5px;
+}
+
+table.download th {
+ background-color:#6d8293;
+ color:#fff;
+}
+
+/* INLAY 180 COPY and 240PX EXTENSION */
+/* modified to 43px so that all browsers eliminate the package panel h-scroll */
+.g-tpl-240 .g-unit,
+.g-unit .g-tpl-240 .g-unit,
+.g-unit .g-unit .g-tpl-240 .g-unit {
+ display: block;
+ margin: 0 0 0 243px;
+ width: auto;
+ float: none;
+}
+.g-unit .g-unit .g-tpl-240 .g-first,
+.g-unit .g-tpl-240 .g-first,
+.g-tpl-240 .g-first {
+ display: block;
+ margin: 0;
+ width: 243px;
+ float: left;
+}
+/* 240px alt */
+.g-tpl-240-alt .g-unit,
+.g-unit .g-tpl-240-alt .g-unit,
+.g-unit .g-unit .g-tpl-240-alt .g-unit {
+ display: block;
+ margin: 0 243px 0 0;
+ width: auto;
+ float: none;
+}
+.g-unit .g-unit .g-tpl-240-alt .g-first,
+.g-unit .g-tpl-240-alt .g-first,
+.g-tpl-240-alt .g-first {
+ display: block;
+ margin: 0;
+ width: 243px;
+ float: right;
+}
+
+/* 200px */
+.g-tpl-200 .g-unit,
+.g-unit .g-tpl-200 .g-unit,
+.g-unit .g-unit .g-tpl-200 .g-unit {
+ display: block;
+ margin: 0 0 0 200px;
+ width: auto;
+ float: none;
+}
+.g-unit .g-unit .g-tpl-200 .g-first,
+.g-unit .g-tpl-200 .g-first,
+.g-tpl-200 .g-first {
+ display: block;
+ margin: 0;
+ width: 200px;
+ float: left;
+}
+/* 200px alt */
+.g-tpl-200-alt .g-unit,
+.g-unit .g-tpl-200-alt .g-unit,
+.g-unit .g-unit .g-tpl-200-alt .g-unit {
+ display: block;
+ margin: 0 200px 0 0;
+ width: auto;
+ float: none;
+}
+.g-unit .g-unit .g-tpl-200-alt .g-first,
+.g-unit .g-tpl-200-alt .g-first,
+.g-tpl-200-alt .g-first {
+ display: block;
+ margin: 0;
+ width: 200px;
+ float: right;
+}
+
+/* 190px */
+.g-tpl-190 .g-unit,
+.g-unit .g-tpl-190 .g-unit,
+.g-unit .g-unit .g-tpl-190 .g-unit {
+ display: block;
+ margin: 0 0 0 190px;
+ width: auto;
+ float: none;
+}
+.g-unit .g-unit .g-tpl-190 .g-first,
+.g-unit .g-tpl-190 .g-first,
+.g-tpl-190 .g-first {
+ display: block;
+ margin: 0;
+ width: 190px;
+ float: left;
+}
+/* 190px alt */
+.g-tpl-190-alt .g-unit,
+.g-unit .g-tpl-190-alt .g-unit,
+.g-unit .g-unit .g-tpl-190-alt .g-unit {
+ display: block;
+ margin: 0 190px 0 0;
+ width: auto;
+ float: none;
+}
+.g-unit .g-unit .g-tpl-190-alt .g-first,
+.g-unit .g-tpl-190-alt .g-first,
+.g-tpl-190-alt .g-first {
+ display: block;
+ margin: 0;
+ width: 190px;
+ float: right;
+}
+
+/* 180px */
+.g-tpl-180 .g-unit,
+.g-unit .g-tpl-180 .g-unit,
+.g-unit .g-unit .g-tpl-180 .g-unit {
+ display: block;
+ margin: 0 0 0 180px;
+ width: auto;
+ float: none;
+}
+.g-unit .g-unit .g-tpl-180 .g-first,
+.g-unit .g-tpl-180 .g-first,
+.g-tpl-180 .g-first {
+ display: block;
+ margin: 0;
+ width: 180px;
+ float: left;
+}
+/* 180px alt */
+.g-tpl-180-alt .g-unit,
+.g-unit .g-tpl-180-alt .g-unit,
+.g-unit .g-unit .g-tpl-180-alt .g-unit {
+ display: block;
+ margin: 0 180px 0 0;
+ width: auto;
+ float: none;
+}
+.g-unit .g-unit .g-tpl-180-alt .g-first,
+.g-unit .g-tpl-180-alt .g-first,
+.g-tpl-180-alt .g-first {
+ display: block;
+ margin: 0;
+ width: 180px;
+ float: right;
+}
+
+
+/* JQUERY RESIZABLE STYLES */
+.ui-resizable { position: relative; }
+.ui-resizable-handle { position: absolute; display: none; font-size: 0.1px; z-index:1; }
+.ui-resizable .ui-resizable-handle { display: block; }
+body .ui-resizable-disabled .ui-resizable-handle { display: none; }
+body .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-s { cursor: s-resize; height: 6px; width: 100%; bottom: 0px; left: 0px;
+ background: transparent url("images/resizable-s2.gif") repeat scroll center top; }
+.ui-resizable-e { cursor: e-resize; width: 6px; right: 0px; top: 0px; height: 100%;
+ background: transparent url("images/resizable-e2.gif") repeat scroll right center; }
+
+@media print {
+
+ body {
+ overflow:visible;
+ }
+
+ #header {
+ height:60px;
+ }
+
+ #headerLeft {
+ padding:0;
+ }
+
+ #header-tabs,
+ #headerRight,
+ #side-nav,
+ #api-info-block {
+ display:none;
+ }
+
+ #body-content {
+ position:inherit;
+ }
+
+ #doc-content {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+
+ #jd-header {
+ padding:10px 0;
+ }
+
+ #jd-content {
+ padding:15px 0 0;
+ }
+
+ #footer {
+ float:none;
+ margin:2em 0 0;
+ }
+
+ h4.jd-details-title {
+ border-bottom:1px solid #666;
+ }
+
+ pre {
+ /* these allow lines to break (if there's a white space) */
+ overflow: visible;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ }
+
+ h1, h2, h3, h4, h5, h6 {
+ page-break-after: avoid;
+ }
+
+ table, img {
+ page-break-inside: avoid;
+ }
+}
diff --git a/tools/droiddoc/templates-sdk/assets/css/default.css b/tools/droiddoc/templates-sdk/assets/css/default.css
index 20e462c..6753c69 100644
--- a/tools/droiddoc/templates-sdk/assets/css/default.css
+++ b/tools/droiddoc/templates-sdk/assets/css/default.css
@@ -1089,13 +1089,18 @@
dd {
margin:0 0 10px 30px;
}
-dd p {
- margin:10px 0 0;
+dd p,
+dd pre,
+dd ul,
+dd ol,
+dd dl {
+ margin-top:10px;
}
li p,
li pre,
li ul,
-li ol {
+li ol,
+li dl {
margin-top:5px;
margin-bottom:5px;
}
@@ -1104,11 +1109,11 @@
}
pre, code {
color: #060;
- font: 14px/1.5 'courier new', courier, monospace;
+ font: 13px/1.5 monospace;
}
code {
font-weight:bold;
- font: 14px/14px 'courier new', courier, monospace;
+ font: 13px/14px monospace;
}
legend {
@@ -2443,7 +2448,8 @@
color:#666;
}
-div.figure {
+div.figure,
+div.figure-right {
float:right;
clear:right;
margin:10px 0 0 0;
@@ -2451,6 +2457,19 @@
/* width must be defined w/ an inline style matching the image width */
}
+div.figure-left {
+ float:left;
+ clear:left;
+ margin:10px 0 0 0;
+ padding:0 20px 0 0;
+ /* width must be defined w/ an inline style matching the image width */
+}
+
+img.frame {
+ border:1px solid #DDD;
+ padding:4px;
+}
+
p.table-caption {
margin: 0 0 4px 0;
font-size:13px;
@@ -2459,7 +2478,7 @@
p.code-caption {
margin: 0 0 4px 0;
- font: 13px/1.5 'courier new', courier, monospace;
+ font: 12px/1.5 monospace;
color:#666;
}
@@ -3170,18 +3189,6 @@
padding: 0;
}
-
-#search_filtered li{
- line-height:1.5em;
- margin: 0 0 2px;
- padding: 0;
-}
-
-#search_filtered li a {
- padding:0 5px;
- color:#222 !important;
-}
-
#search_filtered .jd-selected {
background-color: #33B5E5;
cursor:pointer;
@@ -3195,15 +3202,31 @@
display: none;
}
-.jd-autocomplete {
- padding-left: 6px;
- padding-right: 6px;
- padding-top: 1px;
- padding-bottom: 1px;
+#search_filtered li.jd-autocomplete {
font-size: 0.81em;
border: none;
- margin: 0;
- line-height: 1.05em;
+ margin: 0 0 2px;
+ padding: 0;
+ line-height:1.5em;
+}
+
+#search_filtered li a {
+ padding:0 5px;
+ color:#222 !important;
+}
+
+#search_filtered li.header {
+ color:#aaa;
+ font-weight:bold;
+ font-size: 0.81em;
+ border: none;
+ margin: 8px 0 2px;
+ padding:1px 5px;
+ line-height:1.5em;
+}
+
+#search_filtered li.header:first-child {
+ margin: 0 0 2px;
}
.show-item {
@@ -3946,7 +3969,7 @@
.jspPane {
position: absolute;
overflow: hidden;
- width:auto !important; /* to avoid cut-off api names in reference in horiz scroll */
+ width:100% !important; /* to avoid cut-off api names in reference in horiz scroll */
}
.jspVerticalBar {
diff --git a/tools/droiddoc/templates-sdk/assets/js/docs.js b/tools/droiddoc/templates-sdk/assets/js/docs.js
index 394dbe4..613db32 100644
--- a/tools/droiddoc/templates-sdk/assets/js/docs.js
+++ b/tools/droiddoc/templates-sdk/assets/js/docs.js
@@ -9,12 +9,35 @@
var basePath = getBaseUri(location.pathname);
var SITE_ROOT = toRoot + basePath.substring(1,basePath.indexOf("/",1));
+var GOOGLE_DATA; // combined data for google service apis, used for search suggest
/****** ON LOAD SET UP STUFF *********/
var navBarIsFixed = false;
$(document).ready(function() {
+
+ // load json file for Android API search suggestions
+ $.getScript(toRoot + 'reference/lists.js');
+ // load json files for Google services API suggestions
+ $.getScript(toRoot + 'reference/gcm_lists.js', function(data, textStatus, jqxhr) {
+ // once the GCM json (GCM_DATA) is loaded, load the GMS json (GMS_DATA) and merge the data
+ if(jqxhr.status === 200) {
+ $.getScript(toRoot + 'reference/gms_lists.js', function(data, textStatus, jqxhr) {
+ if(jqxhr.status === 200) {
+ // combine GCM and GMS data
+ GOOGLE_DATA = GMS_DATA;
+ var start = GOOGLE_DATA.length;
+ for (var i=0; i<GCM_DATA.length; i++) {
+ GOOGLE_DATA.push({id:start+i, label:GCM_DATA[i].label,
+ link:GCM_DATA[i].link, type:GCM_DATA[i].type});
+ }
+ }
+ });
+ }
+ });
+
+ // layout hosted on devsite is special
if (devsite) {
// move the lang selector into the overflow menu
$("#moremenu .mid div.header:last").after($("#language").detach());
@@ -50,7 +73,7 @@
hideResults(); // see search_autocomplete.js
});
$('.search').click(function() {
- if (!$('#search_autocomplete').is(":focused")) {
+ if (!$('#search_autocomplete').is(":focus")) {
$('#search_autocomplete').focus();
}
});
@@ -112,13 +135,16 @@
if (pagePath.indexOf("/intl/") == 0) {
pagePath = pagePath.substr(pagePath.indexOf("/",6)); // start after intl/ to get last /
}
-
+
if (pagePath.indexOf(SITE_ROOT) == 0) {
if (pagePath == '' || pagePath.charAt(pagePath.length - 1) == '/') {
pagePath += 'index.html';
}
}
+ // Need a copy of the pagePath before it gets changed in the next block;
+ // it's needed to perform proper tab highlighting in offline docs (see rootDir below)
+ var pagePathOriginal = pagePath;
if (SITE_ROOT.match(/\.\.\//) || SITE_ROOT == '') {
// If running locally, SITE_ROOT will be a relative path, so account for that by
// finding the relative URL to this page. This will allow us to find links on the page
@@ -138,12 +164,46 @@
// Otherwise the page path is already an absolute URL
}
- // select current page in sidenav and set up prev/next links if they exist
+ // Highlight the header tabs...
+ // highlight Design tab
+ if ($("body").hasClass("design")) {
+ $("#header li.design a").addClass("selected");
+
+ // highlight Develop tab
+ } else if ($("body").hasClass("develop") || $("body").hasClass("google")) {
+ $("#header li.develop a").addClass("selected");
+ // In Develop docs, also highlight appropriate sub-tab
+ var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1));
+ if (rootDir == "training") {
+ $("#nav-x li.training a").addClass("selected");
+ } else if (rootDir == "guide") {
+ $("#nav-x li.guide a").addClass("selected");
+ } else if (rootDir == "reference") {
+ // If the root is reference, but page is also part of Google Services, select Google
+ if ($("body").hasClass("google")) {
+ $("#nav-x li.google a").addClass("selected");
+ } else {
+ $("#nav-x li.reference a").addClass("selected");
+ }
+ } else if ((rootDir == "tools") || (rootDir == "sdk")) {
+ $("#nav-x li.tools a").addClass("selected");
+ } else if ($("body").hasClass("google")) {
+ $("#nav-x li.google a").addClass("selected");
+ }
+
+ // highlight Distribute tab
+ } else if ($("body").hasClass("distribute")) {
+ $("#header li.distribute a").addClass("selected");
+ }
+
+
+ // select current page in sidenav and header, and set up prev/next links if they exist
var $selNavLink = $('#nav').find('a[href="' + pagePath + '"]');
var $selListItem;
if ($selNavLink.length) {
- $selListItem = $selNavLink.closest('li');
+ // Find this page's <li> in sidenav and set selected
+ $selListItem = $selNavLink.closest('li');
$selListItem.addClass('selected');
// Traverse up the tree and expand all parent nav-sections
@@ -151,7 +211,6 @@
$(this).addClass('expanded');
$(this).children('ul').show();
});
-
// set up prev links
var $prevLink = [];
@@ -526,6 +585,7 @@
}
});
+// END of the onload event
@@ -596,16 +656,6 @@
}
-/* loads the lists.js file to the page.
-Loading this in the head was slowing page load time */
-addLoadEvent( function() {
- var lists = document.createElement("script");
- lists.setAttribute("type","text/javascript");
- lists.setAttribute("src", toRoot+"reference/lists.js");
- document.getElementsByTagName("head")[0].appendChild(lists);
-} );
-
-
addLoadEvent( function() {
$("pre:not(.no-pretty-print)").addClass("prettyprint");
prettyPrint();
@@ -1448,12 +1498,24 @@
/* ######################################################## */
+
var gSelectedIndex = -1;
-var gSelectedID = -1;
var gMatches = new Array();
var gLastText = "";
-var ROW_COUNT = 20;
var gInitialized = false;
+var ROW_COUNT_FRAMEWORK = 20; // max number of results in list
+var gListLength = 0;
+
+
+var gGoogleMatches = new Array();
+var ROW_COUNT_GOOGLE = 15; // max number of results in list
+var gGoogleListLength = 0;
+
+function onSuggestionClick(link) {
+ // When user clicks a suggested document, track it
+ _gaq.push(['_trackEvent', 'Suggestion Click', 'clicked: ' + $(link).text(),
+ 'from: ' + $("#search_autocomplete").val()]);
+}
function set_item_selected($li, selected)
{
@@ -1471,59 +1533,66 @@
$link.attr('href',toroot + match.link);
}
+function new_suggestion() {
+ var $list = $("#search_filtered");
+ var $li = $("<li class='jd-autocomplete'></li>");
+ $list.append($li);
+
+ $li.mousedown(function() {
+ window.location = this.firstChild.getAttribute("href");
+ });
+ $li.mouseover(function() {
+ $('#search_filtered li').removeClass('jd-selected');
+ $(this).addClass('jd-selected');
+ gSelectedIndex = $('#search_filtered li').index(this);
+ });
+ $li.append("<a onclick='onSuggestionClick(this)'></a>");
+ $li.attr('class','show-item');
+ return $li;
+}
+
function sync_selection_table(toroot)
{
var $list = $("#search_filtered");
var $li; //list item jquery object
var i; //list item iterator
- gSelectedID = -1;
-
- //initialize the table; draw it for the first time (but not visible).
- if (!gInitialized) {
- for (i=0; i<ROW_COUNT; i++) {
- var $li = $("<li class='jd-autocomplete'></li>");
- $list.append($li);
-
- $li.mousedown(function() {
- window.location = this.firstChild.getAttribute("href");
- });
- $li.mouseover(function() {
- $('#search_filtered li').removeClass('jd-selected');
- $(this).addClass('jd-selected');
- gSelectedIndex = $('#search_filtered li').index(this);
- });
- $li.append('<a></a>');
- }
- gInitialized = true;
- }
+ // reset the list
+ $("li",$list).remove();
+
//if we have results, make the table visible and initialize result info
- if (gMatches.length > 0) {
+ if ((gMatches.length > 0) || (gGoogleMatches.length > 0)) {
+ // reveal suggestion list
$('#search_filtered_div').removeClass('no-display');
- var N = gMatches.length < ROW_COUNT ? gMatches.length : ROW_COUNT;
- for (i=0; i<N; i++) {
- $li = $('#search_filtered li:nth-child('+(i+1)+')');
- $li.attr('class','show-item');
- set_item_values(toroot, $li, gMatches[i]);
- set_item_selected($li, i == gSelectedIndex);
- if (i == gSelectedIndex) {
- gSelectedID = gMatches[i].id;
+ var listIndex = 0; // list index position
+
+ // ########### ANDROID RESULTS #############
+ if (gMatches.length > 0) {
+
+ // determine android results to show
+ gListLength = gMatches.length < ROW_COUNT_FRAMEWORK ?
+ gMatches.length : ROW_COUNT_FRAMEWORK;
+ for (i=0; i<gListLength; i++) {
+ var $li = new_suggestion();
+ set_item_values(toroot, $li, gMatches[i]);
+ set_item_selected($li, i == gSelectedIndex);
}
}
- //start hiding rows that are no longer matches
- for (; i<ROW_COUNT; i++) {
- $li = $('#search_filtered li:nth-child('+(i+1)+')');
- $li.attr('class','no-display');
+
+ // ########### GOOGLE RESULTS #############
+ if (gGoogleMatches.length > 0) {
+ // show header for list
+ $list.append("<li class='header'>in Google Services:</li>");
+
+ // determine google results to show
+ gGoogleListLength = gGoogleMatches.length < ROW_COUNT_GOOGLE ? gGoogleMatches.length : ROW_COUNT_GOOGLE;
+ for (i=0; i<gGoogleListLength; i++) {
+ var $li = new_suggestion();
+ set_item_values(toroot, $li, gGoogleMatches[i]);
+ set_item_selected($li, i == gSelectedIndex);
+ }
}
- //if there are more results we're not showing, so say so.
-/* if (gMatches.length > ROW_COUNT) {
- li = list.rows[ROW_COUNT];
- li.className = "show-item";
- c1 = li.cells[0];
- c1.innerHTML = "plus " + (gMatches.length-ROW_COUNT) + " more";
- } else {
- list.rows[ROW_COUNT].className = "hide-item";
- }*/
+
//if we have no results, hide the table
} else {
$('#search_filtered_div').addClass('no-display');
@@ -1546,8 +1615,8 @@
if (e.keyCode == 13) {
$('#search_filtered_div').addClass('no-display');
if (!$('#search_filtered_div').hasClass('no-display') || (gSelectedIndex < 0)) {
- if ($("#searchResults").is(":hidden")) {
- // if results aren't showing, return true to allow search to execute
+ if ($("#searchResults").is(":hidden") && (search.value != "")) {
+ // if results aren't showing (and text not empty), return true to allow search to execute
return true;
} else {
// otherwise, results are already showing, so allow ajax to auto refresh the results
@@ -1555,33 +1624,49 @@
return false;
}
} else if (kd && gSelectedIndex >= 0) {
- window.location = toroot + gMatches[gSelectedIndex].link;
+ window.location = $("a",$('#search_filtered li')[gSelectedIndex]).attr("href");
return false;
}
}
// 38 -- arrow up
else if (kd && (e.keyCode == 38)) {
- if (gSelectedIndex >= 0) {
- $('#search_filtered li').removeClass('jd-selected');
+ if ($($("#search_filtered li")[gSelectedIndex-1]).hasClass("header")) {
+ $('#search_filtered_div li').removeClass('jd-selected');
gSelectedIndex--;
- $('#search_filtered li:nth-child('+(gSelectedIndex+1)+')').addClass('jd-selected');
+ $('#search_filtered_div li:nth-child('+(gSelectedIndex+1)+')').addClass('jd-selected');
+ }
+ if (gSelectedIndex >= 0) {
+ $('#search_filtered_div li').removeClass('jd-selected');
+ gSelectedIndex--;
+ $('#search_filtered_div li:nth-child('+(gSelectedIndex+1)+')').addClass('jd-selected');
}
return false;
}
// 40 -- arrow down
else if (kd && (e.keyCode == 40)) {
- if (gSelectedIndex < gMatches.length-1
- && gSelectedIndex < ROW_COUNT-1) {
- $('#search_filtered li').removeClass('jd-selected');
+ if ($($("#search_filtered li")[gSelectedIndex+1]).hasClass("header")) {
+ $('#search_filtered_div li').removeClass('jd-selected');
gSelectedIndex++;
- $('#search_filtered li:nth-child('+(gSelectedIndex+1)+')').addClass('jd-selected');
+ $('#search_filtered_div li:nth-child('+(gSelectedIndex+1)+')').addClass('jd-selected');
+ }
+ if ((gSelectedIndex < $("ul#search_filtered li").length-1) ||
+ ($($("#search_filtered li")[gSelectedIndex+1]).hasClass("header"))) {
+ $('#search_filtered_div li').removeClass('jd-selected');
+ gSelectedIndex++;
+ $('#search_filtered_div li:nth-child('+(gSelectedIndex+1)+')').addClass('jd-selected');
}
return false;
}
+ // if key-up event and not arrow down/up,
+ // read the search query and add suggestsions to gMatches
else if (!kd && (e.keyCode != 40) && (e.keyCode != 38)) {
gMatches = new Array();
matchedCount = 0;
+ gGoogleMatches = new Array();
+ matchedCountGoogle = 0;
gSelectedIndex = -1;
+
+ // Search for Android matches
for (var i=0; i<DATA.length; i++) {
var s = DATA[i];
if (text.length != 0 &&
@@ -1590,22 +1675,38 @@
matchedCount++;
}
}
- rank_autocomplete_results(text);
+ rank_autocomplete_results(text, gMatches);
for (var i=0; i<gMatches.length; i++) {
var s = gMatches[i];
- if (gSelectedID == s.id) {
- gSelectedIndex = i;
+ }
+
+
+ // Search for Google matches
+ for (var i=0; i<GOOGLE_DATA.length; i++) {
+ var s = GOOGLE_DATA[i];
+ if (text.length != 0 &&
+ s.label.toLowerCase().indexOf(text.toLowerCase()) != -1) {
+ gGoogleMatches[matchedCountGoogle] = s;
+ matchedCountGoogle++;
}
}
+ rank_autocomplete_results(text, gGoogleMatches);
+ for (var i=0; i<gGoogleMatches.length; i++) {
+ var s = gGoogleMatches[i];
+ }
+
highlight_autocomplete_result_labels(text);
sync_selection_table(toroot);
+
+
return true; // allow the event to bubble up to the search api
}
}
-function rank_autocomplete_results(query) {
+/* Order the result list based on match quality */
+function rank_autocomplete_results(query, matches) {
query = query || '';
- if (!gMatches || !gMatches.length)
+ if (!matches || !matches.length)
return;
// helper function that gets the last occurence index of the given regex
@@ -1661,11 +1762,11 @@
return score;
};
- for (var i=0; i<gMatches.length; i++) {
- gMatches[i].__resultScore = _resultScoreFn(gMatches[i]);
+ for (var i=0; i<matches.length; i++) {
+ matches[i].__resultScore = _resultScoreFn(matches[i]);
}
- gMatches.sort(function(a,b){
+ matches.sort(function(a,b){
var n = b.__resultScore - a.__resultScore;
if (n == 0) // lexicographical sort if scores are the same
n = (a.label < b.label) ? -1 : 1;
@@ -1673,9 +1774,10 @@
});
}
+/* Add emphasis to part of string that matches query */
function highlight_autocomplete_result_labels(query) {
query = query || '';
- if (!gMatches || !gMatches.length)
+ if ((!gMatches || !gMatches.length) && (!gGoogleMatches || !gGoogleMatches.length))
return;
var queryLower = query.toLowerCase();
@@ -1686,6 +1788,10 @@
gMatches[i].__hilabel = gMatches[i].label.replace(
queryRE, '<b>$1</b>');
}
+ for (var i=0; i<gGoogleMatches.length; i++) {
+ gGoogleMatches[i].__hilabel = gGoogleMatches[i].label.replace(
+ queryRE, '<b>$1</b>');
+ }
}
function search_focus_changed(obj, focused)
@@ -1794,6 +1900,11 @@
location.hash = 'q=' + query;
});
+ // once search results load, set up click listeners
+ searchControl.setSearchCompleteCallback(this, function(control, searcher, query) {
+ addResultClickListeners();
+ });
+
// draw the search results box
searchControl.draw(document.getElementById("leftSearchControl"), drawOptions);
@@ -1872,6 +1983,17 @@
setTimeout(function(){$(tabHeaders[0]).click()},200);
}
+// add analytics tracking events to each result link
+function addResultClickListeners() {
+ $("#searchResults a.gs-title").each(function(index, link) {
+ // When user clicks enter for Google search results, track it
+ $(link).click(function() {
+ _gaq.push(['_trackEvent', 'Google Click', 'clicked: ' + $(this).text(),
+ 'from: ' + $("#search_autocomplete").val()]);
+ });
+ });
+}
+
function getQuery(hash) {
var queryParts = hash.split('=');
diff --git a/tools/droiddoc/templates-sdk/components/masthead.cs b/tools/droiddoc/templates-sdk/components/masthead.cs
index fc16161..ba1d382 100644
--- a/tools/droiddoc/templates-sdk/components/masthead.cs
+++ b/tools/droiddoc/templates-sdk/components/masthead.cs
@@ -1,4 +1,6 @@
<?cs def:custom_masthead() ?>
+<a name="top"></a>
+<?cs if:!devsite ?><?cs # leave out the global header for devsite; it's in devsite template ?>
<!-- Header -->
<div id="header">
<div class="wrap" id="header-wrap">
@@ -13,8 +15,7 @@
</div>
<ul class="nav-x col-9">
<li class="design">
- <a href="<?cs var:toroot ?>design/index.html" <?cs
- if:design ?>class="selected"<?cs /if ?>
+ <a href="<?cs var:toroot ?>design/index.html"
zh-TW-lang="設計"
zh-CN-lang="设计"
ru-lang="Проектирование"
@@ -22,8 +23,7 @@
ja-lang="設計"
es-lang="Diseñar"
>Design</a></li>
- <li class="develop"><a href="<?cs var:toroot ?>develop/index.html" <?cs
- if:training || guide || reference || tools || develop || google ?>class="selected"<?cs /if ?>
+ <li class="develop"><a href="<?cs var:toroot ?>develop/index.html"
zh-TW-lang="開發"
zh-CN-lang="开发"
ru-lang="Разработка"
@@ -31,8 +31,7 @@
ja-lang="開発"
es-lang="Desarrollar"
>Develop</a></li>
- <li class="distribute last"><a href="<?cs var:toroot ?>distribute/index.html" <?cs
- if:distribute ?>class="selected"<?cs /if ?>
+ <li class="distribute last"><a href="<?cs var:toroot ?>distribute/index.html"
zh-TW-lang="發佈"
zh-CN-lang="分发"
ru-lang="Распространение"
@@ -63,11 +62,8 @@
<li><a href="http://source.android.com">Android Open Source Project</a></li>
</ul>
-<?cs ############ TODO: Remove when we're happy with Devsite ############# ?>
- <?cs # Use differenc lang switcher for devsite and gae server ?>
- <?cs if:devsite ?>
- <div class="header">Language</div>
- <?cs elif:android.whichdoc == "online" ?>
+ <?cs # Include language switcher only in online docs ?>
+ <?cs if:android.whichdoc == "online" ?>
<div class="header">Language</div>
<div id="language" class="locales">
<select name="language" onChange="changeLangPref(this.value, true)">
@@ -86,7 +82,7 @@
//-->
</script>
<?cs /if ?>
- <?cs # End of devsite vs. gae version of lang switcher ?>
+ <?cs # End of lang switcher ?>
<br class="clearfix" />
@@ -197,14 +193,12 @@
</div>
-
-<?cs if:training || guide || reference || tools || develop || google ?>
+ <?cs if:training || guide || reference || tools || develop || google ?>
<!-- Secondary x-nav -->
<div id="nav-x">
<div class="wrap">
<ul class="nav-x col-9 develop" style="width:100%">
- <li><a href="<?cs var:toroot ?>training/index.html" <?cs
- if:training ?>class="selected"<?cs /if ?>
+ <li class="training"><a href="<?cs var:toroot ?>training/index.html"
zh-TW-lang="訓練課程"
zh-CN-lang="培训"
ru-lang="Курсы"
@@ -212,8 +206,7 @@
ja-lang="トレーニング"
es-lang="Capacitación"
>Training</a></li>
- <li><a href="<?cs var:toroot ?>guide/components/index.html" <?cs
- if:guide ?>class="selected"<?cs /if ?>
+ <li class="guide"><a href="<?cs var:toroot ?>guide/components/index.html"
zh-TW-lang="API 指南"
zh-CN-lang="API 指南"
ru-lang="Руководства по API"
@@ -221,8 +214,7 @@
ja-lang="API ガイド"
es-lang="Guías de la API"
>API Guides</a></li>
- <li><a href="<?cs var:toroot ?>reference/packages.html" <?cs
- if:reference && !(reference.gcm || reference.gms) ?>class="selected"<?cs /if ?>
+ <li class="reference"><a href="<?cs var:toroot ?>reference/packages.html"
zh-TW-lang="參考資源"
zh-CN-lang="参考"
ru-lang="Справочник"
@@ -230,8 +222,7 @@
ja-lang="リファレンス"
es-lang="Referencia"
>Reference</a></li>
- <li><a href="<?cs var:toroot ?>tools/index.html" <?cs
- if:tools ?>class="selected"<?cs /if ?>
+ <li class="tools"><a href="<?cs var:toroot ?>tools/index.html"
zh-TW-lang="相關工具"
zh-CN-lang="工具"
ru-lang="Инструменты"
@@ -239,8 +230,7 @@
ja-lang="ツール"
es-lang="Herramientas"
>Tools</a></li>
- <li><a href="<?cs var:toroot ?>google/index.html" <?cs
- if:google || reference.gcm || reference.gms?>class="selected"<?cs /if ?>
+ <li class="google"><a href="<?cs var:toroot ?>google/index.html"
>Google Services</a>
</li>
</ul>
@@ -248,6 +238,10 @@
</div>
<!-- /Sendondary x-nav -->
+ <?cs /if ?>
+
<?cs /if ?>
+<?cs # end if/else !devsite ?>
+
<?cs
/def ?>
diff --git a/tools/droiddoc/templates-sdk/docpage.cs b/tools/droiddoc/templates-sdk/docpage.cs
index 3e5c24f..b6d808d 100644
--- a/tools/droiddoc/templates-sdk/docpage.cs
+++ b/tools/droiddoc/templates-sdk/docpage.cs
@@ -9,7 +9,6 @@
elif:distribute ?>distribute<?cs
/if ?><?cs
if:page.trainingcourse ?> trainingcourse<?cs /if ?>" itemscope itemtype="http://schema.org/Article">
-<a name="top"></a>
<?cs include:"header.cs" ?>
<div <?cs if:fullpage
diff --git a/tools/droiddoc/templates-sdk/head_tag.cs b/tools/droiddoc/templates-sdk/head_tag.cs
index 54493b8..6774ca6 100644
--- a/tools/droiddoc/templates-sdk/head_tag.cs
+++ b/tools/droiddoc/templates-sdk/head_tag.cs
@@ -1,4 +1,18 @@
<head>
+<?cs ####### If building devsite, add some meta data needed for when generating the top nav ######### ?>
+<?cs
+ if:devsite ?><?cs
+ if:guide||develop||training||reference||tools||sdk||google
+ ?><meta name="top_category" value="develop" /><?cs
+ elif:google
+ ?><meta name="top_category" value="google" /><?cs
+ elif:reference && !(reference.gms || reference.gcm)
+ ?><meta name="top_category" value="css-fullscreen" /><?cs
+ /if ?>
+ <?cs
+ /if
+?><?cs # END if/else devsite ?>
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?cs if:page.metaDescription ?>
<meta name="Description" content="<?cs var:page.metaDescription ?>">
@@ -24,24 +38,20 @@
<script src="<?cs if:android.whichdoc != 'online' ?>http:<?cs /if ?>//www.google.com/jsapi" type="text/javascript"></script>
<?cs
if:devsite
- ?><script src="//android-dot-devsite.googleplex.com/_static/js/android_3p-bundle.js" type="text/javascript"></script><?cs
+ ?><script src="<?cs var:toroot ?>_static/js/android_3p-bundle.js" type="text/javascript"></script><?cs
else
?><script src="<?cs var:toroot ?>assets/js/android_3p-bundle.js" type="text/javascript"></script><?cs
/if ?>
<script type="text/javascript">
var toRoot = "<?cs var:toroot ?>";
- <?cs if:devsite ?>
- var devsite = true;
- <?cs else ?>
- var devsite = false;
- <?cs /if ?>
+ var devsite = <?cs if:devsite ?>true<?cs else ?>false<?cs /if ?>;
</script>
<script src="<?cs var:toroot ?>assets/js/docs.js" type="text/javascript"></script>
<?cs if:reference.gms || reference.gcm || google?>
-<script src="<?cs var:toroot ?>gms_navtree_data.js" type="text/javascript"></script>
-<script src="<?cs var:toroot ?>gcm_navtree_data.js" type="text/javascript"></script>
-<?cs else ?>
-<script src="<?cs var:toroot ?>navtree_data.js" type="text/javascript"></script>
+<script src="<?cs var:toroot ?>gms_navtree_data.js" async type="text/javascript"></script>
+<script src="<?cs var:toroot ?>gcm_navtree_data.js" async type="text/javascript"></script>
+<?cs elif:reference ?>
+<script src="<?cs var:toroot ?>navtree_data.js" async type="text/javascript"></script>
<?cs /if ?>
<script type="text/javascript">
diff --git a/tools/droiddoc/templates-sdk/sdkpage.cs b/tools/droiddoc/templates-sdk/sdkpage.cs
index decfd26..3ebf697 100644
--- a/tools/droiddoc/templates-sdk/sdkpage.cs
+++ b/tools/droiddoc/templates-sdk/sdkpage.cs
@@ -83,31 +83,58 @@
<th>MD5 Checksum</th>
</tr>
<tr>
- <td>Windows</td>
+ <td>Windows 32-bit</td>
<td>
<a onClick="return onDownload(this)"
- href="http://dl.google.com/android/ndk/<?cs var:ndk.win_download ?>"><?cs var:ndk.win_download ?></a>
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.win32_download ?>"><?cs var:ndk.win32_download ?></a>
</td>
- <td><?cs var:ndk.win_bytes ?> bytes</td>
- <td><?cs var:ndk.win_checksum ?></td>
+ <td><?cs var:ndk.win32_bytes ?> bytes</td>
+ <td><?cs var:ndk.win32_checksum ?></td>
</tr>
<tr>
- <td>Mac OS X (intel)</td>
+ <td>Windows 64-bit</td>
<td>
<a onClick="return onDownload(this)"
- href="http://dl.google.com/android/ndk/<?cs var:ndk.mac_download ?>"><?cs var:ndk.mac_download ?></a>
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.win64_download ?>"><?cs var:ndk.win64_download ?></a>
</td>
- <td><?cs var:ndk.mac_bytes ?> bytes</td>
- <td><?cs var:ndk.mac_checksum ?></td>
+ <td><?cs var:ndk.win64_bytes ?> bytes</td>
+ <td><?cs var:ndk.win64_checksum ?></td>
</tr>
<tr>
- <td>Linux 32/64-bit (x86)</td>
+ <td>Mac OS X 32-bit</td>
<td>
<a onClick="return onDownload(this)"
- href="http://dl.google.com/android/ndk/<?cs var:ndk.linux_download ?>"><?cs var:ndk.linux_download ?></a>
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.mac32_download ?>"><?cs var:ndk.mac32_download ?></a>
</td>
- <td><?cs var:ndk.linux_bytes ?> bytes</td>
- <td><?cs var:ndk.linux_checksum ?></td>
+ <td><?cs var:ndk.mac32_bytes ?> bytes</td>
+ <td><?cs var:ndk.mac32_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Mac OS X 64-bit</td>
+ <td>
+ <a onClick="return onDownload(this)"
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.mac64_download ?>"><?cs var:ndk.mac64_download ?></a>
+ </td>
+ <td><?cs var:ndk.mac64_bytes ?> bytes</td>
+ <td><?cs var:ndk.mac64_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Linux 32-bit (x86)</td>
+ <td>
+ <a onClick="return onDownload(this)"
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.linux32_download ?>"><?cs var:ndk.linux32_download ?></a>
+ </td>
+ <td><?cs var:ndk.linux32_bytes ?> bytes</td>
+ <td><?cs var:ndk.linux32_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Linux 64-bit (x86)</td>
+ <td>
+ <a onClick="return onDownload(this)"
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.linux64_download ?>"><?cs var:ndk.linux64_download ?></a>
+ </td>
+ <td><?cs var:ndk.linux64_bytes ?> bytes</td>
+ <td><?cs var:ndk.linux64_checksum ?></td>
</tr>
</table>
@@ -262,7 +289,7 @@
<th>MD5 Checksum</th>
</tr>
<tr>
- <td rowspan="2">Windows</td>
+ <td rowspan="2">Windows<br>32 & 64-bit</td>
<td>
<a onclick="return onDownload(this)" href="http://dl.google.com/android/<?cs var:sdk.win_download
?>"><?cs var:sdk.win_download ?></a>
@@ -281,7 +308,7 @@
<td><?cs var:sdk.win_installer_checksum ?></td>
</tr>
<tr>
- <td>Mac OS X</td>
+ <td><nobr>Mac OS X</nobr><br>32 & 64-bit</td>
<td>
<a onclick="return onDownload(this)" id="mac-tools" href="http://dl.google.com/android/<?cs
var:sdk.mac_download
@@ -291,7 +318,7 @@
<td><?cs var:sdk.mac_checksum ?></td>
</tr>
<tr>
- <td>Linux</td>
+ <td>Linux<br>32 & 64-bit</td>
<td>
<a onclick="return onDownload(this)" id="linux-tools" href="http://dl.google.com/android/<?cs
var:sdk.linux_download
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 127784d..263ae11 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -117,6 +117,9 @@
# ok if extensions don't exist
pass
+ if "fstab_version" not in d:
+ d["fstab_version"] = "1"
+
try:
data = zip.read("META/imagesizes.txt")
for line in data.split("\n"):
@@ -141,8 +144,9 @@
makeint("cache_size")
makeint("recovery_size")
makeint("boot_size")
+ makeint("fstab_version")
- d["fstab"] = LoadRecoveryFSTab(zip)
+ d["fstab"] = LoadRecoveryFSTab(zip, d["fstab_version"])
d["build.prop"] = LoadBuildProp(zip)
return d
@@ -161,7 +165,7 @@
d[name] = value
return d
-def LoadRecoveryFSTab(zip):
+def LoadRecoveryFSTab(zip, fstab_version):
class Partition(object):
pass
@@ -171,40 +175,76 @@
print "Warning: could not find RECOVERY/RAMDISK/etc/recovery.fstab in %s." % zip
data = ""
- d = {}
- for line in data.split("\n"):
- line = line.strip()
- if not line or line.startswith("#"): continue
- pieces = line.split()
- if not (3 <= len(pieces) <= 4):
- raise ValueError("malformed recovery.fstab line: \"%s\"" % (line,))
+ if fstab_version == 1:
+ d = {}
+ for line in data.split("\n"):
+ line = line.strip()
+ if not line or line.startswith("#"): continue
+ pieces = line.split()
+ if not (3 <= len(pieces) <= 4):
+ raise ValueError("malformed recovery.fstab line: \"%s\"" % (line,))
- p = Partition()
- p.mount_point = pieces[0]
- p.fs_type = pieces[1]
- p.device = pieces[2]
- p.length = 0
- options = None
- if len(pieces) >= 4:
- if pieces[3].startswith("/"):
- p.device2 = pieces[3]
- if len(pieces) >= 5:
- options = pieces[4]
+ p = Partition()
+ p.mount_point = pieces[0]
+ p.fs_type = pieces[1]
+ p.device = pieces[2]
+ p.length = 0
+ options = None
+ if len(pieces) >= 4:
+ if pieces[3].startswith("/"):
+ p.device2 = pieces[3]
+ if len(pieces) >= 5:
+ options = pieces[4]
+ else:
+ p.device2 = None
+ options = pieces[3]
else:
p.device2 = None
- options = pieces[3]
- else:
- p.device2 = None
- if options:
+ if options:
+ options = options.split(",")
+ for i in options:
+ if i.startswith("length="):
+ p.length = int(i[7:])
+ else:
+ print "%s: unknown option \"%s\"" % (p.mount_point, i)
+
+ d[p.mount_point] = p
+
+ elif fstab_version == 2:
+ d = {}
+ for line in data.split("\n"):
+ line = line.strip()
+ if not line or line.startswith("#"): continue
+ pieces = line.split()
+ if len(pieces) != 5:
+ raise ValueError("malformed recovery.fstab line: \"%s\"" % (line,))
+
+ # Ignore entries that are managed by vold
+ options = pieces[4]
+ if "voldmanaged=" in options: continue
+
+ # It's a good line, parse it
+ p = Partition()
+ p.device = pieces[0]
+ p.mount_point = pieces[1]
+ p.fs_type = pieces[2]
+ p.device2 = None
+ p.length = 0
+
options = options.split(",")
for i in options:
if i.startswith("length="):
p.length = int(i[7:])
else:
- print "%s: unknown option \"%s\"" % (p.mount_point, i)
+ # Ignore all unknown options in the unified fstab
+ continue
- d[p.mount_point] = p
+ d[p.mount_point] = p
+
+ else:
+ raise ValueError("Unknown fstab_version: \"%d\"" % (fstab_version,))
+
return d