Revert "Revert "Merge "Resolve merge conflicts of a5f0068 to nyc-dev" into nyc-dev""
This reverts commit bf234fdfba1116cc29e8cc8443d08804843edf94.
diff --git a/tools/droiddoc/templates-sdk/assets/css/default.css b/tools/droiddoc/templates-sdk/assets/css/default.css
index ccaa007..accf7bf 100644
--- a/tools/droiddoc/templates-sdk/assets/css/default.css
+++ b/tools/droiddoc/templates-sdk/assets/css/default.css
@@ -732,7 +732,7 @@
text-align:center;
width: 50%;
}
-
+
.training-nav-top a.prev-page-link {
padding-left: 15px;
text-align: left;
@@ -840,7 +840,7 @@
margin: 0 0 6px;
line-height: 16px;
}
-
+
/* Class colors */
ol.class-list li:nth-child(10n+1) .title {
background: #00bcd4;
@@ -872,7 +872,7 @@
ol.class-list li:nth-child(10n+10) .title {
background: #7e57c2;
}
-
+
@media (max-width: 719px) {
ol.class-list ol,
ol.class-list .description {
@@ -2628,6 +2628,20 @@
margin-bottom:0;
}
+.summary-table {
+ background-color:#e1e4e6;
+ padding:1em;
+ margin-bottom:1.5em;
+}
+.summary-table p {
+ font-size:.98em;
+}
+
+.summary-table h5 {
+ line-height:1em;
+ font-size:.98em;
+}
+
body.about blockquote {
display:block;
float:right;
@@ -3330,7 +3344,7 @@
h4.jd-details-title {
font-size:1.15em;
background-color: #E2E2E2;
- margin:1.5em 0 .6em;
+ margin:4em 0 .6em;
padding:3px 95px 3px 3px; /* room for api-level */
}
body.google h4.jd-details-title {
@@ -6362,9 +6376,13 @@
.dac-button.dac-raised.dac-primary, .landing-secondary, .button {
background-color: #039bef; }
.dac-button.dac-raised.dac-primary:hover, .landing-secondary:hover, .button:hover {
- background-color: #0288d1; color:#fff; }
+ background-color: #0288d1;
+ color:#fff; }
.dac-button.dac-raised.dac-primary:active, .landing-secondary:active, .button:active {
- background-color: #0277bd; }
+ background-color: #0277bd;
+ color:#fff; }
+ .dac-button.dac-raised.dac-primary.disabled, .button.disabled {
+ background-color: #bbb; }
.dac-button.dac-raised.dac-red, .landing-primary {
background-color: #bf3722; }
@@ -7769,6 +7787,20 @@
text-align: center;
}
+/* Android Studio download page */
+section#features {
+ padding-top:0;
+}
+.wrap.feature {
+ margin:80px auto;
+}
+.dac-section-links.feature-more {
+ margin-top:-20px;
+}
+.dac-toggle-content .wrap.feature {
+ margin-top:0;
+}
+
@media (max-width: 719px) {
.dac-hero-figure {
height: 150px;
@@ -7778,6 +7810,17 @@
.dac-hero-figure img {
max-height: 150px;
}
+
+ /* Android Studio download page */
+ .feature .dac-hero-figure,
+ .feature .dac-hero-figure img {
+ height:auto;
+ max-height:none;
+ }
+ .feature .dac-hero-figure img {
+ width:90%;
+ margin:0 auto;
+ }
}
.dac-hero-carousel {
@@ -8856,4 +8899,85 @@
.dac-hero-cta.mprev {
white-space:nowrap;
}
-}
\ No newline at end of file
+}
+
+/** Custom search API styles */
+.dac-custom-search {
+ background: #fff;
+ margin: 0 -10px;
+ padding: 20px 10px;
+ z-index: 1;
+}
+
+.dac-custom-search-section-title {
+ color: #505050;
+}
+
+.dac-custom-search-entry {
+ margin-bottom: 36px;
+ margin-top: 24px;
+}
+
+.dac-custom-search-image {
+ background-size: cover;
+ height: 112px;
+}
+
+@media (max-width: 719px) {
+ .dac-custom-search-image {
+ display: none;
+ }
+}
+
+.dac-custom-search-title {
+ color: #333;
+ font-size: 14px;
+ font-weight: 700;
+ line-height: 24px;
+ margin: 0;
+ padding: 0;
+}
+
+.dac-custom-search-title a {
+ color: inherit;
+}
+
+.dac-custom-search-section {
+ color: #999;
+ font-size: 16px;
+ font-variant: small-caps;
+ font-weight: 700;
+ margin: -5px 0 0 0;
+}
+
+.dac-custom-search-snippet {
+ color: #666;
+ margin: 0;
+}
+
+.dac-custom-search-link {
+ font-weight: 500;
+ word-wrap: break-word;
+ width: 100%;
+}
+
+.dac-custom-search-load-more {
+ background: none;
+ border: none;
+ color: #333;
+ cursor: pointer;
+ display: block;
+ font-size: 14px;
+ font-weight: 700;
+ margin: 75px auto;
+ outline: none;
+ padding: 10px;
+}
+
+.dac-custom-search-load-more:hover {
+ opacity: 0.7;
+}
+
+.dac-custom-search-no-results {
+ color: #999;
+}
diff --git a/tools/droiddoc/templates-sdk/assets/js/docs.js b/tools/droiddoc/templates-sdk/assets/js/docs.js
index d88c0e6..c4a8150 100644
--- a/tools/droiddoc/templates-sdk/assets/js/docs.js
+++ b/tools/droiddoc/templates-sdk/assets/js/docs.js
@@ -985,7 +985,7 @@
}
// get the selected item's offset from its container nav by measuring the item's offset
// relative to the document then subtract the container nav's offset relative to the document
- var selectedOffset = $selected.offset().top - $nav.offset().top;
+ var selectedOffset = $selected.offset().top - $nav.offset().top + 60;
if (selectedOffset > $nav.height() * .8) { // multiply nav height by .8 so we move up the item
// if it's more than 80% down the nav
// scroll the item up by an amount equal to 80% the container nav's height
@@ -1328,7 +1328,7 @@
function changeNavLang(lang) {
if (lang === 'en') { return; }
- var $links = $('a[' + lang + '-lang]');
+ var $links = $("a[" + lang + "-lang],p[" + lang + "-lang]");
$links.each(function(){ // for each link with a translation
var $link = $(this);
// put the desired language from the attribute as the text
@@ -1386,7 +1386,7 @@
$(".toggle-content-text:eq(0)", obj).toggle();
div.removeClass("closed").addClass("open");
$(".toggle-content-img:eq(0)", div).attr("title", "hide").attr("src", toRoot
- + "assets/images/triangle-opened.png");
+ + "assets/images/styles/disclosure_up.png");
} else { // if it's open, close it
toggleMe.slideUp('fast', function() { // Wait until the animation is done before closing arrow
$(".toggle-content-text:eq(0)", obj).toggle();
@@ -1394,7 +1394,7 @@
div.find(".toggle-content").removeClass("open").addClass("closed")
.find(".toggle-content-toggleme").hide();
$(".toggle-content-img", div).attr("title", "show").attr("src", toRoot
- + "assets/images/triangle-closed.png");
+ + "assets/images/styles/disclosure_down.png");
});
}
return false;
@@ -2548,12 +2548,13 @@
function submit_search() {
var query = document.getElementById('search_autocomplete').value;
location.hash = 'q=' + query;
- loadSearchResults();
+ searchControl.query = query;
+ searchControl.init();
+ searchControl.trackSearchRequest(query);
$("#searchResults").slideDown('slow', setStickyTop);
return false;
}
-
function hideResults() {
$("#searchResults").slideUp('fast', setStickyTop);
$("#search-close").addClass("hide");
@@ -2562,119 +2563,248 @@
$("#search_autocomplete").val("").blur();
// reset the ajax search callback to nothing, so results don't appear unless ENTER
- searchControl.setSearchStartingCallback(this, function(control, searcher, query) {});
-
- // forcefully regain key-up event control (previously jacked by search api)
- $("#search_autocomplete").keyup(function(event) {
- return search_changed(event, false, toRoot);
- });
+ searchControl.reset();
return false;
}
-
-
/* ########################################################## */
/* ################ CUSTOM SEARCH ENGINE ################## */
/* ########################################################## */
+var searchControl = null;
+var dacsearch = dacsearch || {};
-var searchControl;
-google.load('search', '1', {"callback" : function() {
- searchControl = new google.search.SearchControl();
- } });
+/**
+ * The custom search engine API.
+ * @constructor
+ */
+dacsearch.CustomSearchEngine = function() {
+ /**
+ * The last response from Google CSE.
+ * @private {Object}
+ */
+ this.resultQuery_ = {};
-function loadSearchResults() {
- document.getElementById("search_autocomplete").style.color = "#000";
+ /** @private {?Element} */
+ this.searchResultEl_ = null;
- searchControl = new google.search.SearchControl();
+ /** @private {?Element} */
+ this.searchInputEl_ = null;
- // use our existing search form and use tabs when multiple searchers are used
- drawOptions = new google.search.DrawOptions();
- drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_TABBED);
- drawOptions.setInput(document.getElementById("search_autocomplete"));
+ /** @private {string} */
+ this.query = '';
+};
- // configure search result options
- searchOptions = new google.search.SearcherOptions();
- searchOptions.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);
+/**
+ * Initializes DAC's Google custom search engine.
+ * @export
+ */
+dacsearch.CustomSearchEngine.prototype.init = function() {
+ this.searchResultEl_ = $('#leftSearchControl');
+ this.searchResultEl_.empty();
+ this.searchInputEl_ = $('#search_autocomplete');
+ this.searchInputEl_.focus().val(this.query);
+ this.getResults_();
+ this.bindEvents_();
+};
- // configure each of the searchers, for each tab
- devSiteSearcher = new google.search.WebSearch();
- devSiteSearcher.setUserDefinedLabel("All");
- devSiteSearcher.setSiteRestriction("001482626316274216503:zu90b7s047u");
- designSearcher = new google.search.WebSearch();
- designSearcher.setUserDefinedLabel("Design");
- designSearcher.setSiteRestriction("http://developer.android.com/design/");
+/**
+ * Binds the keyup event to the search input.
+ * @private
+ */
+dacsearch.CustomSearchEngine.prototype.bindEvents_ = function() {
+ this.searchInputEl_.keyup(this.debounce_(function(e) {
+ var code = e.which;
+ if (code != 13) {
+ this.query = this.searchInputEl_.val();
+ location.hash = 'q=' + encodeURI(this.query);
+ this.searchResultEl_.empty();
+ this.getResults_();
+ }
+ }.bind(this), 250));
+};
- trainingSearcher = new google.search.WebSearch();
- trainingSearcher.setUserDefinedLabel("Training");
- trainingSearcher.setSiteRestriction("http://developer.android.com/training/");
- guidesSearcher = new google.search.WebSearch();
- guidesSearcher.setUserDefinedLabel("Guides");
- guidesSearcher.setSiteRestriction("http://developer.android.com/guide/");
+/**
+ * Resets the search control.
+ */
+dacsearch.CustomSearchEngine.prototype.reset = function() {
+ this.query = '';
+ this.searchInputEl_.off('keyup');
+ this.searchResultEl_.empty();
+ this.updateResultTitle_();
+};
- referenceSearcher = new google.search.WebSearch();
- referenceSearcher.setUserDefinedLabel("Reference");
- referenceSearcher.setSiteRestriction("http://developer.android.com/reference/");
- googleSearcher = new google.search.WebSearch();
- googleSearcher.setUserDefinedLabel("Google Services");
- googleSearcher.setSiteRestriction("http://developer.android.com/google/");
+/**
+ * Updates the search query text at the top of the results.
+ * @private
+ */
+dacsearch.CustomSearchEngine.prototype.updateResultTitle_ = function() {
+ $("#searchTitle").html("Results for <em>" + this.query + "</em>");
+};
- blogSearcher = new google.search.WebSearch();
- blogSearcher.setUserDefinedLabel("Blog");
- blogSearcher.setSiteRestriction("http://android-developers.blogspot.com");
- // add each searcher to the search control
- searchControl.addSearcher(devSiteSearcher, searchOptions);
- searchControl.addSearcher(designSearcher, searchOptions);
- searchControl.addSearcher(trainingSearcher, searchOptions);
- searchControl.addSearcher(guidesSearcher, searchOptions);
- searchControl.addSearcher(referenceSearcher, searchOptions);
- searchControl.addSearcher(googleSearcher, searchOptions);
- searchControl.addSearcher(blogSearcher, searchOptions);
+/**
+ * Makes the CSE api call and gets the results.
+ * @param {number=} opt_start The optional start index.
+ * @private
+ */
+dacsearch.CustomSearchEngine.prototype.getResults_ = function(opt_start) {
+ var lang = getLangPref();
+ // Fix zh-cn to be zh-CN.
+ lang = lang.replace(/-\w+/, function(m) { return m.toUpperCase(); });
+ var cseUrl = 'https://content.googleapis.com/customsearch/v1?';
+ var searchParams = {
+ cx: '000521750095050289010:zpcpi1ea4s8',
+ key: 'AIzaSyCFhbGnjW06dYwvRCU8h_zjdpS4PYYbEe8',
+ q: this.query,
+ start: opt_start || 1,
+ num: 6,
+ hl: lang,
+ fields: 'queries,items(pagemap,link,title,htmlSnippet,formattedUrl)'
+ };
- // configure result options
- searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);
- searchControl.setLinkTarget(google.search.Search.LINK_TARGET_SELF);
- searchControl.setTimeoutInterval(google.search.SearchControl.TIMEOUT_SHORT);
- searchControl.setNoResultsString(google.search.SearchControl.NO_RESULTS_DEFAULT_STRING);
+ $.get(cseUrl + $.param(searchParams), function(data) {
+ this.resultQuery_ = data;
+ this.renderResults_(data);
+ this.updateResultTitle_(this.query);
+ }.bind(this));
+};
- // upon ajax search, refresh the url and search title
- searchControl.setSearchStartingCallback(this, function(control, searcher, query) {
- updateResultTitle(query);
- var query = document.getElementById('search_autocomplete').value;
- location.hash = 'q=' + query;
- });
- // once search results load, set up click listeners
- searchControl.setSearchCompleteCallback(this, function(control, searcher, query) {
- addResultClickListeners();
- });
+/**
+ * Renders the results.
+ * @private
+ */
+dacsearch.CustomSearchEngine.prototype.renderResults_ = function(results) {
+ var el = this.searchResultEl_;
- // draw the search results box
- searchControl.draw(document.getElementById("leftSearchControl"), drawOptions);
+ if (!results.items) {
+ el.append($('<div>').text('No results'));
+ return;
+ }
- // get query and execute the search
- searchControl.execute(decodeURI(getQuery(location.hash)));
+ for (var i = 0; i < results.items.length; i++) {
+ var item = results.items[i];
+ var hasImage = item.pagemap && item.pagemap.cse_thumbnail;
+ var sectionMatch = item.link.match(/developer\.android\.com\/(\w*)/);
+ var section = (sectionMatch && sectionMatch[1]) || 'blog';
- document.getElementById("search_autocomplete").focus();
- addTabListeners();
-}
-// End of loadSearchResults
+ var entry = $('<div>').addClass('dac-custom-search-entry cols');
+
+ if (hasImage) {
+ var image = item.pagemap.cse_thumbnail[0];
+ entry.append($('<div>').addClass('col-1of6')
+ .append($('<div>').addClass('dac-custom-search-image').css(
+ 'background-image', 'url(' + image.src + ')')));
+ }
+
+ var linkTitleEl = $('<a>').text(item.title).attr('href', item.link);
+ linkTitleEl.click(function(e) {
+ ga('send', 'event', 'Google Custom Search',
+ 'clicked: ' + linkTitleEl.attr('href'),
+ 'query: ' + $("#search_autocomplete").val().toLowerCase());
+ });
+
+ var linkUrlEl = $('<a>').addClass('dac-custom-search-link').text(
+ item.formattedUrl).attr('href', item.link);
+ linkUrlEl.click(function(e) {
+ ga('send', 'event', 'Google Custom Search',
+ 'clicked: ' + linkUrlEl.attr('href'),
+ 'query: ' + $("#search_autocomplete").val().toLowerCase());
+ });
+
+
+ entry.append($('<div>').addClass(hasImage ? 'col-5of6' : 'col-6of6')
+ .append($('<p>').addClass('dac-custom-search-section').text(section))
+ .append(
+ linkTitleEl.wrap('<h2>').parent().addClass('dac-custom-search-title'))
+ .append($('<p>').addClass('dac-custom-search-snippet')
+ .html(item.htmlSnippet.replace(/<br>/g, ''))).append(linkUrlEl));
+
+ el.append(entry);
+ }
+
+ if ($('#dac-custom-search-load-more')) {
+ $('#dac-custom-search-load-more').remove();
+ }
+
+ if (results.queries.nextPage) {
+ var loadMoreButton = $('<button id="dac-custom-search-load-more">')
+ .addClass('dac-custom-search-load-more')
+ .text('Load more')
+ .click(function() {
+ this.loadMoreResults_();
+ }.bind(this));
+
+ el.append(loadMoreButton);
+ }
+};
+
+
+/**
+ * Loads more results.
+ * @private
+ */
+dacsearch.CustomSearchEngine.prototype.loadMoreResults_ = function() {
+ this.query = this.resultQuery_.queries.request[0].searchTerms;
+ var start = this.resultQuery_.queries.nextPage[0].startIndex;
+ var loadMoreButton = this.searchResultEl_.find(
+ '#dac-custom-search-load-more');
+ loadMoreButton.text('Loading more...');
+ this.getResults_(start);
+ this.trackSearchRequest(this.query + ' startIndex = ' + start);
+};
+
+
+/**
+ * Tracks a search request.
+ * @param {string} query The query for the request,
+ * includes start index if loading more results.
+ */
+dacsearch.CustomSearchEngine.prototype.trackSearchRequest = function(query) {
+ ga('send', 'event', 'Google Custom Search Submit', 'submit search query',
+ 'query: ' + query);
+};
+
+
+/**
+ * Returns a function, that, as long as it continues to be invoked, will not
+ * be triggered. The function will be called after it stops being called for
+ * N milliseconds.
+ * @param {Function} func The function to debounce.
+ * @param {number} wait The number of milliseconds to wait before calling the function.
+ * @private
+ */
+dacsearch.CustomSearchEngine.prototype.debounce_ = function(func, wait) {
+ var timeout;
+ return function() {
+ var context = this, args = arguments;
+ var later = function() {
+ timeout = null;
+ func.apply(context, args);
+ };
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ };
+};
google.setOnLoadCallback(function(){
+ searchControl = new dacsearch.CustomSearchEngine();
if (location.hash.indexOf("q=") == -1) {
// if there's no query in the url, don't search and make sure results are hidden
$('#searchResults').hide();
return;
} else {
// first time loading search results for this page
+ searchControl.query = decodeURI(location.hash.split('q=')[1]);
+ searchControl.init();
+ searchControl.trackSearchRequest(searchControl.query);
$('#searchResults').slideDown('slow', setStickyTop);
$("#search-close").removeClass("hide");
- loadSearchResults();
}
}, true);
@@ -2703,7 +2833,7 @@
// If the hash isn't a search query or there's an error in the query,
// then adjust the scroll position to account for sticky header, then exit.
- if ((location.hash.indexOf("q=") == -1) || (query == "undefined")) {
+ if ((location.hash.indexOf("q=") == -1) || (searchControl.query == "undefined")) {
// If the results pane is open, close it.
if (!$("#searchResults").is(":hidden")) {
hideResults();
@@ -2712,65 +2842,11 @@
return;
}
- // Otherwise, we have a search to do
- var query = decodeURI(getQuery(location.hash));
- searchControl.execute(query);
$('#searchResults').slideDown('slow', setStickyTop);
$("#search_autocomplete").focus();
$("#search-close").removeClass("hide");
-
- updateResultTitle(query);
});
-function updateResultTitle(query) {
- $("#searchTitle").html("Results for <em>" + escapeHTML(query) + "</em>");
-}
-
-// forcefully regain key-up event control (previously jacked by search api)
-$("#search_autocomplete").keyup(function(event) {
- return search_changed(event, false, toRoot);
-});
-
-// add event listeners to each tab so we can track the browser history
-function addTabListeners() {
- var tabHeaders = $(".gsc-tabHeader");
- for (var i = 0; i < tabHeaders.length; i++) {
- $(tabHeaders[i]).attr("id",i).click(function() {
- /*
- // make a copy of the page numbers for the search left pane
- setTimeout(function() {
- // remove any residual page numbers
- $('#searchResults .gsc-tabsArea .gsc-cursor-box.gs-bidi-start-align').remove();
- // move the page numbers to the left position; make a clone,
- // because the element is drawn to the DOM only once
- // and because we're going to remove it (previous line),
- // we need it to be available to move again as the user navigates
- $('#searchResults .gsc-webResult .gsc-cursor-box.gs-bidi-start-align:visible')
- .clone().appendTo('#searchResults .gsc-tabsArea');
- }, 200);
- */
- });
- }
- 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() {
- ga('send', 'event', 'Google Click', 'clicked: ' + $(this).attr('href'),
- 'query: ' + $("#search_autocomplete").val().toLowerCase());
- });
- });
-}
-
-
-function getQuery(hash) {
- var queryParts = hash.split('=');
- return queryParts[1];
-}
-
/* returns the given string with all HTML brackets converted to entities
TODO: move this to the site's JS library */
function escapeHTML(string) {
@@ -3371,13 +3447,13 @@
if ( (expand == null && a.hasClass("closed")) || expand ) {
list.style.display = "none";
summary.style.display = "block";
- trigger.src = toRoot + "assets/images/triangle-opened.png";
+ trigger.src = toRoot + "assets/images/styles/disclosure_up.png";
a.removeClass("closed");
a.addClass("opened");
} else if ( (expand == null && a.hasClass("opened")) || (expand == false) ) {
list.style.display = "block";
summary.style.display = "none";
- trigger.src = toRoot + "assets/images/triangle-closed.png";
+ trigger.src = toRoot + "assets/images/styles/disclosure_down.png";
a.removeClass("opened");
a.addClass("closed");
}
@@ -3747,7 +3823,7 @@
return $el;
}
-
+
function createResponsiveFlowColumn(cardSize) {
var cardWidth = parseInt(cardSize.match(/(\d+)/)[1], 10);
var column = $('<div>').addClass('col-' + (cardWidth / 3) + 'of6');
@@ -3788,7 +3864,7 @@
var cardSize = cardSizes[j++ % cardSizes.length];
cardSize = cardSize.replace(/^\s+|\s+$/,'');
-
+
var column = createResponsiveFlowColumn(cardSize).appendTo(cardParent);
// A stack has a third dimension which is the number of stacked items
@@ -4868,6 +4944,11 @@
this.el.removeClass('dac-active');
$('body').removeClass('dac-modal-open');
this.isOpen = false;
+ // When closing the modal for Android Studio downloads, reload the page
+ // because otherwise we might get stuck with post-download dialog state
+ if ($("[data-modal='studio_tos']").length) {
+ location.reload();
+ }
};
Modal.prototype.open_ = function() {
diff --git a/tools/droiddoc/templates-sdk/components/masthead.cs b/tools/droiddoc/templates-sdk/components/masthead.cs
index cc00baa..e17612d 100644
--- a/tools/droiddoc/templates-sdk/components/masthead.cs
+++ b/tools/droiddoc/templates-sdk/components/masthead.cs
@@ -252,8 +252,7 @@
<?cs if:android.hasSamples ?>
<li class="dac-nav-item samples">
<a class="dac-nav-link" href="<?cs var:toroot ?>samples/index.html">Samples</a>
- </li>
- <?cs /if ?>
+ </li><?cs /if ?>
<li class="dac-nav-item preview">
<a class="dac-nav-link" href="<?cs var:toroot ?>preview/index.html">Preview</a>
</li>
diff --git a/tools/droiddoc/templates-sdk/customizations.cs b/tools/droiddoc/templates-sdk/customizations.cs
index d52f0e4..4cf5abb 100644
--- a/tools/droiddoc/templates-sdk/customizations.cs
+++ b/tools/droiddoc/templates-sdk/customizations.cs
@@ -10,7 +10,7 @@
<div id="body-content">
<div>
<?cs /def ?>
-<?cs
+<?cs
def:sdk_nav() ?>
<div class="wrap clearfix" id="body-content"><div class="cols">
<div class="col-4 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
@@ -297,7 +297,7 @@
</div>
<script type="text/javascript">
showGoogleRefTree();
-
+
</script>
</div> <!-- end side-nav -->
<script>
@@ -528,7 +528,7 @@
call:fullpage() ?><?cs
elif:nonavpage ?><?cs
call:no_nav() ?><?cs
- elif:guide || reference || samples || downloads ?><?cs
+ elif:guide || reference || samples || downloads ?><?cs
call:ndk_nav() ?><?cs
else ?><?cs
call:default_left_nav() ?> <?cs
diff --git a/tools/droiddoc/templates-sdk/designpage.cs b/tools/droiddoc/templates-sdk/designpage.cs
index 4a523ce..d9c2681 100644
--- a/tools/droiddoc/templates-sdk/designpage.cs
+++ b/tools/droiddoc/templates-sdk/designpage.cs
@@ -9,10 +9,10 @@
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
<link rel="stylesheet" href="<?cs var:toroot ?>assets/yui-3.3.0-reset-min.css">
- <link rel="stylesheet" href="<?cs var:toroot ?>assets/design/default.css">
+ <link rel="stylesheet" href="<?cs var:toroot ?>assets/design/default.css?v=19">
<script src="<?cs var:toroot ?>assets/jquery-1.6.2.min.js"></script>
<script>var SITE_ROOT = '<?cs var:toroot ?>design';</script>
- <script src="<?cs var:toroot ?>assets/design/default.js"></script>
+ <script src="<?cs var:toroot ?>assets/design/default.js?v=19"></script>
</head>
<body class="gc-documentation
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
diff --git a/tools/droiddoc/templates-sdk/docpage.cs b/tools/droiddoc/templates-sdk/docpage.cs
index 668105b..d41adaa 100644
--- a/tools/droiddoc/templates-sdk/docpage.cs
+++ b/tools/droiddoc/templates-sdk/docpage.cs
@@ -193,11 +193,11 @@
</div><!-- end doc-content -->
<?cs include:"trailer.cs" ?>
- <script src="https://developer.android.com/ytblogger_lists_unified.js" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_lists_unified.js?v=15" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_extras.js?v=15" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_collections.js?v=15" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_tag_helpers.js?v=15" type="text/javascript"></script>
+ <script src="https://developer.android.com/ytblogger_lists_unified.js?v=19" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_lists_unified.js?v=19" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_extras.js?v=19" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_collections.js?v=19" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_tag_helpers.js?v=19" type="text/javascript"></script>
</body>
</html>
diff --git a/tools/droiddoc/templates-sdk/footer.cs b/tools/droiddoc/templates-sdk/footer.cs
index a0900f2..095c7fd 100644
--- a/tools/droiddoc/templates-sdk/footer.cs
+++ b/tools/droiddoc/templates-sdk/footer.cs
@@ -44,10 +44,12 @@
<select name="language" onchange="changeLangPref(this.value, true)">
<option value="en" selected="selected">English</option>
<option value="es">Español</option>
+ <option value="in">Bahasa Indonesia</option>
<option value="ja">日本語</option>
<option value="ko">한국어</option>
<option value="pt-br">Português Brasileiro</option>
<option value="ru">Русский</option>
+ <option value="vi">tiếng Việt</option>
<option value="zh-cn">中文(简体)</option>
<option value="zh-tw">中文(繁體)</option>
</select>
diff --git a/tools/droiddoc/templates-sdk/head_tag.cs b/tools/droiddoc/templates-sdk/head_tag.cs
index c668203..1dbb3c3 100644
--- a/tools/droiddoc/templates-sdk/head_tag.cs
+++ b/tools/droiddoc/templates-sdk/head_tag.cs
@@ -22,6 +22,17 @@
<meta name="Description" content="<?cs var:page.metaDescription ?>"><?cs
/if ?>
<link rel="shortcut icon" type="image/x-icon" href="<?cs var:toroot ?>favicon.ico" />
+<link rel="alternate" href="http://developer.android.com/<?cs var:path.canonical ?>" hreflang="en" />
+<link rel="alternate" href="http://developer.android.com/intl/es/<?cs var:path.canonical ?>" hreflang="es" />
+<link rel="alternate" href="http://developer.android.com/intl/id/<?cs var:path.canonical ?>" hreflang="id" />
+<link rel="alternate" href="http://developer.android.com/intl/ja/<?cs var:path.canonical ?>" hreflang="ja" />
+<link rel="alternate" href="http://developer.android.com/intl/ko/<?cs var:path.canonical ?>" hreflang="ko" />
+<link rel="alternate" href="http://developer.android.com/intl/pt-br/<?cs var:path.canonical ?>" hreflang="pt-br" />
+<link rel="alternate" href="http://developer.android.com/intl/ru/<?cs var:path.canonical ?>" hreflang="ru" />
+<link rel="alternate" href="http://developer.android.com/intl/vi/<?cs var:path.canonical ?>" hreflang="vi" />
+<link rel="alternate" href="http://developer.android.com/intl/zh-cn/<?cs var:path.canonical ?>" hreflang="zh-cn" />
+<link rel="alternate" href="http://developer.android.com/intl/zh-tw/<?cs var:path.canonical ?>" hreflang="zh-tw" />
+
<title><?cs
if:page.title ?><?cs
var:page.title ?> | <?cs
@@ -36,12 +47,12 @@
if:android.whichdoc != 'online' ?>https:<?cs
/if ?>//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold"
title="roboto">
-<?cs
+<?cs
if:ndk ?><link rel="stylesheet" href="<?cs
if:android.whichdoc != 'online' ?>https:<?cs
/if ?>//fonts.googleapis.com/css?family=Roboto+Mono:400,500,700" title="roboto-mono" type="text/css"><?cs
/if ?>
-<link href="<?cs var:toroot ?>assets/css/default.css?v=7" rel="stylesheet" type="text/css">
+<link href="<?cs var:toroot ?>assets/css/default.css?v=19" rel="stylesheet" type="text/css">
<?cs if:reference && !(reference.gms || reference.gcm || preview) ?>
<!-- FULLSCREEN STYLESHEET -->
@@ -64,8 +75,9 @@
var toRoot = "<?cs var:toroot ?>";
var metaTags = [<?cs var:meta.tags ?>];
var devsite = <?cs if:devsite ?>true<?cs else ?>false<?cs /if ?>;
+ var useUpdatedTemplates = <?cs if:useUpdatedTemplates ?>true<?cs else ?>false<?cs /if ?>;
</script>
-<script src="<?cs var:toroot ?>assets/js/docs.js?v=6" type="text/javascript"></script>
+<script src="<?cs var:toroot ?>assets/js/docs.js?v=19" type="text/javascript"></script>
<?cs if:helpoutsWidget ?>
<script type="text/javascript" src="https://helpouts.google.com/ps/res/embed.js" defer async
diff --git a/tools/droiddoc/templates-sdk/sdkpage.cs b/tools/droiddoc/templates-sdk/sdkpage.cs
index 401f183..d4b0af2 100644
--- a/tools/droiddoc/templates-sdk/sdkpage.cs
+++ b/tools/droiddoc/templates-sdk/sdkpage.cs
@@ -1,5 +1,6 @@
<?cs include:"doctype.cs" ?>
<?cs include:"macros.cs" ?>
+<?cs include:"../../../../frameworks/base/docs/html/sdk/sdk_vars.cs" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs if:sdk.redirect ?>
<head>
@@ -80,20 +81,20 @@
<th>Platform</th>
<th>Package</th>
<th style="white-space:nowrap">Size (Bytes)</th>
- <th>MD5 Checksum</th>
+ <th>SHA1 Checksum</th>
</tr>
<tr>
<td>Windows 32-bit</td>
<td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.win32_download ?>"><?cs var:ndk.win32_download ?></a>
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
+ href="//dl.google.com/android/repository/<?cs var:ndk.win32_download ?>"><?cs var:ndk.win32_download ?></a>
</td>
<td><?cs var:ndk.win32_bytes ?></td>
<td><?cs var:ndk.win32_checksum ?></td>
</tr>
<!-- <tr>
<td>
- <a onClick="return onDownload(this)"
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
href="//dl.google.com/android/ndk/<?cs var:ndk.win32.legacy_download ?>"><?cs var:ndk.win32.legacy_download ?></a>
</td>
<td><?cs var:ndk.win32.legacy_bytes ?></td>
@@ -102,16 +103,16 @@
<tr>
<td>Windows 64-bit</td>
<td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.win64_download ?>"><?cs var:ndk.win64_download ?></a>
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
+ href="//dl.google.com/android/repository/<?cs var:ndk.win64_download ?>"><?cs var:ndk.win64_download ?></a>
</td>
<td><?cs var:ndk.win64_bytes ?></td>
<td><?cs var:ndk.win64_checksum ?></td>
</tr>
<!-- <tr>
<td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.win64.legacy_download ?>"><?cs var:ndk.win64.legacy_download ?></a>
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
+ href="//dl.google.com/android/repository/<?cs var:ndk.win64.legacy_download ?>"><?cs var:ndk.win64.legacy_download ?></a>
</td>
<td><?cs var:ndk.win64.legacy_bytes ?></td>
<td><?cs var:ndk.win64.legacy_checksum ?></td>
@@ -120,8 +121,8 @@
<tr>
<td>Mac OS X 32-bit</td>
<td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.mac32_download ?>"><?cs var:ndk.mac32_download ?></a>
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
+ href="//dl.google.com/android/repository/<?cs var:ndk.mac32_download ?>"><?cs var:ndk.mac32_download ?></a>
</td>
<td><?cs var:ndk.mac32_bytes ?></td>
<td><?cs var:ndk.mac32_checksum ?></td>
@@ -129,41 +130,32 @@
<!-- (this item is deprecated)
<tr>
<td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.mac32.legacy_download ?>"><?cs var:ndk.mac32.legacy_download ?></a>
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
+ href="//dl.google.com/android/repository/<?cs var:ndk.mac32.legacy_download ?>"><?cs var:ndk.mac32.legacy_download ?></a>
</td>
<td><?cs var:ndk.mac32.legacy_bytes ?></td>
<td><?cs var:ndk.mac32.legacy_checksum ?></td>
</tr> -->
<td>Mac OS X 64-bit</td>
<td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.mac64_download ?>"><?cs var:ndk.mac64_download ?></a>
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
+ href="//dl.google.com/android/repository/<?cs var:ndk.mac64_download ?>"><?cs var:ndk.mac64_download ?></a>
</td>
<td><?cs var:ndk.mac64_bytes ?></td>
<td><?cs var:ndk.mac64_checksum ?></td>
</tr>
<!-- <tr>
<td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.mac64.legacy_download ?>"><?cs var:ndk.mac64.legacy_download ?></a>
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
+ href="//dl.google.com/android/repository/<?cs var:ndk.mac64.legacy_download ?>"><?cs var:ndk.mac64.legacy_download ?></a>
</td>
<td><?cs var:ndk.mac64.legacy_bytes ?></td>
<td><?cs var:ndk.mac64.legacy_checksum ?></td>
</tr> -->
- <tr>
- <td>Linux 32-bit (x86)</td>
- <td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.linux32_download ?>"><?cs var:ndk.linux32_download ?></a>
- </td>
- <td><?cs var:ndk.linux32_bytes ?></td>
- <td><?cs var:ndk.linux32_checksum ?></td>
- </tr>
<!-- <tr>
<td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.linux32.legacy_download ?>"><?cs var:ndk.linux32.legacy_download ?></a>
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
+ href="//dl.google.com/android/repository/<?cs var:ndk.linux32.legacy_download ?>"><?cs var:ndk.linux32.legacy_download ?></a>
</td>
<td><?cs var:ndk.linux32.legacy_bytes ?></td>
<td><?cs var:ndk.linux32.legacy_checksum ?></td>
@@ -171,16 +163,16 @@
<tr>
<td>Linux 64-bit (x86)</td>
<td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.linux64_download ?>"><?cs var:ndk.linux64_download ?></a>
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
+ href="//dl.google.com/android/repository/<?cs var:ndk.linux64_download ?>"><?cs var:ndk.linux64_download ?></a>
</td>
<td><?cs var:ndk.linux64_bytes ?></td>
<td><?cs var:ndk.linux64_checksum ?></td>
</tr>
<!-- <tr>
<td>
- <a onClick="return onDownload(this)"
- href="//dl.google.com/android/ndk/<?cs var:ndk.linux64.legacy_download ?>"><?cs var:ndk.linux64.legacy_download ?></a>
+ <a onClick="return onDownload(this)" data-modal-toggle="ndk_tos"
+ href="//dl.google.com/android/repository/<?cs var:ndk.linux64.legacy_download ?>"><?cs var:ndk.linux64.legacy_download ?></a>
</td>
<td><?cs var:ndk.linux64.legacy_bytes ?></td>
<td><?cs var:ndk.linux64.legacy_checksum ?></td>
@@ -192,16 +184,13 @@
<?cs call:tag_list(root.descr) ?>
-
+<?cs ######## The NDK version of the download script ######### ?>
<script>
function onDownload(link) {
$("#downloadForRealz").html("Download " + $(link).text());
$("#downloadForRealz").attr('href',$(link).attr('href'));
- $("#tos").fadeIn('slow');
-
- location.hash = "download";
return false;
}
@@ -214,25 +203,28 @@
}
}
- function onDownloadNdkForRealz(link) {
+
+ function onDownloadForRealz(link) {
if ($("input#agree").is(':checked')) {
- $("#tos").fadeOut('slow');
-
- $('html, body').animate({
- scrollTop: $("#Installing").offset().top
- }, 800, function() {
- $("#Installing").click();
+ $("div.sdk-terms").slideUp();
+ $("h2#tos-header").text('Now downloading...');
+ $(".sdk-terms-intro").text('Your download is in progress.');
+ $("#sdk-terms-form").fadeOut('slow', function() {
+ setTimeout(function() {
+ // close the dialog
+ $('#ndk_tos').trigger('modal-close');
+ // reload to refresh the tos or optionally forward the user
+ location.reload();
+ }, 3000);
});
-
+ ga('send', 'event', 'SDK', 'NDK tools', $("#downloadForRealz").html());
return true;
} else {
- $("label#agreeLabel").parent().stop().animate({color: "#258AAF"}, 200,
- function() {$("label#agreeLabel").parent().stop().animate({color: "#222"}, 200)}
- );
return false;
}
}
+
$(window).hashchange( function(){
if (location.hash == "") {
location.reload();
@@ -264,153 +256,173 @@
<?cs call:tag_list(root.descr) ?>
+<section id="downloads" class="dac-section dac-small">
+<div class="wrap">
+
+<h2 class="norule">Start using Android Studio today</h2>
+
+<p>Android Studio includes all the tools you need to build apps for Android.</p>
+
+<div style="float:left;margin-right:40px;width:auto;">
+<p>
+ <a class="landing-button green download-bundle-button"
+ data-modal-toggle="studio_tos">Download Android Studio 2.0<br>
+ <span class="small"></span></a>
+</p>
+</div>
+
+<div style="float:left;width:auto;margin-bottom:40px">
+<ul class="nolist" style="text-transform: uppercase;margin:8px 0">
+<li>Version: <?cs var:studio.version ?></li>
+<li>Release date: <?cs var:studio.release.date ?></li>
+</ul>
+</div>
-<div class="pax col-13 online" style="margin:0;">
-
-<h3>SDK Tools Only</h3>
-
-<p>If you prefer to use a different IDE or run the tools from the
-command line or with build scripts, you can instead download the stand-alone Android SDK Tools.
-These packages provide the basic SDK tools for app development, without an IDE.
-Also see the <a href="<?cs var:toroot ?>tools/sdk/tools-notes.html">SDK tools release notes</a>.</p>
+<h4 style="clear:left;margin-top:40px">Select a different platform</h4>
<table class="download">
<tr>
<th>Platform</th>
- <th>Package</th>
+ <th>Android Studio package</th>
<th>Size</th>
- <th>SHA-1 Checksum</th>
+ <th>SHA-1 checksum</th>
</tr>
<tr>
- <td rowspan="2">Windows</td>
- <td>
- <a onclick="return onDownload(this)" id="win-tools" href="//dl.google.com/android/<?cs
-var:sdk.win_installer
-?>"><?cs var:sdk.win_installer ?></a> (Recommended)
- </td>
- <td><?cs var:sdk.win_installer_bytes ?> bytes</td>
- <td><?cs var:sdk.win_installer_checksum ?></td>
- </tr>
- <tr>
- <!-- blank TD from Windows rowspan -->
- <td>
- <a onclick="return onDownload(this)" href="//dl.google.com/android/<?cs var:sdk.win_download
-?>"><?cs var:sdk.win_download ?></a>
- </td>
- <td><?cs var:sdk.win_bytes ?> bytes</td>
- <td><?cs var:sdk.win_checksum ?></td>
- </tr>
- <tr>
- <td><nobr>Mac OS X</nobr></td>
- <td>
- <a onclick="return onDownload(this)" id="mac-tools" href="//dl.google.com/android/<?cs
-var:sdk.mac_download
-?>"><?cs var:sdk.mac_download ?></a>
- </td>
- <td><?cs var:sdk.mac_bytes ?> bytes</td>
- <td><?cs var:sdk.mac_checksum ?></td>
- </tr>
- <tr>
- <td>Linux</td>
- <td>
- <a onclick="return onDownload(this)" id="linux-tools" href="//dl.google.com/android/<?cs
-var:sdk.linux_download
-?>"><?cs var:sdk.linux_download ?></a>
- </td>
- <td><?cs var:sdk.linux_bytes ?> bytes</td>
- <td><?cs var:sdk.linux_checksum ?></td>
- </tr>
- </table>
-
-
-
-<h3>All Android Studio Packages</h3>
-
-<p>Select a specific Android Studio package for your platform. Also see the
-<a href="<?cs var:toroot ?>tools/revisions/studio.html">Android Studio release notes</a>.</p>
-
- <table class="download">
- <tr>
- <th>Platform</th>
- <th>Package</th>
- <th>Size</th>
- <th>SHA-1 Checksum</th>
- </tr>
-
- <tr>
<td rowspan="3">Windows</td>
<td>
- <a onclick="return onDownload(this,false,true)" id="win-bundle"
- href="https://dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.win_bundle_exe_download ?>"
- ><?cs var:studio.win_bundle_exe_download ?></a><br>(Recommended)
+ <a onclick="return onDownload(this,false,true)" id="win-bundle" data-modal-toggle="studio_tos"
+ href="//dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.win_bundle_exe_download ?>"
+ ><?cs var:studio.win_bundle_exe_download ?></a><br>
+ Includes Windows installer (recommended)
</td>
- <td><?cs var:studio.win_bundle_exe_bytes ?> bytes</td>
+ <td id="win-bundle-size"><?cs call:size_in_mb(studio.win_bundle_exe_bytes) ?> MB
+ <br>(<?cs var:studio.win_bundle_exe_bytes ?> bytes)</td>
<td><?cs var:studio.win_bundle_exe_checksum ?></td>
</tr>
-
<tr>
<!-- blank TD from Windows rowspan -->
<td>
- <a onclick="return onDownload(this,false,true)" id="win-bundle-notools"
- href="https://dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.win_notools_exe_download ?>"
- ><?cs var:studio.win_notools_exe_download ?></a><br>(No SDK tools included)
+ <a onclick="return onDownload(this,false,true)" id="win-bundle-zip" data-modal-toggle="studio_tos"
+ href="//dl.google.com/dl/android/studio/ide-zips/<?cs var:studio.version ?>/<?cs var:studio.win_bundle_download ?>"
+ ><?cs var:studio.win_bundle_download ?></a><br>
+ No Windows installer
</td>
- <td><?cs var:studio.win_notools_exe_bytes ?> bytes</td>
- <td><?cs var:studio.win_notools_exe_checksum ?></td>
- </tr>
-
- <tr>
- <!-- blank TD from Windows rowspan -->
- <td>
- <a onclick="return onDownload(this,false,true)" id="win-bundle-zip"
- href="https://dl.google.com/dl/android/studio/ide-zips/<?cs var:studio.version ?>/<?cs var:studio.win_bundle_download ?>"
- ><?cs var:studio.win_bundle_download ?></a>
- </td>
- <td><?cs var:studio.win_bundle_bytes ?> bytes</td>
+ <td><?cs call:size_in_mb(studio.win_bundle_bytes) ?> MB
+ <br>(<?cs var:studio.win_bundle_bytes ?> bytes)</td>
<td><?cs var:studio.win_bundle_checksum ?></td>
</tr>
-
+ <tr>
+ <!-- blank TD from Windows rowspan -->
+ <td>
+ <a onclick="return onDownload(this,false,true)" id="win-bundle-notools" data-modal-toggle="studio_tos"
+ href="https://dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.win_notools_exe_download ?>"
+ ><?cs var:studio.win_notools_exe_download ?></a><br>
+ Includes Windows installer but no SDK tools
+ </td>
+ <td><?cs call:size_in_mb(studio.win_notools_exe_bytes) ?> MB
+ <br>(<?cs var:studio.win_notools_exe_bytes ?> bytes)</td>
+ <td><?cs var:studio.win_notools_exe_checksum ?></td>
+ </tr>
<tr>
<td><nobr>Mac OS X</nobr></td>
<td>
- <a onclick="return onDownload(this,false,true)" id="mac-bundle"
- href="https://dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.mac_bundle_download ?>"
+ <a onclick="return onDownload(this,false,true)" id="mac-bundle" data-modal-toggle="studio_tos"
+ href="//dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.mac_bundle_download ?>"
><?cs var:studio.mac_bundle_download ?></a>
</td>
- <td><?cs var:studio.mac_bundle_bytes ?> bytes</td>
+ <td id="mac-bundle-size"><?cs call:size_in_mb(studio.mac_bundle_bytes) ?> MB
+ <br>(<?cs var:studio.mac_bundle_bytes ?> bytes)</td>
<td><?cs var:studio.mac_bundle_checksum ?></td>
</tr>
-
<tr>
<td>Linux</td>
<td>
- <a onclick="return onDownload(this,false,true)" id="linux-bundle"
- href="https://dl.google.com/dl/android/studio/ide-zips/<?cs var:studio.version ?>/<?cs var:studio.linux_bundle_download ?>"
+ <a onclick="return onDownload(this,false,true)" id="linux-bundle" data-modal-toggle="studio_tos"
+ href="//dl.google.com/dl/android/studio/ide-zips/<?cs var:studio.version ?>/<?cs var:studio.linux_bundle_download ?>"
><?cs var:studio.linux_bundle_download ?></a>
</td>
- <td><?cs var:studio.linux_bundle_bytes ?> bytes</td>
+ <td id="linux-bundle-size"><?cs call:size_in_mb(studio.linux_bundle_bytes) ?> MB
+ <br>(<?cs var:studio.linux_bundle_bytes ?> bytes)</td>
<td><?cs var:studio.linux_bundle_checksum ?></td>
</tr>
</table>
-</div><!-- end pax -->
+<h4 class="norule" style="margin-top:40px">Get just the SDK tools</h4>
+
+<p>If you do not need Android Studio, you can download the basic
+Android SDK tools below.</p>
+
+ <table class="download">
+ <tr>
+ <th>Platform</th>
+ <th>SDK tools package</th>
+ <th>Size</th>
+ <th>SHA-1 checksum</th>
+ </tr>
+ <tr>
+ <td rowspan="2">Windows</td>
+ <td>
+ <a onclick="return onDownload(this)" id="win-tools" data-modal-toggle="studio_tos"
+ href="//dl.google.com/android/<?cs
+var:sdk.win_installer
+?>"><?cs var:sdk.win_installer ?></a><br>
+ Includes Windows installer
+ </td>
+ <td><?cs call:size_in_mb(sdk.win_installer_bytes) ?> MB
+ <br>(<?cs var:sdk.win_installer_bytes ?> bytes)</td>
+ <td><?cs var:sdk.win_installer_checksum ?></td>
+ </tr>
+ <tr>
+ <!-- blank TD from Windows rowspan -->
+ <td>
+ <a onclick="return onDownload(this)" id="win-tools2" data-modal-toggle="studio_tos"
+ href="//dl.google.com/android/<?cs var:sdk.win_download
+?>"><?cs var:sdk.win_download ?></a><br>
+ No Windows installer
+ </td>
+ <td><?cs call:size_in_mb(sdk.win_bytes) ?> MB
+ <br>(<?cs var:sdk.win_bytes ?> bytes)</td>
+ <td><?cs var:sdk.win_checksum ?></td>
+ </tr>
+ <tr>
+ <td><nobr>Mac OS X</nobr></td>
+ <td>
+ <a onclick="return onDownload(this)" id="mac-tools" data-modal-toggle="studio_tos"
+ href="//dl.google.com/android/<?cs
+var:sdk.mac_download
+?>"><?cs var:sdk.mac_download ?></a>
+ </td>
+ <td><?cs call:size_in_mb(sdk.mac_bytes) ?> MB
+ <br>(<?cs var:sdk.mac_bytes ?> bytes)</td>
+ <td><?cs var:sdk.mac_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Linux</td>
+ <td>
+ <a onclick="return onDownload(this)" id="linux-tools" data-modal-toggle="studio_tos"
+ href="//dl.google.com/android/<?cs
+var:sdk.linux_download
+?>"><?cs var:sdk.linux_download ?></a>
+ </td>
+ <td><?cs call:size_in_mb(sdk.linux_bytes) ?> MB
+ <br>(<?cs var:sdk.linux_bytes ?> bytes)</td>
+ <td><?cs var:sdk.linux_checksum ?></td>
+ </tr>
+ </table>
+ <p>
+Also see the <a href="<?cs var:toroot ?>tools/sdk/tools-notes.html">SDK
+tools release notes</a>.</p>
+
+ </div><!-- end wrap -->
+ </section>
-
-
-
+<?cs ######## The Android Studio version of the download script ######### ?>
<script>
-
- if (location.hash == "#Requirements") {
- $('.reqs').show();
- } else if (location.hash == "#ExistingIDE") {
- $('.ide').show();
- }
-
var os;
var bundlename;
var $toolslink;
@@ -435,7 +447,9 @@
$('#not-supported').hide();
/* set up primary Android Studio download button */
- $('.download-bundle-button > .small').html(" for " + os);
+ idname = bundlename + "-size";
+ sizeMB = $(idname).text().split(' MB')[0];
+ $('.download-bundle-button > .small').html(" for " + os + " <em>(" + sizeMB + " MB)</em>");
$('.download-bundle-button').click(function() {return onDownload(this,true,true);}).attr('href', bundlename);
}
@@ -453,13 +467,10 @@
if (bundle && !button) {
$("a#downloadForRealz").attr("name", "#" + $(link).attr('id'));
} else {
+ $("h2#tos-header").text('Download the Android SDK Tools');
$("a#downloadForRealz").attr("name", $(link).attr('href'));
}
- $("#tos").show();
- $("#landing").hide();
-
- location.hash = "top";
return false;
}
@@ -487,22 +498,24 @@
function onDownloadForRealz(link) {
if ($("input#agree").is(':checked')) {
- location.hash = "";
- location.hash = "top";
$("div.sdk-terms").slideUp();
- $("h1#tos-header").text('Now downloading...');
- $(".sdk-terms-intro").text('You\'ll be redirected to the install instructions in a moment.');
- $("#sdk-terms-form").fadeOut('slow', function() {
- setTimeout(function() {
- if ($("#downloadForRealz").attr('bundle') == 'true') {
- // User downloaded the studio Bundle
- window.location = "/sdk/installing/index.html?pkg=studio";
- } else {
- // User downloaded the SDK Tools
- window.location = "/sdk/installing/index.html?pkg=tools";
- }
- }, 3000);
- });
+ if ($("#downloadForRealz").attr('bundle') == 'true') {
+ $("h2#tos-header").text('Now downloading Android Studio!');
+ $(".sdk-terms-intro").text('Redirecting to the install instructions...');
+ $("#sdk-terms-form").slideUp(function() {
+ setTimeout(function() {
+ window.location = "/sdk/installing/index.html";
+ }, 2000);
+ });
+ } else {
+ $("h2#tos-header").text('Now downloading the Android SDK Tools!');
+ $(".sdk-terms-intro").html("<p>Because you've chosen to download " +
+ "only the Android SDK tools (and not Android Studio), there are no " +
+ "setup procedures to follow.</p><p>For information about how to " +
+ "keep your SDK tools up to date, refer to the " +
+ "<a href='/tools/help/sdk-manager.html'>SDK Manager</a> guide.</p>");
+ $("#sdk-terms-form").slideUp();
+ }
ga('send', 'event', 'SDK', 'IDE and Tools', $("#downloadForRealz").html());
return true;
} else {
@@ -520,7 +533,7 @@
-</div><!-- end the wrapper used for relative/absolute positions -->
+
<?cs # THIS DIV WAS OPENED IN INDEX.JD ?>
@@ -569,6 +582,11 @@
</div><!-- end g-unit -->
<?cs include:"trailer.cs" ?>
+<script src="https://developer.android.com/ytblogger_lists_unified.js?v=17" type="text/javascript"></script>
+<script src="/jd_lists_unified.js?v=17" type="text/javascript"></script>
+<script src="/jd_extras.js?v=17" type="text/javascript"></script>
+<script src="/jd_collections.js?v=17" type="text/javascript"></script>
+<script src="/jd_tag_helpers.js?v=17" type="text/javascript"></script>
<!-- Start of Tag -->
<script type="text/javascript">