├── .gitignore ├── LICENSE ├── README.md ├── art ├── feature.png ├── feature.psd ├── icon.psd ├── icon128.png ├── icon16.psd ├── screenshot.png ├── screenshot.psd ├── tile.png └── tile2.png ├── extension ├── android-ref.js ├── android-xml-ref.js ├── background.js ├── icons │ ├── 128.png │ ├── 16.png │ └── 32.png ├── manifest.json ├── options.html ├── options.js ├── ref-inject-code-search.css └── ref-inject-code-search.js └── makezip.sh /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | extension.zip 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, and 10 | distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by the copyright 13 | owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all other entities 16 | that control, are controlled by, or are under common control with that entity. 17 | For the purposes of this definition, "control" means (i) the power, direct or 18 | indirect, to cause the direction or management of such entity, whether by 19 | contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the 20 | outstanding shares, or (iii) beneficial ownership of such entity. 21 | 22 | "You" (or "Your") shall mean an individual or Legal Entity exercising 23 | permissions granted by this License. 24 | 25 | "Source" form shall mean the preferred form for making modifications, including 26 | but not limited to software source code, documentation source, and configuration 27 | files. 28 | 29 | "Object" form shall mean any form resulting from mechanical transformation or 30 | translation of a Source form, including but not limited to compiled object code, 31 | generated documentation, and conversions to other media types. 32 | 33 | "Work" shall mean the work of authorship, whether in Source or Object form, made 34 | available under the License, as indicated by a copyright notice that is included 35 | in or attached to the work (an example is provided in the Appendix below). 36 | 37 | "Derivative Works" shall mean any work, whether in Source or Object form, that 38 | is based on (or derived from) the Work and for which the editorial revisions, 39 | annotations, elaborations, or other modifications represent, as a whole, an 40 | original work of authorship. For the purposes of this License, Derivative Works 41 | shall not include works that remain separable from, or merely link (or bind by 42 | name) to the interfaces of, the Work and Derivative Works thereof. 43 | 44 | "Contribution" shall mean any work of authorship, including the original version 45 | of the Work and any modifications or additions to that Work or Derivative Works 46 | thereof, that is intentionally submitted to Licensor for inclusion in the Work 47 | by the copyright owner or by an individual or Legal Entity authorized to submit 48 | on behalf of the copyright owner. For the purposes of this definition, 49 | "submitted" means any form of electronic, verbal, or written communication sent 50 | to the Licensor or its representatives, including but not limited to 51 | communication on electronic mailing lists, source code control systems, and 52 | issue tracking systems that are managed by, or on behalf of, the Licensor for 53 | the purpose of discussing and improving the Work, but excluding communication 54 | that is conspicuously marked or otherwise designated in writing by the copyright 55 | owner as "Not a Contribution." 56 | 57 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf 58 | of whom a Contribution has been received by Licensor and subsequently 59 | incorporated within the Work. 60 | 61 | 2. Grant of Copyright License. 62 | 63 | Subject to the terms and conditions of this License, each Contributor hereby 64 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 65 | irrevocable copyright license to reproduce, prepare Derivative Works of, 66 | publicly display, publicly perform, sublicense, and distribute the Work and such 67 | Derivative Works in Source or Object form. 68 | 69 | 3. Grant of Patent License. 70 | 71 | Subject to the terms and conditions of this License, each Contributor hereby 72 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 73 | irrevocable (except as stated in this section) patent license to make, have 74 | made, use, offer to sell, sell, import, and otherwise transfer the Work, where 75 | such license applies only to those patent claims licensable by such Contributor 76 | that are necessarily infringed by their Contribution(s) alone or by combination 77 | of their Contribution(s) with the Work to which such Contribution(s) was 78 | submitted. If You institute patent litigation against any entity (including a 79 | cross-claim or counterclaim in a lawsuit) alleging that the Work or a 80 | Contribution incorporated within the Work constitutes direct or contributory 81 | patent infringement, then any patent licenses granted to You under this License 82 | for that Work shall terminate as of the date such litigation is filed. 83 | 84 | 4. Redistribution. 85 | 86 | You may reproduce and distribute copies of the Work or Derivative Works thereof 87 | in any medium, with or without modifications, and in Source or Object form, 88 | provided that You meet the following conditions: 89 | 90 | You must give any other recipients of the Work or Derivative Works a copy of 91 | this License; and 92 | You must cause any modified files to carry prominent notices stating that You 93 | changed the files; and 94 | You must retain, in the Source form of any Derivative Works that You distribute, 95 | all copyright, patent, trademark, and attribution notices from the Source form 96 | of the Work, excluding those notices that do not pertain to any part of the 97 | Derivative Works; and 98 | If the Work includes a "NOTICE" text file as part of its distribution, then any 99 | Derivative Works that You distribute must include a readable copy of the 100 | attribution notices contained within such NOTICE file, excluding those notices 101 | that do not pertain to any part of the Derivative Works, in at least one of the 102 | following places: within a NOTICE text file distributed as part of the 103 | Derivative Works; within the Source form or documentation, if provided along 104 | with the Derivative Works; or, within a display generated by the Derivative 105 | Works, if and wherever such third-party notices normally appear. The contents of 106 | the NOTICE file are for informational purposes only and do not modify the 107 | License. You may add Your own attribution notices within Derivative Works that 108 | You distribute, alongside or as an addendum to the NOTICE text from the Work, 109 | provided that such additional attribution notices cannot be construed as 110 | modifying the License. 111 | You may add Your own copyright statement to Your modifications and may provide 112 | additional or different license terms and conditions for use, reproduction, or 113 | distribution of Your modifications, or for any such Derivative Works as a whole, 114 | provided Your use, reproduction, and distribution of the Work otherwise complies 115 | with the conditions stated in this License. 116 | 117 | 5. Submission of Contributions. 118 | 119 | Unless You explicitly state otherwise, any Contribution intentionally submitted 120 | for inclusion in the Work by You to the Licensor shall be under the terms and 121 | conditions of this License, without any additional terms or conditions. 122 | Notwithstanding the above, nothing herein shall supersede or modify the terms of 123 | any separate license agreement you may have executed with Licensor regarding 124 | such Contributions. 125 | 126 | 6. Trademarks. 127 | 128 | This License does not grant permission to use the trade names, trademarks, 129 | service marks, or product names of the Licensor, except as required for 130 | reasonable and customary use in describing the origin of the Work and 131 | reproducing the content of the NOTICE file. 132 | 133 | 7. Disclaimer of Warranty. 134 | 135 | Unless required by applicable law or agreed to in writing, Licensor provides the 136 | Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, 137 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, 138 | including, without limitation, any warranties or conditions of TITLE, 139 | NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are 140 | solely responsible for determining the appropriateness of using or 141 | redistributing the Work and assume any risks associated with Your exercise of 142 | permissions under this License. 143 | 144 | 8. Limitation of Liability. 145 | 146 | In no event and under no legal theory, whether in tort (including negligence), 147 | contract, or otherwise, unless required by applicable law (such as deliberate 148 | and grossly negligent acts) or agreed to in writing, shall any Contributor be 149 | liable to You for damages, including any direct, indirect, special, incidental, 150 | or consequential damages of any character arising as a result of this License or 151 | out of the use or inability to use the Work (including but not limited to 152 | damages for loss of goodwill, work stoppage, computer failure or malfunction, or 153 | any and all other commercial damages or losses), even if such Contributor has 154 | been advised of the possibility of such damages. 155 | 156 | 9. Accepting Warranty or Additional Liability. 157 | 158 | While redistributing the Work or Derivative Works thereof, You may choose to 159 | offer, and charge a fee for, acceptance of support, warranty, indemnity, or 160 | other liability obligations and/or rights consistent with this License. However, 161 | in accepting such obligations, You may act only on Your own behalf and on Your 162 | sole responsibility, not on behalf of any other Contributor, and only if You 163 | agree to indemnify, defend, and hold each Contributor harmless for any liability 164 | incurred by, or claims asserted against, such Contributor by reason of your 165 | accepting any such warranty or additional liability. 166 | 167 | END OF TERMS AND CONDITIONS 168 | 169 | APPENDIX: How to apply the Apache License to your work 170 | 171 | To apply the Apache License to your work, attach the following boilerplate 172 | notice, with the fields enclosed by brackets "[]" replaced with your own 173 | identifying information. (Don't include the brackets!) The text should be 174 | enclosed in the appropriate comment syntax for the file format. We also 175 | recommend that a file or class name and description of purpose be included on 176 | the same "printed page" as the copyright notice for easier identification within 177 | third-party archives. 178 | 179 | Copyright [yyyy] [name of copyright owner] 180 | 181 | Licensed under the Apache License, Version 2.0 (the "License"); 182 | you may not use this file except in compliance with the License. 183 | You may obtain a copy of the License at 184 | 185 | http://www.apache.org/licenses/LICENSE-2.0 186 | 187 | Unless required by applicable law or agreed to in writing, software 188 | distributed under the License is distributed on an "AS IS" BASIS, 189 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 190 | See the License for the specific language governing permissions and 191 | limitations under the License. 192 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![No Maintenance Intended](http://unmaintained.tech/badge.svg)](http://unmaintained.tech/) 2 | 3 | Android SDK Search Extension 4 | ============================ 5 | 6 | A Chrome extension that adds an 'ad' omnibox command and view source links for the Android SDK. 7 | 8 | The extension can be downloaded [on the Chrome Web Store](https://chrome.google.com/webstore/detail/android-sdk-search/hgcbffeicehlpmgmnhnkjbjoldkfhoin?hl=en). 9 | 10 | ![Android SDK Search Extension](art/screenshot.png "Android SDK Search Extension") 11 | -------------------------------------------------------------------------------- /art/feature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/romannurik/AndroidSDKSearchExtension/a368323421a1cf079131525df41adb033f3f822b/art/feature.png -------------------------------------------------------------------------------- /art/feature.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/romannurik/AndroidSDKSearchExtension/a368323421a1cf079131525df41adb033f3f822b/art/feature.psd -------------------------------------------------------------------------------- /art/icon.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/romannurik/AndroidSDKSearchExtension/a368323421a1cf079131525df41adb033f3f822b/art/icon.psd -------------------------------------------------------------------------------- /art/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/romannurik/AndroidSDKSearchExtension/a368323421a1cf079131525df41adb033f3f822b/art/icon128.png -------------------------------------------------------------------------------- /art/icon16.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/romannurik/AndroidSDKSearchExtension/a368323421a1cf079131525df41adb033f3f822b/art/icon16.psd -------------------------------------------------------------------------------- /art/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/romannurik/AndroidSDKSearchExtension/a368323421a1cf079131525df41adb033f3f822b/art/screenshot.png -------------------------------------------------------------------------------- /art/screenshot.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/romannurik/AndroidSDKSearchExtension/a368323421a1cf079131525df41adb033f3f822b/art/screenshot.psd -------------------------------------------------------------------------------- /art/tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/romannurik/AndroidSDKSearchExtension/a368323421a1cf079131525df41adb033f3f822b/art/tile.png -------------------------------------------------------------------------------- /art/tile2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/romannurik/AndroidSDKSearchExtension/a368323421a1cf079131525df41adb033f3f822b/art/tile2.png -------------------------------------------------------------------------------- /extension/android-xml-ref.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | var XML_DATA = [ 18 | { label:"AndroidManifest.xml", link:"guide/topics/manifest/manifest-intro.html", extraRank:1 }, 19 | 20 | // Manifest 21 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/action-element.html" }, 22 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/activity-element.html" }, 23 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/activity-alias-element.html" }, 24 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/application-element.html" }, 25 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/category-element.html" }, 26 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/compatible-screens-element.html" }, 27 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/data-element.html" }, 28 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/grant-uri-permission-element.html" }, 29 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/instrumentation-element.html" }, 30 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/intent-filter-element.html" }, 31 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/manifest-element.html" }, 32 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/meta-data-element.html" }, 33 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/path-permission-element.html" }, 34 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/permission-element.html" }, 35 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/permission-group-element.html" }, 36 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/permission-tree-element.html" }, 37 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/provider-element.html" }, 38 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/receiver-element.html" }, 39 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/service-element.html" }, 40 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/supports-gl-texture-element.html" }, 41 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/supports-screens-element.html" }, 42 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/uses-configuration-element.html" }, 43 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/uses-feature-element.html" }, 44 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/uses-library-element.html" }, 45 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/uses-permission-element.html" }, 46 | { subLabel:"AndroidManifest.xml", label:"", link:"guide/topics/manifest/uses-sdk-element.html" }, 47 | 48 | // Animations 49 | { subLabel:"Animation Resources", label:"", link:"guide/topics/graphics/animation.html#declaring-xml" }, 50 | { subLabel:"Animation Resources", label:"", link:"guide/topics/graphics/animation.html#declaring-xml" }, 51 | 52 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#set-element" }, 53 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#set-element" }, 54 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#set-element" }, 55 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#set-element" }, 56 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#set-element" }, 57 | 58 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#animation-list-element" }, 59 | 60 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#Interpolators" }, 61 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#Interpolators" }, 62 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#Interpolators" }, 63 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#Interpolators" }, 64 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#Interpolators" }, 65 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#Interpolators" }, 66 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#Interpolators" }, 67 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#Interpolators" }, 68 | { subLabel:"Animation Resources", label:"", link:"guide/topics/resources/animation-resource.html#Interpolators" }, 69 | 70 | // Drawables 71 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#bitmap-element" }, 72 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#ninepatch-element" }, 73 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#layerlist-element" }, 74 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#selector-element" }, 75 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#levellist-element" }, 76 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#transition-element" }, 77 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#inset-element" }, 78 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#clip-element" }, 79 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#scale-element" }, 80 | 81 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#shape-element" }, 82 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#corners-element" }, 83 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#gradient-element" }, 84 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#padding-element" }, 85 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#size-element" }, 86 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#solid-element" }, 87 | { subLabel:"Drawable Resources", label:"", link:"guide/topics/resources/drawable-resource.html#stroke-element" }, 88 | 89 | // Layout 90 | { subLabel:"Layouts", label:"", link:"guide/topics/fundamentals/fragments.html#Adding" }, 91 | { subLabel:"Layouts", label:"", link:"guide/topics/resources/layout-resource.html#include-element" }, 92 | { subLabel:"Layouts", label:"", link:"guide/topics/resources/layout-resource.html#requestfocus-element" }, 93 | { subLabel:"Layouts", label:"", link:"guide/topics/resources/layout-resource.html#merge-element" }, 94 | 95 | // Menu 96 | { subLabel:"Menu Resources", label:"", link:"guide/topics/resources/menu-resource.html#menu-element" }, 97 | { subLabel:"Menu Resources", label:"", link:"guide/topics/resources/menu-resource.html#group-element" }, 98 | // { subLabel:"Menu Resources", label:"", link:"guide/topics/resources/menu-resource.html#item-element" }, 99 | 100 | // String 101 | { subLabel:"String Resources", label:"", link:"guide/topics/resources/string-resource.html#string-element" }, 102 | { subLabel:"String Resources", label:"", link:"guide/topics/resources/string-resource.html#string-array-element" }, 103 | // { subLabel:"String Resources", label:"", link:"guide/topics/resources/string-resource.html#string-array-item-element" }, 104 | { subLabel:"String Resources", label:"", link:"guide/topics/resources/string-resource.html#plurals-element" }, 105 | // { subLabel:"String Resources", label:"", link:"guide/topics/resources/string-resource.html#plurals-item-element" }, 106 | 107 | // Style 108 | { subLabel:"Style/Theme Resources", label:" 8 | 9 | 10 | 11 | 12 | Source base URL: 13 |
14 | 18 |
19 | 23 |
24 | 27 | 30 |
31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /extension/options.js: -------------------------------------------------------------------------------- 1 | // Saves options to chrome.local.sync. 2 | function save_options() { 3 | var customUrl = document.getElementById("customUrl").value; 4 | 5 | var url = document.querySelector('input:checked').value; 6 | if (url === 'on') { 7 | url = customUrl; 8 | } 9 | 10 | chrome.storage.local.set({ 11 | baseUrl: url 12 | }, function() { 13 | // Update status to let user know options were saved. 14 | var status = document.getElementById('status'); 15 | status.innerHTML = 'Options saved.'; 16 | setTimeout(function() { 17 | status.textContent = ''; 18 | }, 2000); 19 | }); 20 | } 21 | 22 | function restore_options() { 23 | chrome.storage.local.get({ 24 | baseUrl: 'https://android.googlesource.com' 25 | }, function(items) { 26 | if (items.baseUrl === 'https://android.googlesource.com') { 27 | document.getElementById("googlesource").checked = true; 28 | } else if (items.baseUrl === 'https://github.com') { 29 | document.getElementById("github").checked = true; 30 | } else { 31 | document.getElementById("customCheck").checked = true; 32 | document.getElementById("customUrl").value = items.baseUrl; 33 | } 34 | }); 35 | } 36 | document.addEventListener('DOMContentLoaded', restore_options); 37 | document.getElementById('save').addEventListener('click', 38 | save_options); 39 | -------------------------------------------------------------------------------- /extension/ref-inject-code-search.css: -------------------------------------------------------------------------------- 1 | .__asdk_search_extension_link_container__ { 2 | margin-bottom: 8px; 3 | } 4 | 5 | .__asdk_search_extension_link__ { 6 | display: inline-block; 7 | padding: 3px 6px; 8 | border: 2px solid rgba(3, 155, 229, 0.85); 9 | border-radius: 4px; 10 | color: #039BE5; 11 | font-family: Roboto; 12 | font-weight: 700; 13 | font-size: 13px; 14 | line-height: 15px; 15 | } 16 | 17 | .__asdk_search_extension_link__ + .__asdk_search_extension_link__ { 18 | margin-left: 4px; 19 | } 20 | 21 | .__asdk_search_extension_link__:hover { 22 | border-color: #039BE5; 23 | background-color: #039BE5; 24 | color: #fff; 25 | } -------------------------------------------------------------------------------- /extension/ref-inject-code-search.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | var _PACKAGE_DOC_URL_REGEX = /http(?:s)?:\/\/d(?:eveloper)?\.android\.com\/reference\/(.+)\/package-(summary|descr)/; 18 | var _CLASS_DOC_URL_REGEX = /http(?:s)?:\/\/d(?:eveloper)?\.android\.com\/reference\/(.+)/; 19 | var _RESOURCE_DOC_URL_REGEX = /http(?:s)?:\/\/d(?:eveloper)?\.android\.com\/reference\/android\/(?:.+\/)?(R(?:\..+)?)/; 20 | 21 | var _GOOGLESOURCE_SITE = "https://android.googlesource.com"; 22 | var _GITHUB_SITE = "https://github.com"; 23 | 24 | var _ALTERNATIVE_URL_TEMPLATE = '$BASEURL/$PROJECT/+/refs/heads/master/$TREE/$NAME_SLASH'; 25 | var _ALTERNATIVE_RESOURCES_PATH = '$BASEURL/platform/frameworks/base/+/refs/heads/master/core/res/res/'; 26 | var _ALTERNATIVE_SAMPLES_PATH = '$BASEURL/platform/development/+/master/samples'; 27 | 28 | var _GOOGLESOURCE_URL_TEMPLATE = _GOOGLESOURCE_SITE + '/$PROJECT/+/refs/heads/master/$TREE/$NAME_SLASH'; 29 | var _GOOGLESOURCE_RESOURCES_PATH = _GOOGLESOURCE_SITE + '/platform/frameworks/$PROJECT/+/refs/heads/master/$TREE/'; 30 | var _GOOGLESOURCE_SAMPLES_PATH = _GOOGLESOURCE_SITE + '/platform/development/+/master/samples'; 31 | var _CONSTRAINT_LAYOUT_URL_TEMPLATE = _GOOGLESOURCE_SITE + '/$PROJECT/+/studio-3.0/$TREE/$NAME_SLASH'; 32 | 33 | var _GITHUB_URL_TEMPLATE = _GITHUB_SITE + '/android/$PROJECT/blob/master/$TREE/$NAME_SLASH'; 34 | var _GITHUB_RESOURCES_PATH = _GITHUB_SITE + '/android/platform_frameworks_$PROJECT/tree/master/$TREE/'; 35 | var _GITHUB_SAMPLES_PATH = _GITHUB_SITE + '/android/platform_development/tree/master/samples'; 36 | 37 | var _RESOURCE_MAP = { 38 | 'R' : '', 39 | 'R.anim' : 'anim/', 40 | 'R.animator' : 'animator/', 41 | 'R.array' : 'values/arrays.xml', 42 | 'R.attr' : 'values/attrs.xml', 43 | 'R.bool' : 'values/bools.xml', 44 | 'R.color' : 'values/colors.xml', 45 | 'android.R.color' : 'values/colors_material.xml', 46 | 'R.dimen' : 'values/dimens.xml', 47 | 'android.R.dimen' : 'values/dimens_material.xml', 48 | 'R.drawable' : ['drawable/', 'drawable-xxhdpi/'], 49 | 'R.id' : 'values/ids.xml', 50 | 'R.integer' : 'integers.xml', 51 | 'R.interpolator' : 'interpolator/', 52 | 'R.layout' : 'layout/', 53 | 'R.menu' : 'menu/', 54 | 'R.mipmap' : ['mipmap-mdpi/', 'mipmap-xxhdpi/'], 55 | 'R.plurals' : 'values/strings.xml', 56 | 'R.raw' : 'raw/', 57 | 'R.string' : 'values/strings.xml', 58 | 'R.style' : ['values/styles.xml', 'values/themes.xml'], 59 | 'android.R.style' : ['values/styles_material.xml', 'values/themes_material.xml'], 60 | 'R.styleable' : 'values/attrs.xml', 61 | 'R.xml' : 'xml/' 62 | }; 63 | 64 | var _PACKAGE_MAP = { 65 | 'java' : { project:'platform/libcore', tree:'ojluni/src/main/java' }, 66 | 'javax' : { project:'platform/libcore', tree:'ojluni/src/main/java' }, 67 | 'javax.microedition' : { project:'platform/frameworks/base', tree:'opengl/java' }, 68 | 'javax.xml' : { project:'platform/libcore', tree:'luni/src/main/java' }, 69 | 'junit' : { project:'platform/frameworks/base', tree:'legacy-test/src' }, 70 | 'org' : { project:'platform/libcore', tree:'luni/src/main/java' }, 71 | 'org.json' : { project:'platform/libcore', tree:'json/src/main/java' }, 72 | 'org.xmlpull' : { project:null, tree:null }, 73 | 'org.apache.http' : { project:'platform/frameworks/base', tree:'core/java' }, 74 | 'java.math' : { project:'platform/libcore', tree:'luni/src/main/java' }, 75 | 'dalvik' : { project:'platform/libcore', tree:'dalvik/src/main/java' }, 76 | 'android' : { project:'platform/frameworks/base', tree:'core/java' }, 77 | 'android.drm' : { project:'platform/frameworks/base', tree:'drm/java' }, 78 | 'android.drm.mobile1' : { project:'platform/frameworks/base', tree:'media/java' }, 79 | 'android.renderscript' : { project:'platform/frameworks/base', tree:'rs/java' }, 80 | 'android.graphics' : { project:'platform/frameworks/base', tree:'graphics/java' }, 81 | 'android.icu' : { project:'platform/external/icu', tree:'android_icu4j/src/main/java' }, 82 | 'android.security' : { project:'platform/frameworks/base', tree:'keystore/java' }, 83 | 'android.system' : { project:'platform/libcore', tree:'luni/src/main/java' }, 84 | 'android.location' : { project:'platform/frameworks/base', tree:'location/java' }, 85 | 'android.media' : { project:'platform/frameworks/base', tree:'media/java' }, 86 | 'android.media.effect' : { project:'platform/frameworks/base', tree:'media/mca/effect/java' }, 87 | 'android.mtp' : { project:'platform/frameworks/base', tree:'media/java' }, 88 | 'android.opengl' : { project:'platform/frameworks/base', tree:'opengl/java' }, 89 | 'android.sax' : { project:'platform/frameworks/base', tree:'sax/java' }, 90 | 'android.telecom' : { project:'platform/frameworks/base', tree:'telecomm/java' }, 91 | 'android.telephony' : { project:'platform/frameworks/base', tree:'telephony/java' }, 92 | 'android.test' : { project:'platform/frameworks/base', tree:'test-runner/src' }, 93 | 'android.test.mock' : { project:'platform/frameworks/base', tree:'test-mock/src' }, 94 | 'android.test.suitebuilder' : { project:'platform/frameworks/base', tree:'legacy-test/src' }, 95 | 'android.net.rtp' : { project:'platform/frameworks/opt/net/voip', tree:'src/java' }, 96 | 'android.net.sip' : { project:'platform/frameworks/opt/net/voip', tree:'src/java' }, 97 | 'android.net.wifi' : { project:'platform/frameworks/base', tree:'wifi/java' }, 98 | 'android.support.animation' : { project:'platform/frameworks/support', tree:'dynamic-animation/src/main/java' }, 99 | 'android.support.annotation' : { project:'platform/frameworks/support', tree:'annotations/src/main/java' }, 100 | 'android.support.app.recommendation' : { project:'platform/frameworks/support', tree:'recommendation/src/main/java' }, 101 | 'android.support.compat' : { project:null, tree:null }, 102 | 'android.support.content' : { project:'platform/frameworks/support', tree:'content/src/main/java' }, 103 | 'android.support.coreui' : { project:null, tree:null }, 104 | 'android.support.coreutils' : { project:null, tree:null }, 105 | 'android.support.customtabs' : { project:'platform/frameworks/support', tree:'customtabs/src/main/java' }, 106 | 'android.support.design' : { project:'platform/frameworks/support', tree:'design/src' }, 107 | 'android.support.fragment' : { project:null, tree:null }, 108 | 'android.support.graphics.drawable' : { project:'platform/frameworks/support', tree:'graphics/drawable/static/src/main/java' }, 109 | 'android.support.multidex' : { project:'platform/frameworks/multidex', tree:'library/src' }, 110 | 'android.support.media' : { project:'platform/frameworks/support', tree:'exifinterface/src/main/java' }, 111 | 'android.support.media.tv' : { project:'platform/frameworks/support', tree:'tv-provider/src/main/java' }, 112 | 'android.support.mediacompat' : { project:null, tree:null }, 113 | 'android.support.mediacompat.testlib' : { project:'platform/frameworks/support', tree:'media-compat-test-lib/src/main/java' }, 114 | 'android.support.percent' : { project:'platform/frameworks/support', tree:'percent/src/main/java' }, 115 | 'android.support.text.emoji' : { project:'platform/frameworks/support', tree:'emoji/core/src/main/java' }, 116 | 'android.support.text.emoji.bundled' : { project:'platform/frameworks/support', tree:'emoji/bundled/src/main/java' }, 117 | 'android.support.text.emoji.widget' : { project:'platform/frameworks/support', tree:'emoji/appcompat/src/main/java' }, 118 | 'android.support.transition' : { project:'platform/frameworks/support', tree:'transition/src' }, 119 | 'android.support.v4' : { project:'platform/frameworks/support', tree:'compat/src/main/java' }, 120 | 'android.support.v4.content' : { project:'platform/frameworks/support', tree:'core-utils/src/main/java' }, 121 | 'android.support.v4.math' : { project:'platform/frameworks/support', tree:'core-utils/src/main/java' }, 122 | 'android.support.v4.media' : { project:'platform/frameworks/support', tree:'media-compat/java' }, 123 | 'android.support.v4.print' : { project:'platform/frameworks/support', tree:'core-utils/src/main/java' }, 124 | 'android.support.v4.provider' : { project:'platform/frameworks/support', tree:'core-utils/src/main/java' }, 125 | 'android.support.v4.view.animation' : { project:'platform/frameworks/support', tree:'core-ui/src/main/java' }, 126 | 'android.support.v4.widget' : { project:'platform/frameworks/support', tree:'core-ui/src/main/java' }, 127 | 'android.support.v7' : { project:'platform/frameworks/support', tree:'compat/src/main/java' }, 128 | 'android.support.v7.app' : { project:'platform/frameworks/support', tree:'v7/appcompat/src/main/java' }, 129 | 'android.support.v7.content.res' : { project:'platform/frameworks/support', tree:'v7/appcompat/src/main/java' }, 130 | 'android.support.v7.graphics' : { project:'platform/frameworks/support', tree:'v7/palette/src/main/java' }, 131 | 'android.support.v7.graphics.drawable' : { project:'platform/frameworks/support', tree:'v7/appcompat/src/main/java' }, 132 | 'android.support.v7.media' : { project:'platform/frameworks/support', tree:'v7/mediarouter/src' }, 133 | 'android.support.v7.preference' : { project:'platform/frameworks/support', tree:'v7/preference/src/main/java' }, 134 | 'android.support.v7.util' : { project:'platform/frameworks/support', tree:'v7/recyclerview/src/main/java' }, 135 | 'android.support.v7.view' : { project:'platform/frameworks/support', tree:'v7/appcompat/src/main/java' }, 136 | 'android.support.v7.widget' : { project:'platform/frameworks/support', tree:'v7/appcompat/src/main/java' }, 137 | 'android.support.v7.widget.helper' : { project:'platform/frameworks/support', tree:'v7/recyclerview/src/main/java' }, 138 | 'android.support.v7.widget.util' : { project:'platform/frameworks/support', tree:'v7/recyclerview/src/main/java' }, 139 | 'android.support.v8.renderscript' : { project:'platform/frameworks/support', tree:'v8/renderscript/java/src' }, 140 | 'android.support.v13' : { project:'platform/frameworks/support', tree:'v13/java' }, 141 | 'android.support.v14.preference' : { project:'platform/frameworks/support', tree:'v14/preference/src/main/java' }, 142 | 'android.support.v17.leanback' : { project:'platform/frameworks/support', tree:'v17/leanback/src' }, 143 | 'android.support.v17.preference' : { project:'platform/frameworks/support', tree:'v17/preference-leanback/src' }, 144 | 'android.support.wear' : { project:'platform/frameworks/support', tree:'wear/src/main/java' }, 145 | 'android.support.constraint' : { project:'platform/frameworks/opt/sherpa', tree:'constraintlayout/src/main/java' }, 146 | //'android.arch.core.executor.testing' : { project:'', tree:'' }, 147 | 'android.arch.lifecycle' : { project:'platform/frameworks/support', tree:'lifecycle/extensions/src/main/java' }, 148 | 'android.arch.paging' : { project:'platform/frameworks/support', tree:'paging/common/src/main/java' }, 149 | 'android.arch.persistence.db' : { project:'platform/frameworks/support', tree:'persistence/db/src/main/java' }, 150 | 'android.arch.persistence.db.framework': { project:'platform/frameworks/support', tree:'persistence/db-framework/src/main/java' }, 151 | 'android.arch.persistence.room' : { project:'platform/frameworks/support', tree:'room/common/src/main/java' }, 152 | 'android.arch.persistence.room.migration' : { project:'platform/frameworks/support', tree:'room/runtime/src/main/java' }, 153 | 'android.arch.persistence.room.testing' : { project:'platform/frameworks/support', tree:'room/testing/src/main/java' }, 154 | 'android.support.v7.recyclerview.extensions' : { project:'platform/frameworks/support', tree:'paging/runtime/src/main/java' } 155 | }; 156 | 157 | var _TREE_REFINEMENTS = { 158 | 'android.support.graphics.drawable': [ 159 | { 160 | regex: /Animated|Animatable/, 161 | tree: 'graphics/drawable/animated/src/main/java' 162 | } 163 | ], 164 | 'android.support.v4.app': [ 165 | { 166 | regex: /Fragment|Loader/, 167 | tree: 'fragment/src/main/java' 168 | }, 169 | { 170 | regex: /ActionBarDrawerToggle/, 171 | tree: 'core-ui/src/main/java' 172 | }, 173 | { 174 | regex: /TaskStackBuilder|AppLaunchChecker|FrameMetricsAggregator|NavUtils/, 175 | tree: 'core-utils/src/main/java' 176 | } 177 | ], 178 | 'android.support.v4.content': [ 179 | { 180 | regex: /Compat/, 181 | tree: 'compat/src/main/java' 182 | } 183 | ], 184 | 'android.support.v4.graphics.drawable': [ 185 | { 186 | regex: /RoundedBitmapDrawable/, 187 | tree: 'core-utils/src/main/java' 188 | } 189 | ], 190 | 'android.support.v4.provider': [ 191 | { 192 | regex: /Font/, 193 | tree: 'compat/src/main/java' 194 | } 195 | ], 196 | 'android.support.v4.view': [ 197 | { 198 | regex: /AbsSavedState|AsyncLayoutInflater|NestedScrollingChildHelper|NestedScrollingParentHelper|PagerAdapter|PagerTabStrip|PagerTitleStrip|ViewPager/, 199 | tree: 'core-ui/src/main/java' 200 | }, 201 | { 202 | regex: /GravityCompat/, 203 | tree: 'compat/src/main/java' 204 | } 205 | ], 206 | 'android.support.v4.view.animation': [ 207 | { 208 | regex: /Path/, 209 | tree: 'compat/src/main/java' 210 | } 211 | ], 212 | 'android.support.v4.widget': [ 213 | { 214 | regex: /Compat/, 215 | tree: 'compat/src/main/java' 216 | } 217 | ], 218 | 'android.support.v7.app': [ 219 | { 220 | regex: /MediaRoute/, 221 | tree: 'v7/mediarouter/src' 222 | } 223 | ], 224 | 'android.support.v7.widget': [ 225 | { 226 | regex: /RecyclerView|ItemAnimator|OrientationHelper|LinearSmoothScroller|DividerItemDecoration|SnapHelper/, 227 | tree: 'v7/recyclerview/src/main/java' 228 | }, 229 | { 230 | regex: /(Linear|Grid|StaggeredGrid)LayoutManager/, 231 | tree: 'v7/recyclerview/src/main/java' 232 | }, 233 | { 234 | regex: /CardView/, 235 | tree: 'v7/cardview/src/main/java' 236 | }, 237 | { 238 | regex: /GridLayout|\.Space$/, // must appear after GridLayoutManager 239 | tree: 'v7/gridlayout/src/main/java' 240 | } 241 | ], 242 | 'android.arch.lifecycle': [ 243 | { 244 | regex: /LifecycleRegistryOwner/, 245 | tree: 'lifecycle/runtime/src/main/java' 246 | }, 247 | { 248 | regex: /Lifecycle|LifecycleObserver|LifecycleOwner|OnLifecycleEvent/, 249 | tree: 'lifecycle/common/src/main/java' 250 | } 251 | ], 252 | 'android.arch.paging': [ 253 | { 254 | regex: /DiffCallback/, 255 | tree: 'paging/runtime/src/main/java' 256 | } 257 | ], 258 | 'android.arch.persistence.room': [ 259 | { 260 | regex: /Rx|EmptyResultSetException/, 261 | tree: 'room/rxjava2/src/main/java' 262 | }, 263 | { 264 | regex: /DatabaseConfiguration|InvalidationTracker|Room/, 265 | tree: 'room/runtime/src/main/java' 266 | } 267 | ] 268 | }; 269 | 270 | var _NAME_REFINEMENTS = { 271 | 'android.arch.paging': { 272 | replace: '/arch/paging/', 273 | with: '/arch/util/paging/' 274 | }, 275 | 'android.support.v7.recyclerview.extensions': { 276 | replace: '/support/v7/recyclerview/extensions/', 277 | with: '/arch/util/paging/' 278 | } 279 | }; 280 | 281 | var _ATSL_PACKAGE_PREFIX = 'android.support.test'; 282 | 283 | /* 284 | * Pattern map for ATSL. 285 | * NB: Order is important 286 | */ 287 | var _ATSL_FOLDER_MAP = { 288 | 'espresso.contrib' : 'espresso/contrib', 289 | 'espresso.intent' : 'espresso/intents', 290 | 'espresso.web' : 'espresso/web', 291 | 'espresso' : 'espresso/core', 292 | 'rule' : 'rules', 293 | 'annotation' : 'rules', // only for UiThreadTest 294 | 'filters' : 'runner', 295 | 'uiautomator' : 'uiautomator_test_libraries', 296 | }; 297 | 298 | function trimLastNamePart(s) { 299 | return s.replace(/\.[^.]*$/, ''); 300 | } 301 | 302 | function getPackageInfo(packageName) { 303 | var tmpPackageName = packageName; 304 | while (tmpPackageName) { 305 | if (tmpPackageName in _PACKAGE_MAP) { 306 | var pi = {}; 307 | pi.tree = _PACKAGE_MAP[tmpPackageName].tree; 308 | pi.project = _PACKAGE_MAP[tmpPackageName].project; 309 | return pi; 310 | } 311 | if (!tmpPackageName.match(/\./)) { 312 | break; 313 | } 314 | tmpPackageName = trimLastNamePart(tmpPackageName); 315 | } 316 | return null; 317 | } 318 | 319 | function getSupportPackageName(url) { 320 | return url.replace(/.+android\/support\//g, '').replace(/\/R.+/g, '') 321 | } 322 | 323 | function isPackageAvailableGithub(packageInfo) { 324 | return packageInfo.tree.indexOf('luni') === -1; 325 | } 326 | 327 | function getTestingSupportLibraryInfo(packageName) { 328 | if (packageName.indexOf(_ATSL_PACKAGE_PREFIX) != 0) { 329 | return null; 330 | } 331 | var suffix = packageName.substring(_ATSL_PACKAGE_PREFIX.length + 1); 332 | var folder = null; 333 | //Try and find folder match in map. 334 | //A match can be part of the suffix 335 | var s; 336 | for (s in _ATSL_FOLDER_MAP) { 337 | if (packageName.indexOf(s) != -1) { 338 | folder = _ATSL_FOLDER_MAP[s]; 339 | break; 340 | } 341 | } 342 | if (folder == null) { 343 | if (suffix == '' || suffix.indexOf('runner') != -1) { 344 | folder = 'runner'; 345 | } else { 346 | //Better to guess rather than nothing 347 | folder = suffix.replace(/\./, '/'); 348 | } 349 | } 350 | return { suffix : suffix, folder : folder }; 351 | } 352 | 353 | chrome.storage.local.get({ 354 | baseUrl: _GOOGLESOURCE_SITE 355 | }, function(items) { 356 | var url = window.location.href; 357 | var appendContent; 358 | 359 | var m; 360 | if (m = url.match(_PACKAGE_DOC_URL_REGEX)) { 361 | var nameSlash = m[1]; 362 | var packageName = nameSlash.replace(/\//g, '.'); 363 | 364 | var pi = getPackageInfo(packageName); 365 | if (pi && pi.project != null) { 366 | var templateUrl; 367 | var espressoInfo = getTestingSupportLibraryInfo(packageName); 368 | 369 | switch (items.baseUrl) { 370 | case _GITHUB_SITE: { 371 | var isOkGithub = espressoInfo == null && isPackageAvailableGithub(pi); 372 | if (isOkGithub) { 373 | templateUrl = _GITHUB_URL_TEMPLATE; 374 | break; 375 | } 376 | } 377 | case _GOOGLESOURCE_SITE: { 378 | if (packageName.indexOf('constraint') != -1) { 379 | templateUrl = _CONSTRAINT_LAYOUT_URL_TEMPLATE; 380 | } else { 381 | templateUrl = _GOOGLESOURCE_URL_TEMPLATE; 382 | } 383 | break; 384 | } 385 | default: 386 | templateUrl = _ALTERNATIVE_URL_TEMPLATE; 387 | break; 388 | } 389 | 390 | if (packageName in _NAME_REFINEMENTS) { 391 | var refinements = _NAME_REFINEMENTS[packageName]; 392 | outerNameSlash = outerNameSlash.replace(refinements.replace, refinements.with); 393 | } 394 | 395 | var url = templateUrl 396 | .replace(/\$BASEURL/g, items.baseUrl) 397 | .replace(/\$PROJECT/g, pi.project.replace(/\//g, isOkGithub ? "_" : "/")) 398 | .replace(/\$TREE/g, pi.tree) 399 | .replace(/\$NAME_SLASH/g, nameSlash); 400 | 401 | if (espressoInfo != null) { 402 | var suffix; 403 | if (espressoInfo.suffix != null) { 404 | suffix = espressoInfo.suffix.replace(/\./g, '/'); 405 | } else { 406 | suffix = ''; 407 | } 408 | var folder = espressoInfo.folder; 409 | var urlPattern; 410 | if (suffix != '') { 411 | urlPattern = 'base/+/refs/heads/master/core/java/android/support/test/' + suffix; 412 | } else { 413 | urlPattern = 'base/+/refs/heads/master/core/java/android/support/test'; 414 | } 415 | url = url.replace(urlPattern, 416 | 'testing/+/android-support-test/'); 417 | url += folder + '/src/main/java/android/support/test/' + suffix; 418 | } 419 | 420 | appendContent = [ 421 | 'view source listing' 422 | ].join(''); 423 | } 424 | 425 | } else if (m = url.match(_RESOURCE_DOC_URL_REGEX)) { 426 | var nameSlash = m[1]; 427 | if (url.indexOf('support') === -1) { 428 | nameSlash = "android." + nameSlash; 429 | } 430 | if (nameSlash in _RESOURCE_MAP) { 431 | var destinations = _RESOURCE_MAP[nameSlash]; 432 | if (!destinations.splice) { 433 | // Single string, convert to array 434 | destinations = [destinations]; 435 | } 436 | appendContent = ''; 437 | 438 | var project = 'base'; 439 | var tree = 'core/res/res'; 440 | if (url.indexOf('support') !== -1) { 441 | var packageName = getSupportPackageName(url); 442 | 443 | project = 'support'; 444 | tree = packageName + '/res'; 445 | 446 | packageName = 'android.support.' + packageName; 447 | 448 | if (_PACKAGE_MAP[packageName].project == null) return; 449 | } 450 | 451 | switch (items.baseUrl) { 452 | case _GITHUB_SITE: { 453 | templateUrl = _GITHUB_RESOURCES_PATH; 454 | break; 455 | } 456 | case _GOOGLESOURCE_SITE: { 457 | templateUrl = _GOOGLESOURCE_RESOURCES_PATH; 458 | break; 459 | } 460 | default: 461 | templateUrl = _ALTERNATIVE_RESOURCES_PATH; 462 | break; 463 | } 464 | 465 | for (var i = 0; i < destinations.length; i++) { 466 | var resPath = destinations[i]; 467 | appendContent += [ 468 | 'view res/', 473 | resPath.replace(/\/$/, ''), 474 | '' 475 | ].join(''); 476 | } 477 | } 478 | 479 | } else if (m = url.match(_CLASS_DOC_URL_REGEX)) { 480 | var nameSlash = m[1]; 481 | var outerNameSlash = nameSlash.replace(/\..*$/, ''); // trim inner classes 482 | var outerNameDot = outerNameSlash.replace(/\//g, '.'); 483 | var packageName = trimLastNamePart(outerNameDot); 484 | 485 | var pi = getPackageInfo(packageName); 486 | if (packageName in _TREE_REFINEMENTS) { 487 | var refinements = _TREE_REFINEMENTS[packageName]; 488 | for (var i = 0; i < refinements.length; i++) { 489 | if (outerNameDot.match(refinements[i].regex)) { 490 | pi.tree = refinements[i].tree; 491 | break; 492 | } 493 | } 494 | } 495 | if (packageName in _NAME_REFINEMENTS) { 496 | var refinements = _NAME_REFINEMENTS[packageName]; 497 | outerNameSlash = outerNameSlash.replace(refinements.replace, refinements.with); 498 | } 499 | if (pi && pi.project != null) { 500 | var templateUrl; 501 | var espressoInfo = getTestingSupportLibraryInfo(packageName); 502 | 503 | switch (items.baseUrl) { 504 | case _GITHUB_SITE: { 505 | var isOkGithub = espressoInfo == null && isPackageAvailableGithub(pi); 506 | if (isOkGithub) { 507 | templateUrl = _GITHUB_URL_TEMPLATE; 508 | break; 509 | } 510 | } 511 | case _GOOGLESOURCE_SITE: { 512 | if (packageName.indexOf('constraint') != -1) { 513 | templateUrl = _CONSTRAINT_LAYOUT_URL_TEMPLATE; 514 | } else { 515 | templateUrl = _GOOGLESOURCE_URL_TEMPLATE; 516 | } 517 | break; 518 | } 519 | default: 520 | templateUrl = _ALTERNATIVE_URL_TEMPLATE; 521 | break; 522 | } 523 | 524 | var url = templateUrl 525 | .replace(/\$BASEURL/g, items.baseUrl) 526 | .replace(/\$PROJECT/g, pi.project.replace(/\//g, isOkGithub ? "_" : "/")) 527 | .replace(/\$TREE/g, pi.tree) 528 | .replace(/\$NAME_SLASH/g, outerNameSlash + '.java'); 529 | 530 | if (espressoInfo != null) { 531 | url = url.replace('base/+/refs/heads/master/core/java/android/support/test/', 532 | 'testing/+/android-support-test/' 533 | + espressoInfo.folder + '/src/main/java/android/support/test/'); 534 | } 535 | 536 | appendContent = [ 537 | 'view source' 538 | ].join(''); 539 | } 540 | 541 | } 542 | 543 | if (appendContent) { 544 | var appendNode = document.createElement('div'); 545 | appendNode.classList.add('__asdk_search_extension_link_container__'); 546 | appendNode.innerHTML = appendContent; 547 | document.querySelector('#jd-content').insertBefore( 548 | appendNode, document.querySelector('#jd-content h1').nextSibling); 549 | } 550 | 551 | var samplesUrl; 552 | 553 | switch (items.baseUrl) { 554 | case _GITHUB_SITE: { 555 | samplesUrl = _GITHUB_SAMPLES_PATH; 556 | break; 557 | } 558 | case _GOOGLESOURCE_SITE: { 559 | samplesUrl = _GOOGLESOURCE_SAMPLES_PATH; 560 | break; 561 | } 562 | default: 563 | samplesUrl = _ALTERNATIVE_SAMPLES_PATH.replace(/\$BASEURL/g, items.baseUrl); 564 | break; 565 | } 566 | 567 | // rewrite any direct links to sample code 568 | var sampleLinks = document.querySelectorAll('a[href*="/resources/samples"]'); 569 | for (var i = 0; i < sampleLinks.length; i++) { 570 | var link = sampleLinks[i]; 571 | var codePath = link.href.split('resources/samples')[1]; 572 | var rootSuffix = 'index.html'; // a rooted sample link 573 | var classSuffix = '.html'; // a specific class link, usually in ApiDemos 574 | if (codePath.indexOf(rootSuffix) > 0) { 575 | codePath = codePath.slice(0, codePath.indexOf(rootSuffix)); 576 | } else if (classSuffix == codePath.slice(-classSuffix.length)) { 577 | codePath = codePath.slice(0, codePath.length - classSuffix.length) + '.java'; 578 | } 579 | link.href = samplesUrl + codePath; 580 | } 581 | 582 | }); 583 | -------------------------------------------------------------------------------- /makezip.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | find . -iname \.DS_Store -exec rm {} \; 3 | rm -rf extension.zip 4 | cd extension/ 5 | zip -qr ../extension.zip . 6 | cd .. 7 | zipinfo -l extension.zip 8 | --------------------------------------------------------------------------------