blob: 18f1547d0ed982fac3bcd973151549aee559b007 [file] [log] [blame]
Roman Nurike577d722010-04-16 15:57:34 -07001var ANDROID_TAGS = {
2 type: {
3 'article': 'Article',
4 'tutorial': 'Tutorial',
5 'sample': 'Sample',
6 'video': 'Video',
7 'library': 'Code Library'
8 },
9 topic: {
10 'accessibility': 'Accessibility',
11 'accountsync': 'Accounts & Sync',
12 'bestpractice': 'Best Practices',
13 'communication': 'Communication',
14 'compatibility': 'Compatibility',
15 'data': 'Data Access',
16 'drawing': 'Canvas Drawing',
17 'gamedev': 'Game Development',
18 'gl': 'OpenGL ES',
19 'input': 'Input Methods',
20 'intent': 'Intents',
21 'layout': 'Layouts/Views',
22 'media': 'Multimedia',
Roman Nurike7d60072011-05-18 17:50:39 -070023 'multitasking': 'Multi-tasking',
Roman Nurike577d722010-04-16 15:57:34 -070024 'newfeature': 'New Features',
25 'performance': 'Performance',
26 'search': 'Search',
27 'testing': 'Testing',
28 'ui': 'User Interface',
Roman Nurik94be4a52011-02-11 14:46:00 -080029 'web': 'Web Content',
30 'widgets': 'App Widgets'
Roman Nurike577d722010-04-16 15:57:34 -070031 },
32 misc: {
33 'external': 'External',
Scott Main9ed517d2011-09-21 21:04:19 -070034 'new': 'New',
35 'updated': 'Updated'
Roman Nurike577d722010-04-16 15:57:34 -070036 }
37};
38
39var ANDROID_RESOURCES = [
40
41//////////////////////////
42/// TECHNICAL ARTICLES ///
43//////////////////////////
44
45 {
46 tags: ['article', 'performance', 'bestpractice'],
47 path: 'articles/avoiding-memory-leaks.html',
48 title: {
49 en: 'Avoiding Memory Leaks'
50 },
51 description: {
52 en: 'Mobile devices often have limited memory, and memory leaks can cause your application to waste this valuable resource without your knowledge. This article provides tips to help you avoid common causes of memory leaks on the Android platform.'
53 }
54 },
55 {
56 tags: ['article', 'compatibility'],
57 path: 'articles/backward-compatibility.html',
58 title: {
59 en: 'Backward Compatibility'
60 },
61 description: {
62 en: 'The Android platform strives to ensure backwards compatibility. However, sometimes you want to use new features which aren\'t supported on older platforms. This article discusses strategies for selectively using these features based on availability, allowing you to keep your applications portable across a wide range of devices.'
63 }
64 },
65 {
66 tags: ['article', 'intent'],
67 path: 'articles/can-i-use-this-intent.html',
68 title: {
69 en: 'Can I Use this Intent?'
70 },
71 description: {
72 en: 'Android offers a very powerful and yet easy-to-use message type called an intent. You can use intents to turn applications into high-level libraries and make code modular and reusable. While it is nice to be able to make use of a loosely coupled API, there is no guarantee that the intent you send will be received by another application. This article describes a technique you can use to find out whether the system contains any application capable of responding to the intent you want to use.'
73 }
74 },
75 {
76 tags: ['article', 'input'],
77 path: 'articles/creating-input-method.html',
78 title: {
79 en: 'Creating an Input Method'
80 },
81 description: {
82 en: 'Input Method Editors (IMEs) provide the mechanism for entering text into text fields and other Views. Android devices come bundled with at least one IME, but users can install additional IMEs. This article covers the basics of developing an IME for the Android platform.'
83 }
84 },
85 {
86 tags: ['article', 'drawing', 'ui'],
87 path: 'articles/drawable-mutations.html',
88 title: {
89 en: 'Drawable Mutations'
90 },
91 description: {
92 en: 'Drawables are pluggable drawing containers that allow applications to display graphics. This article explains some common pitfalls when trying to modify the properties of multiple Drawables.'
93 }
94 },
95 {
96 tags: ['article', 'bestpractice', 'ui'],
97 path: 'articles/faster-screen-orientation-change.html',
98 title: {
99 en: 'Faster Screen Orientation Change'
100 },
101 description: {
102 en: 'When an Android device changes its orientation, the default behavior is to automatically restart the current activity with a new configuration. However, this can become a bottleneck in applications that access a large amount of external data. This article discusses how to gracefully handle this situation without resorting to manually processing configuration changes.'
103 }
104 },
105 {
106 tags: ['article', 'compatibility'],
107 path: 'articles/future-proofing.html',
108 title: {
109 en: 'Future-Proofing Your Apps'
110 },
111 description: {
112 en: 'A collection of common sense advice to help you ensure that your applications don\'t break when new versions of the Android platform are released.'
113 }
114 },
115 {
116 tags: ['article', 'input'],
117 path: 'articles/gestures.html',
118 title: {
119 en: 'Gestures'
120 },
121 description: {
122 en: 'Touch screens allow users to perform gestures, such as tapping, dragging, flinging, or sliding, to perform various actions. The gestures API enables your application to recognize even complicated gestures with ease. This article explains how to integrate this API into an application.'
123 }
124 },
125 {
126 tags: ['article', 'gamedev', 'gl'],
127 path: 'articles/glsurfaceview.html',
128 title: {
129 en: 'Introducing GLSurfaceView'
130 },
131 description: {
132 en: 'This article provides an overview of GLSurfaceView, a class that makes it easy to implement 2D or 3D OpenGL rendering inside of an Android application.'
133 }
134 },
135 {
136 tags: ['article', 'ui', 'layout'],
137 path: 'articles/layout-tricks-reuse.html',
138 title: {
139 en: 'Layout Tricks: Creating Reusable UI Components'
140 },
141 description: {
142 en: 'Learn how to combine multiple standard UI widgets into a single high-level component, which can be reused throughout your application.'
143 }
144 },
145 {
146 tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
147 path: 'articles/layout-tricks-efficiency.html',
148 title: {
149 en: 'Layout Tricks: Creating Efficient Layouts'
150 },
151 description: {
152 en: 'Learn how to optimize application layouts as this article walks you through converting a LinearLayout into a RelativeLayout, and analyzes the resulting implications on performance.'
153 }
154 },
155 {
156 tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
157 path: 'articles/layout-tricks-stubs.html',
158 title: {
159 en: 'Layout Tricks: Using ViewStubs'
160 },
161 description: {
162 en: 'Learn about using ViewStubs inside an application\'s layout in order to inflate rarely used UI elements, without the performance implications which would otherwise be caused by using the <code>&lt;include&gt;</code> tag.'
163 }
164 },
165 {
166 tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
167 path: 'articles/layout-tricks-merge.html',
168 title: {
169 en: 'Layout Tricks: Merging Layouts'
170 },
171 description: {
172 en: 'Learn how to use the <code>&lt;merge&gt;</code> tag in your XML layouts in order to avoid unnecessary levels of hierarchy within an application\'s view tree.'
173 }
174 },
175 {
176 tags: ['article', 'ui', 'performance'],
177 path: 'articles/listview-backgrounds.html',
178 title: {
179 en: 'ListView Backgrounds: An Optimization'
180 },
181 description: {
182 en: 'ListViews are very popular widgets within the Android framework. This article describes some of the optimizations used by the ListView widget, and how to avoid some common issues that this causes when trying to use a custom background.'
183 }
184 },
185 {
Roman Nurika35f6562011-02-04 14:28:22 -0800186 tags: ['article', 'ui'],
Roman Nurike577d722010-04-16 15:57:34 -0700187 path: 'articles/live-folders.html',
188 title: {
189 en: 'Live Folders'
190 },
191 description: {
192 en: 'Live Folders allow users to display any source of data on their home screen without launching an application. This article discusses how to export an application\'s data in a format suitable for display inside of a live folder.'
193 }
194 },
195 {
Roman Nurika35f6562011-02-04 14:28:22 -0800196 tags: ['article', 'ui'],
Roman Nurike577d722010-04-16 15:57:34 -0700197 path: 'articles/live-wallpapers.html',
198 title: {
199 en: 'Live Wallpapers'
200 },
201 description: {
202 en: 'Live wallpapers are richer, animated, interactive backgrounds that users can display in their home screens. Learn how to create a live wallpaper and bundle it in an application that users can install on their devices.'
203 }
204 },
205 {
Roman Nurike7d60072011-05-18 17:50:39 -0700206 tags: ['article', 'bestpractice', 'multitasking'],
207 path: 'articles/multitasking-android-way.html',
208 title: {
209 en: 'Multitasking the Android Way'
210 },
211 description: {
212 en: 'This article describes best practices and user experience guidelines for multi-tasking on Android.'
213 }
214 },
215 {
Roman Nurike577d722010-04-16 15:57:34 -0700216 tags: ['article', 'input'],
217 path: 'articles/on-screen-inputs.html',
218 title: {
219 en: 'Onscreen Input Methods'
220 },
221 description: {
222 en: 'The Input Method Framework (IMF) allows users to take advantage of on-screen input methods, such as software keyboards. This article provides an overview of Input Method Editors (IMEs) and how applications interact with them.'
223 }
224 },
225 {
226 tags: ['article', 'performance', 'bestpractice'],
227 path: 'articles/painless-threading.html',
228 title: {
229 en: 'Painless Threading'
230 },
231 description: {
232 en: 'This article discusses the threading model used by Android applications and how applications can ensure best UI performance by spawning worker threads to handle long-running operations, rather than handling them in the main thread. The article also explains the API that your application can use to interact with Android UI toolkit components running on the main thread and spawn managed worker threads.'
233 }
234 },
235 {
236 tags: ['article', 'ui', 'search'],
237 path: 'articles/qsb.html',
238 title: {
239 en: 'Quick Search Box'
240 },
241 description: {
242 en: 'Quick Search Box (QSB) is a powerful, system-wide search framework. QSB makes it possible for users to quickly and easily find what they\'re looking for, both on their devices and on the web. This article discusses how to work with the QSB framework to add new search results for an installed application.'
243 }
244 },
245 {
Roman Nurikecaf3f42011-05-16 14:00:13 -0700246 tags: ['article', 'input', 'search', 'ui'],
247 path: 'articles/speech-input.html',
248 title: {
249 en: 'Speech Input'
250 },
251 description: {
252 en: 'This articles describes the basics of integrating speech recognition into Android applications.'
253 }
254 },
255 {
Roman Nurike7d60072011-05-18 17:50:39 -0700256 tags: ['article', 'compatibility', 'multitasking'],
257 path: 'articles/service-api-changes-starting-with.html',
258 title: {
259 en: 'Service API changes starting with Android 2.0'
260 },
261 description: {
262 en: 'This article describes the changes and improvements to services introduced in Android 2.0, as well as strategies for compatibility with older versions of the platform.'
263 }
264 },
265 {
Roman Nurike577d722010-04-16 15:57:34 -0700266 tags: ['article', 'ui'],
267 path: 'articles/touch-mode.html',
268 title: {
269 en: 'Touch Mode'
270 },
271 description: {
272 en: 'This article explains the touch mode, one of the most important principles of Android\'s UI toolkit. Whenever a user interacts with a device\'s touch screen, the system enters touch mode. While simple in concept, there are important implications touch mode that are often overlooked.'
273 }
274 },
275 {
276 tags: ['article', 'performance', 'bestpractice'],
277 path: 'articles/track-mem.html',
278 title: {
279 en: 'Tracking Memory Allocations'
280 },
281 description: {
282 en: 'This article discusses how to use the Allocation Tracker tool to observe memory allocations and avoid performance problems that would otherwise be caused by ignoring the effect of Dalvik\'s garbage collector.'
283 }
284 },
285 {
Roman Nurika35f6562011-02-04 14:28:22 -0800286 tags: ['article'],
Roman Nurike577d722010-04-16 15:57:34 -0700287 path: 'articles/ui-1.5.html',
288 title: {
289 en: 'UI Framework Changes in Android 1.5'
290 },
291 description: {
292 en: 'Explore the UI changes that were introduced in Android 1.5, compared with the UI provided in Android 1.0 and 1.1.'
293 }
294 },
295 {
Roman Nurika35f6562011-02-04 14:28:22 -0800296 tags: ['article'],
Roman Nurike577d722010-04-16 15:57:34 -0700297 path: 'articles/ui-1.6.html',
298 title: {
299 en: 'UI Framework Changes in Android 1.6'
300 },
301 description: {
302 en: 'Explore the UI changes that were introduced in Android 1.6, compared with the UI provided in Android 1.5. In particular, this article discusses changes to RelativeLayouts and click listeners.'
303 }
304 },
305 {
306 tags: ['article', 'ui', 'bestpractice'],
307 path: 'articles/timed-ui-updates.html',
308 title: {
309 en: 'Updating the UI from a Timer'
310 },
311 description: {
312 en: 'Learn about how to use Handlers as a more efficient replacement for java.util.Timer on the Android platform.'
313 }
314 },
315 {
316 tags: ['article', 'ui', 'accessibility'],
317 path: 'articles/tts.html',
318 title: {
319 en: 'Using Text-to-Speech'
320 },
321 description: {
322 en: 'The text-to-speech API lets your application "speak" to users, in any of several languages. This article provides an overview of the TTS API and how you use to add speech capabilities to your application.'
323 }
324 },
325 {
Scott Mainb4103302011-09-23 16:49:26 -0700326 tags: ['article', 'accountsync', 'data'],
327 path: 'articles/contacts.html',
328 title: {
329 en: 'Using the Contacts API'
330 },
331 description: {
332 en: 'Android provides a Contacts API for managing and integrating contacts from multiple accounts and data sources and allows apps to read various information about individual contacts.'
333 }
334 },
335 {
Roman Nurike577d722010-04-16 15:57:34 -0700336 tags: ['article', 'ui', 'web'],
337 path: 'articles/using-webviews.html',
338 title: {
339 en: 'Using WebViews'
340 },
341 description: {
342 en: 'WebViews allow an application to dynamically display HTML and execute JavaScript, without relinquishing control to a separate browser application. This article introduces the WebView classes and provides a sample application that demonstrates its use.'
343 }
344 },
345 {
346 tags: ['article', 'ui'],
347 path: 'articles/wikinotes-linkify.html',
348 title: {
349 en: 'WikiNotes: Linkify your Text!'
350 },
351 description: {
352 en: 'This article introduces WikiNotes for Android, part of the Apps for Android project. It covers the use of Linkify to turn ordinary text views into richer, link-oriented content that causes Android intents to fire when a link is selected.'
353 }
354 },
355 {
356 tags: ['article', 'intent'],
357 path: 'articles/wikinotes-intents.html',
358 title: {
359 en: 'WikiNotes: Routing Intents'
360 },
361 description: {
362 en: 'This article illustrates how an application, in this case the WikiNotes sample app, can use intents to route various types of linked text to the application that handles that type of data. For example, an app can use intents to route a linked telephone number to a dialer app and a web URL to a browser.'
363 }
364 },
365 {
366 tags: ['article', 'ui', 'performance'],
367 path: 'articles/window-bg-speed.html',
368 title: {
369 en: 'Window Backgrounds & UI Speed'
370 },
371 description: {
372 en: 'Some Android applications need to squeeze every bit of performance out of the UI toolkit and there are many ways to do so. In this article, you will discover how to speed up the drawing and the perceived startup time of your activities. Both of these techniques rely on a single feature, the window\'s background drawable.'
373 }
374 },
375 {
376 tags: ['article', 'performance', 'bestpractice'],
377 path: 'articles/zipalign.html',
378 title: {
379 en: 'Zipalign: an Easy Optimization'
380 },
381 description: {
382 en: 'The Android SDK includes a tool called zipalign that optimizes the way an application is packaged. Running zipalign against your application enables Android to interact with it more efficiently at run time and thus has the potential to make it and the overall system run faster. This article provides a high-level overview of the zipalign tool and its use.'
383 }
384 },
385
386///////////////////
387/// SAMPLE CODE ///
388///////////////////
Robert Ly3f9b6442011-01-19 18:14:50 -0800389
390 {
Scott Main9ed517d2011-09-21 21:04:19 -0700391 tags: ['sample'],
Robert Ly3f9b6442011-01-19 18:14:50 -0800392 path: 'samples/AccelerometerPlay/index.html',
393 title: {
394 en: 'Accelerometer Play'
395 },
396 description: {
Roman Nurik94be4a52011-02-11 14:46:00 -0800397 en: 'An example of using the accelerometer to integrate the device\'s acceleration to a position using the Verlet method. This is illustrated with a very simple particle system comprised of a few iron balls freely moving on an inclined wooden table. The inclination of the virtual table is controlled by the device\'s accelerometer.'
Robert Ly3f9b6442011-01-19 18:14:50 -0800398 }
399 },
400 {
Roman Nurikf4b2ba12011-09-30 15:48:34 -0700401 tags: ['sample', 'new', 'ui', 'compatibility', 'newfeature'],
402 path: 'samples/ActionBarCompat/index.html',
403 title: {
404 en: 'Action Bar Compatibility'
405 },
406 description: {
407 en: 'Shows how to use the action bar on both pre-API 11 and API 11+ devices, maximizing code re-use.'
408 }
409 },
410 {
Robert Lyd8afdb42011-10-04 16:57:09 -0700411 tags: ['sample', 'new'],
Scott Main49eb5192011-10-14 01:24:57 -0700412 path: 'samples/AndroidBeamDemo/index.html',
Robert Lyd8afdb42011-10-04 16:57:09 -0700413 title: {
Scott Main49eb5192011-10-14 01:24:57 -0700414 en: 'Android Beam Demo'
Robert Lyd8afdb42011-10-04 16:57:09 -0700415 },
416 description: {
417 en: 'An example of how to use the Android Beam feature to send messages between two Android-powered devices (API level 14 or later) that support NFC.'
418 }
419 },
420 {
Scott Maine09743272011-10-14 11:25:46 -0700421 tags: ['sample', 'layout', 'ui', 'updated'],
Roman Nurike577d722010-04-16 15:57:34 -0700422 path: 'samples/ApiDemos/index.html',
423 title: {
424 en: 'API Demos'
425 },
426 description: {
427 en: 'A variety of small applications that demonstrate an extensive collection of framework topics.'
428 }
429 },
430 {
Scott Main9ed517d2011-09-21 21:04:19 -0700431 tags: ['sample', 'layout', 'ui', 'fragment', 'loader'],
Dianne Hackborn2f048832011-06-16 13:31:57 -0700432 path: 'samples/Support4Demos/index.html',
433 title: {
434 en: 'API 4+ Support Demos'
435 },
436 description: {
437 en: 'A variety of small applications that demonstrate the use of the helper classes in the Android API 4+ Support Library (classes which work down to API level 4 or version 1.6 of the platform).'
438 }
439 },
440 {
Scott Main9ed517d2011-09-21 21:04:19 -0700441 tags: ['sample', 'layout', 'ui'],
Dianne Hackborn2f048832011-06-16 13:31:57 -0700442 path: 'samples/Support13Demos/index.html',
443 title: {
444 en: 'API 13+ Support Demos'
445 },
446 description: {
447 en: 'A variety of small applications that demonstrate the use of the helper classes in the Android API 13+ Support Library (classes which work down to API level 13 or version 3.2 of the platform).'
448 }
449 },
450 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800451 tags: ['sample', 'data', 'newfeature', 'accountsync'],
Roman Nurike577d722010-04-16 15:57:34 -0700452 path: 'samples/BackupRestore/index.html',
453 title: {
454 en: 'Backup and Restore'
455 },
456 description: {
457 en: 'Illustrates a few different approaches that an application developer can take when integrating with the Android Backup Manager using the BackupAgent API introduced in Android 2.2.'
458 }
459 },
460 {
461 tags: ['sample', 'communication'],
462 path: 'samples/BluetoothChat/index.html',
463 title: {
464 en: 'Bluetooth Chat'
465 },
466 description: {
467 en: 'An application for two-way text messaging over Bluetooth.'
468 }
469 },
470 {
Fred Chung2d410df2011-11-14 11:39:23 -0800471 tags: ['sample', 'communication', 'new'],
472 path: 'samples/BluetoothHDP/index.html',
473 title: {
474 en: 'Bluetooth HDP Demo'
475 },
476 description: {
477 en: 'A sample application that demonstrates how to communicate with a Bluetooth Health Device Profile (HDP) device.'
478 }
479 },
480 {
Roman Nurike577d722010-04-16 15:57:34 -0700481 tags: ['sample', 'accountsync'],
482 path: 'samples/BusinessCard/index.html',
483 title: {
484 en: 'BusinessCard'
485 },
486 description: {
487 en: 'An application that demonstrates how to launch the built-in contact picker from within an activity. This sample also uses reflection to ensure that the correct version of the contacts API is used, depending on which API level the application is running under.'
488 }
489 },
490 {
491 tags: ['sample', 'accountsync'],
492 path: 'samples/ContactManager/index.html',
493 title: {
494 en: 'Contact Manager'
495 },
496 description: {
497 en: 'An application that demonstrates how to query the system contacts provider using the <code>ContactsContract</code> API, as well as insert contacts into a specific account.'
498 }
499 },
500 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800501 tags: ['sample', 'ui'],
502 path: 'samples/CubeLiveWallpaper/index.html',
503 title: {
504 en: 'Cube Live Wallpaper'
505 },
506 description: {
507 en: 'An application that demonstrates how to create a live wallpaper and bundle it in an application that users can install on their devices.'
508 }
509 },
510 {
Roman Nurike577d722010-04-16 15:57:34 -0700511 tags: ['sample'],
512 path: 'samples/Home/index.html',
513 title: {
514 en: 'Home'
515 },
516 description: {
517 en: 'A home screen replacement application.'
518 }
519 },
520 {
Scott Main9ed517d2011-09-21 21:04:19 -0700521 tags: ['sample', 'updated', 'newfeature', 'ui'],
Roman Nurika35f6562011-02-04 14:28:22 -0800522 path: 'samples/HoneycombGallery/index.html',
Alexander Lucasd8472542011-01-19 12:15:38 -0800523 title: {
524 en: 'Honeycomb Gallery'
525 },
526 description: {
Scott Main9ed517d2011-09-21 21:04:19 -0700527 en: 'An image gallery application that demonstrates a variety of new APIs in Android 3.0 (Honeycomb). In addition to providing a tablet-optimized design, it also supports handsets running Android 4.0 (Ice Cream Sandwich) and beyond, so is a good example of how to reuse Fragments to support different screen sizes.'
Alexander Lucasd8472542011-01-19 12:15:38 -0800528 }
529 },
530 {
Roman Nurike577d722010-04-16 15:57:34 -0700531 tags: ['sample', 'gamedev', 'media'],
532 path: 'samples/JetBoy/index.html',
533 title: {
534 en: 'JetBoy'
535 },
536 description: {
537 en: 'A game that demonstrates the SONiVOX JET interactive music technology, with <code><a href="/reference/android/media/JetPlayer.html">JetPlayer</a></code>.'
538 }
539 },
540 {
Roman Nurike577d722010-04-16 15:57:34 -0700541 tags: ['sample', 'gamedev', 'media'],
542 path: 'samples/LunarLander/index.html',
543 title: {
544 en: 'Lunar Lander'
545 },
546 description: {
547 en: 'A classic Lunar Lander game.'
548 }
549 },
550 {
551 tags: ['sample', 'ui', 'bestpractice', 'layout'],
552 path: 'samples/MultiResolution/index.html',
553 title: {
554 en: 'Multiple Resolutions'
555 },
556 description: {
557 en: 'A sample application that shows how to use resource directory qualifiers to provide different resources for different screen configurations.'
558 }
559 },
560 {
561 tags: ['sample', 'data'],
Robert Ly3f9b6442011-01-19 18:14:50 -0800562 path: 'samples/NFCDemo/index.html',
563 title: {
564 en: 'NFC Demo'
565 },
566 description: {
567 en: 'An application for reading NFC Forum Type 2 Tags using the NFC APIs'
568 }
569 },
570 {
571 tags: ['sample', 'data'],
Roman Nurike577d722010-04-16 15:57:34 -0700572 path: 'samples/NotePad/index.html',
573 title: {
574 en: 'Note Pad'
575 },
576 description: {
577 en: 'An application for saving notes. Similar (but not identical) to the <a href="/resources/tutorials/notepad/index.html">Notepad tutorial</a>.'
578 }
579 },
580 {
Roman Nurikb927ec12011-09-30 18:15:13 -0700581 tags: ['sample', 'media', 'updated'],
Bruno Oliveira9e67587d2011-06-07 01:23:02 -0400582 path: 'samples/RandomMusicPlayer/index.html',
583 title: {
584 en: 'Random Music Player'
585 },
586 description: {
Roman Nurikb927ec12011-09-30 18:15:13 -0700587 en: 'Demonstrates how to write a multimedia application that plays music from the device and from URLs. It manages media playback from a service and can play music in the background, respecting audio focus changes. Also shows how to use the new Remote Control APIs in API level 14.'
Bruno Oliveira9e67587d2011-06-07 01:23:02 -0400588 }
589 },
590 {
Robert Ly92ebfd7f2011-11-02 11:58:36 -0700591 tags: ['sample', 'newfeature', 'performance', 'gamedev', 'gl', 'updated'],
Robert Ly44b362c2011-02-28 15:53:15 -0800592 path: 'samples/RenderScript/index.html',
Robert Ly6518f482011-02-14 18:57:46 -0800593 title: {
Robert Ly44b362c2011-02-28 15:53:15 -0800594 en: 'RenderScript'
Robert Ly6518f482011-02-14 18:57:46 -0800595 },
596 description: {
Robert Ly44b362c2011-02-28 15:53:15 -0800597 en: 'A set of samples that demonstrate how to use various features of the RenderScript APIs.'
Robert Ly6518f482011-02-14 18:57:46 -0800598 }
599 },
600 {
Scott Mainc4c541a2011-10-05 11:35:33 -0700601 tags: ['sample', 'input', 'new'],
satok44619d32011-10-19 22:46:18 +0900602 path: 'samples/SpellChecker/SampleSpellCheckerService/index.html',
Scott Mainc4c541a2011-10-05 11:35:33 -0700603 title: {
satok182e4ae2011-10-27 19:57:34 +0900604 en: 'Spell Checker Service'
Scott Mainc4c541a2011-10-05 11:35:33 -0700605 },
606 description: {
satok182e4ae2011-10-27 19:57:34 +0900607 en: 'An example spell checker service, using the <a href="'+toRoot+'reference/android/service/textservice/SpellCheckerService.html"><code>SpellCheckerService</code></a>.'
608 }
609 },
610 {
611 tags: ['sample', 'input', 'new'],
612 path: 'samples/SpellChecker/HelloSpellChecker/index.html',
613 title: {
614 en: 'Spell Checker Client'
615 },
616 description: {
617 en: 'An example spell checker client, using the <a href="'+toRoot+'reference/android/view/textservice/TextServicesManager.html"><code>TextServicesManager</code></a> and <a href="'+toRoot+'reference/android/view/textservice/SpellCheckerSession.html"><code>SpellCheckerSession</code></a>.'
Scott Mainc4c541a2011-10-05 11:35:33 -0700618 }
619 },
620 {
Scott Maine1e9e932011-10-13 23:36:19 -0700621 tags: ['sample', 'accountsync', 'updated'],
Roman Nurike577d722010-04-16 15:57:34 -0700622 path: 'samples/SampleSyncAdapter/index.html',
623 title: {
624 en: 'SampleSyncAdapter'
625 },
626 description: {
627 en: 'Demonstrates how an application can communicate with a cloud-based service and synchronize its data with data stored locally in a content provider. The sample uses two related parts of the Android framework &mdash; the account manager and the synchronization manager (through a sync adapter).'
628 }
629 },
630 {
Scott Main183ecbc2010-11-19 10:20:45 -0800631 tags: ['sample', 'ui', 'search'],
Roman Nurike577d722010-04-16 15:57:34 -0700632 path: 'samples/SearchableDictionary/index.html',
633 title: {
634 en: 'Searchable Dictionary v2'
635 },
636 description: {
637 en: 'A sample application that demonstrates Android\'s search framework, including how to provide search suggestions for Quick Search Box.'
638 }
639 },
640 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800641 tags: ['sample'],
642 path: 'samples/SipDemo/index.html',
643 title: {
644 en: 'SIP Demo'
645 },
646 description: {
647 en: 'A demo application highlighting how to make internet-based calls with the SIP API.'
648 }
649 },
650 {
Roman Nurike577d722010-04-16 15:57:34 -0700651 tags: ['sample', 'layout', 'ui'],
652 path: 'samples/Snake/index.html',
653 title: {
654 en: 'Snake'
655 },
656 description: {
657 en: 'An implementation of the classic game "Snake."'
658 }
659 },
660 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800661 tags: ['sample', 'input'],
662 path: 'samples/SoftKeyboard/index.html',
663 title: {
664 en: 'Soft Keyboard'
665 },
666 description: {
667 en: 'An example of writing an input method for a software keyboard.'
668 }
669 },
670 {
Scott Main183ecbc2010-11-19 10:20:45 -0800671 tags: ['sample', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700672 path: 'samples/Spinner/index.html',
673 title: {
674 en: 'Spinner'
675 },
676 description: {
677 en: 'A simple application that serves as an application under test for the SpinnerTest example.'
678 }
679 },
680 {
Scott Main183ecbc2010-11-19 10:20:45 -0800681 tags: ['sample', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700682 path: 'samples/SpinnerTest/index.html',
683 title: {
684 en: 'SpinnerTest'
685 },
686 description: {
687 en: 'The test application for the Activity Testing tutorial. It tests the Spinner example application.'
688 }
689 },
690 {
Scott Main9ed517d2011-09-21 21:04:19 -0700691 tags: ['sample', 'newfeature', 'widgets'],
Adam Cohenfca67c52011-02-10 18:57:45 -0800692 path: 'samples/StackWidget/index.html',
693 title: {
Scott Maind873e662011-02-15 10:58:34 -0800694 en: 'StackView Widget'
Adam Cohenfca67c52011-02-10 18:57:45 -0800695 },
696 description: {
697 en: 'Demonstrates how to create a simple collection widget containing a StackView.'
698 }
699 },
700 {
Scott Main183ecbc2010-11-19 10:20:45 -0800701 tags: ['sample', 'newfeature'],
Roman Nurike577d722010-04-16 15:57:34 -0700702 path: 'samples/TicTacToeLib/index.html',
703 title: {
704 en: 'TicTacToeLib'
705 },
706 description: {
707 en: 'An example of an Android library project, a type of project that lets you store and manage shared code and resources in one place, then make them available to your other Android applications.'
708 }
709 },
710 {
Scott Main183ecbc2010-11-19 10:20:45 -0800711 tags: ['sample', 'newfeature',],
Roman Nurike577d722010-04-16 15:57:34 -0700712 path: 'samples/TicTacToeMain/index.html',
713 title: {
714 en: 'TicTacToeMain'
715 },
716 description: {
717 en: 'Demonstrates how an application can make use of shared code and resources stored in an Android library project.'
718 }
719 },
720 {
Fred Chung8e076fe2011-11-28 16:44:13 -0800721 tags: ['sample', 'communication', 'new'],
722 path: 'samples/ToyVpn/index.html',
723 title: {
724 en: 'Toy VPN Client'
725 },
726 description: {
727 en: 'A sample application that illustrates the creation of a custom VPN client.'
728 }
729 },
730 {
Scott Main9ed517d2011-09-21 21:04:19 -0700731 tags: ['sample', 'newfeature'],
Robert Ly8cdb2e22011-05-02 17:49:05 -0700732 path: 'samples/USB/index.html',
733 title: {
734 en: 'USB'
735 },
736 description: {
737 en: 'A set of samples that demonstrate how to use various features of the USB APIs.'
738 }
739 },
740 {
Debashish Chatterjeeacd6f5f2011-05-19 13:21:48 +0100741 tags: ['sample', 'data', 'new'],
742 path: 'samples/VoicemailProviderDemo/index.html',
743 title: {
Scott Mainc4c541a2011-10-05 11:35:33 -0700744 en: 'Voicemail Provider'
Debashish Chatterjeeacd6f5f2011-05-19 13:21:48 +0100745 },
746 description: {
Scott Main9ed517d2011-09-21 21:04:19 -0700747 en: 'A sample application to demonstrate how to use voicemail content provider APIs in Android 4.0.'
Debashish Chatterjeeacd6f5f2011-05-19 13:21:48 +0100748 }
749 },
750 {
Anirudh Dewani5d0dbea2011-10-06 08:03:45 +0530751 tags: ['sample','newfeature', 'new'],
752 path: 'samples/WiFiDirectDemo/index.html',
753 title: {
754 en: 'Wi-Fi Direct Demo'
755 },
756 description: {
757 en: 'A demo application to demonstrate how to use Wi-Fi Direct APIs.'
758 }
759 },
760 {
Roman Nurik94be4a52011-02-11 14:46:00 -0800761 tags: ['sample', 'ui', 'widgets'],
Roman Nurike577d722010-04-16 15:57:34 -0700762 path: 'samples/Wiktionary/index.html',
763 title: {
764 en: 'Wiktionary'
765 },
766 description: {
767 en: 'An example of creating interactive widgets for display on the Android home screen.'
768 }
769 },
770 {
Roman Nurik94be4a52011-02-11 14:46:00 -0800771 tags: ['sample', 'ui', 'widgets'],
Roman Nurike577d722010-04-16 15:57:34 -0700772 path: 'samples/WiktionarySimple/index.html',
773 title: {
774 en: 'Wiktionary (Simplified)'
775 },
776 description: {
777 en: 'A simple Android home screen widgets example.'
778 }
779 },
Gilles Debunne3eb9b662010-06-23 16:53:35 -0700780 {
Scott Main9ed517d2011-09-21 21:04:19 -0700781 tags: ['sample', 'widgets', 'newfeature'],
Winson Chung06d2fa72011-02-10 19:11:33 -0800782 path: 'samples/WeatherListWidget/index.html',
783 title: {
Scott Maind873e662011-02-15 10:58:34 -0800784 en: 'Weather List Widget'
Winson Chung06d2fa72011-02-10 19:11:33 -0800785 },
786 description: {
787 en: 'A more complex collection-widget example which uses a ContentProvider as its data source.'
788 }
789 },
790 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800791 tags: ['sample', 'layout'],
Gilles Debunne3eb9b662010-06-23 16:53:35 -0700792 path: 'samples/XmlAdapters/index.html',
793 title: {
794 en: 'XML Adapters'
795 },
796 description: {
797 en: 'Binding data to views using XML Adapters examples.'
798 }
799 },
Narayan Kamathaf1ad3c2011-06-23 10:43:27 +0100800 {
801 tags: ['sample', 'new', 'accessibility'],
802 path: 'samples/TtsEngine/index.html',
803 title: {
804 en: 'Text To Speech Engine'
805 },
806 description: {
Scott Main9ed517d2011-09-21 21:04:19 -0700807 en: 'An example Text To Speech engine written using the Android text to speech engine API in Android 4.0.'
Narayan Kamathaf1ad3c2011-06-23 10:43:27 +0100808 }
809 },
Roman Nurike577d722010-04-16 15:57:34 -0700810
811/////////////////
812/// TUTORIALS ///
813/////////////////
814
815 {
816 tags: ['tutorial'],
817 path: 'tutorials/hello-world.html',
818 title: {
819 en: 'Hello World'
820 },
821 description: {
822 en: 'Beginning basic application development with the Android SDK.'
823 }
824 },
825 {
826 tags: ['tutorial', 'ui', 'layout'],
827 path: 'tutorials/views/index.html',
828 title: {
829 en: 'Hello Views'
830 },
831 description: {
832 en: 'A walk-through of the various types of layouts and views available in the Android SDK.'
833 }
834 },
835 {
836 tags: ['tutorial', 'ui', 'bestpractice'],
837 path: 'tutorials/localization/index.html',
838 title: {
839 en: 'Hello Localization'
840 },
841 description: {
842 en: 'The basics of localizing your applications for multiple languages and locales.'
843 }
844 },
845 {
846 tags: ['tutorial', 'data'],
847 path: 'tutorials/notepad/index.html',
848 title: {
849 en: 'Notepad Tutorial'
850 },
851 description: {
852 en: 'A multi-part tutorial discussing intermediate-level concepts such as data access.'
853 }
854 },
855 {
Joe Fernandez0664a8f2011-07-15 16:02:30 -0700856 tags: ['tutorial', 'gl', 'new'],
857 path: 'tutorials/opengl/opengl-es10.html',
858 title: {
859 en: 'OpenGL ES 1.0'
860 },
861 description: {
862 en: 'The basics of implementing an application using the OpenGL ES 1.0 APIs.'
863 }
864 },
865 {
866 tags: ['tutorial', 'gl', 'new'],
867 path: 'tutorials/opengl/opengl-es20.html',
868 title: {
869 en: 'OpenGL ES 2.0'
870 },
871 description: {
872 en: 'The basics of implementing an application using the OpenGL ES 2.0 APIs.'
873 }
874 },
875 {
Scott Main183ecbc2010-11-19 10:20:45 -0800876 tags: ['tutorial', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700877 path: 'tutorials/testing/helloandroid_test.html',
878 title: {
879 en: 'Hello Testing'
880 },
881 description: {
882 en: 'A basic introduction to the Android testing framework.'
883 }
884 },
885 {
Scott Main183ecbc2010-11-19 10:20:45 -0800886 tags: ['tutorial', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700887 path: 'tutorials/testing/activity_test.html',
888 title: {
889 en: 'Activity Testing'
890 },
891 description: {
892 en: 'A more advanced demonstration of the Android testing framework and tools.'
893 }
894 }
895];