blob: fb4225dc8a2d30dad2af5c3163a8236ee5495abe [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 {
Joe Malin6a043252012-03-14 18:24:43 -0700266 tags: ['article', 'input', 'ui'],
267 path: 'articles/spell-checker-framework.html',
268 title: {
269 en: 'The Android Spell Checker Framework'
270 },
271 description: {
272 en: 'This article describes the Android spell checker framework and how to use to implement spell checking in applications.'
273 }
274 },
275
276 {
Roman Nurike577d722010-04-16 15:57:34 -0700277 tags: ['article', 'ui'],
278 path: 'articles/touch-mode.html',
279 title: {
280 en: 'Touch Mode'
281 },
282 description: {
283 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.'
284 }
285 },
286 {
287 tags: ['article', 'performance', 'bestpractice'],
288 path: 'articles/track-mem.html',
289 title: {
290 en: 'Tracking Memory Allocations'
291 },
292 description: {
293 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.'
294 }
295 },
296 {
Roman Nurika35f6562011-02-04 14:28:22 -0800297 tags: ['article'],
Roman Nurike577d722010-04-16 15:57:34 -0700298 path: 'articles/ui-1.5.html',
299 title: {
300 en: 'UI Framework Changes in Android 1.5'
301 },
302 description: {
303 en: 'Explore the UI changes that were introduced in Android 1.5, compared with the UI provided in Android 1.0 and 1.1.'
304 }
305 },
306 {
Roman Nurika35f6562011-02-04 14:28:22 -0800307 tags: ['article'],
Roman Nurike577d722010-04-16 15:57:34 -0700308 path: 'articles/ui-1.6.html',
309 title: {
310 en: 'UI Framework Changes in Android 1.6'
311 },
312 description: {
313 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.'
314 }
315 },
316 {
317 tags: ['article', 'ui', 'bestpractice'],
318 path: 'articles/timed-ui-updates.html',
319 title: {
320 en: 'Updating the UI from a Timer'
321 },
322 description: {
323 en: 'Learn about how to use Handlers as a more efficient replacement for java.util.Timer on the Android platform.'
324 }
325 },
326 {
327 tags: ['article', 'ui', 'accessibility'],
328 path: 'articles/tts.html',
329 title: {
330 en: 'Using Text-to-Speech'
331 },
332 description: {
333 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.'
334 }
335 },
336 {
Scott Mainb4103302011-09-23 16:49:26 -0700337 tags: ['article', 'accountsync', 'data'],
338 path: 'articles/contacts.html',
339 title: {
340 en: 'Using the Contacts API'
341 },
342 description: {
343 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.'
344 }
345 },
346 {
Roman Nurike577d722010-04-16 15:57:34 -0700347 tags: ['article', 'ui', 'web'],
348 path: 'articles/using-webviews.html',
349 title: {
350 en: 'Using WebViews'
351 },
352 description: {
353 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.'
354 }
355 },
356 {
357 tags: ['article', 'ui'],
358 path: 'articles/wikinotes-linkify.html',
359 title: {
360 en: 'WikiNotes: Linkify your Text!'
361 },
362 description: {
363 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.'
364 }
365 },
366 {
367 tags: ['article', 'intent'],
368 path: 'articles/wikinotes-intents.html',
369 title: {
370 en: 'WikiNotes: Routing Intents'
371 },
372 description: {
373 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.'
374 }
375 },
376 {
377 tags: ['article', 'ui', 'performance'],
378 path: 'articles/window-bg-speed.html',
379 title: {
380 en: 'Window Backgrounds & UI Speed'
381 },
382 description: {
383 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.'
384 }
385 },
386 {
387 tags: ['article', 'performance', 'bestpractice'],
388 path: 'articles/zipalign.html',
389 title: {
390 en: 'Zipalign: an Easy Optimization'
391 },
392 description: {
393 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.'
394 }
395 },
396
397///////////////////
398/// SAMPLE CODE ///
399///////////////////
Robert Ly3f9b6442011-01-19 18:14:50 -0800400
401 {
Scott Main9ed517d2011-09-21 21:04:19 -0700402 tags: ['sample'],
Robert Ly3f9b6442011-01-19 18:14:50 -0800403 path: 'samples/AccelerometerPlay/index.html',
404 title: {
405 en: 'Accelerometer Play'
406 },
407 description: {
Roman Nurik94be4a52011-02-11 14:46:00 -0800408 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 -0800409 }
410 },
411 {
Roman Nurikf4b2ba12011-09-30 15:48:34 -0700412 tags: ['sample', 'new', 'ui', 'compatibility', 'newfeature'],
413 path: 'samples/ActionBarCompat/index.html',
414 title: {
415 en: 'Action Bar Compatibility'
416 },
417 description: {
418 en: 'Shows how to use the action bar on both pre-API 11 and API 11+ devices, maximizing code re-use.'
419 }
420 },
421 {
Robert Lyd8afdb42011-10-04 16:57:09 -0700422 tags: ['sample', 'new'],
Scott Main49eb5192011-10-14 01:24:57 -0700423 path: 'samples/AndroidBeamDemo/index.html',
Robert Lyd8afdb42011-10-04 16:57:09 -0700424 title: {
Scott Main49eb5192011-10-14 01:24:57 -0700425 en: 'Android Beam Demo'
Robert Lyd8afdb42011-10-04 16:57:09 -0700426 },
427 description: {
428 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.'
429 }
430 },
431 {
Scott Maine09743272011-10-14 11:25:46 -0700432 tags: ['sample', 'layout', 'ui', 'updated'],
Roman Nurike577d722010-04-16 15:57:34 -0700433 path: 'samples/ApiDemos/index.html',
434 title: {
435 en: 'API Demos'
436 },
437 description: {
438 en: 'A variety of small applications that demonstrate an extensive collection of framework topics.'
439 }
440 },
441 {
Scott Main9ed517d2011-09-21 21:04:19 -0700442 tags: ['sample', 'layout', 'ui', 'fragment', 'loader'],
Dianne Hackborn2f048832011-06-16 13:31:57 -0700443 path: 'samples/Support4Demos/index.html',
444 title: {
445 en: 'API 4+ Support Demos'
446 },
447 description: {
448 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).'
449 }
450 },
451 {
Scott Main9ed517d2011-09-21 21:04:19 -0700452 tags: ['sample', 'layout', 'ui'],
Dianne Hackborn2f048832011-06-16 13:31:57 -0700453 path: 'samples/Support13Demos/index.html',
454 title: {
455 en: 'API 13+ Support Demos'
456 },
457 description: {
458 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).'
459 }
460 },
461 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800462 tags: ['sample', 'data', 'newfeature', 'accountsync'],
Roman Nurike577d722010-04-16 15:57:34 -0700463 path: 'samples/BackupRestore/index.html',
464 title: {
465 en: 'Backup and Restore'
466 },
467 description: {
468 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.'
469 }
470 },
471 {
472 tags: ['sample', 'communication'],
473 path: 'samples/BluetoothChat/index.html',
474 title: {
475 en: 'Bluetooth Chat'
476 },
477 description: {
478 en: 'An application for two-way text messaging over Bluetooth.'
479 }
480 },
481 {
Fred Chung2d410df2011-11-14 11:39:23 -0800482 tags: ['sample', 'communication', 'new'],
483 path: 'samples/BluetoothHDP/index.html',
484 title: {
485 en: 'Bluetooth HDP Demo'
486 },
487 description: {
488 en: 'A sample application that demonstrates how to communicate with a Bluetooth Health Device Profile (HDP) device.'
489 }
490 },
491 {
Roman Nurike577d722010-04-16 15:57:34 -0700492 tags: ['sample', 'accountsync'],
493 path: 'samples/BusinessCard/index.html',
494 title: {
495 en: 'BusinessCard'
496 },
497 description: {
498 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.'
499 }
500 },
501 {
502 tags: ['sample', 'accountsync'],
503 path: 'samples/ContactManager/index.html',
504 title: {
505 en: 'Contact Manager'
506 },
507 description: {
508 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.'
509 }
510 },
511 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800512 tags: ['sample', 'ui'],
513 path: 'samples/CubeLiveWallpaper/index.html',
514 title: {
515 en: 'Cube Live Wallpaper'
516 },
517 description: {
518 en: 'An application that demonstrates how to create a live wallpaper and bundle it in an application that users can install on their devices.'
519 }
520 },
521 {
Scott Mainaed4ced2011-12-15 10:25:41 -0800522 tags: ['sample', 'new'],
523 path: 'samples/training/device-management-policy/index.html',
524 title: {
525 en: 'Device Policy Management'
526 },
527 description: {
528 en: 'This is a security-aware sample application that demonstrates the enforcement of device administration policies on Android 2.2 or above platforms.'
529 }
530 },
531 {
Roman Nurike577d722010-04-16 15:57:34 -0700532 tags: ['sample'],
533 path: 'samples/Home/index.html',
534 title: {
535 en: 'Home'
536 },
537 description: {
538 en: 'A home screen replacement application.'
539 }
540 },
541 {
Scott Main9ed517d2011-09-21 21:04:19 -0700542 tags: ['sample', 'updated', 'newfeature', 'ui'],
Roman Nurika35f6562011-02-04 14:28:22 -0800543 path: 'samples/HoneycombGallery/index.html',
Alexander Lucasd8472542011-01-19 12:15:38 -0800544 title: {
545 en: 'Honeycomb Gallery'
546 },
547 description: {
Scott Main9ed517d2011-09-21 21:04:19 -0700548 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 -0800549 }
550 },
551 {
Roman Nurike577d722010-04-16 15:57:34 -0700552 tags: ['sample', 'gamedev', 'media'],
553 path: 'samples/JetBoy/index.html',
554 title: {
555 en: 'JetBoy'
556 },
557 description: {
558 en: 'A game that demonstrates the SONiVOX JET interactive music technology, with <code><a href="/reference/android/media/JetPlayer.html">JetPlayer</a></code>.'
559 }
560 },
561 {
Tony Chanc95a74d2012-03-29 01:33:08 +0800562 tags: ['sample', 'new'],
563 path: 'samples/KeyChainDemo/index.html',
564 title: {
565 en: 'KeyChain Demo'
566 },
567 description: {
568 en: 'A demo application to demonstrate how to use KeyChain APIs.'
569 }
570 },
571 {
Roman Nurike577d722010-04-16 15:57:34 -0700572 tags: ['sample', 'gamedev', 'media'],
573 path: 'samples/LunarLander/index.html',
574 title: {
575 en: 'Lunar Lander'
576 },
577 description: {
578 en: 'A classic Lunar Lander game.'
579 }
580 },
581 {
Scott Main3d672e12011-12-15 10:44:11 -0800582 tags: ['sample', 'new'],
583 path: 'samples/training/ads-and-ux/index.html',
584 title: {
585 en: 'Mobile Advertisement Integration'
586 },
587 description: {
588 en: 'This sample demonstrates the integration of a mobile ad SDK with your application.'
589 }
590 },
591 {
Roman Nurike577d722010-04-16 15:57:34 -0700592 tags: ['sample', 'ui', 'bestpractice', 'layout'],
593 path: 'samples/MultiResolution/index.html',
594 title: {
595 en: 'Multiple Resolutions'
596 },
597 description: {
598 en: 'A sample application that shows how to use resource directory qualifiers to provide different resources for different screen configurations.'
599 }
600 },
601 {
Scott Main801fda52011-12-09 17:27:21 -0800602 tags: ['sample', 'new', 'bestpractices'],
603 path: 'samples/newsreader/index.html',
604 title: {
605 en: 'News Reader'
606 },
607 description: {
608 en: 'A sample app demonstrating best practices to support multiple screen sizes and densities.'
609 }
610 },
611 {
Roman Nurike577d722010-04-16 15:57:34 -0700612 tags: ['sample', 'data'],
Robert Ly3f9b6442011-01-19 18:14:50 -0800613 path: 'samples/NFCDemo/index.html',
614 title: {
615 en: 'NFC Demo'
616 },
617 description: {
618 en: 'An application for reading NFC Forum Type 2 Tags using the NFC APIs'
619 }
620 },
621 {
622 tags: ['sample', 'data'],
Roman Nurike577d722010-04-16 15:57:34 -0700623 path: 'samples/NotePad/index.html',
624 title: {
625 en: 'Note Pad'
626 },
627 description: {
628 en: 'An application for saving notes. Similar (but not identical) to the <a href="/resources/tutorials/notepad/index.html">Notepad tutorial</a>.'
629 }
630 },
631 {
Roman Nurikb927ec12011-09-30 18:15:13 -0700632 tags: ['sample', 'media', 'updated'],
Bruno Oliveira9e67587d2011-06-07 01:23:02 -0400633 path: 'samples/RandomMusicPlayer/index.html',
634 title: {
635 en: 'Random Music Player'
636 },
637 description: {
Roman Nurikb927ec12011-09-30 18:15:13 -0700638 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 -0400639 }
640 },
641 {
Robert Ly92ebfd7f2011-11-02 11:58:36 -0700642 tags: ['sample', 'newfeature', 'performance', 'gamedev', 'gl', 'updated'],
Robert Ly44b362c2011-02-28 15:53:15 -0800643 path: 'samples/RenderScript/index.html',
Robert Ly6518f482011-02-14 18:57:46 -0800644 title: {
Robert Ly44b362c2011-02-28 15:53:15 -0800645 en: 'RenderScript'
Robert Ly6518f482011-02-14 18:57:46 -0800646 },
647 description: {
Robert Ly44b362c2011-02-28 15:53:15 -0800648 en: 'A set of samples that demonstrate how to use various features of the RenderScript APIs.'
Robert Ly6518f482011-02-14 18:57:46 -0800649 }
650 },
651 {
Scott Mainc4c541a2011-10-05 11:35:33 -0700652 tags: ['sample', 'input', 'new'],
satok44619d32011-10-19 22:46:18 +0900653 path: 'samples/SpellChecker/SampleSpellCheckerService/index.html',
Scott Mainc4c541a2011-10-05 11:35:33 -0700654 title: {
satok182e4ae2011-10-27 19:57:34 +0900655 en: 'Spell Checker Service'
Scott Mainc4c541a2011-10-05 11:35:33 -0700656 },
657 description: {
satok182e4ae2011-10-27 19:57:34 +0900658 en: 'An example spell checker service, using the <a href="'+toRoot+'reference/android/service/textservice/SpellCheckerService.html"><code>SpellCheckerService</code></a>.'
659 }
660 },
661 {
662 tags: ['sample', 'input', 'new'],
663 path: 'samples/SpellChecker/HelloSpellChecker/index.html',
664 title: {
665 en: 'Spell Checker Client'
666 },
667 description: {
668 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 -0700669 }
670 },
671 {
Scott Maine1e9e932011-10-13 23:36:19 -0700672 tags: ['sample', 'accountsync', 'updated'],
Roman Nurike577d722010-04-16 15:57:34 -0700673 path: 'samples/SampleSyncAdapter/index.html',
674 title: {
675 en: 'SampleSyncAdapter'
676 },
677 description: {
678 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).'
679 }
680 },
681 {
Scott Main183ecbc2010-11-19 10:20:45 -0800682 tags: ['sample', 'ui', 'search'],
Roman Nurike577d722010-04-16 15:57:34 -0700683 path: 'samples/SearchableDictionary/index.html',
684 title: {
685 en: 'Searchable Dictionary v2'
686 },
687 description: {
688 en: 'A sample application that demonstrates Android\'s search framework, including how to provide search suggestions for Quick Search Box.'
689 }
690 },
691 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800692 tags: ['sample'],
693 path: 'samples/SipDemo/index.html',
694 title: {
695 en: 'SIP Demo'
696 },
697 description: {
698 en: 'A demo application highlighting how to make internet-based calls with the SIP API.'
699 }
700 },
701 {
Roman Nurike577d722010-04-16 15:57:34 -0700702 tags: ['sample', 'layout', 'ui'],
703 path: 'samples/Snake/index.html',
704 title: {
705 en: 'Snake'
706 },
707 description: {
708 en: 'An implementation of the classic game "Snake."'
709 }
710 },
711 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800712 tags: ['sample', 'input'],
713 path: 'samples/SoftKeyboard/index.html',
714 title: {
715 en: 'Soft Keyboard'
716 },
717 description: {
718 en: 'An example of writing an input method for a software keyboard.'
719 }
720 },
721 {
Scott Main183ecbc2010-11-19 10:20:45 -0800722 tags: ['sample', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700723 path: 'samples/Spinner/index.html',
724 title: {
725 en: 'Spinner'
726 },
727 description: {
728 en: 'A simple application that serves as an application under test for the SpinnerTest example.'
729 }
730 },
731 {
Scott Main183ecbc2010-11-19 10:20:45 -0800732 tags: ['sample', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700733 path: 'samples/SpinnerTest/index.html',
734 title: {
735 en: 'SpinnerTest'
736 },
737 description: {
738 en: 'The test application for the Activity Testing tutorial. It tests the Spinner example application.'
739 }
740 },
741 {
Scott Main9ed517d2011-09-21 21:04:19 -0700742 tags: ['sample', 'newfeature', 'widgets'],
Adam Cohenfca67c52011-02-10 18:57:45 -0800743 path: 'samples/StackWidget/index.html',
744 title: {
Scott Maind873e662011-02-15 10:58:34 -0800745 en: 'StackView Widget'
Adam Cohenfca67c52011-02-10 18:57:45 -0800746 },
747 description: {
748 en: 'Demonstrates how to create a simple collection widget containing a StackView.'
749 }
750 },
751 {
Scott Main183ecbc2010-11-19 10:20:45 -0800752 tags: ['sample', 'newfeature'],
Roman Nurike577d722010-04-16 15:57:34 -0700753 path: 'samples/TicTacToeLib/index.html',
754 title: {
755 en: 'TicTacToeLib'
756 },
757 description: {
758 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.'
759 }
760 },
761 {
Scott Main183ecbc2010-11-19 10:20:45 -0800762 tags: ['sample', 'newfeature',],
Roman Nurike577d722010-04-16 15:57:34 -0700763 path: 'samples/TicTacToeMain/index.html',
764 title: {
765 en: 'TicTacToeMain'
766 },
767 description: {
768 en: 'Demonstrates how an application can make use of shared code and resources stored in an Android library project.'
769 }
770 },
771 {
Fred Chung8e076fe2011-11-28 16:44:13 -0800772 tags: ['sample', 'communication', 'new'],
773 path: 'samples/ToyVpn/index.html',
774 title: {
775 en: 'Toy VPN Client'
776 },
777 description: {
778 en: 'A sample application that illustrates the creation of a custom VPN client.'
779 }
780 },
781 {
Scott Main9ed517d2011-09-21 21:04:19 -0700782 tags: ['sample', 'newfeature'],
Robert Ly8cdb2e22011-05-02 17:49:05 -0700783 path: 'samples/USB/index.html',
784 title: {
785 en: 'USB'
786 },
787 description: {
788 en: 'A set of samples that demonstrate how to use various features of the USB APIs.'
789 }
790 },
791 {
Debashish Chatterjeeacd6f5f2011-05-19 13:21:48 +0100792 tags: ['sample', 'data', 'new'],
793 path: 'samples/VoicemailProviderDemo/index.html',
794 title: {
Scott Mainc4c541a2011-10-05 11:35:33 -0700795 en: 'Voicemail Provider'
Debashish Chatterjeeacd6f5f2011-05-19 13:21:48 +0100796 },
797 description: {
Scott Main9ed517d2011-09-21 21:04:19 -0700798 en: 'A sample application to demonstrate how to use voicemail content provider APIs in Android 4.0.'
Debashish Chatterjeeacd6f5f2011-05-19 13:21:48 +0100799 }
800 },
801 {
Anirudh Dewani5d0dbea2011-10-06 08:03:45 +0530802 tags: ['sample','newfeature', 'new'],
803 path: 'samples/WiFiDirectDemo/index.html',
804 title: {
805 en: 'Wi-Fi Direct Demo'
806 },
807 description: {
808 en: 'A demo application to demonstrate how to use Wi-Fi Direct APIs.'
809 }
810 },
811 {
Roman Nurik94be4a52011-02-11 14:46:00 -0800812 tags: ['sample', 'ui', 'widgets'],
Roman Nurike577d722010-04-16 15:57:34 -0700813 path: 'samples/Wiktionary/index.html',
814 title: {
815 en: 'Wiktionary'
816 },
817 description: {
818 en: 'An example of creating interactive widgets for display on the Android home screen.'
819 }
820 },
821 {
Roman Nurik94be4a52011-02-11 14:46:00 -0800822 tags: ['sample', 'ui', 'widgets'],
Roman Nurike577d722010-04-16 15:57:34 -0700823 path: 'samples/WiktionarySimple/index.html',
824 title: {
825 en: 'Wiktionary (Simplified)'
826 },
827 description: {
828 en: 'A simple Android home screen widgets example.'
829 }
830 },
Gilles Debunne3eb9b662010-06-23 16:53:35 -0700831 {
Scott Main9ed517d2011-09-21 21:04:19 -0700832 tags: ['sample', 'widgets', 'newfeature'],
Winson Chung06d2fa72011-02-10 19:11:33 -0800833 path: 'samples/WeatherListWidget/index.html',
834 title: {
Scott Maind873e662011-02-15 10:58:34 -0800835 en: 'Weather List Widget'
Winson Chung06d2fa72011-02-10 19:11:33 -0800836 },
837 description: {
838 en: 'A more complex collection-widget example which uses a ContentProvider as its data source.'
839 }
840 },
841 {
Robert Ly3f9b6442011-01-19 18:14:50 -0800842 tags: ['sample', 'layout'],
Gilles Debunne3eb9b662010-06-23 16:53:35 -0700843 path: 'samples/XmlAdapters/index.html',
844 title: {
845 en: 'XML Adapters'
846 },
847 description: {
848 en: 'Binding data to views using XML Adapters examples.'
849 }
850 },
Narayan Kamathaf1ad3c2011-06-23 10:43:27 +0100851 {
852 tags: ['sample', 'new', 'accessibility'],
853 path: 'samples/TtsEngine/index.html',
854 title: {
855 en: 'Text To Speech Engine'
856 },
857 description: {
Scott Main9ed517d2011-09-21 21:04:19 -0700858 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 +0100859 }
860 },
Roman Nurike577d722010-04-16 15:57:34 -0700861
862/////////////////
863/// TUTORIALS ///
864/////////////////
865
866 {
867 tags: ['tutorial'],
868 path: 'tutorials/hello-world.html',
869 title: {
870 en: 'Hello World'
871 },
872 description: {
873 en: 'Beginning basic application development with the Android SDK.'
874 }
875 },
876 {
877 tags: ['tutorial', 'ui', 'layout'],
878 path: 'tutorials/views/index.html',
879 title: {
880 en: 'Hello Views'
881 },
882 description: {
883 en: 'A walk-through of the various types of layouts and views available in the Android SDK.'
884 }
885 },
886 {
887 tags: ['tutorial', 'ui', 'bestpractice'],
888 path: 'tutorials/localization/index.html',
889 title: {
890 en: 'Hello Localization'
891 },
892 description: {
893 en: 'The basics of localizing your applications for multiple languages and locales.'
894 }
895 },
896 {
897 tags: ['tutorial', 'data'],
898 path: 'tutorials/notepad/index.html',
899 title: {
900 en: 'Notepad Tutorial'
901 },
902 description: {
903 en: 'A multi-part tutorial discussing intermediate-level concepts such as data access.'
904 }
905 },
906 {
Scott Main43834482011-12-15 13:11:12 -0800907 tags: ['tutorial', 'gl'],
Joe Fernandez0664a8f2011-07-15 16:02:30 -0700908 path: 'tutorials/opengl/opengl-es10.html',
909 title: {
910 en: 'OpenGL ES 1.0'
911 },
912 description: {
913 en: 'The basics of implementing an application using the OpenGL ES 1.0 APIs.'
914 }
915 },
916 {
Scott Main43834482011-12-15 13:11:12 -0800917 tags: ['tutorial', 'gl'],
Joe Fernandez0664a8f2011-07-15 16:02:30 -0700918 path: 'tutorials/opengl/opengl-es20.html',
919 title: {
920 en: 'OpenGL ES 2.0'
921 },
922 description: {
923 en: 'The basics of implementing an application using the OpenGL ES 2.0 APIs.'
924 }
925 },
926 {
Scott Main183ecbc2010-11-19 10:20:45 -0800927 tags: ['tutorial', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700928 path: 'tutorials/testing/helloandroid_test.html',
929 title: {
930 en: 'Hello Testing'
931 },
932 description: {
933 en: 'A basic introduction to the Android testing framework.'
934 }
935 },
936 {
Scott Main183ecbc2010-11-19 10:20:45 -0800937 tags: ['tutorial', 'testing'],
Roman Nurike577d722010-04-16 15:57:34 -0700938 path: 'tutorials/testing/activity_test.html',
939 title: {
940 en: 'Activity Testing'
941 },
942 description: {
943 en: 'A more advanced demonstration of the Android testing framework and tools.'
944 }
945 }
946];